实验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 30 return ans; 31 }
截图:![image]()
问题:
1.函数功能:将实际分数转化为ABC等等级;
形参类型:整数型; 返回值类型:字符型
2.字符的赋值需要用单引号;
每个case后没有break,会一直顺位执行下去,即无论输入什么分数最后显示的等级都是“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 }
截图:![image]()
问题:
1.求输入数n的各项数字之和
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 }
截图:![image]()
问题:
1.求x的n次方
2.是递归函数 模型如下

任务4:
代码:
1 #include<stdio.h> 2 3 int classify_triangle(int a,int b,int c); 4 5 int main(){ 6 int a,b,c,n; 7 while(scanf("%d%d%d",&a,&b,&c)!=EOF){ 8 n=classify_triangle(a,b,c); 9 switch(n){ 10 case 0: printf("不能构成三角形\n"); 11 break; 12 case 1:printf("普通三角形\n"); 13 break; 14 case 2:printf("等边三角形\n"); 15 break; 16 case 3:printf("等腰三角形\n"); 17 break; 18 case 4:printf("直角三角形\n"); 19 break; 20 } 21 } 22 return 0; 23 } 24 25 int classify_triangle(int a,int b,int c){ 26 if(a+b<=c||a+c<=b||b+c<=a){ 27 return 0; 28 } 29 else{ 30 if(a==b&&a==c&&b==c){ 31 return 2; 32 } 33 else if(a==b||a==c||b==c){ 34 return 3; 35 } 36 else if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a){ 37 return 4; 38 } 39 else{ 40 return 1; 41 } 42 } 43 44 }
截图:![image]()
任务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 13 return 0; 14 } 15 16 int func(int n,int m){ 17 if(n<m){ 18 return 0; 19 } 20 else if(m==0||m==n){ 21 return 1; 22 } 23 else{ 24 int ans=1; 25 int i; 26 for(i=1;i<m+1;i++){ 27 ans=ans*(n-m+i)/i; 28 } 29 return ans; 30 } 31 }
截图:![image]()
代码:
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 int func(int n,int m){ 17 if(n<m){ 18 return 0; 19 } 20 else if(m==0||m==n){ 21 return 1; 22 } 23 else{ 24 return func(n-1,m)+func(n-1,m-1); 25 } 26 }
截图: ![image]()
任务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 return 0; 14 } 15 16 int gcd(int a,int b,int c){ 17 int i; 18 if(a<=b&&a<=c){ 19 i=a; 20 } 21 else if(b<=a&&b<=c){ 22 i=b; 23 } 24 else{ 25 i=c; 26 } 27 28 for(i;i>=1;i--){ 29 while(a%i==0&&b%i==0&&c%i==0){ 30 return i; 31 } 32 } 33 }
截图:![image]()
任务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_s("%d", &n); 8 print_charman(n); // 函数调用 9 return 0; 10 } 11 void print_charman(int n) 12 { 13 int i, j; 14 for (i = 0; i < n; i++) 15 { 16 for (j = 0; j < i; j++) 17 { 18 printf("\t"); 19 } 20 for (j = 0; j < n - i; j++) 21 { 22 printf(" O \t"); 23 } 24 for (j = 0; j < n - i - 1; j++) 25 { 26 printf(" O \t"); 27 } 28 printf("\n"); 29 30 for (j = 0; j < i; j++) 31 { 32 printf("\t"); 33 } 34 for (j = 0; j < n - i; j++) 35 { 36 printf("<H>\t"); 37 } 38 for (j = 0; j < n - i - 1; j++) 39 { 40 printf("<H>\t"); 41 } 42 printf("\n"); 43 44 for (j = 0; j < i; j++) 45 { 46 printf("\t"); 47 } 48 for (j = 0; j < n - i; j++) 49 { 50 printf("I I\t"); 51 } 52 for (j = 0; j < n - i - 1; j++) 53 { 54 printf("I I\t"); 55 } 56 printf("\n\n"); 57 } 58 59 }
截图:![image]()








浙公网安备 33010602011771号