第1章 C语言概述
1.C语言概述
运行环境以Dev-C++为主
1.1 C语言的产生和发展
- 1.编程语言发展的3个阶段
- 机器语言
- 由二进制数0和1组成的有限序列(机器指令)
- 要解释0和1的不同组合,可读性较差
- 汇编语言
- 用符号代替二进制序列,如MOV AX, BX
- 依赖计算机硬件,程序可读性有一定提升,但可移植性较差
- 高级语言
- 接近自然语言,通俗易懂
- 机器语言
- 2.基本概念
- 计算机程序由一系列指令构成,定义指令的过程就是编程
- C语言的前身是B语言(BCPL, Basic Combined Programming Language)
- 美国国家标准学会(ANSI)为C语言指定了一套标准,称为ANSI C
1.2 C语言的特点
- 1.简洁紧凑、灵活方便
- 32个关键字
- auto break case char const continue default do
- double else enum extern float for goto if
- int long register return short signed sizeof static
- struct switch typedef union unsigned void volatile while
- 9种控制语句
- 32个关键字
- 2.运算符类型丰富
- 34个运算符
- 3.数据类型丰富
- 整型 实型 字符型
- 数组类型 指针类型 结构体类型 共用体类型
- 4.结构化语言
- 主要结构成分是函数
- 代码与数据分离,程序各部分除必要的信息交流外彼此独立
- 以函数形式提供给用户调用
- 函数即完成某项功能的一段代码
- 5.允许直接访问物理地址,可直接对硬件进行操作
- 计算机最基本的操作单元
- 位 bit
- 字节 Byte
- 地址
- 计算机最基本的操作单元
- 6.生成代码质量高,可移植性好
- 移植性
- 兼容性
- 7.适用于对操作系统和系统实用程序以及需要对硬件进行操作的场合
1.3 两个简单的C程序
- 1.在屏幕上输出“Hello World!”
- 1.1 编写代码
#include <stdio.h> void main() { // 无返回值 printf("Hello World!"); } #include <stdio.h> int main() { // 有返回值 printf("Hello World!"); return 0; // 用于表示程序的退出状态,0表示程序正常退出,非0代表程序异常退出 }
- 1.2 程序拆分
- 井号“#”表示预处理指令
- 通知编译器在对源程序编译前应做的处理工作
- “#include”命令C编译器包含某个特定文件的内容
- “<stdio.h>” standard input output head file 标准输入输出头文件
- 文件中包含了函数printf()
- main()为主函数
- 每个C源程序要有且只有1个主函数
- "{}"为函数体,内容是完成函数功能的若干条语句,每条语句后加上“;”表示语句结束
- 井号“#”表示预处理指令
- 2.求两个整数的和并输出
- 2.1 编写代码
#include <stdio.h> int sum(int x, int y) { int z; z = x + y; return z; } int main() { int a,b,c; scanf("%d,%d", &a, &b ); c = sum( a, b ); printf("sum = %d \n", c); return 0; }
- 2.2 C程序的特点
- 一个C程序是由若干函数构成的。
- 一个C程序总是从main函数开始执行。
- 每条语句均以分号结束。
- 注释行从"//"开始到本行结束, 连续若干注释行可以以"/"开始,并以"/"结束。
- 每行可以有多条语句,一条语句也可以分写在多行上。
1.4 C程序的上机步骤
- 1.补充:编译型语言和解释型语言。
- 编译型(C C++ Java C# Go):代码写完后,编译器将其变成另外一个文件(如C程序链接后生成的“exe”可执行程序),然后交给计算机执行
- 解释型(python php ruby javascript perl):写完代码交给解释器,解释器会从上到下一行行代码执行:边解释边执行
- 编译型语言和解释型语言的区别类似于全文翻译VS实时翻译
- Windows计算机有时运行软件会提示“xxx.dll文件缺失”,该文件就是编译后生成的。
- 出现错误时
- python代码要运行到某一句才知道错误(边解释边执行),所以错误之前的print可以正常输出,如以下代码:
- C语言代码必须通过编译才能知道错误,如果有错误,错误前方的语句中即使前方有printf也无法输出。错误会导致C源程序无法生成exe程序,进而无法执行
- python代码要运行到某一句才知道错误(边解释边执行),所以错误之前的print可以正常输出,如以下代码:
- 2.运行C程序的步骤
- 编辑:在IDE中编写源程序,后缀通常为“.c”
- 编译:用编译程序(编译器)把源程序翻译成二进制目标程序,后缀通常为“.obj”
- 链接:将目标程序和系统的库函数及其他目标文件链接,得到可执行文件,后主通常为“.exe”
- 运行:运行“.exe”文件便可得到执行结果
- 3.IDE:Dev-C++
- 特点:既可运行C源程序,也可运行C++源程序。注意C源程序要将文件后缀由默认的“.cpp”改为“.c”
- 快捷键
- 保存 Ctrl+S
- 编译 F9
- 执行 F10
- 编译&执行 F11
1.5 宏定义和文件包含
- 1.预处理
- 宏定义和文件包含都属于编译预处理命令,以‘#’开头,结尾部分一般不要加分号
- 作用
- 不是实现程序的功能,
- 给C语言编译系统提供信息,通知C编译器在对源程序进行编译之前应该做哪些预处理工作
- 2.宏定义
- 表示方法
- 不带参数: #define 标识符 字符串
- 带参数: #define 宏名(形式参数表) 字符串
- 运行原理
- 作用阶段:预编译
- 替换:将程序中出现的宏名替换成“字符串”的内容
- 案例
// 1.简单的宏替换 #define PI 3.14159 #define AERA(r) PI*(r)*(r) AERA(3+2) ----> PI*(3+2)*(3+2) #define PI 3.14159 #define AERA(r) PI*r*(r) AERA(3+2) ----> PI*3+2*(3+2) #define PI 3.14159 #define AERA(r) PI*r*r AERA(3+2) ----> PI*3+2*3+2 #define PI 3.14159 #define AERA(r) PI*r*r AERA(5) ----> PI*5*5 总结:1.PI*(r)*(r)在数学中加不加括号区别不大,但在C语言中区标较大 2.程序执行时会根据参数进行替换,不要想当然地将3+2直接替换为5 3.替换时先将非数字部分(如案例中的“(”、“)”、“*”)保留,然后替换掉参数部分,不要增减任意字符 // 2.复杂的宏替换:计算梯形的面积 // 说明:梯形的面积为上底加下底乘高除2。设梯形的上底、下底和高分别用a、b和h表示,则梯形的面积等于 (a+b)*h/2.0。 #include <stdio.h> #define S(a,b,h) (a+b)*h/2.0 int main(){ double y; y=S(2, 3, 5); printf ("梯形面积=%f\n", y); return 0; } 总结:1.宏定义不是C语句,一般不在末尾加“;”若有: #define PI 3.14159; #define AERA(r) PI*r*r ----> 3.14159;*r*r 会报错 2.宏名建议用大写字母表示 // 3.变式:计算圆锥体的体积 #include <stdio.h> #define PI 3.14159 #define V(r,h) PI*r*r*h/3 int main(){ double volumn; volum=V(3, 6.5); printf("圆锥的体积=%.3f\n", volumn); return 0; } 总结:1.提取面积/体积/...计算公式中的物理量(宏定义中的参数),将物理量和所求值建立表达式关系(宏定义中的字符串) 2.当涉及到除法(“/”)时注意整除的坑(5/2=2)
- 表示方法
- 3.文件包含
- 作用:将一个源程序文件包含到另一个源程序文件中,以“#include”开头
- 格式
- “#include <文件名>”
- 编译系在系统指定路径下搜索尖括号中的文件
- 一般适用于包含库函数的头文件。
- “#include "文件名"”
- 系统首先在用户当前目录中搜索双引号中的文件
- 若不存在,再按系统指定路径搜索
- 一般适用于包含用户文件的头文件
- “#include <文件名>”
分类:
编程语言基础——C语言
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」