实验3

实验任务1:

源代码:

#include <stdio.h>

char score_to_grade(int score);  

int main() {
    int score;
    char grade;

    while(scanf("%d", &score) != EOF) {
        grade = score_to_grade(score);  
        printf("分数: %d, 等级: %c\n\n", score, grade);
    }

    return 0;
}

char score_to_grade(int score) {
    char ans;

    switch(score/10) {
    case 10:
    case 9:   ans = 'A'; break;
    case 8:   ans = 'B'; break;
    case 7:   ans = 'C'; break;
    case 6:   ans = 'D'; break;
    default:  ans = 'E';
    }

    return ans;
}

代码运行结果:

image

 实验问题回答:

①:功能:将分数划分为不同等级的字母

形参类型:整数型

返回值类型:字符型

②:

image

 问题在于:无论输入什么数字,输出的等级都是“E”,

当输出为“A”时,没有“break”代码不会停止,而是继续执行,ans最终被赋值于“E”

实验任务2:

源代码:

#include <stdio.h>

int sum_digits(int n); 

int main() {
    int n;
    int ans;

    while(printf("Enter n: "), scanf("%d", &n) != EOF) {
        ans = sum_digits(n);  
        printf("n = %d, ans = %d\n\n", n, ans);
    }

    return 0;
}


int sum_digits(int n) {
    int ans = 0;

    while(n != 0) {
        ans += n % 10;
        n /= 10;
    }

    return ans;
}

代码运行结果:

image

 实验问题回答:

①:将n中每一位的数字相加

②:能同样输出

image

 原实验中代码使用迭代的想法,使用while()函数,不断更新ans和n的值,直到n不等于0

问题中代码使用递归的思想,在自定义函数体内再调用该函数,直到n小于10,n无法再与10取余数为止

实验任务3:

源代码:

#include <stdio.h>

int power(int x, int n);

int main (){
    int x,n;
    int ans;
    
    while (printf("Enter x and n:"),scanf("%d%d",&x,&n)!=EOF){
        ans = power(x,n);
        printf("n = %d,ans = %d\n\n",n,ans);
    }
    return 0;
}

int power(int x,int n){
    int t;
    
    if(n == 0)
    return 1;
    else if(n % 2)
    return x*power(x,n-1);
    else{
        t = power(x,n/2);
        return t*t;
    }
}

代码运行结果:

image

 实验问题回答:

①:pow()函数的作用是求x的n次方

②:是递归函数

48753a8ac27b62a0f4eb9c7b2b17b90c

 

实验任务4:

源代码:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int is_prime(int n);
int main(){
    int i, num = 0;
    printf("100以内的孪生素数:\n"); 
    for(i = 2; i <= 98; i++)
    {
        if(is_prime(i) && is_prime(i + 2))
        {
            printf("%d %d\n", i, i + 2);
            num++;
        } 
    }
   
    printf("100以内的孪生素数共有%d个.", num);
    return 0;
}

int is_prime(int n)
{
    int k;
    for(k = 2; k <= sqrt(1.0 * n); k++)
        if(n % k == 0)
        return 0; 
    return 1; 
}

代码运行结果:

image

 实验任务5:

源代码:

迭代:

#include <stdio.h>
#include <stdlib.h>
int fac(int);
int func(int n,int m);

int main()
{
    int n,m;
    int ans;
    
    while(scanf("%d%d",&n,&m) != EOF)
    {
        ans = func(n,m);
        printf("n = %d,m = %d,ans = %d\n\n",n,m,ans);
    }
    return 0;
} 

int fac(int n)
{
    int i,p = 1,sum;
    for(i = 1;i <= n;i++)
    p = p*i;
    return p;
}
int func(int n,int m)
{
    return fac( n )/(fac(m)*fac(n - m));
}

递归:

#include <stdio.h>
#include <stdlib.h>
int func(int n,int m);

int main()
{
    int n,m;
    int ans;
    
    while(scanf("%d%d",&n,&m) != EOF)
    {
        ans = func(n,m);
        printf("n = %d,m = %d,ans = %d\n\n",n,m,ans);
    }
    return 0;
} 

int func(int n,int m)
{
    if(m == n||m == 0)
    return 1;
    if(m > n||m < 0)
    return 0;
    return func(n-1,m) + func(n-1,m-1);
}

代码运行结果:

image

 实验任务6:

源代码:

#include <stdio.h>
#include <stdlib.h>

int gcd(int,int,int);
int main ()
{
    int a,b,c;
    int ans;
    while(scanf("%d%d%d",&a,&b,&c) != EOF)
    {
        ans = gcd(a,b,c);
        printf("最大公约数:%d\n\n",ans);
    }
    return 0;
}

int gcd(int x,int y,int z)
{
    int i;
    if (x<y&&x<z)
    i = x;
    else if (y<x&&y<z)
    i = y;
    else 
    i = z;
    while (x % i !=0||y % i!= 0||z % i !=0)
    i--;
    return i;
    
}

代码运行结果:

image

 实验任务7:

源代码:

#include <stdio.h>
#include <stdlib.h>

void print_charman(int);

int main() {
    int n;

    printf("Enter n: ");
    scanf("%d", &n);
    print_charman(n); 

    return 0;
}

void print_charman(int n)
{
int i , j , k ; for(j = n;j > 0;j--) { for(k = 0;k < n - j;k++) printf("\t"); for(i = 0;i < j * 2 - 1;i++) printf(" O \t"); printf("\n"); for(k = 0;k < n - j;k++) printf("\t"); for(i = 0;i < j * 2 - 1;i++) printf("<H>\t"); printf("\n"); for(k = 0;k < n - j;k++) printf("\t"); for(i = 0;i < j * 2 - 1;i++) printf("I I\t"); printf("\n"); } }

代码运行结果:

image

 

image

 

posted @ 2025-10-26 13:37  Lantesry  阅读(6)  评论(0)    收藏  举报