实验三

任务一

 #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.双引号2.没有break

任务二

#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;
 }

问题一:作用是把输入得数的每一位求和

问题二:可以的,一个1迭代思维,一个递推思维

 #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;
    }
 }

w问题一:求x的n次方

问题二:是的

任务四

#include<stdio.h>
int is_prime(int x);
int main(){
    int m,n,p,i;
i=0;
for(m=2;m<=100;m++) { n=is_prime(m); p=is_prime(m+2); if(n==1 && p==1) { printf("%d %d",m,m+2); printf("\n"); i+=1; }} printf("孪生素数有%d对",i); } int is_prime(int x){ int i; for(i=2;i<x;i++) { if(x%i==0) return 0; } return 1; }

 任务五

#include<stdio.h>
void hanoi(unsigned int n,char from,char temp,char to);
void moveplate(unsigned int n,char from,char to);
int t=0;
int main(){
    unsigned int n;while(scanf("%u",&n)!=EOF)
    {
        hanoi(n,'A','B','C');
        printf("移动了%d次",t);
        t=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);
    t=t+1;
}

 任务六

#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;
 }
 // 函数定义
// 待补足。。。(分别用迭代和递归实xian)
int func(int n,int m){
    int i,j,t,u,r;
    u=1;
    r=1;
    if(m==0)
    {
    return 1;}
    else if(m>n)
    {
    return 0;}
    else
    {
    for(i=n-m+1;i<=n;i++)
    u=u*i;
    for(j=1;j<=m;j++)
    r=r*j;
    t=u/r;
    return t;} 
}
#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;
 }
 // 函数定义
// 待补足。。。(分别用迭代和递归实xian)
int func(int n,int m){
    if(m==0)
    return 1;
    if(m>n)
    return 0;
    return func(n-1,m)+func(n-1,m-1);
}

 任务七

#include <stdio.h>
 int gcd(int x,int y,int z); 
 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;
     int min=x<y?x:y;
     min=min<z?min:z;
     for(i=min;i>=0;i--)
     if(x%i==0 && y%i==0 && z%i==0)
     break;
     return i;
 }

 

posted @ 2025-04-08 21:01  MA2C  阅读(20)  评论(0)    收藏  举报