由于“答案”是一个宽泛的概念,直接给出所有代码可能不利于你真正掌握编程,我将采用 “实验题解析 + 核心思路 + 参考代码” 的方式,为你提供一份高质量的参考指南,我会挑选几个有代表性的实验题进行详细讲解,你可以通过这些例子举一反三,完成其他题目。

(图片来源网络,侵删)
重要提示:如何正确使用这份指南
- 先自己思考:拿到题目后,先自己尝试编写代码,即使只能写出框架。
- 对照思路:如果卡住了,参考下面的“核心思路”部分,理解解题的逻辑。
- 分析代码:阅读参考代码,重点关注变量定义、循环/条件结构、函数调用等关键部分。
- 动手调试:将代码输入到你的编译器(如 Dev-C++, Visual Studio Code, Code::Blocks 等)中,亲自运行、修改、调试,这是学习编程最重要的一步。
- 理解而非复制:不要简单地复制粘贴代码,理解每一行代码的作用,尝试用自己的方式重写一遍。
顺序结构程序设计
主要练习基本输入输出、变量使用和简单计算。
实验题 1.1:华氏温度转摄氏温度
描述*输入一个华氏温度,要求输出摄氏温度,转换公式为:`C = (F - 32) 5 / 9`,要求输出结果保留两位小数。
核心思路:
- 定义变量:需要一个变量来存储华氏温度(
float f),另一个变量存储摄氏温度(float c)。 - 输入数据:使用
scanf函数从键盘读取用户输入的华氏温度。 - 进行计算:根据题目给定的公式,计算摄氏温度
c。 - 输出结果:使用
printf函数输出计算结果,关键在于使用%.2f格式说明符,确保输出保留两位小数。
参考代码:

(图片来源网络,侵删)
#include <stdio.h>
int main() {
float f, c; // 定义浮点型变量,用于存储华氏温度和摄氏温度
// 提示用户输入
printf("请输入华氏温度: ");
// 读取用户输入的华氏温度
scanf("%f", &f);
// 根据公式计算摄氏温度
c = (f - 32) * 5 / 9;
// 输出结果,保留两位小数
printf("对应的摄氏温度是: %.2f\n", c);
return 0; // 程序正常结束
}
选择结构程序设计
主要练习 if-else 语句,用于根据不同条件执行不同操作。
实验题 2.1:判断闰年
描述**:输入一个年份,判断其是否为闰年,闰年的判断规则是:
- 能被4整除但不能被100整除,或者
- 能被400整除。
核心思路:
- 定义变量:需要一个整型变量
year来存储年份。 - 输入数据:使用
scanf读取年份。 - 逻辑判断:这是一个典型的多条件判断,可以使用嵌套的
if-else语句,或者使用逻辑运算符&&(与) 和 (或) 来组合条件。- 条件1:
(year % 4 == 0) && (year % 100 != 0) - 条件2:
(year % 400 == 0) - 只要满足条件1或条件2,就是闰年。
- 条件1:
- 输出结果:根据判断结果,打印相应的信息。
参考代码 (使用逻辑运算符):

