←

C 语言程序设计 · C语言

基本语句

基本语句

结构化讲义

S1-3 · 2 个大纲考点讲义 · 已精编

练本节题目

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 或回车即停止读入;参数直接传字符数组名,不加 &

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 分自测不计入学习进度

输入多个非字符型的数值数据时,数据输入时可用____作为间隔符。