实验3
实验任务1
1 #include <stdio.h> 2 3 char score_to_grade(int score); 4 5 int main() 6 { 7 int score; 8 char grade; 9 10 while(scanf("%d", &score) != EOF) 11 { 12 grade = score_to_grade(score); 13 printf("分数: %d, 等级: %c\n\n", score, grade); 14 } 15 16 return 0; 17 } 18 19 char score_to_grade(int score) 20 { 21 char ans; 22 23 switch(score/10) 24 { 25 case 10: 26 case 9: ans = 'A'; break; 27 case 8: ans = 'B'; break; 28 case 7: ans = 'C'; break; 29 case 6: ans = 'D'; break; 30 default: ans = 'E'; 31 } 32 33 return ans; 34 }

问题1:该函数可以将输入的整数转换为相应的字母等级。形参类型为int,整数类型。返回值类型为char,字符类型。
问题2: switch语句中,当case后没有break时会发生穿透,该函数中,ans值被赋值后不会跳出switch,而是继续按顺序往下依次赋值,导致无法得到正确的等级。
实验任务2
1 #include <stdio.h> 2 3 int sum_digits(int n); 4 5 int main() 6 { 7 int n; 8 int ans; 9 10 while(printf("Enter n: "), scanf("%d", &n) != EOF) 11 { 12 ans = sum_digits(n); 13 printf("n = %d, ans = %d\n\n", n, ans); 14 } 15 16 return 0; 17 } 18 19 20 int sum_digits(int n) 21 { 22 int ans = 0; 23 24 while(n != 0) 25 { 26 ans += n % 10; 27 n /= 10; 28 } 29 30 return ans; 31 }

问题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 return 0; 15 } 16 17 18 int power(int x, int n) { 19 int t; 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:函数power用于计算底数为x,指数为n的冥次方
问题2:是,

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

实验任务5
迭代
1 #include <stdio.h> 2 int func(int n, int m); 3 4 // 函数声明 5 6 int main() { 7 int n, m; 8 int ans; 9 10 while(scanf("%d%d", &n, &m) != EOF) { 11 ans = func(n, m); // 函数调用 12 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 13 } 14 15 return 0; 16 } 17 18 int func(int n, int m) 19 { 20 if(n<m) 21 return 0; 22 if(m==0||m==n) 23 return 1; 24 int a,b,c; 25 a=1; 26 b=1; 27 c=1; 28 int i,t,q; 29 for(i=1;i<=n;++i) 30 { 31 a*=i; 32 } 33 for(t=1;t<=m;++t) 34 { 35 b*=t; 36 } 37 for(q=1;q<=n-m;++q) 38 { 39 c*=q; 40 } 41 return (a/(b*c)); 42 }

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

实验任务6
1 #include <stdio.h> 2 3 int gcd(int a,int b,int 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 17 18 int gcd(int a,int b,int c) 19 { 20 int i,t; 21 if(a<=b) 22 { 23 i=a; 24 if(i>=c) 25 i=c; 26 } 27 else 28 { 29 i=b; 30 if(b>=c) 31 i=c; 32 } 33 for(t=i;t>=1;--t) 34 { 35 36 if(a%t==0&&b%t==0&&c%t==0) 37 return t; 38 } 39 40 }

实验任务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 return 0; 14 } 15 16 void print_charman(int n) 17 { 18 int z,q,i,t; 19 i=2*n-1; 20 z=0; 21 for(q=i;q>=1;q-=2) 22 { 23 ++z; 24 int m; 25 for(m=1;m<z;++m) 26 { 27 printf("\t"); 28 29 } 30 for(t=1;t<=q;++t) 31 { 32 printf(" 0\t"); 33 } 34 printf("\n"); 35 for(m=1;m<z;++m) 36 { 37 printf("\t"); 38 39 } 40 for(t=1;t<=q;++t) 41 { 42 printf("<H>\t"); 43 } 44 printf("\n"); 45 for(m=1;m<z;++m) 46 { 47 printf("\t"); 48 49 } 50 for(t=1;t<=q;++t) 51 { 52 printf("I I\t"); 53 } 54 printf("\n"); 55 56 } 57 }



浙公网安备 33010602011771号