实验任务1:
1 int main(){ 2 int score; 3 char grade; 4 5 while(scanf("%d",&score)!=EOF){ 6 grade=score_to_grade(score); 7 printf("分数:%d,等级:%c\n\n",score,grade); 8 9 } 10 return 0; 11 } 12 13 char score_to_grade(int score){ 14 char ans; 15 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:有,字母A,B,C,D应该用单引号来表示字符类型。
实验任务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 return 0; 15 } 16 17 int sum_digits(int n){ 18 19 int ans=0; 20 while(n!=0){ 21 ans+=n%10; 22 n/=10; 23 } 24 25 26 return ans; 27 }
问题1:功能是作为被定义的函数,用于执行主函数。
问题2:能实现,第二种先判断n是否小于10,将运算简单化。
实验任务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 return 0; 15 } 16 17 int power(int x,int n) { 18 int t; 19 20 if(n==0) 21 return 1; 22 else if(n%2) 23 return(x*power(x,n-1)); 24 else{ 25 26 t=power(x,n/2); 27 return t*t; 28 } 29 30 } 31 32
问题1:功能是用作递归函数。
问题2:f(x)等于x乘x的n-1次方,x的0次方等于1为出口。
实验任务4:
1 #include <stdio.h> 2 int is_prime(int n); 3 int main() 4 { 5 printf("100以内的孪生素数:\n"); 6 int n,count=0; 7 for(n=1;n<=100;n++) 8 { 9 if(is_prime(n)&&is_prime(n+2)){ 10 11 printf("%d %d\n",n,n+2); 12 count+=1; 13 } 14 } 15 printf("100以内的孪生素数有%d个\n",count); 16 return 0; 17 } 18 19 int is_prime(int n) 20 { 21 if(n==1) 22 return 0; 23 int i; 24 for(i=2;i<=n/2;i++) 25 { 26 if(n%i==0) 27 28 return 0; 29 30 31 } 32 if(i>n/2) 33 return 1; 34 35 }
实验任务5:
1 #include <stdio.h> 2 #include <stdlib.h> 3 int count=0; 4 void hanoi(unsigned int n,char from,char temp,char to); 5 void moveplate(unsigned int n,char from,char to); 6 int main() 7 { 8 9 unsigned int n; 10 11 while(scanf("%d",&n)!=EOF) 12 { 13 count=0; 14 hanoi(n,'A','B','C'); 15 16 printf("一共移动了%d次\n",count); 17 } 18 return 0; 19 } 20 21 void hanoi(unsigned int n,char from,char temp,char to) 22 { 23 24 25 if(n==1) 26 moveplate(n,from,to); 27 28 else{ 29 hanoi(n-1,from,to,temp); 30 moveplate(n,from,to); 31 hanoi(n-1,temp,from,to); 32 } 33 } 34 void moveplate(unsigned int n,char from,char to) 35 { 36 37 38 count++; 39 printf("%u:%c-->%c\n",n,from,to); 40 }
实验任务6:
1 #include<stdio.h> 2 int func(int n,int m); 3 4 int main(){ 5 int n,m; 6 int ans; 7 while(scanf("%d%d",&n,&m)!=EOF){ 8 ans=func(n,m); 9 printf("n=%d,m=%d,ans=%d\n\n",n,m,ans); 10 11 } 12 return 0; 13 } 14 //迭代方式 15 int func(int n,int m){ 16 17 int i,j,x=1,y=1,ans; 18 for(i=n;i>=n-m+1;i--){ 19 x*=i; 20 } 21 for(j=m;j>=1;j--){ 22 23 y*=j; 24 25 } 26 ans=x/y; 27 return ans; 28 }
1 int func2(int n,int m); 2 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 } 11 return 0; 12 } 13 //递归方式 14 15 int func(int n,int m){ 16 17 if(n<m) 18 { 19 return 0; 20 } 21 else if(m==0||m==n) 22 { 23 return 1; 24 } 25 else{ 26 27 return func(n-1,m)+func(n-1,m-1); 28 } 29 }
实验任务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 { 13 int i,j,k; 14 for(i=n;i>=1;i--){ 15 for(k=i;k<n;k++) 16 { 17 printf("\t"); 18 } 19 for(j=1;j<=2*i-1;j++) 20 { 21 printf(" o\t"); 22 } 23 printf("\n"); 24 for(k=i;k<n;k++) 25 { 26 printf("\t"); 27 } 28 for(j=1;j<=2*i-1;j++) 29 { 30 printf("<H>\t"); 31 } 32 printf("\n"); 33 for(k=i;k<n;k++) 34 { 35 printf("\t"); 36 } 37 for(j=1;j<=2*i-1;j++) 38 { 39 printf("I I\t"); 40 } 41 printf("\n"); 42 43 44 printf("\n"); 45 } 46 }