S1-3.1
表达式语句,空语句,复合语句。
精编讲义 v1#
三类基本语句的语法特征与作用
必记- 表达式语句:在任意合法表达式末尾加上分号
;即构成语句(如a = 3;、i++;、printf("Hi");)。分号是 C 语句不可缺少的组成部分,不加分号只是表达式而非语句。 - 空语句:仅由一个分号
;组成的语句,执行时不产生任何操作,常用于循环体为空的延时或占位。切忌在if (条件)、for (...)、while (...)圆括号后误加分号,否则会导致分支或循环体变成空语句。 - 复合语句(分程序 / 语句块):用一对花括号
{ ... }括起来的多条语句(内部也可在开头定义局部变量),在语法上被视为单条语句,右花括号}后不加分号。
复合语句内部同名变量遮蔽(Shadowing)
必记易错陷阱
复合语句 { ... } 内部定义的变量仅在该花括号块内有效;若块内定义了与外部同名的变量,块内会暂时遮蔽外部变量,走出 } 后外部变量恢复原值。
随堂自测(3 题 · 共 43 道关联题)展开作答
判断1 分自测不计入学习进度
空语句可以用来作流程的转向点,即流程从程序其他地方转到此语句处。
单选2 分自测不计入学习进度
下列程序段实现的功能是 a = a + b; b = a - b; a = a - b; ( )
单选2 分自测不计入学习进度
下列程序段实现的功能是____。 a=b; b=c; c=a;
S1-3.2
输入输出函数的调用,正确输入数据并正确设计输出格式。
精编讲义 v1#
printf / scanf 格式控制符与宽度精度修饰表
必记%d / %u
- 对应类型与含义
- 十进制有符号 / 无符号整型
- printf 输出特性
%5d右对齐占 5 列,%-5d左对齐,%05d补前导 0- scanf 输入特性与陷阱
%3d表示最多截取 3 位数字读入
%o / %x
- 对应类型与含义
- 八进制 / 十六进制无符号整数
- printf 输出特性
- 默认不带前缀
0或0x(加#如%#x才带前缀) - scanf 输入特性与陷阱
- 可按八进制或十六进制读入整数
%f / %lf
- 对应类型与含义
- 小数形式浮点数
- printf 输出特性
printf中%f默认输出 6 位小数;%.2f四舍五入保留 2 位小数- scanf 输入特性与陷阱
scanf读float用%f,读double必须用%lf
%c
- 对应类型与含义
- 单个字符
- printf 输出特性
- 输出 1 个字符
- scanf 输入特性与陷阱
- 空格、回车、Tab 都会被
%c当作有效字符读入
%s
- 对应类型与含义
- 字符串
- printf 输出特性
- 从首地址起输出直到遇
'\0' - scanf 输入特性与陷阱
- 遇空格、Tab 或回车即停止读入;参数直接传字符数组名,不加
&
| 格式符 | 对应类型与含义 | printf 输出特性 | scanf 输入特性与陷阱 |
|---|---|---|---|
%d / %u | 十进制有符号 / 无符号整型 | %5d 右对齐占 5 列,%-5d 左对齐,%05d 补前导 0 | %3d 表示最多截取 3 位数字读入 |
%o / %x | 八进制 / 十六进制无符号整数 | 默认不带前缀 0 或 0x(加 # 如 %#x 才带前缀) | 可按八进制或十六进制读入整数 |
%f / %lf | 小数形式浮点数 | printf 中 %f 默认输出 6 位小数;%.2f 四舍五入保留 2 位小数 | scanf 读 float 用 %f,读 double 必须用 %lf |
%c | 单个字符 | 输出 1 个字符 | 空格、回车、Tab 都会被 %c 当作有效字符读入 |
%s | 字符串 | 从首地址起输出直到遇 '\0' | 遇空格、Tab 或回车即停止读入;参数直接传字符数组名,不加 & |
scanf 与字符输入输出(getchar / putchar)必记规则
必记scanf参数必须传地址:普通变量前必须加取地址符&(如scanf("%d", &a);),而字符数组名本身代表首元素地址,因此scanf("%s", str);前不加&。scanf格式串分隔符:若格式串写成"%d,%d",输入时两数之间必须原样输入英文逗号(如3,4);若写成"%d%d",输入时可用空格、回车或 Tab 分隔。scanf格式控制串中严禁指定小数精度(如scanf("%5.2f", &x)非法)。getchar()与putchar(ch):需包含<stdio.h>;getchar()每次从缓冲区读取 1 个字符(含回车'\n'),putchar(ch)输出单个字符。
宽度修饰与格式化输入输出示例
重点c
#include <stdio.h>
int main(void) {
int a = 12;
double y = 3.14159;
/* %4d 右对齐补2空格,%6.2f 共占6列保留2位小数,%% 输出百分号本身 */
printf("|%4d|%-4d|%6.2f|100%%|\n", a, a, y);
return 0;
}随堂自测(3 题 · 共 267 道关联题)展开作答
填空2 分自测不计入学习进度
28以下程序的输出结果为( )。 main() {char c='x'; printf("c:dec=%d, oct=%o, hex=%x, ASCII=%c\n",c,c,c,c); }
填空2 分自测不计入学习进度
32 以下程序的输出结果是( )。 main() {int x=1,y=2; printf("x=%d y=%d *sum*=%d\n",x,y,x+y); printf("10 Squared is :%d\n",10*10); }
填空2 分自测不计入学习进度
输入多个非字符型的数值数据时,数据输入时可用____作为间隔符。