实验3
试验任务1
代码
1 #include <stdio.h> 2 #include <stdlib.h> 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 system("pause"); 15 return 0; 16 } 17 char score_to_grade(int score) 18 { 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.将分数转换成对应的等级,形参类型是整型,返回值是字符型;
2.运行switch语句时,每次输出等级都为E,不会在对应的等级停止。
试验任务2
代码
1 #include <stdio.h> 2 #include <stdlib.h> 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 system("pause"); 15 return 0; 16 } 17 18 int sum_digits(int n) 19 { 20 int ans = 0; 21 22 while(n != 0){ 23 ans += n%10; 24 n /= 10; 25 } 26 27 return ans; 28 }
截图

问题:
1.计算一个整数所有数字之和;
2.能实现同样的输出,原版是从个位数一步一步做加法,而改编版是将一个数进行拆分加起来。
试验任务3
代码
1 #include <stdio.h> 2 #include <stdlib.h> 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 system("pause"); 15 return 0; 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 #include <stdlib.h> 3 int clssify_triangle(int a, int b, int c); 4 5 int main(){ 6 int a, b, c; 7 int type; 8 while(scanf("%d %d %d",&a,&b,&c) != EOF){ 9 type = clssify_triangle(a, b, c); 10 switch(type) 11 { 12 case 0:printf("不能构成三角形");break; 13 case 1:printf("普通三角形\n");break; 14 case 2:printf("等边三角形\n");break; 15 case 3:printf("等腰三角形\n");break; 16 case 4:printf("直角三角形\n");break; 17 default:printf("bug!n"); 18 } 19 } 20 system("pause"); 21 return 0; 22 } 23 24 int clssify_triangle(int a, int b, int c) 25 { 26 if(a+b<=c||a+c<=b||b+c<=a) 27 return 0; 28 if (a==b&&b==c) 29 return 2; 30 if (a==b||b==c||a==c) 31 return 3; 32 if (a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a) 33 return 4; 34 else 35 return 1; 36 }
截图

试验任务5
代码1
1 #include <stdio.h> 2 #include <stdlib.h> 3 int func(int n,int m); 4 5 int main(){ 6 int n,m; 7 int ans; 8 9 while(scanf("%d%d",&n,&m) !=EOF){ 10 ans = func(n, m); 11 printf("n = %d,m = %d,ans = %d\n\n",n,m,ans); 12 } 13 14 system("pause"); 15 return 0; 16 } 17 18 int func(int n,int m) 19 { 20 int ans; 21 int i; 22 if(m<0||m>n) 23 return 0; 24 if(m == 0||m == n) 25 return 1; 26 if(m>n-m) 27 m = n-m; 28 29 ans = 1; 30 for(i=1;i<=m;i++){ 31 ans = ans*(n-m+i)/i; 32 } 33 return ans; 34 }
截图1

代码2
1 #include <stdio.h> 2 #include <stdlib.h> 3 int func(int n,int m); 4 5 int main(){ 6 int n,m; 7 int ans; 8 9 while(scanf("%d%d",&n,&m) !=EOF){ 10 ans = func(n, m); 11 printf("n = %d,m = %d,ans = %d\n\n",n,m,ans); 12 } 13 14 system("pause"); 15 return 0; 16 } 17 18 int func(int n,int m) 19 { 20 if(m<0||m>n) 21 return 0; 22 if(m == 0||m == n) 23 return 1; 24 return func(n-1,m)+func(n-1,m-1); 25 }
截图2

试验任务6
代码
1 #include <stdio.h> 2 #include <stdlib.h> 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 system("pause"); 15 return 0; 16 } 17 18 int gcd(int a,int b,int c) 19 { 20 int min; 21 int i; 22 min = a; 23 if(b<min) 24 min = b; 25 if(c<min) 26 min = c; 27 for(i = min;i>=1;i--) 28 { 29 if(a%i == 0&&b%i == 0&&c%i == 0) 30 return i; 31 } 32 return 1; 33 }
截图

试验任务7
代码
1 #include <stdio.h> 2 #include <stdlib.h> 3 void print_charman(int n); 4 5 int main(){ 6 int n; 7 printf("Enter n: "); 8 scanf("%d",&n); 9 print_charman(n); 10 11 system("pause"); 12 return 0; 13 } 14 15 void print_charman(int n) 16 { 17 int i,j,k; 18 int count; 19 for(i=0;i<n;i++) 20 { 21 count = 2*(n-i)-1; 22 for(k=0;k<i;k++) 23 printf("\t"); 24 for(j=0;j<count;j++){ 25 printf(" O"); 26 if(j<count-1) 27 printf("\t"); 28 } 29 printf("\n"); 30 31 for(k=0;k<i;k++) 32 printf("\t"); 33 for(j=0;j<count;j++){ 34 printf("<H>"); 35 if(j<count-1) 36 printf("\t"); 37 } 38 printf("\n"); 39 40 for(k=0;k<i;k++) 41 printf("\t"); 42 for(j=0;j<count;j++){ 43 printf("I I"); 44 if(j<count-1) 45 printf("\t"); 46 } 47 printf("\n"); 48 } 49 }
截图



浙公网安备 33010602011771号