实验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 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 } 25 return ans; 26 }
运行结果截图

回答问题:
1.根据输入分数值判断等级并输出。形参类型为int,返回值类型是char
2.swich判断case无法输出,全部运行至default输出E,达不到函数调用目的;一次判断中ans被多次赋值,占用较多存储空间,运行慢。
实验任务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 } 11 return 0; 12 } 13 int sum_digits(int n){ 14 int ans=0; 15 while(n!=0){ 16 ans+=n%10; 17 n/=10; 18 } 19 return ans; 20 }
运行结果截图

回答问题:
1.输出n的各位数之和
2.同样能实现;第一种采用迭代,第二种采用递归。
实验任务3
源代码
1 #include <stdio.h> 2 int pow(int x,int n); 3 int main(){ 4 int x,n; 5 int ans; 6 while(printf("Enter xand 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.运行输出x^n
2.是;
实验任务4
源代码
1 #include <stdio.h> 2 int is_prime(int i); 3 int main(){ 4 int i=1,n=0; 5 int ans; 6 printf("100以内的孪生素数:\n"); 7 while(i<=98){ 8 ans= (is_prime(i)&&is_prime(i+2)); 9 if(ans==1){ 10 printf("%d %d\n",i,i+2); 11 ++n; 12 } 13 ++i; 14 } 15 printf("100以内的孪生素数共有%d个\n",n); 16 system("pause"); 17 return 0; 18 } 19 int is_prime(int i){ 20 int a; 21 if(i<=1) 22 return 0; 23 for(a=2;a<i;a++){ 24 if(i%a==0) 25 return 0; 26 }return 1; 27 }
运行结果截图

实验任务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 system("pause"); 11 return 0; 12 } 13 int func(int n,int m){ 14 int ans=1,i,a=1; 15 if(n<m) 16 return 0; 17 for(i= n;i > n - m;--i){ 18 ans*=i; 19 } 20 for(i=1;i<=m;i++){ 21 a*=i; 22 } ans=ans/a; 23 return ans; 24 }
运行结果截图

递归源代码
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 system("pause"); 11 return 0; 12 } 13 int func(int n,int m){ 14 if(m==0||m==n) 15 return 1; 16 if(n<m) 17 return 0; 18 return func(n-1,m)+func(n-1,m-1); 19 }
运行结果截图

实验任务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 ans=a,i; 14 if(a>b) 15 ans=b; 16 if(a>c&&b>c) 17 ans=c; 18 for(i=ans;i>0;i--){ 19 if(a%i==0&&b%i==0&&c%i==0) 20 return i; 21 }return 1; 22 23 }
运行结果截图

实验任务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 system("pause"); 10 return 0; 11 } 12 void print_charman(int n) { 13 int i,a,b,c; 14 if (n <= 0) return; 15 for(i=n;i>=1;i--){ 16 for ( b = 1; b<=(n-i) ; b++) { 17 printf("\t"); 18 } 19 for ( a = 1; a <=2 * i - 1; a++) { 20 printf(" 0 \t"); 21 } 22 printf("\n"); 23 for (b= 1; b<=(n-i); b++) { 24 printf("\t"); 25 } 26 for ( c = 1; c <=2 * i - 1; c++) { 27 printf("<H>\t"); 28 } 29 printf("\n"); 30 for (b = 1; b<=(n-i); b++) { 31 printf("\t"); 32 } 33 for ( c= 1; c<=2 * i - 1; c++) { 34 printf("I I\t"); 35 } 36 printf("\n");} 37 }
运行结果截图



浙公网安备 33010602011771号