实验三

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

 

运行结果

 回答问题

问题1:函数score_to_grade的功能是输入一个成绩后判断其等级

             形参类型是int,返回值类型是char

问题2:有问题,没有break;输入成绩后会输出下面所有等级

 

任务2

 

源代码

#include<stdio.h>
int sum_dights(int n);
int main(){
    int n;
    int ans;
    while(printf("Enter n:"),scanf("%d",&n)!=EOF) {
        ans=sum_dights(n);
        printf("n = %d,ans = %d\n\n", n, ans);    
    }
    return 0;
}
int sum_dights(int n) {
    int ans = 0;
    while(n!=0){
        ans += n%10;
        n/=10;
    }
    return ans;
}

 

运行结果

 回答问题

问题1:输入n,将n的个位到最高位数字相加并返回

问题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;
        
    }
}

 

运行结果

 回答问题

问题1:求出x的n次方

问题2:是递归函数,

 

任务4

 

源代码

 

#include<stdio.h> 
#include<math.h>
int is_prime(int n);
int main(){
    printf("100以内的孪生素数:\n");
    int i,k=0;
    for(i=2;i<=100;++i){
        if(is_prime(i)&&is_prime(i+2)){
        printf("%d %d\n",i,i+2);
        k++;
    }
}
    printf("100以内的孪生素数共%d对\n",k);
     return 0;   
}
int is_prime(int n) {
    int m=sqrt(1.0*n);
    int x;
    for(x=2;x<=m;x++){
        if(n%x==0){
        break;
    }
    }
    if(x>m)
    return 1;
    else
    return 0;
}

 

运行结果

 

 

任务5

 

源代码

 

#include<stdio.h>
int k=0;
void hanoi(unsigned int n,char from,char temp,char to);
void moveplate(unsigned int n,char from,char to);
int main(){
    unsigned int n;
    while(scanf("%u",&n)!=EOF)
    {    
    hanoi(n,'A','B','C');
    printf("一共移动了%d次\n",k);
    k=0;
}
    return 0;
}
void hanoi(unsigned int n,char from,char temp,char to){
    if(n==1){
    moveplate(n,from,to);
}
    else{
        hanoi(n-1,from,to,temp);
        moveplate(n,from,to);
        hanoi(n-1,temp,from,to);
    }
}
void moveplate(unsigned int n,char from,char to)
{
    printf("%u:%c-->%c\n",n,from,to);
    ++k;
}

 

运行结果

 

 

任务6

源代码

 

#include<stdio.h>
int func(int n,int m);
int func1(int a);
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;
    func1(n);
    func1(m);
    func1(n-m);
    ans=func1(n)/func1(m)/func1(n-m);
    return ans;
}
int func1(int a){
    int i;
    int sum=1;
    for(i=1;i<=a;i++){
    sum*=i;
}
    return sum; 
}

 

运行结果

 

源代码

#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;
    if((n==1&&m==1)||m==0){
        ans=1;
        return ans;
    }
    else if(n<m){
        ans=0;
        return ans;
    }
    else{
    ans=func(n-1,m)+func(n-1,m-1);
}
    return ans;
}

 

运行结果

 

任务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){
    int i,j,a;
    for(i=n;i>0;i--)
    {
        for(j=0;j<a;j++)
            printf("\t");
        for(j=0;j<2*i-1;j++)
               printf(" O \t");
            printf("\n");
        for(j=0;j<a;j++)
            printf("\t");
        for(j=0;j<2*i-1;j++)
               printf("<H>\t");
            printf("\n");
        for(j=0;j<a;j++)
            printf("\t");    
        for(j=0;j<2*i-1;j++)
               printf("I I\t");
            printf("\n");
            a++;
}
}

 

运行结果

 

 

posted @ 2024-10-29 17:42  syqsyq  阅读(4)  评论(0编辑  收藏  举报