实验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;
}

屏幕截图 2025-10-24 083030

问题1:将分数转化为等第,形参类型int,返回值类型char

问题2:语法错误:char类型为字符常量,不是字符串;逻辑错误:缺少break,每个等第都会输出。

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

屏幕截图 2025-10-24 083900 2

问题1:计算输入数字的各位数字之和。

问题2:能实现。前者用迭代,这里用递归函数。

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

3

问题1:计算x的n次方。

问题2:是递归函数。

           x 的0次方返回1。

           若n为偶数,则返回x 的(n-1)次方。

           若n为奇数,则n整除2,计算t,返回t*t,这样指数就变为偶数了。

实验任务4

#include<stdio.h>
#include<math.h>
int is_prime(int n);
int main()
{
    printf("100以内的孪生素数:\n");
    int cnt=0;
    for(int x=1;x<=100;x++){
        if(is_prime(x)&&is_prime(x+2)){
            printf("%d %d",x,x+2);
            printf("\n");
            cnt++;
        }    
    }
    printf("100以内孪生素数共有%d个",cnt);
    return 0;    
}
int is_prime(int n){
    if(n==2)
        return 1;
    if(n==1)
        return 0;
    if(n!=2&&n%2==0)
        return 0;
    for (int i=3;i<=sqrt(n);i+=2){
        if(n%i==0)
            return 0;
    }
    return 1;
}

4

实验任务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){
    int ans;
    int s1=1,s2=1;
    for(int x=n-m+1;x<=n;x++)
        s1=s1*x;
    for(int y=1;y<=m;y++)
        s2=s2*y;
    ans=s1/s2;
    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)
        return 0;
    if(m==0)
        return 1;
    return func(n-1,m)+func(n-1,m-1);
    return func(n,m);
}

5.1迭代

5

5.2递归

6

 

实验任务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 ans;
    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){
            ans=i;
            break;
        } 
    }
    return ans;
}

7

实验任务7

#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){
    for(int i = 0; i < n; i++){   
        for(int k=0;k<i;k++){
               printf("\t");
           }
        for(int j = 0;j<2*(n-i)-1; j++){       
            printf(" o \t");   
        }  
        printf("\n");
        for(int k=0;k<i;k++){
            printf("\t");
        }
        for(int j = 0;j<2*(n-i)-1; j++){    
            printf("<H>\t");   
        }  
        printf("\n");    
        for(int k=0;k<i;k++){
               printf("\t");
           }
        for(int j = 0;j<2*(n-i)-1; j++){           
            printf("I I\t");
        }    
        printf("\n");    
    }
    system("pause");
    return print_charman(n);
}

8

 

posted @ 2025-10-24 15:03  tensiontension  阅读(4)  评论(0)    收藏  举报