实验3
实验任务1
源代码
1 #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 grade = score_to_grade(score); // 函数调用 11 printf("分数: %d, 等级: %c\n\n", score, grade); 12 } 13 14 return 0; 15 } 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 }
运行截图

问题1:把百分制的分数变成等第,形参类型是整形,返回值是字符型
问题2:当结果在78910时输出多个字符使结果不正确
实验任务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;
}
运行截图

问题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;
    }
}
运行截图

问题1:计算一个数的多少次幂
问题2:是,x^n=x*x^(n-1)
实验任务4
源代码
#include <stdio.h>
int is_prime(int n);
int main()
 {
    int i, n, x, count;
    printf("100以内的孪生素数:\n");
    for(count=0, i=2, n=100;i+2<n; ++i)
    {
        x=i+2;
        if( is_prime(i)==1 && is_prime(x)==1)
            {
                printf("%d,%d\n", i,x);
                count+=1;
            }
    }
    printf("100以内的孪生素数共有%d个", count);
    return 0;
 }
int is_prime(int n)
{
        int a=2, b=0;
        for(; a<n; ++a)
        {
            b = n%a;
            if(b==0)
                break;
        }
        if(b==0)
            return 0;
        else
            return 1;
}
运行截图

实验任务5
源代码
1 #include <stdio.h> 2 3 int hanoi(unsigned int n, char from, char temp, char to); 4 void moveplate(unsigned int n, char from, char to); 5 6 int main() 7 { 8 unsigned int n; 9 while(scanf("%u", &n) != EOF) 10 { 11 int count = hanoi(n, 'A', 'B', 'C'); 12 printf("一共移动了%d次\n", count); 13 } 14 return 0; 15 } 16 17 int hanoi(unsigned int n, char from, char temp, char to) 18 { 19 int count = 0; 20 21 if(n == 1) 22 { 23 moveplate(n, from, to); 24 count++; 25 } 26 else 27 { 28 count += hanoi(n-1, from, to, temp); 29 moveplate(n, from, to); 30 count++; 31 count += hanoi(n-1, temp, from, to); 32 } 33 return count; 34 } 35 36 void moveplate(unsigned int n, char from, char to) 37 { 38 printf("%u: %c --> %c\n", n, from, to); 39 }
运行截图

实验任务6
源代码1
1 #include <stdio.h> 2 int func(int n, int m); 3 int main() { 4 int n, m; 5 int ans; 6 7 while(scanf("%d%d", &n, &m) != EOF) { 8 ans = func(n, m); 9 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 10 } 11 12 return 0; 13 } 14 15 int func(int n, int m){ 16 int i,j,h,x=1,y=1,z=1; 17 for(i=1;i<=n;i++) 18 x*=i; 19 for(j=1;j<=m;j++) 20 y*=j; 21 for(h=1;h<=n-m;h++) 22 z*=h; 23 return x/y/z; 24 }
运行截图1

源代码2
1 #include <stdio.h> 2 int func(int n, int m); 3 int main() { 4 int n, m; 5 int ans; 6 7 while(scanf("%d%d", &n, &m) != EOF) { 8 ans = func(n, m); 9 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 10 } 11 12 return 0; 13 } 14 15 int func(int n, int m){ 16 if(n==m) 17 return 1; 18 else if(m>n) 19 return 0; 20 else if(m==0) 21 return 1; 22 else 23 return func(n-1,m)+func(n-1,m-1); 24 }
运行截图2

实验任务7
源代码
1 #include <stdio.h> 2 int gcd(int a,int b,int c); 3 int main() { 4 int a, b, c; 5 int ans; 6 7 while(scanf("%d%d%d", &a, &b, &c) != EOF) { 8 ans = gcd(a, b, c); 9 printf("最大公约数: %d\n\n", ans); 10 } 11 12 return 0; 13 } 14 15 int gcd(int a,int b,int c){ 16 int r,x,y; 17 x=a; 18 y=b; 19 do{r=x%y; 20 x=y; 21 y=r; 22 }while(r!=0); 23 y=c; 24 do{r=x%y; 25 x=y; 26 y=r; 27 }while(r!=0); 28 return x; 29 }
运行截图

                    
                
                
            
        
浙公网安备 33010602011771号