实验三
实验一
源代码:
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 system("pause"); 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 }
实验截图:

问题一:功能:根据学生所得分数的十位数上的数字来输出对应的等级。形参类型是整型int,返回值类型是字符型char
问题二:1.每一个case语句的最后都要有break。2.赋值应该用两个单引号引出对应的等地
实验二
源代码:
1 #include <stdio.h> 2 #include<stdlib.h> 3 4 5 int sum_digits(int n); // 函数声明 6 7 int main() { 8 int n; 9 int ans; 10 11 while(printf("Enter n: "), scanf("%d", &n) != EOF) { 12 ans = sum_digits(n); // 函数调用 13 printf("n = %d, ans = %d\n\n", n, ans); 14 } 15 system("pause"); 16 return 0; 17 } 18 19 // 函数定义 20 int sum_digits(int n) { 21 int ans = 0; 22 23 while(n != 0) { 24 ans += n % 10; 25 n /= 10; 26 } 27 28 return ans; 29 }
实验截图:
问题一:实现了对于输入数字每个数位上的数字求和的功能
问题二:可以实现相同的功能,源代码中的函数是迭代的逻辑,通过while语句重复执行一段代码,每次迭代更新状态,直到满足条件为之。而问题中的函数使用的是递归的的逻辑,通过不断地调用自身函数,将问题分解为更小的子问题直到达到基本情况。
实验三:
源代码:
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 system("pause"); 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 }
实验截图:

问题一:函数的功能是求一个整数的整数次方
问题二:是递归函数,对应的数学模型如下:

实验四:
源代码:
1 #include<stdlib.h> 2 #include<stdio.h> 3 4 int classify_triangle(int,int,int); 5 int maxi(int a,int b); 6 int mini(int a,int b); 7 int main() 8 { 9 int a,b,c,ans,A,B,C; 10 while(scanf("%d %d %d",&a,&b,&c)!=EOF) 11 { 12 getchar(); 13 C=maxi(a,c); 14 15 16 C=maxi(C,b); 17 A=mini(a,b); 18 A=mini(A,c); 19 B=a+b+c-A-C; 20 ans=classify_triangle(A,B,C); 21 22 if(ans==1) 23 printf("普通三角形"); 24 else if(ans==2) 25 printf("等边三角形"); 26 else if(ans==3) 27 printf("等腰三角形"); 28 else if(ans==4) 29 printf("直角三角形"); 30 if(ans==0) 31 printf("不构成三角形"); 32 33 } 34 system("pause"); 35 return 0; 36 } 37 int classify_triangle(int a,int b,int c) 38 { 39 if(a+b<=c) 40 return 0; 41 else if(a==b) 42 { 43 if(b==c) 44 return 2; 45 else 46 return 3; 47 } 48 else if(a*a+b*b==c*c) 49 return 4; 50 else 51 return 1; 52 } 53 int maxi(int a,int b) 54 { if(a>b) 55 return a; 56 else 57 return b;} 58 int mini(int a,int b) 59 { if(a<b) 60 return a; 61 else 62 return b;}
实验截图:

实验五:
源代码:
迭代版:
1 #include<stdlib.h> 2 #include<stdio.h> 3 int func(int,int); 4 int main() 5 { 6 int n,m; 7 int ans; 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 system("pause"); 13 return 0; 14 }int func(int n,int m) 15 { 16 int a=1,b=1,c=1,i; 17 for(i=1;i<=n;i++) 18 {a*=i;} 19 for(i=1;i<=m;i++) 20 {b*=i;} 21 for(i=1;i<=n-m;i++) 22 {c*=i;} 23 return (a/b/c); 24 25 }
递归版:
1 #include<stdlib.h> 2 #include<stdio.h> 3 int func(int,int); 4 int main() 5 { 6 int n,m; 7 int ans; 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 system("pause"); 13 return 0; 14 }int func(int n,int m) 15 { 16 if(m>n) 17 return 0; 18 if(m==n||m==0) 19 return 1; 20 else 21 return func(n-1,m)+func(n-1,m-1); 22 23 }
实验截图:

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

实验七:
源代码:
1 #include<stdlib.h> 2 #include<stdio.h> 3 void print_charman(int); 4 int main() 5 { 6 int n; 7 printf("Enter n :"); 8 scanf("%d",&n); 9 print_charman(n); 10 system("pause"); 11 return 0; 12 } 13 void print_charman(int n) 14 { 15 int i,t,g; 16 for(i=1;i<=n;i++) 17 { 18 for(t=1;t<=i-1;t++) 19 {printf("\t");} 20 for(g=1;g<=2*(n-i)+1;g++) 21 {printf(" O\t");} 22 printf("\n"); 23 for(t=1;t<=i-1;t++) 24 {printf("\t");} 25 for(g=1;g<=2*(n-i)+1;g++) 26 {printf("<H>\t");} 27 printf("\n"); 28 for(t=1;t<=i-1;t++) 29 {printf("\t");} 30 for(g=1;g<=2*(n-i)+1;g++) 31 {printf("I I\t");} 32 printf("\n"); 33 } 34 }
实验截图:

浙公网安备 33010602011771号