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

问题1:判断分数的等级;形参类型:int;返回值类型:char
问题2:没有break,最后结果都会变成'E';"A"为字符串,应该用'A'
实验任务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 } 18 return ans; 19 }

问题1:计算出输入数的各数位的数字之和
问题2:能
第一张为迭代,第二种为递归
实验任务3
1 #include <stdio.h> 2 int power(int x, int n); 3 int main() { 4 int x, n; 5 int ans; 6 7 while(printf("Enter x and n: "), scanf("%d%d", &x, &n) != EOF) { 8 ans = power(x, n); 9 printf("n = %d, ans = %d\n\n", n, ans); 10 } 11 return 0; 12 } 13 int power(int x, int n) { 14 int t; 15 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:计算x的n次方
问题2:是
递归模式:power(x,0)=1;power(x,n(为奇数))=power(x,n-1);power(x,n(n为偶数))=power(x,n/2)
实验任务4
1 #include <stdio.h> 2 int is_prime(int n); 3 int main() { 4 int count = 0; 5 printf("100以内的学生素数:\n"); 6 for (int n = 2; n <= 98; n++) { // n+2 <= 100 7 if (is_prime(n) && is_prime(n + 2)) { 8 printf("%d %d\n", n, n + 2); 9 count++; 10 } 11 } 12 printf("\n100以内的学生素数共有%d个。\n", count); 13 return 0; 14 } 15 int is_prime(int n) { 16 if (n <= 1) { 17 return 0; 18 } 19 for (int i = 2; i * i <= n; i++) { 20 if (n % i == 0) { 21 return 0; 22 } 23 } 24 return 1; 25 }

实验任务5
迭代
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 long long c=1; 14 for(int i=1;i<=m;i++){ 15 c=c*(n-i+1)/i; 16 } 17 return (int)c; 18 }

递归
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 if(m==n||m==0) 14 return 1; 15 else 16 return func(n-1,m)+func(n-1,m-1); 17 }

实验任务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 min=a; 14 if(b<min)min=b; 15 if(c<min)min=c; 16 for(int i=min;i>=1;i--){ 17 if (a%i==0&&b%i==0&&c%i==0){ 18 return i; 19 } 20 } 21 return 1; 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,m,c; 13 for(i=1;i<=n;i++){ 14 for(j=1;j<=3;j++){ 15 for(m=1;m<i;m++){ 16 printf(" \t"); 17 } 18 for(c=0;c<2*n+1-i*2;c++){ 19 20 switch(j){ 21 case 1:printf(" o \t");continue; 22 case 2:printf("<H>\t");continue; 23 case 3:printf("I I\t");continue; 24 } 25 printf("\n"); 26 } 27 printf("\n"); 28 } 29 } 30 }


浙公网安备 33010602011771号