内容正文:
专题三 运算符、表达式和常见函数
【考纲要求】
知识要点
考试条目
2.顺序结构程序设计
(3)掌握运算符和表达式的使用方法;
(4)掌握输入函数及格式字符的使用方法;
(5)掌握输出语句及格式字符的使用方法。
【课时安排】
2课时
【知识梳理】
运算符和表达式
一、算术运算符
用于数值的算术运算,分为单目和双目运算符。
1. 双目算术运算符
运算符
名称
示例
结果说明
+
加法
3+5
8
-
减法
7-2
5
*
乘法
4*3
12
/
除法
5/2
2(整数除法截断小数)
%
取余
5%2
1(余数)
注意:
整数除法中,若除数或被除数为负数,结果符号由编译器决定(通常向零取整)。
%运算符要求两侧均为整数,如5.5%2是非法的。
2. 单目算术运算符
运算符
名称
示例
结果说明
+
正号
+5
5
-
负号
-x
x 的相反数
++
自增
++i(前缀)
i++(后缀)
前缀:先自增后使用
后缀:先使用后自增
--
自减
--i(前缀)
i--(后缀)
前缀:先自减后使用
后缀:先使用后自减
示例:
int i = 3, j;
j = ++i; // i=4,j=4(前缀自增)
j = i--; // j=4,i=3(后缀自减)
二、赋值运算符
用于将右侧值赋给左侧变量,分为基本赋值和复合赋值。
1. 基本赋值运算符 =
int a = 10; // 直接赋值
float b = 3.14f; // 类型转换赋值(float←int)
2. 复合赋值运算符(简化表达式)
运算符
等价形式
示例
结果说明
+=
a = a + b
a += b
a = a + b
-=
a = a - b
a -= b
a = a - b
*=
a = a * b
a *= b
a = a * b
/=
a = a / b
a /= b
a = a / b
%=
a = a % b
a %= b
a = a % b
示例:
int x = 5;
x += 3; // 等价于 x = x + 3 → x=8
x *= 2; // 等价于 x = x * 2 → x=16
三、关系运算符
用于比较两个值的关系,结果为真(非 0)或假(0)。
运算符
名称
示例
结果(若 a=5,b=3)
>
大于
a > b
1(真)
<
小于
a < b
0(假)
>=
大于等于
a >= b
1
<=
小于等于
a <= b
0
==
等于
a == b
0
!=
不等于
a != b
1
注意:避免将==误写为=(赋值运算符),如:
if (a = 5) // 误将判断写为赋值,恒为真(非0)
浮点数不能直接用==比较,需用精度判断(如fabs(a-b) < 1e-6)。
四、逻辑运算符
用于组合多个关系表达式,结果为真(1)或假(0)。
运算符
名称
示例
逻辑规则
&&
逻辑与
a && b
全真为真,一假即假
`
`
逻辑或
!
逻辑非
!a
真变假,假变真
短路特性:
&&:若左侧为假,右侧表达式不计算。
int x = 0;
if (x++ && 1/0) // x++为0(假),右侧1/0不执行,避免除零错误
||:若左侧为真,右侧表达式不计算。
int y = 5;
if (y-- || 1/0) // y--为5(真),右侧1/0不执行
五、位运算符
对二进制位进行操作,常用于底层硬件控制或高效数据处理。
运算符
名称
示例(a=0b1010,b=0b1100)
结果(二进制)
~
按位取反
~a
0b0101
&
按位与
a & b
0b1000
`
`
按位或
`a
^
按位异或
a ^ b
0b0110
<<
左移
a << 1
0b10100
>>
右移
a >> 1
0b0101
应用场景:
按位与(&):清 0 特定位(如a &= ~(1<<3)清 0 第 3 位)。
按位或(|):置 1 特定位(如a |= (1<<3)置 1 第 3 位)。
按位异或(^):翻转特定位(如a ^= (1<<3)翻转第 3 位)。
左移(<<):乘以 2 的幂(如a << 2等价于a*4)。
右移(>>):除以 2 的幂(如a >> 2等价于a/4,向下取整)。
六、条件运算符(三目运算符)
格式:表达式1 ? 表达式2 : 表达式3
若表达式 1 为真,取表达式 2 的值;否则取表达式 3 的值。
示例:
int max = (a > b) ? a : b; // 取a和b中的较大值
char ch = (score >= 60) ? 'P' : 'F'; // 判断及格
七、逗号运算符
用于分隔多个表达式,按顺序计算,结果为最后一个表达式的值。
格式:表达式1, 表达式2, 表达式3
示例:
int x, y, z;
z = (x=1, y=2, x+y); // 先x=1,再y=2,最后z=3
for (int i=0, j=10; i<j; i++, j--) // 逗号分隔多个初始化和更新表达式
八、运算符优先级与结合性
运算符的优先级决定表达式中运算的顺序,结合性决定相同优先级运算符的计算方向(左→右或右→左)。
九、表达式和赋值语句
在 C 语言中,表达式是由运算符、操作数和标点符号组成的合法序列,用于计算值或执行特定操作;赋值语句则是通过赋值运算符(=)将表达式的值赋给变量的语句。两者是程序逻辑的基础
赋值语句是由赋值表达式和一个语句结束符(即分号“;”)组成的。它的一般形式是:
变量=表达式;
十、类型转换
C 语言赋值语句中的类型转换分为隐式转换(自动转换)和强制转换(显式转换)。
1、隐式转换(自动转换)
规则:赋值时右侧表达式的值自动转为左侧变量的类型,遵循数据类型的 “高低” 级别转换。
2、强制转换(显式转换)
语法:(目标类型) 表达式,显式改变类型,可能引发未定义行为。
例:float z = (float)5 / 2;(避免整数除法,结果2.5f)。
常见函数
一、输出语句及格式字符(printf函数)
1. 基本语法
printf("格式控制字符串", 输出项1, 输出项2, ...);
格式控制字符串:包含格式字符、普通字符和转义字符。
输出项:可以是变量、表达式或常量。
2. 常用格式字符
格式字符
作用描述
示例(假设int a=10; float f=3.14; char c='A';)
%d
输出十进制整数(有符号)
printf("%d", a); → 10
%u
输出无符号十进制整数
printf("%u", -a); → 4294967286(补码解释)
%f
输出浮点数(默认 6 位小数),float和double均可用
printf("%f", f); → 3.140000
%lf
与%f同义(为兼容旧代码)
printf("%lf", f); → 3.140000
%c
输出单个字符
printf("%c", c); → A
%s
输出字符串(以\0结尾)
printf("%s", "Hello"); → Hello
%x/%X
输出十六进制整数(小写 / 大写)
printf("%x", a); → a(十六进制)
%o
输出八进制整数
printf("%o", a); → 12(八进制)
%e/%E
输出科学计数法浮点数(小写 / 大写)
printf("%e", f); → 3.140000e+00
%p
输出指针地址(十六进制格式)
printf("%p", &a); → 0x7ffd7b2c6af4(地址示例)
%%
输出百分号%
printf("%%"); → %
3. 格式修饰符(控制输出格式)
修饰符
作用描述
示例(假设int a=5; double d=123.456789;)
%[宽度]d
限定输出宽度,不足补空格(右对齐)
printf("%5d", a); → 5(宽度 5,空格填充)
%-[宽度]d
左对齐,不足补空格
printf("%-5d", a); → 5 (左对齐)
%.[精度]f
限定小数位数(四舍五入),整数部分无影响
printf("%.2f", d); → 123.46
%[宽度].[精度]f
同时限定宽度和小数位数
printf("%10.3f", d); → 123.457(宽度 10,右对齐)
%#x
输出十六进制时带前缀0x
printf("%#x", a); → 0x5
%+d
强制输出符号(+或-)
printf("%+d", a); → +5
4. 转义字符
用于输出特殊符号或控制换行、制表等格式:
转义字符
作用
示例
换行
printf("Hello
World");
\t
水平制表符(Tab)
printf("Name\tScore");
\\
反斜杠\
printf("C:\\file.txt");
\'
单引号'
printf("\'A\'"); → 'A'
\"
双引号"
printf("\"Hello\""); → "Hello"
5. 示例代码
#include <stdio.h>
int main() {
int age = 20;
float weight = 65.5f;
char name[] = "Alice";
// 普通输出
printf("姓名:%s,年龄:%d岁,体重:%.1fkg
", name, age, weight);
// 输出:姓名:Alice,年龄:20岁,体重:65.5kg
// 格式控制
printf("十六进制年龄:%#x,科学计数法体重:%e
", age, weight);
// 输出:十六进制年龄:0x14,科学计数法体重:6.550000e+01
// 左对齐与宽度控制
printf("|%10s| |%-10s|
", "Right", "Left");
// 输出:| Right| |Left |
return 0;
}
二、输入函数及格式字符(scanf函数)
1. 基本语法
scanf("格式控制字符串", 地址项1, 地址项2, ...);
格式控制字符串:包含格式字符和可选的分隔符(如空格、逗号)。
地址项:变量的地址(需用&运算符,数组名除外)。
常用格式字符与printf类似。
三 单个字符操作:putchar与getchar
1.putchar(c):输出单个字符c(c可为字符常量或 ASCII 码值)。
char ch = 'B';
putchar(ch); // 输出B
putchar(65); // 输出A(ASCII码65)
2.getchar():从输入缓冲区读取单个字符(返回int类型)。
int c;
printf("请输入一个字符:");
c = getchar(); // 读取字符,包括空格、换行符
printf("你输入的是:%c
", c);
【限时练习】
1. 以下表达式中,结果为 0 的是( )
A. 5 == 3
B. 5 | 3
C. 5 ^ 3
D. 5 >> 1
【答案】A
2.若int a = 3, b = 2;,则表达式(a++) + (++b)的值为( )
A. 5
B. 6
C. 7
D. 8
【答案】B
3. 若要输出浮点数3.1415926,保留 3 位小数且宽度为 8,左对齐,正确的格式是( )
A. printf("%8.3f", 3.1415926);
B. printf("%-8.3f", 3.1415926);
C. printf("%8f.3", 3.1415926);
D. printf("%.3-8f", 3.1415926);
【答案】B
4.若要读取double类型变量d,正确的scanf格式是( )
A. scanf("%f", &d);
B. scanf("%lf", &d);
C. scanf("%d", &d);
D. scanf("%Lf", &d);
【答案】B
5.表达式3 * 2 / 4 + 5 % 3的值是( )
A. 1
B. 2
C. 3
D. 4
【答案】C
6.若char ch = 'A';,执行printf("%d", ch + 32);的输出是( )
A. 94
B. 95
C. 96
D. 97
【答案】D
7.以下代码的输出是( )
int a = 10;
printf("%d", a += a -= a * a);
A. -180 B. 0
C. 10 D. 20
【答案】A
8.表达式5 > 3 > 1的值为 1。( )
【答案】×
9.scanf("%d,%d", &a, &b)要求输入时用逗号分隔两个整数。( )
【答案】√
10.printf("%.2f", 3.1415);会输出 3.14。( )
【答案】√
11.表达式!(5 < 3)的值为 0。( )
【答案】×
12. 若int a = 5;,则printf("%d", a++);会输出 6。( )
【答案】×
13.表达式5 | 3的结果是 7。( )
【答案】√
【内容小结】
学科网(北京)股份有限公司
$$