C语言入门教程
一、编程环境准备
1. 软件安装与文件管理
良好的习惯是高效编程的基础。
- 存储位置:所有编程软件和项目文件都建议放在D盘,避免占用系统盘空间,方便管理。
- 安装路径:安装编程软件时,路径中不要出现中文。建议使用英文命名文件夹,例如 Dev-Cpp_01 或 VSCode 。
- 跨设备工具:在手机上安装代码编辑器(如“C语言编译器”或“Codeanywhere”),方便随时查看或简单修改代码。
2. 工程创建与规范
规范的工程结构有助于代码的阅读和维护。
- 根文件夹:在 D盘 创建一个名为 c_learning 的总文件夹,用于存放所有编程相关文件。
- 快捷访问:将 c_learning 文件夹的快捷方式放到桌面,方便快速打开。
- 分类管理:
- 在 c_learning 内,为每个项目创建独立的文件夹,例如 C_Project_01。
D:/
└── c_learning/
│ ├── C_Project_01/
│ ├── C_Project_02/
│ └── C_Project_03/
|
├── desktop/ (快捷方式)
└── Other_Folders/
二、C语言基础入门
1. 编写第一个C代码
我们从一个简单的输出程序开始,了解 C 语言的基本结构。
#include <stdio.h> // 引入标准输入输出库
int main() { // 主函数,程序从这里开始执行
printf("hello world"); // 输出文本到屏幕
return 0; // 程序正常结束
}
- 练习:尝试修改 printf 函数中的文本,例如改为 "hello C language"。
- 多行输出:使用 \n(换行符)可以实现多行输出。
#include <stdio.h>
int main() {
printf("hello world\n"); // 输出后换行
printf("hello C language"); // 在新的一行显示
return 0;
}
2. 转义序列
转义序列是 \ 后面跟一个字符,用来表示特殊功能。最常用的是 \n,表示换行。
- 核心规则:以反斜杠 \ 开头,后面跟特定字母,实现预设的格式功能。
- 常用转义序列:\n (换行)。
3. 变量与赋值
变量是用来存储数据的“容器”。在使用前,需要先声明变量的类型和名称。
- 变量声明:
- 整数变量:int a; (int 表示整数类型)
- 小数变量:float b; (float 表示单精度浮点数类型)
- 变量初始化:声明时直接赋值。
int a = 1; // 声明整数变量a,并赋值为1 float b = 3.14; // 声明小数变量b,并赋值为3.14 - 变量赋值修改:变量声明后可以重新赋值。
a = 2; // 将变量a的值改为2 b = 5.6; // 将变量b的值改为5.6 - 重要:变量必须在使用前声明。
4. 变量的运算
C 语言支持基本的数学运算。
-
常用运算符:
- 加法:+
- 减法:-
- 乘法:*
- 除法:/ (整数相除只取整数部分,浮点数相除得到精确值)
- 取余:% (只用于整数,得到除法后的余数)
-
示例:
#include <stdio.h> int main() { int x = 5, y = 2; printf("x + y = %d\n", x + y); // 输出 x + y 的结果 printf("x %% y = %d\n", x % y); // 输出 x % y 的结果 (注意 %% 是为了输出 % 符号本身) return 0; }
5. 显示变量的值(占位符)
printf 函数中使用占位符来显示变量的值。占位符以 % 开头,后面跟一个字母表示变量类型。
-
常用占位符:
占位符 数据类型 说明 %d int 输出整数 %i int 输出整数(同 %d) %f float 输出浮点数,小数默认6位 %.nf float 输出浮点数,保留 n 位小数,例如 %.2f %e float 输出浮点数,科学计数法表示 %E float 输出浮点数,科学计数法表示,E 大写 %g float 根据数值大小自动选择 %f 或 %e 输出 %G float 根据数值大小自动选择 %f 或 %E 输出 %c char 输出单个字符 %s char* 输出字符串 %u unsigned int 输出无符号整数 %o unsigned int 输出八进制数 %x unsigned int 输出十六进制数(小写字母) %X unsigned int 输出十六进制数(大写字母) %% - 输出百分号符号 % -
示例:计算长方体体积并输出。
#include <stdio.h> int main() { int length = 3; // 长 int width = 4; // 宽 int height = 5; // 高 int volume; // 存储体积的变量 volume = length * width * height; // 计算体积 printf("体积 = %d\n", volume); // 使用 %d 输出 volume 的值 return 0; }
6. 读入用户输入(scanf)
scanf 函数用于从键盘获取用户输入的数据,并将其存储到变量中。
-
用法:scanf("格式串", &变量名);
- & 是“取地址符”,表示将输入的值存入变量所在的内存地址。
-
示例:交互式计算长方体体积。
#include <stdio.h> int main() { int length, width, height, volume; printf("请输入物体的长:"); scanf("%d", &length); // 读取长 printf("请输入物体的宽:"); scanf("%d", &width); // 读取宽 printf("请输入物体的高:"); scanf("%d", &height); // 读取高 volume = length * width * height; // 计算体积 printf("物体的体积是:%d\n", volume); // 输出体积 return 0; }- 输入说明:运行程序后,会提示您依次输入长、宽、高,每次输入后按回车。
7. 注释
注释是对代码的解释说明,不会被程序执行,但能大大提高代码的可读性。
- 单行注释:以 // 开头,只注释当前行。
// 这是一个单行注释 int a = 1; // 声明并初始化变量a - 多行注释:以 /* 开头,以 */ 结尾,可以注释多行。
/* * 这是一个多行注释 * 可以用来解释一段代码或整个程序的功能 */ - 原则:对关键逻辑、变量含义、功能说明添加注释,避免对显而易见的代码进行注释。
三、C程序结构与进阶
1. 整体代码结构
一个完整的 C 程序通常包含以下部分:
- 预处理指令:如 #include <stdio.h>,用于引入库文件。
- 变量声明:在使用变量前,声明其类型和名称。
- main 函数:程序的入口,所有代码从这里开始执行。
int main() { // 你的代码逻辑 return 0; // 返回0表示程序正常结束 } - 输入/输出函数:printf 用于输出,scanf 用于输入。
- 运算语句:进行数据计算。
2. 预处理指令详解
预处理指令在程序编译前执行,用于配置编译环境或定义常量。
- #include:引入头文件(库的声明文件)。
- 系统头文件:#include <头文件名.h> (例如 stdio.h)
- 自定义头文件:#include "头文件名.h" (用于项目内的自定义文件)
- #define:定义常量或代码片段(宏)。宏名通常用大写。
#include <stdio.h> #define PI 3.14f // 定义宏PI,f表示单精度浮点型 int main() { float r = 2.0f, area; area = PI * r * r; // 编译时PI会被替换为3.14f printf("圆的面积:%f\n", area); return 0; }- 特点:宏是简单的文本替换,没有类型检查,定义时不需要加分号。
3. 变量声明深入
- 基本数据类型:
- int:整数类型,通常占 4 字节,范围约 -21亿 到 21亿。
- float:单精度浮点型,通常占 4 字节,精度约 6-7 位有效数字。
- 变量命名规则:
- 可以包含:英文字母、数字、下划线 _。
- 不能以数字开头。
- 不能与 C 语言的关键字(如 main, int, return)重复。
- 区分大小写:May, mAy, may 是不同的变量。
- 批量声明:可以一次声明多个同类型变量,用逗号 , 分隔。
int a, b, c; // 声明3个整数变量 int x = 1, y = 2, z; // 声明并初始化部分变量 float m = 3.14f, n; // 声明浮点型变量
4. 格式化输入/输出深入
printf 函数
- 格式:printf("格式串", 参数1, 参数2, ...);
- “格式串”包含普通文本和占位符。
- “参数”按顺序对应占位符。
- 占位符进阶:%n.mf (用于小数)
- n:最小栏宽。如果输出的数字宽度小于 n,则在左侧补空格。
- m:小数点后保留的位数。
float b = 3.14159f; printf("%8.2f\n", b); // 输出 " 3.14" (总宽8,小数点后2位) - 常见错误:
- 参数数量与占位符不匹配。
- 数据类型与占位符不匹配(例如用 %d 输出 float 变量)。
scanf 函数
- 格式:scanf("格式串", &参数1, &参数2, ...);
- & 取地址符是必须的,否则 scanf 无法修改变量的值。
- 格式串灵活用法:
- 连续读取多个变量:scanf("%d%d%d", &a, &b, &c); (输入时用空格、回车或制表符分隔)
- 带固定文本的格式串:scanf("a=%d b=%f", &a, &b); (输入时必须严格匹配格式,例如输入 a=3 b=5.6)
- 核心原则:
- 仅读取变量值(不修改):直接使用变量名(如 printf 的参数)。
- 需要修改变量值(如 scanf 的输入):必须使用取地址符 & + 变量名。