实验三
实验作业1
1 #include<stdio.h> 2 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 return 0; 15 } 16 17 char score_to_grade(int score){ 18 char ans; 19 20 switch(score/10){ 21 case 10: 22 case 9:ans='A';break; 23 case 8:ans='B';break; 24 case 7:ans='C';break; 25 case 6:ans='D';break; 26 default:ans='E'; 27 } 28 return ans; 29 30 }

问题:1.将学生分数转换为等级,形参类型为int,返回值类型为char
2.无论输入什么数值都会执行line21-28所有语句但是最后结果显示为E
```
实验作业2
1 #include<stdio.h> 2 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 15 return 0; 16 } 17 18 int sum_digits(int n){ 19 int ans=0; 20 21 while(n!=0){ 22 ans+=n%10; 23 n/=10; 24 } 25 26 return ans; 27 }

问题:1.计算整数各位数的和
2.能实现同样的输出,一种是迭代方式,一种是递归方式。迭代方式是循环处理,不断累加;递归方式是将问题分解计算。
```
实验作业3
1 #include<stdio.h> 2 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 15 return 0; 16 } 17 18 int power(int x,int n){ 19 int t=0; 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.是,n=0时,返回1;n为奇数时,返回x*power(x,n-1);n为偶数,返回power(x,n/2)*power(x,n/2)
```
实验作业4
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int is_prime(int i){ 5 int ret=1; 6 int k; 7 for(k=2;k<i-1;k++){ 8 if(i%k==0){ 9 ret=0; 10 break; 11 } 12 } 13 return ret; 14 } 15 16 int main(){ 17 int count=0; 18 printf("100以内的孪生素数:\n"); 19 20 for(int n=2;n<=98;n++){ 21 if(is_prime(n)&&is_prime(n+2)){ 22 printf("%d %d\n",n,n+2); 23 count++; 24 } 25 } 26 printf("100以内的孪生素数共有%d个\n",count); 27 system("pause"); 28 return 0; 29 }

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

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

实验作业6
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int gcd(int,int); 5 6 int main(){ 7 int a,b,c; 8 int ans; 9 while(scanf("%d%d%d",&a,&b,&c)!=EOF){ 10 ans=gcd(gcd(a,b),c); 11 printf("最大公约数:%d\n\n",ans); 12 } 13 system("pause"); 14 return 0; 15 } 16 17 int gcd(int x,int y){ 18 int r; 19 r=x%y; 20 while(r!=0){ 21 x=y; 22 y=r; 23 r=x%y; 24 } 25 return y; 26 }

实验作业7
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 void print_charman(int n); 5 6 int main(){ 7 int n; 8 9 printf("Enter n:"); 10 scanf("%d",&n); 11 print_charman(n); 12 13 system("pause"); 14 return 0; 15 } 16 void print_charman(int n){ 17 18 for(int i=0;i<n;i++){ 19 int c=2*(n-i)-1; 20 int s=i*3; 21 for(int line=0;line<3;line++){ 22 23 for(int k=0;k<s;k++){ 24 printf(" "); 25 } 26 for(int j=0;j<c;j++) 27 { 28 switch(line){ 29 case 0:printf(" O ");break; 30 case 1:printf("<H> ");break; 31 case 2:printf("I I ");break; 32 33 } 34 } 35 printf("\n"); 36 } 37 printf("\n"); 38 } 39 }


浙公网安备 33010602011771号