实验3
task 1运行代码
task1运行代码task 1运行截图

问题1:score_to_grade的功能是定义函数,从而达成可以将分数定为等级;形参类型为int类型即整数形,返回值类型为char类型即字符型。
问题2:1.会导致程序switch语句前面步骤均失效,仅能发生default语句的情况,导致任何分数都被定级为‘E',从而评估出错。
2.字符定义给ans时应该使用单引号,而非双引号。
task 2.1 运行代码
#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; }
task 2.1 运行截图

task 2.2 运行代码
task2.2运行代码task 2.2 运行截图

问题1:sum_digits的功能是将数值各项相加从而获得总和。
问题2:可以实现同样的输出。第一种方法使用了迭代方法,是通过循环不断获得各项数值,从而相加获得结果;第二种则是通过递归方法,不断获得最后一位的数值,再不断相加以获得最终结果。
task 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; } }
task 3 运行截图

问题1:power的功能是计算a的n次幂。
问题2:是递归函数

task 4 运行代码
#include <stdio.h> #include <math.h> int is_prime(int n){ if(n<=1){ return 0; } if(n==2){ return 1; } if(n%2==0){ return 0; } for(int i=3;i*i<=n;i+=2){ if(n%i==0){ return 0; } } return 1; } int main(){ int cnt=0; printf("100以内的孪生素数:\n"); for(int n=2;n<=98;n++){ if(is_prime(n)&&is_prime(n+2)){ printf("%d %d\n",n,n+2); cnt++; } } printf("100以内的孪生素数共有%d个。\n",cnt); return 0; }
task 4 运行截图

task 5 运行代码
#include <stdio.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){ int numerator=1,denominator_1=1,denominator_2=1; int x,y,z; int ans=1; for(x=1;x<=n;++x){ numerator*=x; } for(y=1;y<=m;++y){ denominator_1*=y; } for(z=1;z<=(n-m);++z){ denominator_2*=z; } ans=numerator/(denominator_1*denominator_2); return ans; }
#include <stdio.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(n<m){ return 0; } else if(m==0||m==n) { return 1; } else return func(n-1,m)+func(n-1,m-1); }
运行截图


task 6 运行代码
#include <stdio.h> int gcd(int a,int b,int c); 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 a,int b,int c){ int n; n=a; if(n>b){ n=b; } if(n>c){ n=c; } int i; for(i=n;i>=1;--i){ if(a%i==0&&b%i==0&&c%i==0){ return i; } } }
task6运行截图

task 7 运行代码
#include <stdio.h> #include <stdlib.h> void print_charman(int n); int main() { int n; printf("input n: "); scanf("%d", &n); print_charman(n); return 0; } void print_charman(int n) { int i,j; for(i=1;i<=n;++i){ int x=2*(n-i+1)-1; for(j=0;j<i;++j){ printf("\t"); } for(j=0;j<x;++j){ printf(" O\t"); } printf("\n"); for(j=0;j<i;++j){ printf("\t"); } for(j=0;j<x;++j){ printf("<H>\t"); } printf("\n"); for(j=0;j<i;++j){ printf("\t"); } for(j=0;j<x;++j){ printf("I I\t"); } printf("\n"); } }
task7 运行截图


浙公网安备 33010602011771号