实验3
实验1:
1 #include <stdio.h> 2 char score_to_grade(int score); 3 int main() { 4 int score; 5 char grade; 6 while(scanf("%d", &score) != EOF) { 7 grade = score_to_grade(score); 8 printf("分数: %d, 等级: %c\n\n", score, grade); 9 } 10 return 0; 11 } 12 char score_to_grade(int score) { 13 char ans; 14 switch(score/10) { 15 case 10: 16 case 9: ans = 'A'; break; 17 case 8: ans = 'B'; break; 18 case 7: ans = 'C'; break; 19 case 6: ans = 'D'; break; 20 default: ans = 'E'; 21 } 22 return ans; 23 }

问题1:将主函数的score传递给函数中的score,用函数将score转化为等级;形参是int类型,返回值是char类型。
问题2:除10以外的case后无break,会导致case穿透输出多个字符;同时单个字符应该用‘’而不是“”。
实验2:
1 #include <stdio.h> 2 int sum_digits(int n); 3 int main() { 4 int n; 5 int ans; 6 while(printf("Enter n: "), scanf("%d", &n) != EOF) { 7 ans = sum_digits(n); 8 printf("n = %d, ans = %d\n\n", n, ans); 9 } 10 return 0; 11 } 12 int sum_digits(int n) { 13 int ans = 0; 14 while(n != 0) { 15 ans += n % 10; 16 n /= 10; 17 return ans; 18 }

问题1:sum_digits实现将输入的n值的每一位的数字相加
问题2:能够实现,修改后,先判断n是否小于10 若小于10直接返回n,若大于10将n%10,得到最后一位,再把剩余的数字即n/10返回函数递归,实现末尾数字的累加。
实验3:
1 include<stdio.h> 2 int power(int x, int n); 3 int main() { 4 int x, n; 5 int ans; 6 while(printf("Enter x and n: "), scanf("%d%d", &x, &n) != EOF) 7 { 8 ans = power(x, n); 9 printf("n = %d, ans = %d\n\n", n, ans); 10 } 11 12 return 0; 13 } 14 int power(int x, int n) { 15 int t; 16 if(n == 0) 17 return 1; 18 else if(n % 2) 19 return x * power(x, n-1); 20 else { 21 t = power(x, n/2); 22 return t*t; 23 } 24 }

问题1:函数power实现了x的n次方;同时通过奇偶的判断减少递归次数。
问题2:是递归函数;

实验4:
1 int class_triangle(int a,int b,int c); 2 int main(){ 3 int a,b,c,ans; 4 while(scanf("%d%d%d",&a,&b,&c)!=EOF){ 5 ans=class_triangle(a,b,c); 6 switch(ans){ 7 case 0:printf("不能构成三角形\n");break; 8 case 1:printf("普通三角形\n");break; 9 case 2:printf("等边三角形\n");break; 10 case 3:printf("等腰三角形\n");break; 11 case 4:printf("直角三角形\n");break; 12 } 13 } 14 return 0; 15 } 16 int class_triangle(int a,int b,int c){ 17 if(a+b<=c || a+c<=b || b+c<=a) 18 return 0; 19 else if(a==b && b==c) 20 return 2; 21 else if(a==b || a==c || b==c) 22 return 3; 23 else if(a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a) 24 return 4; 25 return 1; 26 }

实验5:
1 #include <stdio.h> 2 #include <stdio.h> 3 int func(int n, int m); 4 int main() { 5 int n, m; 6 int ans; 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 return 0; 12 } 13 int func(int n,int m){ 14 if(n<m) 15 return 0; 16 if(n==m) 17 return 1; 18 if(m==0) 19 return 1; 20 return func(n-1,m)+func(n-1,m-1); 21 }

实验6:
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 while(scanf("%d%d%d", &a, &b, &c) != EOF) { 7 ans = gcd(a, b, c); 8 printf("最大公约数: %d\n\n", ans); 9 } 10 return 0; 11 } 12 int gcd(int a,int b,int c){ 13 int m=(a>b)?b:a; 14 m=(m>c)?c:m; 15 if(a%m==0 && b%m==0 && c%m==0) 16 return m; 17 for(int i=m-1;i>=1;i--){ 18 if(m%i==0){ 19 return i; 20 } 21 } 22 }

实验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 scanf("%d", &n); 8 print_charman(n); 9 return 0; 10 } 11 void print_charman(int n){ 12 int i,j; 13 for(i=n;i>=1;i--){ 14 15 for(int kong=0;kong<(n-i);kong++) 16 printf("\t"); 17 for(j=2*i-1;j>=1;j--) 18 printf(" O\t"); 19 printf("\n"); 20 21 for(int kong=0;kong<(n-i);kong++) 22 printf("\t"); 23 for(j=2*i-1;j>=1;j--) 24 printf("<H>\t"); 25 printf("\n"); 26 27 for(int kong=0;kong<(n-i);kong++) 28 printf("\t"); 29 for(j=2*i-1;j>=1;j--) 30 printf("I I\t"); 31 printf("\n"); 32 } 33 }



浙公网安备 33010602011771号