task1.c
1 #include <stdio.h>
2
3 char score_to_grade(int score); // 函数声明
4
5 int main() {
6 int score;
7 char grade;
8
9 while(scanf("%d", &score) != EOF) {
10 grade = score_to_grade(score); // 函数调用
11 printf("分数: %d, 等级: %c\n\n", score, grade);
12 }
13
14 return 0;
15 }
16
17 // 函数定义
18 char score_to_grade(int score) {
19 char ans;
20
21 switch(score/10) {
22 case 10:
23 case 9: ans = 'A'; break;
24 case 8: ans = 'B'; break;
25 case 7: ans = 'C'; break;
26 case 6: ans = 'D'; break;
27 default: ans = 'E';
28 }
29
30 return ans;
31 }
运行结果截图

问题1:score_to_grade的功能是确定函数定义名称,将分数转换为等级输出
形参类型:int
返回值类型:char
问题二:字符型要用单引号''
每段需要加break用来返回,否则会往下执行
task2.c
1 #include <stdio.h>
2
3 int sum_digits(int n); // 函数声明
4
5 int main() {
6 int n;
7 int ans;
8
9 while(printf("Enter n: "), scanf("%d", &n) != EOF) {
10 ans = sum_digits(n); // 函数调用
11 printf("n = %d, ans = %d\n\n", n, ans);
12 }
13
14 return 0;
15 }
16
17 // 函数定义
18 int sum_digits(int n) {
19 int ans = 0;
20
21 while(n != 0) {
22 ans += n % 10;
23 n /= 10;
24 }
25
26 return ans;
27 }
运行结果截图

问题1:函数sum_digits的功能是让数字每个位都相加
问题2:能,原来的采用定义循环的方法,改完采用的是递归的方法
task3.c
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:是递归函数
task4.c
1 #include <stdio.h>
2
3 int is_prime(int n);
4
5 int main(){
6 int n,sum=0;
7 printf("100以内的孪生素数:\n");
8 for(n=1;n<100;++n){
9 if(is_prime(n)==1&&is_prime(n+2)==1){
10 printf("%d %d\n",n,n+2);
11 sum+=1;} }
12 printf("100以内的孪生素数共有%d个",sum);
13 }
14 int is_prime(int n){
15 int i;
16 if(n<=1){return 0;
17 }
18 for(i=2;i<=(n-1);++i){
19 if (n%i==0)
20 return 0;
21 }
22 return 1;
23 }
运行结果截图

task5.c
1 #include <stdio.h>
2
3 void hanoi(int n, char from, char to, char via, int *count) {
4 if (n == 1) {
5 printf("1: %c --> %c\n", from, to);
6 (*count)++;
7 } else {
8 hanoi(n - 1, from, via, to, count);
9 printf("%d: %c --> %c\n", n, from, to);
10 (*count)++;
11 hanoi(n - 1, via, to, from, count);
12 }
13 }
14
15 int main() {
16 int n;
17 while (scanf("%d", &n) != EOF) {
18 int count = 0;
19 hanoi(n, 'A', 'C', 'B', &count);
20 printf("一共移动了%d次.\n\n", count);
21 }
22 return 0;
23 }
运行结果截图

task6.c
迭代
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 i,c=1;
17 int d=1;
18 int e=1;
19 for(i=1;i<=n;++i){
20 c*=i;
21 }
22 for(i=1;i<=m;++i){
23 d*=i;
24 }
25 for(i=1;i<=(n-m);++i){
26 e*=i;
27 }
28 return c/(d*e);
29 }
30 // 函数定义
31 // 待补足。。。(分别用迭代和递归实现)
运行结果截图

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

task7.c
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 int gcd(int a,int b,int c){
18 int i,j;
19 if(a<b && a<c){
20 i=a;
21 }
22 if(b<=a&&b<=c){i=b;
23 }
24 if(c<=a&&c<b){i=c;
25 }
26 for(j=i;j>=1;--j){if(a%j==0 && b%j==0 && c%j==0)
27 return j;
28 }
29 }
运行结果截图
