实验3

#include <stdio.h>
 2  
 3 char score_to_grade(int score);
 4 
 5 int main(){
 6     int score;
 7     char grade;
 8     
 9     while(scanf("%d",&score) != EOF){
10     
11         grade = score_to_grade(score);
12         printf("分数:%d,等级:%c\n\n",score,grade);
13     }
14     
15     return 0;
16 } 
17 
18 char score_to_grade(int score){
19     char ans;
20     
21     switch(score/10){
22         case 10:
23         case 9:  ans = 'A';break; 
24         case 8:  ans = 'B';break; 
25         case 7:  ans = 'C';break; 
26         case 6:  ans = 'D';break; 
27         default: ans = 'E';
28     }
29     
30     return ans;
31     }

image

 

函数score_to_grade的功能是根据输入的分数(score),按照分数段将其转换为对应的等级(A,B,C等);形参类型为int;返回值类型为char;

错误1:ans为字符型,不能用" ";

错误2:无break语句跳出switch,ans可能会按照运行逻辑错误赋值(如score为90时执行case9后一直执行到case6,ans="D");

任务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

 

问题一:sum_digits是计算输入的n的所有位数字之和

问题二:能实现同样的输出。原:迭代的思维;现:递归的思维,拆分成计算去掉个位后剩余数字的和,以及个位数字

任务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;
}
}

问题1:求x的n次方。

任务4

#include<stdio.h>

int is_prime(int);
int main(){
    int n=0;
    printf("100以内的孪生素数:\n");
    for(int j=0;j<100;++j){
        if(is_prime(j)==1&&is_prime(j+2)==1){

        printf("%d %d\n",j,j+2);
        ++n;
        }
    }
 printf("100以内的孪生素数共有%d个",n);
    return 0;
}
int is_prime(int n){

    if(n<=1)
    return 0;


    for(int i=2;i<n;++i){
        if(n%i==0)
        return 0;
    }


    return 1;
}

image

 任务5

递归

#include <stdio.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 (n < m) {
        return 0;
    }
    else {
        int  x = 1, s = 1, r = 1;
        int t = n,o=m;
        int u=n-m;
        for (int i = 0; i < n; ++i) {

            x *= t;
            --t;
        }
        for (int j = 0; j < m; ++j) {

            s *= o;
            --o;
        }
        for (int k = 0; k < (n - m); ++k) {

            r *= u;
            --u;
        }

    int ans = x / s / r;
    return ans;
}
}

非递归

#include <stdio.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(n<m||m<0)
   return 0;
   if(m==0)
   return 1;
    return func(n-1,m)+func(n-1,m-1);
}

任务6

#include<stdio.h>
int gcd(int a,int b,int c);

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 a,int b,int c){
    int min=a;
    if(b<min) min=b;
    if(c<min) min=c;

    for(int i=min;i>=1;i--){
        if(a%i==0&&b%i==0&&c%i==0){
            return i;
        }
    }
    return 1;
}

image

 

#include <stdio.h>
#include <stdlib.h>
void print_charman(int n);
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(i=0;i<n;i++){
        for(j=0;j<i;j++){
            printf("\t");
        }
        for(k=1;k<2*(n-i);k++){
            printf(" O\t");
        }
        printf("\n");
        for(j=0;j<i;j++){
            printf("\t");
        }
        for(k=1;k<2*(n-i);k++){
            printf("<H>\t");
        }
        printf("\n");
        for(j=0;j<i;j++){
            printf("\t");
        }
        for(k=1;k<2*(n-i);k++){
            printf("I I\t");
        }
        printf("\n\n");
    }
}

image

 

posted @ 2025-10-30 22:37  0721绫地宁宁  阅读(3)  评论(0)    收藏  举报