《C语言程序设计》实验报告
| 实验名称 | C语言顺序结构程序设计 | 实验日期 | 2025年10月26日 |
|---|---|---|---|
| 学生姓名 | 张三 | 学 号 | 20250101001 |
| 班 级 | 计算机科学与技术1班 | 指导教师 | 李四 |
实验目的
- 熟悉C语言开发环境:掌握Visual Studio Code / Dev-C++ / Visual Studio等集成开发环境的基本操作,包括新建、编辑、编译、连接和运行C语言程序。
- 掌握C语言程序的基本结构:理解C语言程序由一个或多个函数构成,并且
main函数是程序执行的入口点。 - 掌握顺序结构程序的设计方法:学习编写只包含表达式语句、函数调用语句的简单程序,理解程序的执行流程是从上到下、依次执行的。
- 掌握基本数据类型与运算符:熟练使用
int,float,double,char等基本数据类型,以及算术运算符(, , , , )、赋值运算符()和复合赋值运算符(,-=等)。 - 掌握标准输入/输出函数的使用:熟练使用
printf()函数进行格式化输出,使用scanf()函数进行格式化输入。 - 掌握格式化输入/输出中的格式控制符:能够正确使用
%d,%f,%lf,%c,%s等格式控制符,并理解其与数据类型的对应关系。
实验环境
- 硬件环境:Intel Core i5-10400F CPU, 16GB RAM
- 软件环境:
- 操作系统:Windows 11 家庭中文版
- 集成开发环境:Visual Studio Code 1.85.1
- 编译器:MinGW-w64 (GCC 11.2.0)
- 插件:C/C++ Extension Pack by Microsoft
实验内容
本次实验主要完成以下两个顺序结构程序的设计与实现:

(图片来源网络,侵删)
-
简单的算术运算与输出
- 定义两个整型变量
a和b,并为其赋初值(a=10, b=5)。 - 计算并输出这两个变量的和、差、积、商(注意整除和浮点除的区别)以及余数。
- 要求输出格式清晰,有必要的文字说明。
- 定义两个整型变量
-
从键盘输入数据并计算
- 定义一个浮点型变量
radius(半径)和一个双精度浮点型变量height(高)。 - 使用
scanf()函数从键盘接收用户输入的半径和高。 - 计算并输出以该半径为底面半径、高为高的圆柱体的体积和表面积。
- 圆柱体体积公式:
V = π * r² * h - 圆柱体表面积公式:
S = 2 * π * r² + 2 * π * r * h - π (Pi) 的值可以使用宏定义
#define PI 3.14159来表示。 - 要求输出结果保留两位小数。
- 定义一个浮点型变量
实验原理
-
顺序结构:顺序结构是程序设计中最基本、最简单的结构,它的特点是按照代码书写的顺序,自上而下、一条一条地执行语句,在本次实验中,所有任务都只包含顺序结构,没有分支(if-else)和循环(for, while)。
-
数据类型:C语言是强类型语言,每个变量在使用前必须声明其数据类型。
(图片来源网络,侵删)int:用于存储整数,如10,-5,0。float:用于存储单精度浮点数(小数),通常占4个字节,精度较低。double:用于存储双精度浮点数,通常占8个字节,精度比float高,是浮点数运算的首选。char:用于存储单个字符,如'A','1'。
-
标准输入/输出函数:
printf():格式化输出函数,其函数原型为int printf(const char *format, ...);。format字符串中可以包含普通字符和格式说明符(如%d,%f),普通字符会原样输出,格式说明符会被后续对应参数的值替换。scanf():格式化输入函数,其函数原型为int scanf(const char *format, ...);,它从标准输入(通常是键盘)读取数据,并根据格式说明符将数据存入到指定的变量地址中。特别注意:scanf的变量参数前必须加上取地址符&。
-
算术运算符:
- , , :加、减、乘,用法与数学一致。
- 除法运算,如果两个操作数都是整数,则执行整数除法,结果会舍弃小数部分;如果至少有一个操作数是浮点数,则执行浮点数除法。
- 取模运算(求余数)。此运算符的两个操作数必须是整数。
实验步骤
- 启动开发环境:打开Visual Studio Code,安装并配置好C/C++插件及编译器。
- 创建源文件:新建一个名为
experiment1.c的C源文件。 - 编写任务一代码:
- 在文件开头包含标准输入输出头文件:
#include <stdio.h>。 - 在
main函数中,声明并初始化两个整型变量a和b。 - 使用
printf()函数,按照指定格式输出a和b的和、差、积、商、余数。
- 在文件开头包含标准输入输出头文件:
- 编译与运行任务一:保存文件,在终端使用
gcc命令编译程序(如gcc experiment1.c -o task1),然后运行生成的可执行文件(如./task1),观察输出结果是否正确。 - 编写任务二代码:
- 在
experiment1.c中继续编写,或在文件中添加新的main函数(建议新建文件task2.c)。 - 包含头文件
#include <stdio.h>。 - 使用
#define定义一个常量PI。 - 在
main函数中,声明radius(float类型)和height(double类型)。 - 使用
printf()提示用户输入,并使用scanf()读取用户输入的值到radius和height。 - 根据圆柱体体积和表面积公式,计算
volume和surface_area。 - 使用
printf(),格式化输出计算结果,并保留两位小数。
- 在
- 编译与运行任务二:保存文件,编译并运行程序,输入不同的测试数据(如
r=3.0, h=5.0),验证计算结果的正确性。
实验代码与结果
1 任务一代码
#include <stdio.h>
int main() {
// 任务一:简单的算术运算与输出
int a = 10;
int b = 5;
printf("任务一:算术运算\n");
printf("a = %d, b = %d\n", a, b);
printf("----------------------------\n");
printf("和: %d + %d = %d\n", a, b, a + b);
printf("差: %d - %d = %d\n", a, b, a - b);
printf("积: %d * %d = %d\n", a, b, a * b);
// 注意:整数除法会截断小数部分
printf("商(整数): %d / %d = %d\n", a, b, a / b);
printf("余数: %d %% %d = %d\n", a, b, a % b); // %% 用来输出一个 %
return 0;
}
2 任务一运行结果
算术运算
a = 10, b = 5
----------------------------
和: 10 + 5 = 15
差: 10 - 5 = 5
积: 10 * 5 = 50
商(整数): 10 / 5 = 2
余数: 10 % 5 = 0
3 任务二代码
#include <stdio.h>
#define PI 3.14159
int main() {
// 任务二:从键盘输入数据并计算圆柱体体积和表面积
float radius;
double height, volume, surface_area;
printf("任务二:圆柱体计算\n");
printf("请输入圆柱体的底面半径: ");
scanf("%f", &radius);
printf("请输入圆柱体的高: ");
scanf("%lf", &height);
// 计算体积和表面积
volume = PI * radius * radius * height;
surface_area = 2 * PI * radius * radius + 2 * PI * radius * height;
printf("----------------------------\n");
printf("计算结果:\n");
// %.2f 表示输出浮点数,保留两位小数
printf("圆柱体体积: %.2f\n", volume);
printf("圆柱体表面积: %.2f\n", surface_area);
return 0;
}
4 任务二运行结果示例
输入:
圆柱体计算
请输入圆柱体的底面半径: 3.0
请输入圆柱体的高: 5.0
输出:

