实验任务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:
函数score_to_grade的功能是根据成绩判断等级,90分及以上是A,80分及以上是B,70分及以上是C,60分及以上是D,60分以下是E;
形参类型是整型,返回值类型是字符型。
问题2:
1)ans赋值类型应该是字符型(单引号),而不是字符串型(双引号);
2)case分支缺少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; }

问题1:
函数sum_digits的功能是把n中的每一位数加起来;
问题2:
能实现同样的输出,第一种实现方式的算法思维是迭代思维,第二种实现方式的算法思维是递归思维。
实验任务3:
#define _CRT_SECURE_NO_WARNINGS #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; } }

问题1:
函数power的功能是计算 x 的 n 次幂,当n = 0时,直接返回 1;当 n 为奇数时,通过递归先计算 x 的n - 1次幂,然后再乘以 x;
当 n 为偶数时,通过递归计算 x 的n/2次幂,然后将结果平方。
问题2:

实验任务4:
#include<stdio.h> int is_prime(int n); int main() { int n,count=0; printf("100以内的孪生素数:\n"); for (n = 2; n <= 98; ++n) { if (is_prime(n) && is_prime(n + 2)) { printf("%d %d\n", n, n + 2); count++; } } printf("100以内的孪生素数共有%d个", count); return 0; } int is_prime(int n) { if (n < 2) return 0; for (int i = 2; i< n; i++) { if (n % i == 0) return 0; } return 1; }

实验任务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 i,j; int up = 1; int down = 1; if (n < m) return 0; for (i = n; i >= n - m + 1; i--) { up *= i; } for (j = m; j >= 1; j--) { down *= j; } return up / down; }

递归
#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 ans; if (n < m) return 0; if (m==0) return 1; ans = func(n - 1, m) + func(n - 1, m - 1); return ans; }

实验任务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 i,min = a; if (b < min) min = b; if (c < min) min = c; for (i = min; i >= 1; i--) { if (a % i == 0 && b % i == 0 && c % i == 0) return i; } }

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


浙公网安备 33010602011771号