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

问题1: 90分及以上赋等级为A;80-90赋为B;70-80赋为C;60-70赋为D;60以下赋为E 形参为整型 返回值类型为字符型
问题2:1.字母为字符型应用' ',而不应用字符串" "
2.少了四个break; 会导致运行时从一个case 进入后执行当层,也执行接下来的case 分支,将ans 最后赋为E
任务2
1 #include <stdio.h> 2 3 int sum_digits(int n); // 函数声明 4 5 int main() { 6 int n; 7 int ans; 8 9 while(printf("Enter n: "), scanf("%d", &n) != EOF) { 10 ans = sum_digits(n); // 函数调用 11 printf("n = %d, ans = %d\n\n", n, ans); 12 } 13 14 return 0; 15 } 16 17 // 函数定义 18 int sum_digits(int n) { 19 int ans = 0; 20 21 while(n != 0) { 22 ans += n % 10; 23 n /= 10; 24 } 25 26 return ans; 27 }

问题1:将输入数字的各位数相加
问题2:可以 第一个是直接求解,第二个是直接递归,调用了自身函数
任务3
1 #include <stdio.h> 2 3 int power(int x, int n); // 函数声明 4 5 int main() { 6 int x, n; 7 int ans; 8 9 while(printf("Enter x and n: "), scanf("%d%d", &x, &n) != EOF) { 10 ans = power(x, n); // 函数调用 11 printf("n = %d, ans = %d\n\n", n, ans); 12 } 13 14 return 0; 15 } 16 17 // 函数定义 18 int power(int x, int n) { 19 int t; 20 21 if(n == 0) 22 return 1; 23 else if(n % 2) 24 return x * power(x, n-1); 25 else { 26 t = power(x, n/2); 27 return t*t; 28 } 29 }

问题1:实现x的n次方计算
问题2:
任务4:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<math.h> 4 int is_prime(int m); 5 int main() 6 { 7 int i=1; 8 int a,b,sum=0; 9 printf("100以内的孪生素数:\n"); 10 for(i=2;i<=98;++i) 11 { a=is_prime(i); 12 b=is_prime(i+2); 13 if(a && b) 14 {printf("%d,%d\n", i,i+2); 15 sum=sum+1; 16 } 17 } 18 19 printf("总数为%d\n", sum); 20 system("pause"); 21 return 0; 22 } 23 24 int is_prime(int m){ 25 int i; 26 for(i=2;i<=m/2;++i) 27 if(m%i==0) 28 break; 29 if(i>m/2) 30 return 1; 31 else 32 return 0; 33 34 35 36 37 }

任务5
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int count = 0; 5 6 7 void hanoi(int n, char A, char B, char C) { 8 if (n == 1) { 9 printf("1: %c --> %c\n", A, C); 10 count++; 11 } else { 12 hanoi(n - 1, A, C, B); 13 printf("%d: %c --> %c\n", n, A, C); 14 count++; 15 hanoi(n - 1, B, A, C); 16 } 17 } 18 19 int main() { 20 int n; 21 while (scanf("%d", &n) != EOF) { 22 count = 0; 23 hanoi(n, 'A', 'B', 'C'); 24 printf("一共移动了%d次.\n", count); 25 } 26 system("pause"); 27 return 0; 28 }

任务6
1 #include <stdio.h> 2 #include<stdlib.h> 3 int func(int n, int m); // 函数声明 4 5 int main() { 6 int n, m; 7 int ans; 8 9 while(scanf("%d%d", &n, &m) != EOF) { 10 ans = func(n, m); // 函数调用 11 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 12 } 13 system("pause"); 14 return 0; 15 } 16 17 // 函数定义 18 // 待补足。。。(分别用迭代和递归实现) 19 int func(int n, int m) // 函数声明 20 { 21 int i,j,up=1,down=1,a; 22 if(m>n) 23 {a=0; 24 return a;} 25 if(m==0|| m==n) 26 { a=1; 27 return a;} 28 for(i=1;i<=m;++i) 29 {up=up*(n-i+1); 30 down=down*i;} 31 a=up/down; 32 return a; 33 34 35 }

1 #include <stdio.h> 2 int func(int n, int m); 3 4 int main() { 5 int n, m; 6 int ans; 7 8 while (scanf("%d%d", &n, &m) != EOF) { 9 ans = func(n, m); 10 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 11 } 12 13 return 0; 14 } 15 16 17 int func(int n, int m) 18 { 19 int ans; 20 if (n < m) { 21 return 0; 22 } 23 if (m == 0 || m == n) { 24 return 1; 25 } 26 27 return func(n - 1, m) + func(n - 1, m - 1); 28 29 }
任务7
1 #include <stdio.h> 2 3 4 int gcd(int a, int b, int c); 5 6 7 int main() { 8 int a, b, c; 9 int ans; 10 11 while (scanf("%d%d%d", &a, &b, &c) != EOF) { 12 ans = gcd(a, b, c); 13 printf("最大公约数: %d\n\n", ans); 14 } 15 16 return 0; 17 } 18 19 20 21 int gcd(int a, int b, int c) { 22 int i=a; 23 if (i > b) { 24 i = b; 25 if (i > c) { 26 i = c; 27 } 28 } 29 for (; i > 0; --i) { 30 if (a % i == 0 && b % i == 0 && c % i == 0) { 31 return i; 32 } 33 } 34 35 }

实验结论:知道大概的思路,写起来还是会有各种漏洞,同时写的时候要顾全所有情况,在任务6中,一开始就只关注了主函数,没有考虑特殊情况。

浙公网安备 33010602011771号