(图片来源网络,侵删)
----------------------------
计算结果:
圆柱体体积: 141.37
圆柱体表面积: 150.80
实验总结与分析
通过本次实验,我成功地完成了两个顺序结构C语言程序的编写、编译和运行,达到了预期的实验目的。
-
收获与体会:
- 环境熟悉:我熟练掌握了在VS Code环境下编写、编译和运行C程序的全过程,学会了如何通过终端查看编译错误和运行结果。
- 基础语法巩固:对C语言的基本数据类型、变量声明、初始化以及赋值运算有了更深刻的理解,特别是通过任务一,我直观地看到了整数除法和取模运算的区别,以及
printf中的特殊用法。 - I/O函数掌握:学会了
printf和scanf这两个核心函数的用法,我认识到格式控制符(如%d,%f,%lf)的正确使用至关重要,它与变量的数据类型必须一一对应,否则会导致程序错误或数据输出不正确,在scanf中读取double类型变量时,必须使用%lf,而不是%f。 - 编程思想:深刻体会到了顺序结构“从上到下,依次执行”的特点,程序的逻辑完全由代码的排列顺序决定,这为后续学习更复杂的控制结构打下了坚实的基础。
-
遇到的问题与解决方案:
- 问题1:在编写任务二时,我最初在
scanf中读取height(double类型)时,错误地使用了%f格式控制符,编译程序时没有报错,但运行后输入的值总是不正确,导致计算结果偏差巨大。 - 解决方案:通过查阅教材和资料,我了解到
%f用于float类型,而%lf用于double类型,虽然在一些旧的编译器中%f可能也能用于double,但这并非标准做法,且可能导致精度问题,修正为scanf("%lf", &height);后,程序运行正常。 - 问题2:在输出时,我希望结果保留两位小数,但一开始不知道如何实现。
- 解决方案:学习了
printf的格式化输出功能,发现可以在%f和%lf后面加上.N的形式来控制精度,例如%.2f表示输出浮点数并保留两位小数,这使输出结果更加规范和易读。
- 问题1:在编写任务二时,我最初在
-
反思与展望: 顺序结构虽然简单,但它是构建复杂程序的基石,本次实验让我认识到,编写清晰、规范的代码(如添加有意义的注释、使用有意义的变量名、格式化输出)和掌握基础语法细节同等重要,在接下来的学习中,我将重点练习分支结构和循环结构,并继续巩固输入输出和变量使用的规范性,为编写更复杂的C语言应用程序做好准备。
