C程序的基本结构
/* 第一个C程序 */ #include <stdio.h> int main() { int a, b, sum; /* 变量声明 */ a = 3; b = 4; sum = a + b; printf("sum = %d\n", sum); return 0; }
程序组成要素
- 1#include 预处理
引入标准输入输出头文件 - 2main 函数
程序执行的入口,有且只有一个 - 3变量声明
在使用前必须先声明 - 4语句序列
顺序执行,分号结束 - 5return 0
向操作系统返回正常退出码
顺序结构流程图
点击"单步执行"观察程序流程
开始
输入 a, b
sum = a + b
输出 sum
结束
⬅️ 点击下方按钮开始演示
aint?0x1000
bint?0x1004
sumint?0x1008
C语言字符集与标识符规则
✅ 合法标识符
sum
_count
student1
MAX_SIZE
myFunc
❌ 非法标识符
2abc
my-var
int
for
a b
命名规则
- 只能包含:字母、数字、下划线
- 不能以数字开头
- 不能是C语言关键字
- 区分大小写:
Sum≠sum - 长度一般不超过63个字符
基本数据类型
| 类型 | 关键字 | 位数 | 范围(典型32位) | 示例 |
|---|---|---|---|---|
| 短整型 | short | 16 | -32768 ~ 32767 | short s = 100; |
| 整型 | int | 32 | -2147483648 ~ 2147483647 | int n = 42; |
| 长整型 | long | 32/64 | 依平台而定 | long l = 1000000L; |
| 单精度浮点 | float | 32 | ±3.4×10⁻³⁸ ~ ±3.4×10³⁸ | float f = 3.14f; |
| 双精度浮点 | double | 64 | ±1.7×10⁻³⁰⁸ ~ ±1.7×10³⁰⁸ | double d = 3.14; |
| 字符型 | char | 8 | 0 ~ 255(无符号) | char c = 'A'; |
进制表示与转换
C语言常量写法:
十进制
255 = 八进制 0377(前缀0)= 十六进制 0xFF(前缀0x)
字符与ASCII码对照
ASCII = 65,0x41,'A'
要点:
'A' = 65,'a' = 97,'0' = 48,'\n' = 10(转义字符)
自动类型转换规则
当不同类型数据参与运算时,系统自动向"精度高"方向转换
char
→
short
→
int
→
long
→
float
→
double
示例1
int a=3; float b=1.5; a+b → float 3.0 + 1.5 = 4.5(int→float)
示例2
char c='A'; int n=c+1; → 65 + 1 = 66(char→int)
强制转换
(int)3.9 = 3(截断小数),(float)7/2 = 3.5
⚠️ 注意:
7/2 = 3(整数除法截断),7.0/2 = 3.5(浮点除法)
赋值运算符演示
运算符优先级(交互查询)
输入一个C表达式,查看求值顺序
最高优先级
() [] ->
括号、下标、成员
单目
! ~ ++ -- *
逻辑非、自增减等
算术1
* / %
乘、除、取模
算术2
+ -
加、减
移位
<< >>
左移、右移
关系
< <= > >=
大小比较
相等
== !=
等于、不等于
位运算
& ^ |
位与、异或、位或
逻辑
&& ||
逻辑与、逻辑或
条件
?:
三目运算符
赋值
= += -= ...
赋值运算
最低
,
逗号运算符
自增/自减运算符
前置 ++i(先自增后使用)
i5
j=++i?
int i=5, j; j = ++i; /* i先+1=6,再赋给j */ /* i=6, j=6 */
后置 i++(先使用后自增)
i5
j=i++?
int i=5, j; j = i++; /* j先=5,再i+1=6 */ /* i=6, j=5 */
⚠️ 注意:
printf("%d %d", i, i++) 的结果是未定义行为,不要在同一表达式中多次修改同一变量!
printf 格式输出演示
格式说明符对照
%d→十进制整数
%o→八进制整数
%x→十六进制整数(小写)
%f→浮点数(默认6位小数)
%.2f→保留2位小数
%8.2f→宽度8,右对齐,保留2位小数
%-8d→宽度8,左对齐
%c→字符
%s→字符串
%e→科学计数法
交互演示
→
printf 与 scanf 工作原理
📤 printf 输出
程序 → 显示器
📥 scanf 输入
键盘 → 程序
scanf 重要规则:
• 变量前必须加
• 输入 float 用
• 字符串用数组名,不加
• 变量前必须加
&:scanf("%d", &n)(取地址)
• 输入 float 用
%f,double 用 %lf
• 字符串用数组名,不加
&:scanf("%s", str)
常用转义字符
| 转义字符 | 含义 | ASCII | 示例 |
|---|---|---|---|
\n | 换行 | 10 | printf("Hello\n") |
\t | 水平制表符 | 9 | printf("%d\t%d",a,b) |
\\ | 反斜杠 | 92 | printf("C:\\path") |
\" | 双引号 | 34 | printf("He said \"Hi\"") |
\' | 单引号 | 39 | char c='\'' |
\0 | 空字符(字符串结束标志) | 0 | char s[]="abc\0" |
\r | 回车 | 13 | 移到行首 |
getchar / putchar 字符I/O
/* 读一个字符并输出 */ char c; c = getchar(); putchar(c); putchar('\n');
交互演示:
顺序结构:交换两个变量
经典算法:借助中间变量交换 a 和 b 的值
int a = 3, b = 5, temp; temp = a; a = b; b = temp; printf("a=%d, b=%d", a, b);
a3
b5
temp?
点击"开始"观察交换过程
顺序结构:计算圆的面积和周长
#define PI 3.14159265 double r, area, peri; scanf("%lf", &r); area = PI * r * r; peri = 2 * PI * r; printf("面积=%.2f 周长=%.2f", area, peri);
顺序结构:华氏温度转摄氏温度
/* C = (F - 32) × 5 / 9 */ float F, C; scanf("%f", &F); C = (F - 32) * 5.0 / 9.0; printf("C = %.2f\n", C);
°F
🎯 综合练习:个人信息录入与格式化输出
模拟 scanf + printf 完成信息采集与格式化显示
输入信息
程序输出
(等待输入...)
对应C代码
#include <stdio.h> int main() { char name[] = "张三"; int age = 20; float height = 1.75f; float score = 95.5f; printf("姓名: %-10s 年龄: %3d\n", name, age); printf("身高: %.2f m 成绩: %.1f\n", height, score); return 0; }
📝 本章知识点回顾
💾
数据类型
int/float/double/char,各自的范围和用法
➕
运算符
算术、赋值、++/--,注意优先级与整数除法
📥
输入输出
printf/scanf,格式符,转义字符
🔄
类型转换
自动转换向高精度,强制转换(type)可能丢精度