实验3
任务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 } 11 return 0; 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 return ans; 24 }

问题1:讲成绩换算成等级,形参类型为整型,返回值类型为字符型
问题2:所有输出结果都将为E
任务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 }return 0; 10 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 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 int power(int x,int n){ 13 int t; 14 if(n==0) 15 return 1; 16 else if(n%2) 17 return x*power(x,n-1); 18 else{ 19 t=power(x,n/2); 20 return t*t; 21 } 22 }

问题1:算出一个数的n次方
问题2:是
任务4
1 #include <stdio.h> 2 int is_prime(int n){ 3 if (n<=2) 4 return 0; 5 else {for(int i=2;i<n;i++) 6 {if(n%i==0) 7 return 0; 8 }return 1; 9 } 10 } 11 int main (){printf("100以内的孪生素数\n"); 12 int t=0; 13 for(int i=3;i<=100;i++) { 14 15 if(is_prime(i)&&is_prime(i+2)){ 16 printf("%d %d\n",i,i+2); 17 t++;} 18 } 19 20 printf("共有%d对孪生素数\n",t); 21 22 23 24 return 0; 25 }

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

递归
1 #include <stdio.h> 2 int func(int n,int m){ 3 if (m==0) 4 return 1; 5 else if (m==n) 6 return 1; 7 else if (m>n) 8 return 0; 9 else {return func(n-1,m)+func(n-1,m-1); 10 11 } 12 } 13 int main(){ 14 int n,m; 15 int ans; 16 while(scanf("%d%d",&n,&m)!=EOF){ 17 ans=func(n,m); 18 printf("n=%d,m=%d,ans=%d\n\n",n,m,ans); 19 } 20 return 0; 21 }
任务6
1 #include<stdio.h> 2 int gcd(int a,int b,int c) 3 {int m; 4 if(a<b) 5 {m=a; 6 if (c<a) 7 m=c; 8 else m=a; 9 } 10 else {m=b; 11 if(c<b) 12 m=c; 13 else m=b; 14 }for(int i=m;i>=1;i--) 15 {if (a%i==0&&b%i==0&&c%i==0) 16 return i; 17 } 18 } 19 int main(){ 20 int a,b,c; 21 int ans; 22 while(scanf("%d%d%d",&a,&b,&c)!=EOF){ 23 ans= gcd(a,b,c); 24 printf("最大公约数:%d\n\n",ans); 25 } 26 return 0; 27 }

任务7
1 #include <stdio.h> 2 #include <stdlib.h> 3 void print_charman(int n,int m){ 4 for (int i=m;i>=1;i--) 5 printf("\t"); 6 for (int i=1;i<=2*n-1;i++)printf(" o\t");printf("\n"); 7 for (int i=m;i>=1;i--) 8 printf("\t"); 9 for (int i=1;i<=2*n-1;i++)printf("<H>\t");printf("\n"); 10 for (int i=m;i>=1;i--) 11 printf("\t"); 12 for (int i=1;i<=2*n-1;i++)printf("I I\t");printf("\n"); 13 14 } 15 int main(){ 16 int n=0; 17 printf("input n:"); 18 scanf("%d",&n); 19 20 21 for (int i=n;i>=1;i--){ 22 print_charman(i,n-i); 23 } 24 return 0; 25 }



浙公网安备 33010602011771号