任务一
验证性实验
源码
#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;
}
结果
回答
- 功能是数值分数与等级转换,形参类型
int
,返回值类型char
。 - 有问题,此时输入一个成绩,会输出其下所有的等级。
任务二
源码
#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;
}
结果
回答
- 功能是将输入的数字每一位相加。
- 可以实现,运用了递归的算法思想,迭代自上而下,递归自下而上。
任务三
源码
#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;
}
}
结果
回答
- 实现了输入x的y次方操作。
- 是递归函数,有点像二分,先算偶数幂,最后乘以落单的最后一个x。
关于MarkDownLaTeX语法
任务四
打印100以内的孪生素数
源码
#include <stdio.h>
int isprime(int n)
{
if (n < 2)
return 0;
for (int i = 2; i <= n / 2; i++)
{
if (n % i == 0)
return 0;
}
return 1;
}
int main()
{
int cnt = 0;
for (int i = 1; i < 101; i += 2)
{
if (isprime(i)&&isprime(i + 2))
{
printf("%d %d\n", i, i + 2);
cnt++;
}
}
printf("Total count: %d\n", cnt);
return 0;
}
结果
任务五
对教材「例4.9 Hanoi塔问题」稍做改写
源码
法一
法二