实验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 return ans; 30 }

问题1:1.分数到等级的转换 2.参与类型:int 返回值类型:char
问题2:case分支缺少break; case 10分支没有任何逻辑 没语句 ''A''是字符串常量 而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 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:可以输出 迭代实现从数字的个位开始,由低到高累加 递归实现从数字的最高位开始,由高到低分解 迭代实现用while循环反复执行,直至数字变成0 递归实现缩小问题的规模,直到数字变成个位数
任务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 return 0; 14 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 int classify_triangle(int a, int b, int c); 3 int main(){ 4 int a, b, c; 5 while (scanf("%d%d%d",&a,&b,&c)==3){ 6 int result = classify_triangle(a,b,c); 7 switch (result){ 8 case 0 :printf("不能构成三角形\n");break; 9 case 1 :printf("普通三角形\n");break; 10 case 2 :printf("等边三角形\n");break; 11 case 3 :printf("等腰三角形\n");break; 12 case 4 :printf("直角三角形\n");break; 13 14 } 15 } 16 return 0; 17 } 18 int classify_triangle(int a, int b, int c){ 19 if(a<=0||b<=0||c<=0||a+b<=c||a+c<=b||b+c<=a){ 20 return 0; 21 } 22 if(a==b&&a==c){ 23 return 2; 24 } 25 if(a==b||b==c||a==c){ 26 return 3; 27 } 28 if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a){ 29 return 4; 30 } 31 return 1; 32 }

任务5
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 return 0; 13 } 14 int func(int n,int m){ 15 if(m>n)return 0; 16 if(m==0||m==n)return 1; 17 18 if(m>n-m){ 19 m=n-m; 20 } 21 22 int result=1; 23 for(int i=1;i<=m;i++){ 24 result=result*(n-m+i)/i; 25 } 26 return result; 27 }

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

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


浙公网安备 33010602011771号