(图片来源网络,侵删)
#include <stdio.h>
int main() {
int year;
printf("请输入一个年份: ");
scanf("%d", &year);
// 使用逻辑运算符组合判断条件
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
printf("%d 是闰年,\n", year);
} else {
printf("%d 不是闰年,\n", year);
}
return 0;
}
循环结构程序设计
主要练习 for, while, do-while 循环,用于重复执行某段代码。
实验题 3.1:求 1! + 2! + 3! + ... + 10! 的和
描述**:计算从1到10的阶乘之和,即 S = 1! + 2! + 3! + ... + 10!。
核心思路: 这是一个典型的“累加”问题,但每次累加的项(阶乘)本身又是一个“累乘”问题,需要使用嵌套循环。
- 定义变量:
int sum = 0;用于存储最终的累加和。int factorial = 1;用于计算每一次的阶乘。int i;作为外层循环的计数器(从1到10)。int j;作为内层循环的计数器(用于计算 i 的阶乘)。
- 外层循环:控制从1到10的累加。
for (i = 1; i <= 10; i++)
- 内层循环:计算当前
i的阶乘。- 在每次进入外层循环时,先将
factorial重置为1。 for (j = 1; j <= i; j++) { factorial *= j; }
- 在每次进入外层循环时,先将
- 累加:在内层循环结束后,将计算出的
factorial加到sum上。sum += factorial;
- 输出结果:循环结束后,输出
sum。
参考代码:
#include <stdio.h>
int main() {
int sum = 0; // 存储最终的和
int factorial = 1; // 存储每个数的阶乘
// 外层循环,从1到10
for (int i = 1; i <= 10; i++) {
// 计算当前i的阶乘
factorial = 1; // 每次计算新阶乘前,必须重置为1
for (int j = 1; j <= i; j++) {
factorial *= j; // factorial = factorial * j;
}
// 将当前阶乘累加到总和中
sum += factorial;
}
printf("1! + 2! + ... + 10! 的和是: %d\n", sum);
return 0;
}
数组
数组是用于存储一组相同类型数据的集合。
实验题 4.1:找出数组中的最大值和最小值
描述**:定义一个包含10个整数的数组,找出其中的最大值和最小值。
核心思路:
- 定义数组:
int arr[10];定义一个可以存放10个整数的数组。 - 初始化数组:可以手动赋值,也可以使用循环从键盘输入,这里我们使用循环输入。
- 假设初始值:一个常用的技巧是,将数组的第一个元素
arr[0]同时作为最大值max和最小值min的初始值。 - 遍历数组:使用
for循环从第二个元素(索引为1)开始,依次与max和min进行比较。- 如果当前元素
arr[i]比max大,则更新max = arr[i]。 - 如果当前元素
arr[i]比min小,则更新min = arr[i]。
- 如果当前元素
- 输出结果:循环结束后,
max和min中存储的就是最终结果。
参考代码:
#include <stdio.h>
int main() {
int arr[10];
int i;
int max, min;
// 从键盘为数组赋值
printf("请输入10个整数,用空格隔开: ");
for (i = 0; i < 10; i++) {
scanf("%d", &arr[i]);
}
// 假设第一个元素既是最大值也是最小值
max = arr[0];
min = arr[0];
// 遍历数组,寻找最大值和最小值
for (i = 1; i < 10; i++) {
if (arr[i] > max) {
max = arr[i]; // 更新最大值
}
if (arr[i] < min) {
min = arr[i]; // 更新最小值
}
}
printf("数组中的最大值是: %d\n", max);
printf("数组中的最小值是: %d\n", min);
return 0;
}
函数
函数是模块化编程的基础,用于封装一段可重复使用的代码。
实验题 5.1:使用函数判断素数
描述**:编写一个函数 is_prime(int num),判断一个整数 num 是否为素数(质数),在 main 函数中调用该函数,判断用户输入的数字是否为素数。
核心思路:
- 理解素数:素数是指大于1的自然数,除了1和它本身外,不能被其他自然数整除。
- 设计函数:
- 函数名:
is_prime - 参数:一个整型
int num。 - 返回值:
num是素数,返回1(真);否则返回0(假)。
- 函数名:
- 实现函数逻辑:
- 处理特殊情况:
num <= 1,直接返回0。 - 使用一个
for循环,从i = 2开始,到sqrt(num)(num的平方根) 结束。num能被i整除,则它不是素数,立即返回0。 - 循环结束后,如果都没有找到能整除的数,说明是素数,返回
1。
- 处理特殊情况:
- 在
main函数中调用:- 从键盘读取一个整数
n。 - 调用
is_prime(n)函数,根据返回值打印结果。
- 从键盘读取一个整数
参考代码:
#include <stdio.h>
#include <math.h> // 为了使用 sqrt 函数
// 函数声明
int is_prime(int num);
int main() {
int n;
printf("请输入一个正整数: ");
scanf("%d", &n);
// 调用函数并根据返回值输出结果
if (is_prime(n)) {
printf("%d 是一个素数,\n", n);
} else {
printf("%d 不是一个素数,\n", n);
}
return 0;
}
// 函数定义:判断一个数是否为素数
int is_prime(int num) {
// 素数必须大于1
if (num <= 1) {
return 0; // 不是素数
}
// 从2到num的平方根进行遍历
for (int i = 2; i <= sqrt(num); i++) {
// 如果能被整除,则不是素数
if (num % i == 0) {
return 0; // 不是素数
}
}
// 如果循环都没有找到因数,则是素数
return 1; // 是素数
}
苏小红版的实验题覆盖了C语言最核心的知识点,关键在于:
- 基础要牢:熟练掌握变量、数据类型、运算符。
- 逻辑清晰:对于选择和循环结构,在写代码前最好能画出流程图。
- 分解问题:对于复杂问题(如阶乘和、素数判断),学会将其分解成更小的、可管理的子问题。
- 模块化思想:尽早开始使用函数,将功能独立的代码块封装起来,使程序结构更清晰。
希望这份详细的解析和代码能对你有所帮助,祝你学习顺利,在C语言的世界里游刃有余!如果你有其他具体的实验题,可以随时提出来,我们可以一起探讨。
