任务一
运行代码
#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;
}
运行截图
![屏幕截图 2026-11-13 140855]()
回答问题
1.功能:接收一个整数分数,把分数转换成对应的等级字符(A/B/C/D/E
形参类型:int(int score)
返回值类型:char
2.引号错误,类型不匹配;缺少 break 语句,case 穿透
任务二
运行代码
#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;
}
运行截图
![屏幕截图 2026-11-13 142023]()
回答问题
1.函数 sum_digits 的功能:计算一个整数 n 的各位数字之和
2.可以实现同样输出
区别小结:
迭代:循环,重复执行,靠循环变量推进;
递归:函数自己调用自己,把大问题拆成更小的子问题
任务三
运行代码
#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;
}
}
运行截图
![屏幕截图 2026-11-13 142827]()
回答问题
1.power 函数功能:用快速幂递归算法,计算整数 x 的 n 次幂(n≥0)
2.是递归函数
3.① 逻辑正确,因为数学等价,最终结果一致
② 性能变差。原代码只计算一次 power(x,n/2),复用结果,无重复子问题;修改后左右两边都单独调用,同一个子问题重复计算
![微信图片_20261113144227_8_2]()
任务四
运行代码
#include <stdio.h>
int classify_triangle(int a, int b, int c){
if(a + b > c && a + c > b && b + c > a){
if(a * a + b * b == c * c || a * a + c * c == b * b || b * b + c * c == a * a)
return 4;
else if(a == b && b == c)
return 3;
else if(a == b || b == c || a == c)
return 2;
else
return 1;
}
else
return 0;
}
int main()
{
int a, b, c;
for(; scanf("%d%d%d", &a, &b, &c) != EOF;){
int n = classify_triangle(a, b, c);
switch(n){
case 0: printf("不能构成三角形\n"); break;
case 1: printf("普通三角形\n"); break;
case 2: printf("等腰三角形\n"); break;
case 3: printf("等边三角形\n"); break;
case 4: printf("直角三角形\n"); break;
default: return 0;
}
}
return 0;
}
运行截图
![屏幕截图 2026-11-13 205451]()
任务五
迭代运行代码
#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(m < 0 || m > n)
return 0;
if(m == 0 || m == n)
return 1;
if(m > n - m)
m = n - m;
int res = 1;
int i;
for( i = 1; i <= m; i++)
{
res = res * (n - m + i) / i;
}
return res;
}
迭代运行截图
![屏幕截图 2026-11-13 194320]()
递归运行代码
#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(m < 0 || m > n)
return 0;
if(m == 0 || m == n)
return 1;
return func(n - 1, m) + func(n - 1, m - 1);
}
递归运行截图
![屏幕截图 2026-11-13 195041]()
任务六
运行代码
#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;
int min;
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;
}
return 1;
}
运行截图
![屏幕截图 2026-11-13 203144]()
任务七
运行代码
#include <stdio.h>
#include <stdlib.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, k;
for(i = 0; i < n; i++)
{
int cnt = 2*(n - i) - 1;
for(k = 0; k < i; k++)
printf("\t");
for(j = 0; j < cnt; j++)
printf(" 0\t");
printf("\n");
for(k = 0; k < i; k++)
printf("\t");
for(j = 0; j < cnt; j++)
printf("<H>\t");
printf("\n");
for(k = 0; k < i; k++)
printf("\t");
for(j = 0; j < cnt; j++)
printf("I I\t");
printf("\n");
}
}
运行截图
![屏幕截图 2026-11-13 220536]()
![屏幕截图 2026-11-13 220548]()