实验3
task1
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 return 0; 11 } 12 char score_to_grade(int score){ 13 char ans; 14 switch(score/10){ 15 case 10: 16 case 9:ans='A';break; 17 case 8:ans='B';break; 18 case 7:ans='C';break; 19 case 6:ans='D';break; 20 default:ans='E'; 21 } 22 return ans; 23 }
A1:将学生分数转化成对应等级;int;char
A2:没有break 导致逻辑错误
task2
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,n,ans); 9 } 10 return 0; 11 } 12 int sum_digits(int n){ 13 int ans=0; 14 while(n!=0){ 15 ans+=n%10; 16 n/=10; 17 } 18 return ans; 19 }
A1:计算输入数字各个位数字之和
A2:能,第一种是迭代法 ,第二种是递归法
task3
1 #include <stdio.h> 2 int power(int x,int n); 3 int main(){ 4 int x,n; 5 int ans; 6 while(printf("Enter x and 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 }
A1:计算x的n次方
A2:

task4
1 #include <stdio.h> 2 int is_prime(int n) { 3 if (n < 2) { 4 return 0; 5 } 6 for (int i = 2; i * i <= n; i++) { 7 if (n % i == 0) { 8 return 0; 9 } 10 } 11 return 1; 12 } 13 14 int main() { 15 int count = 0; 16 printf("100以内的孪生素数:\n"); 17 for (int n = 2; n + 2 <= 100; n++) { 18 if (is_prime(n) && is_prime(n + 2)) { 19 printf("%d %d\n", n, n + 2); 20 count++; 21 } 22 } 23 printf("100以内的孪生素数共有%d个。\n", count); 24 return 0; 25 }

task5
迭代
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 int func(int n, int m){ 16 int a=1,b=1,c,i,j; 17 for(i=n-m+1;i<=n;i++){ 18 a*=i; 19 } 20 for(j=1;j<=m;j++){ 21 b*=j; 22 } 23 c=a/b; 24 return c; 25 26 }
递归
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 int func(int n, int m){ 16 if(n==m||m==0){ 17 return 1; 18 } 19 else{ 20 return func(n-1,m)*func(n-1,m-1); 21 } 22 }
task6
1 #include <stdio.h> 2 3 int gcd(a,b,c); 4 5 int main() { 6 int a, b, c; 7 int ans; 8 9 while(scanf("%d%d%d", &a, &b, &c) != EOF) { 10 ans = gcd(a, b, c); 11 printf("最大公约数: %d\n\n", ans); 12 } 13 14 return 0; 15 } 16 int gcd(a,b,c){ 17 int m; 18 m=(a<b?a:b)<c?(a<b?a:b):c; 19 if(a%m==0&&b%m==0&&c%m==0){ 20 return m; 21 } 22 else{ 23 int i; 24 for(i=m;i>0;i--){ 25 if(a%i==0&&b%i==0&&c%i==0){ 26 return i; 27 } 28 } 29 } 30 31 32 }

task7
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 void print_charman(int n){ 15 int i,m,row,j; 16 for(i=0;i<n;i++){ 17 18 for(row=0;row<3;row++){ 19 for(m=0;m<i;m++){ 20 printf(" \t"); 21 } 22 for(j=0;j<2*n-1-i*2;j++){ 23 24 switch(row){ 25 case 0:printf(" o\t");continue; 26 case 1:printf("<H>\t");continue; 27 case 2:printf("I I\t");continue; 28 } 29 printf("\n"); 30 } 31 printf("\n"); 32 } 33 } 34 }
浙公网安备 33010602011771号