实验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 char score_to_grade(int score) { 18 char ans; 19 20 switch(score/10) { 21 case 10: 22 case 9: ans = 'A'; break; 23 case 8: ans = 'B'; break; 24 case 7: ans = 'C'; break; 25 case 6: ans = 'D'; break; 26 default: ans = 'E'; 27 } 28 29 return ans; 30 }

问题1:功能是将分数转换为相应的等级,形参类型为整形,返回值类型为整形
问题2:每条case语句后面没有相应的break,导致无论输入什么成绩,最后都对应等级E;ans是char类型,应该对应单字符
任务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 int sum_digits(int n) { 17 int ans = 0; 18 19 while(n != 0) { 20 ans += n % 10; 21 n /= 10; 22 } 23 24 return ans; 25 }

问题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 int power(int x, int n) { 18 int t; 19 20 if(n == 0) 21 return 1; 22 else if(n % 2) 23 return x * power(x, n-1); 24 else { 25 t = power(x, n/2); 26 return t*t; 27 } 28 }

问题1
问题2:是递归函数
任务4:
源代码:
1 #include<stdio.h> 2 3 int classify_triangle(int a,int b,int c) 4 { 5 6 if(a+b<=c||a+c<=b||b+c<=a) 7 return 0; 8 if(a==b&&b==c) 9 return 2; 10 else if(a==b||b==c||a==c) 11 return 3; 12 else if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a) 13 return 4; 14 else 15 return 1; 16 17 } 18 int main() 19 {int a,b,c; 20 21 while(scanf("%d%d%d",&a,&b,&c)==3) 22 { 23 24 switch(classify_triangle(a,b,c)) 25 { 26 case 0:printf("不能构成三角形\n");break; 27 case 1:printf("普通三角形\n");break; 28 case 2:printf("等边三角形\n");break; 29 case 3:printf("等腰三角形\n");break; 30 case 4:printf("直角三角形\n");break; 31 return 0;}} 32 }

任务5
递归方法源代码
1 #include<stdio.h> 2 int func(int n,int m); 3 4 int main() 5 { 6 int n,m; 7 int ans; 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 int func(int n,int m){ 16 if(m<0||m>n) 17 return 0; 18 if(m==0||m==n) 19 return 1; 20 return func(n-1,m)+func(n-1,m-1); 21 }

迭代方法源代码
1 #include<stdio.h> 2 int func(int n,int m); 3 4 int main() 5 { 6 int n,m; 7 int ans; 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 int func(int n,int m){ 16 if(m<0||m>n) 17 return 0; 18 if(m==0||m==n) 19 return 1; 20 int z=1; 21 for(int i=0;i<m;i++) 22 z=z*(n-i); 23 int mu=1; 24 for(int i=1;i<=m;i++) 25 mu=mu*i; 26 return z/mu; 27 }

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

任务7
源代码
1 #include <stdio.h> 2 #include <stdlib.h> 3 void print_charman(int n); 4 int main() { 5 int n; 6 printf("Enter n: "); 7 while (scanf("%d", &n) != EOF) { 8 printf("input n: %d\n", n); 9 print_charman(n); 10 printf("\nEnter n: "); 11 } 12 return 0; 13 } 14 15 void print_charman(int n) { 16 for (int i = 1; i <= n; i++) { 17 for (int j = 1; j < i; j++) { 18 printf("\t"); 19 } 20 for (int j = 1; j <= 2 * (n - i) + 1; j++) { 21 printf(" O \t"); 22 } 23 printf("\n"); 24 25 for (int j = 1; j < i; j++) { 26 printf("\t"); 27 } 28 for (int j = 1; j <= 2 * (n - i) + 1; j++) { 29 printf(" <H> \t"); 30 } 31 printf("\n"); 32 33 for (int j = 1; j < i; j++) { 34 printf("\t"); 35 } 36 for (int j = 1; j <= 2 * (n - i) + 1; j++) { 37 printf(" I I \t"); 38 } 39 printf("\n"); 40 } 41 }

浙公网安备 33010602011771号