实验三
四、实验结论
实验任务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 // 函数定义 13 char score_to_grade(int score) { 14 char ans ; 15 switch(score/10) { 16 case 10 : 17 case 9 : ans = 'A'; break; 18 case 8 : ans = 'B'; break; 19 case 7 : ans = 'C'; break; 20 case 6 : ans = 'D'; break; 21 default : ans = 'E'; 22 } 23 24 return ans ; 25 }

问题一:功能:将一个在整数形式的数,根据数的区间将其转换为对应的等级字符ABCDE。形参类型是int整形,返回值类型为char型。
问题二:1.要求输出的是char型,要用单引号,而非用双引号;2.其后缺少break,会继续执行后续所有分支语句而导致代码出现错误。
实验任务二
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 #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 ans = power(x, n); 8 printf("n = %d, ans = %d\n\n", n, ans); 9 } 10 return 0; 11 } 12 13 int power(int x, int n) { 14 int t; 15 if(n == 0) 16 return 1; 17 else if(n % 2) 18 return x * power(x, n-1); 19 else { 20 t = power(x, n/2); 21 return t*t; 22 } 23 }

问题一:输出x的n次幂
问题二:

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

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

2.递归
1 #include <stdio.h> 2 int func(int n, int m); 3 int main(){ 4 int n,m; 5 int ans; 6 while(scanf("%d%d",&n,&m) !=EOF) { 7 ans = func(n,m); 8 printf("n = %d,m = %d,ans = %d\n\n", n, m, ans); 9 } 10 return 0; 11 } 12 13 int func(int n, int m){ 14 if (m < 0 || m > n) 15 return 0; 16 if (m == 0 || m == n) 17 return 1; 18 return func(n-1,m)+func(n-1,m-1); 19 }

实验任务六
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 return 0; 12 } 13 int gcd(int a,int b,int c){ 14 int min = a; 15 int i; 16 if(b < min) 17 min =b; 18 if(c < min) 19 min =c; 20 for(i=min;i>=1;i--){ 21 if(a % i==0 && b%i==0 && c%i==0) 22 return i; 23 } 24 }

实验任务七
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, k; 13 for(k = n; k >= 1; k--){ 14 for(i = 0; i < n-k; i++){ 15 printf("\t"); 16 } 17 for(i = 0; i < 2*k-1; i++){ 18 printf(" O \t"); 19 } 20 printf("\n"); 21 22 for(i = 0; i < n-k; i++){ 23 printf("\t"); 24 } 25 for(i = 0; i < 2*k-1; i++){ 26 printf("<H>\t"); 27 } 28 printf("\n"); 29 30 for(i = 0; i < n-k; i++){ 31 printf("\t"); 32 } 33 for(i = 0; i < 2*k-1; i++){ 34 printf("I I\t"); 35 } 36 printf("\n"); 37 } 38 }


五、实验总结
1.学习并了解一些可以运用于日常生活工作中的函数,使代码运算更加便捷。
2.熟练掌握了循环和递归函数,需要思路清晰,理清变量之间的关系。
3.实验七思考量有些大,有关空格和字符、换行之间的关系,略显复杂,要搞清楚需要输出的内容以及其所在位置。
浙公网安备 33010602011771号