这个练习来自经典的C语言学习资源"菜鸟教程C经典100例"系列,作为第12个练习项目,它处于初学者从基础语法向实际应用过渡的关键阶段。这类练习通常设计为既能巩固基础语法,又能培养解决实际问题的编程思维。
我在大学计算机专业任教期间,发现很多学生在完成前11个基础练习后,往往会在第10-20例这个区间遇到第一个明显的理解瓶颈。这个阶段的练习开始引入更复杂的逻辑结构和算法思想,而练习12正好处在这个承上启下的关键位置。
虽然具体题目描述未提供,但根据"菜鸟教程C经典100例"系列的结构特点,练习12通常涉及以下某一类问题:
以最常见的"判断素数"为例,题目要求可能是:
"编写程序,输入一个正整数,判断它是否为素数(质数),并输出结果。"
无论具体是哪个题目,练习12通常重点考察:
以素数判断为例,最直观的实现是试除法:
c复制#include <stdio.h>
#include <math.h>
int isPrime(int num) {
if (num <= 1) return 0;
if (num == 2) return 1;
if (num % 2 == 0) return 0;
for (int i = 3; i <= sqrt(num); i += 2) {
if (num % i == 0) {
return 0;
}
}
return 1;
}
优化点说明:
c复制#include <stdio.h>
#include <math.h>
int isPrime(int num);
int main() {
int number;
printf("请输入一个正整数: ");
scanf("%d", &number);
if (isPrime(number)) {
printf("%d 是素数\n", number);
} else {
printf("%d 不是素数\n", number);
}
return 0;
}
int isPrime(int num) {
// 函数实现同上
}
素数的定义是只能被1和它本身整除的自然数。试除法是最直接的判断方法,但需要注意:
c复制// 错误示例1:遗漏边界条件
int isPrime(int num) {
for (int i = 2; i < num; i++) {
if (num % i == 0) return 0;
}
return 1; // 错误:当num=1时会错误返回1
}
// 错误示例2:性能问题
int isPrime(int num) {
for (int i = 2; i <= num/2; i++) { // 检查范围过大
if (num % i == 0) return 0;
}
return 1;
}
提示:在实际工程中,素数判断通常不需要自己实现,可以使用成熟的数学库如GMP。但理解底层实现原理对培养编程思维非常重要。
完成这个练习后,建议继续:
我在教学中发现,学生在这个阶段最容易犯的错误是过度关注代码能否运行,而忽视了代码质量和算法效率。建议养成从多个角度思考问题的习惯:先确保正确性,再考虑优化,最后关注代码可读性和可维护性。