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

问题一:将正数转化为等级;int; char
问题二:缺少break,结果都相同,为E
任务二
1 #include <stdio.h> 2 int sum_digits(int n); // 函数声明 3 int main() { 4 int n; 5 int ans; 6 while(printf("Enter n: "), scanf("%d", &n) != EOF) { 7 ans = sum_digits(n); // 函数调用 8 printf("n = %d, ans = %d\n\n", n, ans); 9 } 10 return 0; 11 } 12 // 函数定义 13 int sum_digits(int n) { 14 int ans = 0; 15 while(n != 0) { 16 ans += n % 10; 17 n /= 10; 18 } 19 return ans; 20 }

问题一:计算输入整数的各位数之和
问题二:可以;前面是循环迭代,后面是用递归调用求和
任务三
1 #include <stdio.h> 2 int power(int x, int n); // 函数声明 3 int main() { 4 int x, n; 5 int ans; 6 while(printf("Enter x and n: "), scanf("%d%d", &x, &n) != EOF) { 7 ans = power(x, n); // 函数调用 8 printf("n = %d, ans = %d\n\n", n, ans); 9 } 10 11 return 0; 12 } 13 // 函数定义 14 int power(int x, int n) { 15 int t; 16 if(n == 0) 17 return 1; 18 else if(n % 2) 19 return x * power(x, n-1); 20 else { 21 t = power(x, n/2); 22 return t*t; 23 } 24 }

问题一:计算x的n次方
问题二:power(x,n)= 1 , n=0
x*power(x,n-1) ,n为奇
power(x,n/2)^2 ,n为偶
任务四:
源代码:
task4
任务五
5.1迭代
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 4 int func(int n, int m); 5 int main() { 6 int n, m; 7 int ans; 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 return 0; 13 } 14 15 int func(int n, int m) { 16 if (m < 0 || m > n) return 0; 17 if (m == 0 || m == n) return 1; 18 if (m > n - m) m = n - m; 19 int g= 1; 20 int i; 21 for (i = 1; i <= m; i++) { 22 g = g * (n - m + i) / i; 23 } 24 return g; 25 }
5.2递归
1 #include <stdio.h> 2 3 int func(int n, int m); 4 5 int main() { 6 int n, m; 7 int ans; 8 9 while (scanf("%d%d", &n, &m) != EOF) { 10 ans = func(n, m); 11 printf("n = %d, m = %d, ans = %d\n", n, m, ans); 12 } 13 14 return 0; 15 } 16 17 int func(int n, int m) { 18 if (m < 0 || m > n) return 0; 19 if (m == 0 || m == n) return 1; 20 return func(n - 1, m) + func(n - 1, m - 1); 21 }

任务六
1 #include<stdio.h> 2 int gcd(int a, int b, int c); 3 int main() { 4 int a, b, c; 5 int ans; 6 while (scanf("%d%d%d", &a, &b, &c) != EOF) { 7 ans = gcd(a, b, c); 8 printf("最大公约数:%d\n\n", ans); 9 } 10 return 0; 11 } 12 int gcd(int a, int b, int c) { 13 int i; 14 for (i = a; i >= 1; i--) { 15 if (a % i == 0 && b % i == 0 && c % i == 0) 16 return i; 17 } 18 }

任务七
1 #include<stdio.h> 2 void printf_charman(int n); 3 int main() { 4 int n; 5 printf("Enter n: "); 6 scanf("%d", &n); 7 printf_charman(n); 8 return 0; 9 } 10 void printf_charman(int n) { 11 int i,j,k; 12 k = 0; 13 for(i=1;i<=3*n;i++){ 14 for (j = 1.0; j <=2 * n - 1; j++) { 15 if (j > (k/3) && j < 2 * n - (k/3)) { 16 switch (i % 3) { 17 case 1:printf(" O \t"); break; 18 case 2:printf("<H>\t"); break; 19 case 0:printf("I I\t"); 20 } 21 } 22 else 23 printf(" \t"); 24 } 25 k += 1; 26 printf("\n"); 27 } 28 }



浙公网安备 33010602011771号