实验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; }
代码运行结果:

实验问题回答:
①:功能:将分数划分为不同等级的字母
形参类型:整数型
返回值类型:字符型
②:

问题在于:无论输入什么数字,输出的等级都是“E”,
当输出为“A”时,没有“break”代码不会停止,而是继续执行,ans最终被赋值于“E”
实验任务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; }
代码运行结果:

实验问题回答:
①:将n中每一位的数字相加
②:能同样输出

原实验中代码使用迭代的想法,使用while()函数,不断更新ans和n的值,直到n不等于0
问题中代码使用递归的思想,在自定义函数体内再调用该函数,直到n小于10,n无法再与10取余数为止
实验任务3:
源代码:
#include <stdio.h> int power(int x, int n); int main (){ int x,n; int ans; while (printf("Enter x and n:"),scanf("%d%d",&x,&n)!=EOF){ ans = power(x,n); printf("n = %d,ans = %d\n\n",n,ans); } return 0; } int power(int x,int n){ int t; if(n == 0) return 1; else if(n % 2) return x*power(x,n-1); else{ t = power(x,n/2); return t*t; } }
代码运行结果:

实验问题回答:
①:pow()函数的作用是求x的n次方
②:是递归函数

实验任务4:
源代码:
#include <stdio.h> #include <math.h> #include <stdlib.h> int is_prime(int n); int main(){ int i, num = 0; printf("100以内的孪生素数:\n"); for(i = 2; i <= 98; i++) { if(is_prime(i) && is_prime(i + 2)) { printf("%d %d\n", i, i + 2); num++; } } printf("100以内的孪生素数共有%d个.", num); return 0; } int is_prime(int n) { int k; for(k = 2; k <= sqrt(1.0 * n); k++) if(n % k == 0) return 0; return 1; }
代码运行结果:

实验任务5:
源代码:
迭代:
#include <stdio.h> #include <stdlib.h> int fac(int); int func(int n,int m); int main() { int n,m; int ans; while(scanf("%d%d",&n,&m) != EOF) { ans = func(n,m); printf("n = %d,m = %d,ans = %d\n\n",n,m,ans); } return 0; } int fac(int n) { int i,p = 1,sum; for(i = 1;i <= n;i++) p = p*i; return p; } int func(int n,int m) { return fac( n )/(fac(m)*fac(n - m)); }
递归:
#include <stdio.h> #include <stdlib.h> int func(int n,int m); int main() { int n,m; int ans; while(scanf("%d%d",&n,&m) != EOF) { ans = func(n,m); printf("n = %d,m = %d,ans = %d\n\n",n,m,ans); } return 0; } int func(int n,int m) { if(m == n||m == 0) return 1; if(m > n||m < 0) return 0; return func(n-1,m) + func(n-1,m-1); }
代码运行结果:

实验任务6:
源代码:
#include <stdio.h> #include <stdlib.h> int gcd(int,int,int); int main () { int a,b,c; int ans; while(scanf("%d%d%d",&a,&b,&c) != EOF) { ans = gcd(a,b,c); printf("最大公约数:%d\n\n",ans); } return 0; } int gcd(int x,int y,int z) { int i; if (x<y&&x<z) i = x; else if (y<x&&y<z) i = y; else i = z; while (x % i !=0||y % i!= 0||z % i !=0) i--; return i; }
代码运行结果:

实验任务7:
源代码:
#include <stdio.h> #include <stdlib.h> void print_charman(int); int main() { int n; printf("Enter n: "); scanf("%d", &n); print_charman(n); return 0; } void print_charman(int n)
{ int i , j , k ; for(j = n;j > 0;j--) { for(k = 0;k < n - j;k++) printf("\t"); for(i = 0;i < j * 2 - 1;i++) printf(" O \t"); printf("\n"); for(k = 0;k < n - j;k++) printf("\t"); for(i = 0;i < j * 2 - 1;i++) printf("<H>\t"); printf("\n"); for(k = 0;k < n - j;k++) printf("\t"); for(i = 0;i < j * 2 - 1;i++) printf("I I\t"); printf("\n"); } }
代码运行结果:



浙公网安备 33010602011771号