实验3
实验1
代码:

1 #include<stdio.h> 2 3 char score_to_grade(int score); 4 int main(){ 5 int score; 6 char grade; 7 8 while(scanf("%d",&score)!=EOF){ 9 grade=score_to_grade(score); 10 printf("分数:%d,等级:%c\n\n",score,grade); 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:函数功能为计算不同成绩的等级;形参类型为字符型,返回值类型为字符。
问题2:函数运行结果将永远为E。
实验2
代码2:

1 #include<stdio.h> 2 int sum_digits(int n); 3 int main(){ 4 int n; 5 int ans; 6 7 while(printf("Enter n: "),scanf("%d",&n)!=EOF){ 8 ans=sum_digits(n); 9 printf("n=%d,ans=%d\n\n",n,ans); 10 } 11 return 0; 12 } 13 14 int sum_digits(int n){ 15 int ans=0; 16 17 while(n!=0){ 18 ans+=n%10; 19 n/=10; 20 } 21 return ans; 22 }
运行结果
问题1:求n对10取余数的各余数之和。
问题2:能实现;前者是迭代,后者属于递归。
实验3
代码:

1 #include<stdio.h> 2 3 4 int power(int x,int n); 5 6 int main(){ 7 int x,n; 8 int ans; 9 10 while(printf("Enter x and n: "),scanf("%d%d",&x,&n)!=EOF){ 11 ans=power(x,n); 12 printf("n = %d,ans = %d\n\n",n,ans); 13 } 14 return 0; 15 } 16 int power(int x,int n){ 17 int t; 18 19 if(n == 0) 20 return 1; 21 else if(n % 2) 22 return x*power(x,n-1); 23 else{ 24 t=power(x,n/2); 25 return t*t; 26 } 27 }
运行结果:
问题1:计算不同数值n情况下x的次方。
问题2:递归。xn=(xn-1) * x。
实验4
代码:

1 #include <stdio.h> 2 #include <math.h> 3 int is_prime(int n); 4 5 int main() 6 { 7 int n=1,i=0; 8 printf("100以内的孪生素数有%d个",i); 9 while(n+2<=100) 10 { 11 if(is_prime(n)&&is_prime(n+2)) 12 { 13 printf("%d, %d\n", n, n+2); 14 i++; 15 } 16 n++; 17 } 18 19 return 0; 20 } 21 22 int is_prime(int n) 23 { 24 if(n<=1) 25 { 26 return 0; 27 } 28 for(int i=2;i<=sqrt(n);i++) 29 { 30 if(n%i==0) 31 return 0; 32 } 33 return 1; 34 }
运行结果
实验5
代码:

1 #include <stdio.h> 2 #include <stdlib.h> 3 void hanoi(unsigned int n,char from,char temp,char to); 4 void moveplate(unsigned int n,char from,char to); 5 int i=0; 6 int main() 7 { 8 unsigned int n; 9 while(scanf("%u",&n) != EOF) 10 { 11 i=0; 12 hanoi(n,'A','B','C'); 13 printf("移动总次数:%d\n",i); 14 } 15 system("pause"); 16 return 0; 17 } 18 void hanoi(unsigned int n,char from,char temp,char to) 19 { 20 if(n==1) 21 moveplate(n,from,to); 22 else 23 { 24 hanoi(n-1,from,to,temp); 25 moveplate(n,from,to); 26 hanoi(n-1,temp,from,to); 27 } 28 } 29 void moveplate(unsigned int n,char from,char to) 30 { 31 printf("%u:%c-->%c\n",n,from,to); 32 i++; 33 }
运行结果:
实验6
代码:

1 #include <stdio.h> 2 3 int func(int n, int m); 4 5 int main() 6 { 7 int n, m; 8 int ans; 9 10 while(scanf("%d%d", &n, &m) != EOF) 11 { 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 { 20 21 if(m>n) 22 { 23 return 0; 24 } 25 int ans=1; 26 for(int i=1;i<=m;i++) 27 { 28 ans=ans*(n-m+i)/i; 29 } 30 return ans; 31 }
运行结果
代码:

1 #include <stdio.h> 2 3 int func(int n, int m); 4 5 int main() 6 { 7 int n, m; 8 int ans; 9 10 while(scanf("%d%d", &n, &m) != EOF) 11 { 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 { 20 21 if(m==0||m==n) 22 { 23 return 1; 24 } 25 if(m>n) 26 { 27 return 0; 28 } 29 return func(n-1,m)+func(n-1,m-1); 30 }
运行结果
实验7
代码:

1 #include <stdio.h> 2 int gcd(int a,int b,int c); 3 4 int main() 5 { 6 int a, b, c; 7 int ans; 8 9 while(scanf("%d%d%d", &a, &b, &c) != EOF) 10 { 11 ans = gcd(a, b, c); 12 printf("最大公约数: %d\n\n", ans); 13 } 14 15 return 0; 16 } 17 int gcd(int a,int b,int c) 18 { 19 int min=a; 20 if(b<min) 21 { 22 min=b; 23 } 24 if(c<min) 25 { 26 min=c; 27 } 28 for(int i=min;i>=1;i--) 29 { 30 if(a%i==0&&b%i==0&&c%i==0) 31 { 32 return i; 33 } 34 } 35 return 1; 36 }
运行结果