C语言入门教程
第一节 初识C语言
一、预处理指令
#include- 文件包含指令#define- 宏定义(例如:#define PI 3.14)
二、变量声明
-
基本数据类型:
int- 整型float- 单精度浮点型
-
变量命名规则:
- 只能包含字母、数字和下划线
- 不能以数字开头,只能以字母或下划线开头
- 不能与C语言关键字重复
- 区分大小写
-
多变量声明:
- 可以一次性声明多个同类型变量
- 示例:
int a, b, c, d = 2;
三、格式化输入输出
-
输出函数:
printf("格式字符串", 变量); -
输入函数:
scanf("格式字符串", &变量);- 注意:需要改变变量值时必须使用取地址符
&
- 注意:需要改变变量值时必须使用取地址符
-
常用格式说明符:
%d- 整型%f- 浮点型
-
转义序列:
\n- 换行符
-
赋值操作:
- 示例:
int a = 1; float b = 1.0; - 赋值操作不改变变量地址
- 示例:
-
格式控制:
| 格式符 | 说明 |
|---|---|
%n.md |
m表示显示的最小位数,不足补0,超过正常显示 |
%n.mf |
m表示小数点后的位数,默认为6位 |
四、综合练习
#include <stdio.h> // 标准输入输出库
#include <stdlib.h> // 标准库
#define PI 3.14159 // 定义圆周率常量
/* 变量定义区 */
int r; // 第一个圆的半径
int r2; // 第二个圆的半径
float volume; // 第一个圆的体积
float volume2; // 第二个圆的体积
int main(int argc, char *argv[])
{
// 主函数 - C程序执行的起点
printf("请输入第一个圆的半径:");
scanf("%d", &r);
printf("请输入第二个圆的半径:");
scanf("%d", &r2);
// 计算球体体积:V = 4/3 * π * r³
volume = 4.0f / 3.0f * PI * r * r * r;
printf("第一个球的体积 = %f\n", volume);
volume2 = 4.0f / 3.0f * PI * r2 * r2 * r2;
printf("第二个球的体积 = %f\n", volume2);
return 0;
}
第二节 表达式与选择语句
一、表达式
-
类型转换规则:
int型与float型运算,结果为float型
-
运算符限制:
%取模运算只能用于整数/除法和%取模用于负数时,结果与编译器相关
-
负数运算示例(
-9/7和-9%7):
| 取整方式 | 除法结果 | 取模结果 |
|---|---|---|
| 向零取整 | -1 | -2 |
| 向负无穷取整 | -2 | 5 |
-
优先级建议:使用括号明确运算顺序
-
自增运算符:
i++:先使用值,后自增++i:先自增,后使用值
二、选择语句
-
逻辑运算符:
&&:逻辑与(全真为真)||:逻辑或(全假为假)!:逻辑非
-
真假值:
- 真:1(非零值)
- 假:0
-
if语句结构:
if (条件) { 语句块; } else if (条件) { 语句块; } else { 语句块; } -
条件运算符:
变量 = 条件 ? 表达式1 : 表达式2; -
布尔类型:
_Bool -
switch语句:
switch (表达式) { case 常量1: 语句块; break; case 常量2: 语句块; break; default: 语句块; break; }
第三节 循环语句
一、循环结构
-
while循环:
while (条件表达式) { 循环体语句; } -
do-while循环:
do { 循环体语句; } while (条件表达式); -
for循环:
for (初始化; 条件; 更新) { 循环体语句; } -
循环控制语句:
| 语句 | 功能 |
|---|---|
break |
跳出整个循环 |
continue |
跳过本次循环剩余部分 |
-
goto语句示例:
#include <stdio.h> int a = 1, b = 2, c = 3; int main() { goto c; a: printf("%d", a); b: printf("%d", b); c: printf("%d", c); return 0; }
第四节 数制与码值和基本数据类型
一、数制系统
-
常用进制:二进制、八进制、十进制、十六进制
-
位权概念:每位数字代表的实际值
二、计算机存储体系
-
二进制基础:0/1对应低电平/高电平
-
存储单位:1字节 = 8比特
-
CPU字长:处理器一次性处理的数据长度
- 8位、16位:常用于嵌入式系统
- 32位、64位:现代计算机
-
进制转换:4位二进制对应1位十六进制
三、码制系统
-
整数表示:使用最高位作为符号位
-
编码方式:
-
原码:直接二进制表示
-
反码:符号位不变,其余取反
-
补码:反码加1(现代计算机标准)
-
-
浮点数存储:采用IEEE 754标准
四、C语言基本数据类型
-
有符号整型:
int/signed int:4字节(-2³¹ ~ 2³¹-1)
-
无符号整型:
unsigned int:4字节(0 ~ 2³²-1)
-
其他整型:
| 类型 | 大小(字节) |
|---|---|
short int |
2 |
long int |
4/8 |
long long int |
8 |
-
字符类型:
char/signed char:1字节(-128 ~ 127)unsigned char:1字节(0 ~ 255)
-
ASCII码表:字符与数字的映射关系
-
浮点类型:
| 类型 | 符号位 | 指数位 | 尾数位 | 总位数 |
|---|---|---|---|---|
| 单精度(float) | 1 | 8 | 23 | 32 |
| 双精度(double) | 1 | 11 | 52 | 64 |
-
精度处理:浮点数比较应使用误差范围
-
宏定义应用:
#define UINT unsigned int UINT i; // 等同于 unsigned int i;
第五节 数组与指针入门
一、一维数组
- 定义:
数据类型 数组名[大小] = {初始值}; - 访问:
数组名[索引](索引从0开始)
二、多维数组
- 定义:
数据类型 数组名[行数][列数] = {初始值}; - 访问:
数组名[行索引][列索引]
三、数组存储特性
- 数组元素在内存中连续存储
- 多维数组按行优先顺序存储
四、特殊数组类型
-
const修饰符:定义不可修改的常量
-
字符串:
- 双引号表示,自动添加
\0结束符 - 字符使用单引号
- 双引号表示,自动添加
-
字符串初始化:
char str1[] = "abc"; // 自动计算长度 char str2[4] = {'a','b','c','\0'}; // 显式声明 -
格式说明符:
- 字符串:
%s - 字符:
%c
- 字符串:
五、指针基础
-
指针概念:存储内存地址的变量
-
指针声明:
数据类型 *指针变量名 = &目标变量; -
初始化建议:定义时初始化为
NULL
第六节 函数与程序结构
一、函数基础
-
函数结构:
返回类型 函数名(参数列表) { 函数体; return 返回值; } -
函数声明:提前声明函数原型
-
参数传递:
- 需要修改原变量时传递地址
- 否则传递值副本
-
返回值:可以是值或表达式
-
函数组织:
- 声明可放在前面,定义放在main函数后
- 提高代码可读性
二、程序结构
- 变量作用域:
| 类型 | 位置 | 初始化 | 生命周期 |
|---|---|---|---|
| 全局变量 | 函数外部 | 默认为0 | 程序运行期间 |
| 局部变量 | 函数内部 | 值随机 | 函数执行期间 |
-
extern关键字:
- 用于引用其他文件的变量
- 不推荐过度使用
-
模块化设计:合理组织函数和文件结构