内容正文:
2.3节:赋值语句
编程语言基础——C语言
同步精品课堂
高教版(第5版)
掌握国家标准《机械制图》中有关图幅、比例、字体图线等基本规定。
教学目标
一
03
理解并掌握赋值表达式的值与类型
掌握赋值中的类型转换规则
04
掌握基本赋值运算符(=)和复合赋值运算符(如 +=, *=),并理解其使用场景与等效含义
02
掌握赋值语句的格式与功能
01
教学重难点
二
03
赋值过程中“自动类型转换”的规则,以及“强制类型转换”的语法与应用时机
区分赋值运算符(=)与数学中的等号(=),建立程序中的“赋值”而非“相等”的概念
04
赋值表达式的概念,及其作为表达式一部分时的求值逻辑
02
赋值运算符与复合赋值运算符的正确使用;赋值语句的完整执行过程
01
导入新课
三
生活中的 “赋值” 与 C 语言的赋值语句
妈妈把10 个苹果放进你的果篮 → 果篮 = 10 个苹果
你把零花钱50 元存进储蓄罐 → 储蓄罐 = 50 元
导入情境:
在生活中,我们经常会把一个 “值” 赋予某个 “容器”。在 C 语言里,也有这样的操作,它就是赋值语句—— 让数据有了 “归属”,是程序中数据流转的核心环节。
本节聚焦:
今天我们就来探究 C 语言中赋值语句的格式、功能,以及赋值时的数据类型转换奥秘。
新知讲授
四
赋值语句是程序中最经常出现的语句,它的作用是对一个变量进行赋值。赋值就是将一个数据存入一段连续的具有若干个存储单元的存储空间中,该存储空间有一个名字,就是前面介绍的变量名。程序中通过变量名来使用这些存储空间,既可以通过变量名将某个数据存入,又可以通过变量名将已存入的数据读出。对于一个变量进行定义后,这个变量如果没有赋值,那么它的值是不确定的,所以对变量进行操作之前,应该对该变量进行赋值。
概述
新知讲授
四
知识点1:赋值语句的格式与功能
1、赋值运算符
【概述】赋值符号“=”称为赋值运算符,他的作用是将一个数据赋给一个变量。
【例如】
“a=3”的作用是执行一次赋值操作(或称赋值运算)。把常量3赋给变量a。也可以将一个表达式的值赋给一个变量。
赋值运算符 符号:= 优先级:14 右结合性
新知讲授
四
知识点1:赋值语句的格式与功能
2、赋值表达式
由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。它的一般形式为: 变量 赋值运算符 表达式
例如:“a=5”是一个赋值表达式。
对赋值表达式求解的过程是:先求赋值运算符右侧的“表达式”的值,然后赋给赋值运算符左侧的变量。
【注意】赋值运算符的左侧,不能为“常量”或“表达式”;其右侧可以是变量、常量或表达式。
int a=3,b,c,d;
c+b=a; 3=b+a; 3+a=3;
int a=3,b,c,d;
b=a; c=b+a; d=3;
新知讲授
四
知识点1:赋值语句的格式与功能
3、赋值语句的格式与功能
赋值语句是由赋值表达式和一个语句结束符(即分号“;”)组成的。它的一般形式是:
变量=表达式;
功能:首先计算赋值号“=”右边的表达式的值,然后将结果送给赋值号“=”左边的变量。
例如:g=9.8;//其中g为变量名,“=”为赋值号,该语句表示将数据9.8赋给变量g。
【注意】“=”不是等号,而是赋值号。赋值语句与算术中的等式是完全不同的。
【注意】在赋值语句中,赋值号“=”左边一定是一个变量,不能是常量或表达式。
新知讲授
四
知识点1:赋值语句的格式与功能
3、赋值语句的格式与功能
#include<stdio.h>
main()
{ char c1='a',c2;
int k;
k=c1; //将字符型变量c1赋给整型变量k
c2=97; //将整数97赋给字符型变量c2
printf(“%c,%c,%d
”,c1,c2,c1);//字符变量既可按字符型输出,也可按整型输出
printf(“%d,%c
”,k,k); //整型变量既可按整型输出,也可按字符型输出
}
新知讲授
四
知识点1:赋值语句的格式与功能
4、复合的赋值运算符
【概述】在赋值符“=”之前加上其他运算符,可以构成复合的运算符。如果在“=”前加一个“+”运算符就成了复合运算符“+=”凡是二元(二目)运算符,都可以与赋值符一起组成复合赋值符。C语言规定可以使用10种复合赋值运算符。如下所示:
举例 举例 举例
+= a+=b→a=a+b %= a%=b→a=a%b ^= a^=1→a=a^1
-= a-=b→a=a-b <<= a<<=1→a=a<<b |= a|=1→a=a|1
*= a*=b→a=a*b >>= a>>=1→a=a>>1
/= a/=b→a=a/b &= a&=1→a=a&1
新知讲授
四
知识点1:赋值语句的格式与功能
4、复合的赋值运算符
(1)以“a+=3”为例,它相当于使a进行一次自加3的操作。即先使得a加3,再赋给a。
①a+=b (其中a为变量,b为表达式)
②a+=b (将有下划线的“a+”移到“=”右侧)
③a=a+b (在“=”左侧补上变量名a)
①x%=y+3
②x%=(y+3)
③x=x%(y+3) (不要错写成x=x%y+3)
C语言采用这种复合运算符,一是为了简化程序,使程序精炼,二是为了提高编译效率。
新知讲授
四
知识点2:赋值语句中的类型转换
1、自动类型转换
【概述】
当赋值语句(或赋值运算表达式)中“=”左边的变量与右边的表达式的数据类型不一致时,C编译系统会自动实现数据类型的转换,转换的原则是将赋值号右边的表达式的值的类型转换成与左边变量相同的类型后再赋值。例如:
int a; short b; char c;
a=b; //short型变量b的值转换成int型后再赋给a
b=c; //char型变量c的值转换成short型后再赋给b
a=b+c; //将b和c的值转换成int型后相加,再赋给a
新知讲授
四
知识点2:赋值语句中的类型转换
1、自动类型转换
【数据的截取】
对于不同类型的变量,由于其数据的长度不同,当左边变量的数据类型比右边表达式值的类型长时,转换后的值不会改变精度或准确度,只是改变值的表示形式。然而,当右边表达式值的类型比左边变量的类型要长时,这种转换的结果会对右边的数据进行截取,仅取出与左边变量类型相同的长度,这可能会丢失“高位数据”。
char
int
float
double …
新知讲授
四
知识点2:赋值语句中的类型转换
1、自动类型转换
#include<stdio.h>
main()
{ double x;
int a=350;
char c;
c=a;//将350赋给char型变量c中
x=a;//将350赋给double型变量x中
printf("a=%d,c=%d,x=%f
",a,c,x);
}
char
int 1 0 1 0 1 1 1 1 0
350的二进制形式
char类型仅占1字节(8位),无法完整存储数值“350”,但double型占8字节(64位),可以完整存储数值“350”。
新知讲授
四
知识点2:赋值语句中的类型转换
2、强制类型转换
强制类型转换的运算符为(类型),优先级为2。
格式: (类型)表达式
功能:将表达式的结果类型强制转换成指定类型。
例如:
(int)3.14 //结果为整型3
(float)1 //结果为浮点型1.0
1/2 //结果为0
(float)1/2 //结果为0.5
#include<stdio.h>
main()
{
double x;
int a=350;
char c;
c=(char)a;//强制类型转换为char型
x=(double)a;//强制类型转换为double型
printf("a=%d,c=%d,x=%f
",a,c,x);
}
师生互动
五
🩺 赋值诊断室:火眼金睛辨对错
病例档案(分析以下代码片段) 诊断任务(请分组讨论)
int a, b;
a = 5;
b = a;
10 = a; 语法诊断: 哪一行有错误?为什么?
int count = 1;
count += 2;
count =+ 3; 语义辨析: count += 2和 count =+ 3分别是什么意思?结果有何不同?
float pi = 3.14;
int x = pi;
int y = (int)pi; 结果预测: 执行后,变量 x和 y的值分别是多少?这两种赋值方式有何本质区别?
int k = 5;
k = k * (k += 2); 终极挑战: 最终 k的值是多少?尝试分解其计算步骤。
随堂练习
六
1.下列关于C语言赋值运算符“=”的说法,正确的是( )
A. 它表示相等关系
B. 它的结合方向是自左向右
C. 它将右侧表达式的值赋给左侧的变量
D. 一个赋值语句只能给一个变量赋值
答案:C
解析: 赋值运算符“=”用于赋值,而非比较相等(相等是“==”)。其结合性为自右向左,允许连续赋值(如a=b=5)。
随堂练习
六
2.若有定义 int a;,则表达式 a = 3.5 + 4.7执行后,变量a的值是( )
A. 8
B. 8.2
C. 8.0
D. 语法错误
答案:A
解析:右侧表达式结果为double型(8.2),赋给int型变量a时发生自动类型转换,小数部分被截断,故a的值为8。
随堂练习
六
3.在C语言中,表达式 a = b = c = 5;的合法性及执行顺序是( )
A. 不合法,不能连续赋值
B. 合法,执行顺序为 a = (b = (c = 5))
C. 合法,执行顺序为 (a = b) = (c = 5)
D. 合法,但执行顺序不确定
答案:B
解析: 赋值运算符是右结合的,因此 a = b = c = 5等价于 a = (b = (c = 5))。
随堂练习
六
4.表达式 (a = 5)的值是( )
A. 0
B. 1
C. 5
D. 语法错误
答案:C
解析:赋值表达式的值就是被赋的值。因此 (a = 5)这个表达式的值是5。
随堂练习
六
5.若有 int a=5, b=2;,则表达式 b += a *= b执行后,a和b的值分别是( )
A. a=10, b=12
B. a=10, b=7
C. a=5, b=12
D. a=5, b=7
答案:A
解析: 复合赋值运算符右结合。先计算 a *= b即 a = a * b = 5 * 2=10,再计算 b += a即 b = b + a = 2+10=12。
随堂练习
六
6.以下选项中,属于合法复合赋值运算符的是( )
A. =+
B. =*
C. &+
D. %=
答案:D
解析:常见的复合赋值运算符有:+=, -=, *=, /=, %=等。%=是取模赋值。
随堂练习
六
7.若有 int a = 5;,则执行 a += a -= a * a;后,a的值是( )
A. -15
B. -40
C. 0
D. 25
答案:B
解析:从右向左结合计算。先算 a -= a*a即 a = a - (a*a) = 5 - 25 = -20,此时a变为-20。再算 a += a即 a = a + a = -20 + (-20) = -40。
随堂练习
六
8.对于 float f = 3.14; int i; i = (int)f;执行后,i的值是( )
A. 3.14
B. 3
C. 4
D. 结果不确定
答案:B
解析:强制类型转换 (int)会截断小数部分,只保留整数部分。因此3.14被截断为3。
随堂练习
六
9.若有 int a=7.5;执行后,变量a的值是( )
A. 7
B. 7.5
C. 8
D. 编译错误
答案:A
解析:这是赋值时的自动类型转换。将double型常量7.5赋给int型变量a,小数部分被丢弃,a得到7。
随堂练习
六
10.要实现将float型变量f的值四舍五入存入int型变量i,以下正确的是( )
A. i = (int)f;
B. i = (int)(f + 0.5);
C. i = int(f);
D. i = f + 0.5;
答案:B
解析: (int)(f + 0.5)是实现四舍五入的常用方法。例如f=3.4,3.4+0.5=3.9,取整为3;f=3.6,3.6+0.5=4.1,取整为4。
随堂练习
六
11.以下强制类型转换写法正确的是( )
A. int x = (int)10.5;
B. int x = int(10.5);
C. int x = (int10.5f);
D. float x = float(10);
答案:A
解析:C语言的强制类型转换格式是 (类型名)表达式。
随堂练习
六
12.若有 unsigned char c = 300;,则c的值是( )
A. 300
B. 44
C. 255
D. 编译警告,结果不确定
答案:B
解析:unsigned char 范围为0~255。300超出范围,发生截断。300的二进制是100101100,取低8位(00101100)是44。
课堂小结
七
谢谢
EV录屏5.4.2软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
EV录屏5.4.2软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
EV录屏5.4.2软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
$