实验3
任务1
代码
#include<stdio.h> char score_to_grade(int score); int main() { int score; char grade; while (scanf("%d",&score)!=EOF){ grade=score_to_grade(score); printf("分数:%d,等级:%c\n\n",score,grade); } return 0; } char score_to_grade(int score){ char ans; switch(score/10){ case 10: case 9:ans='A';break; case 8:ans='B';break; case 7:ans='C';break; case 6:ans='D';break; default:ans='E'; } return ans; }
截图
1:功能为将对应分数转化为等级,形式参数类型为整型,返回值类型为字符型。
2:有问题,当输入一个数时,会一次打印ABCDE四个等级。
任务2:
代码
#include<stdio.h> int sum_digits(int n); int main() { int n; int ans; while (printf("Enter n:"),scanf("%d",&n)!=EOF){ ans=sum_digits(n); printf("n=%d,ans=%d\n\n",n,ans); } return 0; } int sum_digits(int n){ int ans=0; while(n!=0){ ans+=n%10; n/=10; } return ans; }
截图
1:功能为计算n每一位数的和
2:不行,新算法只能计算个位数和十位数字之和,对于三位及三位以上的数字无法计算。
任务3:
代码
1 #include<stdio.h> 2 int power(int x,int n); 3 int main() 4 { 5 int x,n; 6 int ans; 7 while (printf("Enter x and n:"),scanf("%d%d",&x,&n)!=EOF){ 8 ans=power(x,n); 9 printf("n=%d,ans=%d\n\n",n,ans); 10 } 11 return 0; 12 } 13 int power(int x,int n){ 14 int t; 15 if(n==0) 16 return 1; 17 else if(n%2) 18 return x*power(x,n-1); 19 else 20 { 21 t=power(x,n/2); 22 return t*t; 23 } 24 }
截图
1:计算x的n次方
2:是递归函数
数学模型如下图
任务4:
代码
1 #include<stdio.h> 2 #include<math.h> 3 4 int is_prime(int n){ 5 int i,m; 6 m=sqrt(n); 7 for(i=2;i<=m;i++) 8 { 9 if(n%i==0) 10 break; 11 } 12 if(i>m) 13 return 1; 14 else 15 return 0; 16 } 17 18 19 int main(){ 20 int i,n,sum=0; 21 printf("100以内的孪生素数:\n"); 22 for (i=2;i<=100;i++) 23 { 24 if(is_prime(i)&&is_prime(i+2)) 25 { 26 printf("%d %d\n",i,i+2); 27 sum++; 28 } } 29 printf("100以内的孪生素数共有%d个",sum); 30 return 0; 31 }
截图
任务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 6 int sum=0; 7 int main(){ 8 unsigned int n; 9 10 while(scanf("%u",&n)!=EOF) 11 { sum=0; 12 hanoi(n,'A','B','C'); 13 printf("一共移动了%d次\n",sum); 14 } 15 16 system("pause"); 17 return 0; 18 } 19 20 void hanoi(unsigned int n,char from,char temp,char to) 21 { 22 if(n==1) 23 { 24 moveplate(n,from,to); 25 sum++; 26 } 27 else 28 { 29 hanoi(n-1,from,to,temp); 30 moveplate(n,from,to); 31 sum++; 32 hanoi(n-1,temp,from,to); 33 34 } 35 } 36 37 void moveplate(unsigned int n,char from,char to) 38 { 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 8 while(scanf("%d%d", &n, &m) != EOF) { 9 ans = func(n, m); // 函数调用 10 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 11 } 12 13 return 0; 14 } 15 16 int func(int n,int m) 17 { if (m == 0 || n == m) 18 19 return 1; 20 21 else if (n < m) 22 23 return 0; 24 25 else 26 27 return func(n-1,m)+func(n-1,m-1); 28 }
迭代
1 #include <stdio.h> 2 int func(int n, int m); // 函数声明 3 4 int main() { 5 int n, m; 6 int ans; 7 8 while(scanf("%d%d", &n, &m) != EOF) { 9 ans = func(n, m); // 函数调用 10 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 11 } 12 13 return 0; 14 } 15 16 int func(int n,int m) 17 { 18 int i,j,up=1,down=1,ans; 19 for(i=n;i>=(m-1);i--) 20 { 21 up=up*i; 22 } 23 24 for(j=m;j>=1;j--) 25 { 26 down=down*j; 27 } 28 ans=up/down; 29 return ans; 30 }
截图(两次结果相同)
任务7(注:函数非原创,实在想不到)
代码
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 void print_charman(int n); 5 int main() { 6 int n; 7 8 printf("Enter n: "); 9 scanf("%d", &n); 10 print_charman(n); // 函数调用 11 12 return 0; 13 } 14 15 // 函数print_charman定义 16 // 待补足 17 // xxx 18 void print_charman(int n) 19 { 20 int i,j,k; 21 for(i=n;i>=1;i--){ 22 for(k=i;k<n;k++) 23 { 24 printf("\t"); 25 } 26 for(j=1;j<=2*i-1;j++) 27 { 28 printf(" o\t"); 29 } 30 printf("\n"); 31 32 33 for(k=i;k<n;k++) 34 { 35 printf("\t"); 36 } 37 for(j=1;j<=2*i-1;j++) 38 { 39 printf("<H>\t"); 40 } 41 printf("\n"); 42 43 44 45 for(k=i;k<n;k++) 46 { 47 printf("\t"); 48 } 49 for(j=1;j<=2*i-1;j++) 50 { 51 printf("I I\t"); 52 } 53 printf("\n"); 54 55 } 56 }
截图