顺序程序设计
🎯 一句话秒杀:顺序程序就是从上往下一条条执行,主要靠
printf和scanf搞定输入输出。
一、C语句分类
mermaid
flowchart TD
A[C语句] --> B[控制语句]
A --> C[函数调用语句]
A --> D[表达式语句]
A --> E[空语句]
A --> F[复合语句]
B --> G[if/else/switch/while/for/do...]
D --> H[ a=3; i++; ]
E --> I[ ; // 什么都不做]
F --> J[{...} // 花括号括起来]二、printf 输出函数(高频)
c
printf("格式控制字符串", 输出列表);格式说明符
| 格式符 | 用途 | 示例 |
|---|---|---|
%d | 十进制 int | printf("%d", 10); → 10 |
%c | 单个字符 | printf("%c", 'A'); → A |
%s | 字符串 | printf("%s", "hello"); → hello |
%f | float类型 | printf("%f", 3.14); → 3.140000 |
%lf | double类型 | printf("%lf", 3.14); |
%x | 十六进制 | printf("%x", 15); → f |
%o | 八进制 | printf("%o", 8); → 10 |
%e | 科学计数法 | printf("%e", 100.0); → 1.000000e+02 |
附加格式
c
printf("%5d", 10); // 右对齐,宽度5 → " 10"
printf("%-5d", 10); // 左对齐,宽度5 → "10 "
printf("%.2f", 3.14159); // 保留2位小数 → 3.14
printf("%5.2f", 3.14); // 总宽度5,小数2位 → " 3.14"
printf("%#x", 255); // 加前缀0x → 0xff🚨 红牌警告
printf("%d", 3.14);— 类型不匹配!%d要求int,给了float,输出是垃圾值 考试最爱考:格式说明符和数据类型必须一一对应
三、scanf 输入函数(高频)
c
scanf("格式控制字符串", 变量地址列表);重点!变量前必须加 &
c
int a;
float b;
char c;
scanf("%d%f %c", &a, &b, &c); // & 取地址,不能忘!常见用法
c
scanf("%d", &a); // 输入整数
scanf("%f", &b); // 输入浮点数
scanf("%c", &c); // 输入字符(注意空格问题!)
scanf("%s", str); // 输入字符串(str是数组名,不需要&)🔑 秒杀秘籍
什么时候要
&?
- 普通变量:
scanf("%d", &a);✅ 要&- 数组名/指针:
scanf("%s", str);✅ 不要&规律: 只有数组名和指针变量不需要 &,其他都要
🚨 红牌警告——scanf的字符吸收问题
c
int a;
char ch;
scanf("%d", &a);
scanf("%c", &ch); // ← 这里会把换行符'\n'读入ch!解决方法:
c
scanf("%d", &a);
getchar(); // 吃掉换行符
scanf("%c", &ch); // 现在才是正确输入等价写法:scanf(" %c", &ch); — 格式串前加空格跳过空白字符
四、getchar 与 putchar
c
char ch;
ch = getchar(); // 从键盘读一个字符(可以吸收换行符)
putchar(ch); // 输出一个字符
putchar('\n'); // 输出换行五、数据类型转换
自动类型转换(隐式转换)
规则:低精度 → 高精度(向高看齐)
char → short → int → unsigned → long → float → doublec
float f = 10 / 3; // ❌ 10/3=3(整数除法),f=3.0
float f = 10 / 3.0; // ✅ 3.0→double,f=3.333333
int i = 3.14; // ⚠️ 小数部分直接截断,i=3强制类型转换
c
float f = (float)10 / 3; // 10→10.0,f=3.333333
int x = 10, y = 3;
float f = (float)x / y; // 先把x转float再除🚨 红牌警告
整数除法截断:
1/2=0(不是0.5!) 想得到0.5:1.0/2或(float)1/2考试必考:int a=1/2;→ a = 0
📝 闭卷真题挑战
(点击下方空白查看答案)
1. 写出以下代码的输出:
int a=10; printf("%5d", a);
2. 写出以下代码的输出:
int x=5, y=2; printf("%d", x/y);
3. scanf中什么情况下不需要加 & ?
4. 写出以下代码的问题:
int a; char c; scanf("%d", &a); scanf("%c", &c);
5. float f = 5/2; f的值是?👆 点击展开答案
" 10"(右对齐宽度5,补3个空格)- 2(整数除法截断,5/2=2)
- 数组名(如
char str[10]; scanf("%s", str);)和指针变量不需要 & - 第二个
scanf会读取第一个输入后的换行符,导致ch = '\n'解决:scanf(" %c", &c);格式串前加空格 - 2.0(先算整数除法
5/2=2,再转float赋给f)
📖 教材习题对照
| 教材习题 | 知识点 | 难度 |
|---|---|---|
| 习题3.1~3.2 | printf 格式输出 | ⭐⭐ |
| 习题3.4 | scanf 输入 | ⭐⭐ |
| 习题3.5 | getchar 应用 | ⭐⭐ |
| 习题3.6~3.7 | 类型转换 | ⭐⭐ |
对应教材:谭浩强《C程序设计》第5版 → 第3章 最简单的C程序设计 对应考试大纲:考点3 — 顺序程序设计
📺 配套视频
复习到本考点 → 先看视频补讲,再刷上面「闭卷挑战」。