第二天 C语言的组成部分
C语言程序结构摘要 C程序由多个基本部分组成:必须的main()函数作为程序入口;预处理指令如#include和#define用于包含头文件和定义常量;变量用于存储数据;函数原型声明函数接口;程序语句执行具体操作;函数定义实现功能逻辑;注释提高代码可读性。示例程序bigyear.c展示了这些元素的实际应用,包括输入输出、计算和函数调用。程序开发需经历编辑、编译、调试等步骤,良好的注释习惯和准确理解
本课介绍了C语言程序的基本组成部分。一个完整的C程序包含main()函数、预处理指令、变量定义、函数原型、程序语句、函数定义和注释等元素。通过示例程序bigyear.c,展示了如何计算指定年数后的年份,并详细解析了程序各部分的用途。重点讲解了#include和#define指令的作用、变量定义方法、函数原型与定义的区别、printf()和scanf()等常用语句的使用,以及单行和多行注释的写法。课程还提供了程序运行步骤、常见问题解答和复习要点,帮助初学者掌握C程序的基本结构。
第2课:C语言的组成部分
2.1 简短C程序示例
程序清单2.1:bigyear.c - 计算某人在指定年数后的年份
// 该程序计算某人在经过指定年数后的年份
#include <stdio.h>
#define TARGET_AGE 20
int year1, year2;
int calcYear(int year1);
int main(void) {
// 询问用户的出生年份
printf("What year was the subject born? ");
printf("Enter as a 4-digit year (YYYY): ");
scanf(" %d", &year1);
// 计算指定年数后的年份,并显示该年份
year2 = calcYear(year1);
printf("Someone born in %d will be %d in %d.",
year1, TARGET_AGE, year2);
return 0;
}
// 该函数计算将来年份
int calcYear(int year1) {
return (year1 + TARGET_AGE);
}
输出示例:
What year was the subject born? Enter as a 4-digit year (YYYY): 2000
Someone born in 2000 will be 20 in 2020.
2.2 程序的组成部分
2.2.1 main()函数
- 位于程序的第9~23行
- 每个可执行的C程序必不可少的部分
- 基本结构:
int main(void) { ... } - 程序从main()的第一条语句开始执行,到最后一条语句结束
- 根据ANSI标准,main()中必须有
return语句
2.2.2 #include和#define指令
#include <stdio.h>:命令编译器在编译时添加stdio.h文件的内容#define TARGET_AGE 20:定义符号常量,编译器会将程序中所有的TARGET_AGE替换为20- 包含文件(头文件)扩展名为
.h,由编译器提供
2.2.3 变量定义
- 第5行:
int year1, year2; - 变量是赋给内存位置的名称,用于存储信息
- 在C语言中,必须先定义变量才能使用
2.2.4 函数原型
- 第7行:
int calcYear(int year1); - 告知编译器程序中使用的函数名称和参数
- 不同于函数定义,它不包含函数的实际语句
2.2.5 程序语句
-
printf()语句(第12、13、19、20行)
- 在屏幕上显示信息的库函数
-
scanf()语句(第14行)
- 读取键盘输入的数据并赋给变量
-
函数调用语句(第17行)
- 调用calcYear()函数并传递参数
-
return语句(第22、28行)
- 第28行:函数返回计算结果
- 第22行:程序结束前返回0给操作系统
2.2.6 函数定义
- 第26~29行定义了calcYear()函数
- 两种函数类型:
- 库函数:如printf()、scanf(),由编译器提供
- 用户自定义函数:如calcYear(),由程序员创建
2.2.7 程序注释
两种注释风格:
-
多行注释:
/* 注释内容 */- 可以跨越多行
- 不能嵌套使用
-
单行注释:
// 注释内容- 只能用于单行
- 从//开始到行尾的内容都被忽略
2.2.8 使用花括号
- 用花括号
{}将代码块括起来 - 如:main()函数体、calcYear()函数体
- 花括号内的一条或多条语句称为块(block)
2.3 运行程序步骤
- 确保工作目录正确
- 打开编辑器
- 正确输入源代码(不要输入行号)
- 保存程序文件
- 编译并链接程序
- 如有错误,返回编辑器修改
2.4 小结
- 每个C程序必须有
main()函数 - 程序的实际工作由语句完成
- 注释对程序执行没有影响,只用于提高代码可读性
- C程序使用库函数和用户自定义函数
2.5 常见问题解答
Q:注释对程序有何影响?
A:注释是给程序员看的,编译器完全忽略所有注释,因此注释不会影响可执行程序的性能。
Q:如何找到可用的库函数?
A:许多编译器提供在线文档,按字母顺序列出库函数。附录C也列出了常用函数。
2.6 复习要点
概念理解
- 块(block):用花括号括起来的一组语句
- 函数:执行特定任务的一段程序代码
- 函数类型:
- 库函数:编译器提供
- 用户自定义函数:程序员创建
- 包含文件:也称为头文件(.h文件)
编程实践
- 添加注释的方法:
- 使用
/* */进行多行注释 - 使用
//进行单行注释
- 使用
- 注释的重要性:提高代码可读性,方便后期维护
注意事项
- 注释不能嵌套
- 注释可以超过一行
- 养成良好的注释习惯很重要
- 计算机只会"照本宣科",要确保代码准确无误
通过本课的学习,你应该能够识别C程序的基本组成部分,并理解各部分的作用。在后续课程中,我们将深入探讨每个部分的详细用法。
抱歉,练习题被遗漏了。以下是完整的练习题部分:
2.6 课后研习
2.6.1 问答题
1. 在C语言中,用花括号括起来的一组语句叫作什么?
答:块(block)
2. 每个C程序都必不可少的部分是什么?
答:main()函数
3. 如何在程序中添加注释?为什么要添加注释?
答:有两种添加注释的方法:
- 多行注释:使用
/* 注释内容 */ - 单行注释:使用
// 注释内容
添加注释可以提高代码的可读性,方便自己和他人理解和维护代码。
4. 什么是函数?
答:函数是一段执行特定任务的程序代码,通过函数名可以调用执行其中的代码。
5. C语言提供了哪两种类型的函数?它们有什么区别?
答:
- 库函数:由C编译器软件包提供
- 用户自定义函数:由程序员创建
区别在于来源不同,但使用方法类似。
6. #include指令有什么用途?
答:命令C编译器在编译时将指定包含文件的内容添加到程序中。
7. 注释是否可以嵌套?
答:标准C语言不允许注释嵌套,某些编译器可能支持但不应使用以保证代码可移植性。
8. 注释是否能超过一行?
答:可以,多行注释 /* */ 可以跨越多行。
9. 包含文件的另一个名称是?
答:头文件
10. 什么是包含文件?
答:包含文件(头文件)是独立的磁盘文件,内含程序或编译器要使用的信息,扩展名为.h。
2.6.2 练习题
1. 写一个最短小的C程序
int main(void) {
return 0;
}
2. 分析下面的程序,指出各行属于什么类型
分析以下程序:
#include <stdio.h> // 1. 预处理指令
#define PI 3.14159 // 2. 宏定义
int radius; // 3. 变量定义
double area; // 4. 变量定义
double calculateArea(int r); // 5. 函数原型
int main(void) { // 6. main函数开始
// 获取半径 // 7. 注释
printf("Enter radius: "); // 8. 语句(函数调用)
scanf("%d", &radius); // 9. 语句(函数调用)
area = calculateArea(radius); // 10. 语句(函数调用+赋值)
printf("Area: %.2f\n", area); // 11. 语句(函数调用)
return 0; // 12. 语句(返回语句)
} // 13. main函数结束
// 计算面积的函数 // 14. 注释
double calculateArea(int r) { // 15. 函数定义开始
return PI * r * r; // 16. 语句(返回语句)
} // 17. 函数定义结束
3. 写一个程序的注释示例
/*
* 程序:学生成绩管理系统
* 作者:张三
* 日期:2024年1月15日
* 功能:管理学生成绩,包括录入、查询、统计等功能
*/
#include <stdio.h>
// 定义最大学生数量
#define MAX_STUDENTS 100
// 学生结构体
struct Student {
int id; // 学号
char name[50]; // 姓名
float score; // 成绩
};
// 函数声明
void inputStudent(struct Student *s); // 输入学生信息
void displayStudent(struct Student s); // 显示学生信息
int main(void) {
struct Student stu; // 定义一个学生变量
// 输入学生信息
inputStudent(&stu);
// 显示学生信息
displayStudent(stu);
return 0;
}
// 函数定义:输入学生信息
void inputStudent(struct Student *s) {
printf("请输入学号: ");
scanf("%d", &s->id);
printf("请输入姓名: ");
scanf("%s", s->name); // 注意:这里假设姓名不包含空格
printf("请输入成绩: ");
scanf("%f", &s->score);
}
// 函数定义:显示学生信息
void displayStudent(struct Student s) {
printf("\n=== 学生信息 ===\n");
printf("学号: %d\n", s.id);
printf("姓名: %s\n", s.name);
printf("成绩: %.2f\n", s.score);
printf("================\n");
}
4. 训练输入、编译并运行程序
请尝试以下步骤:
- 使用编辑器输入上面的学生成绩管理程序
- 保存为
student.c - 编译程序:
gcc student.c -o student - 运行程序:
./student(Linux/Mac)或student.exe(Windows) - 按照提示输入学生信息,观察输出结果
附加练习:
- 修改程序,使其可以管理多个学生的信息
- 添加计算平均成绩的功能
- 添加查找最高分学生的功能
注意:
- 在输入代码时不要输入行号
- 确保所有标点符号都是英文的(特别是分号、引号、括号)
- 注意区分大小写
- 编译时要确保语法正确,注意错误提示信息
更多推荐


所有评论(0)