内容正文:
2.2节:常量和变量
编程语言基础——C语言
同步精品课堂
高教版(第5版)
掌握国家标准《机械制图》中有关图幅、比例、字体图线等基本规定。
教学目标
一
03
掌握正确定义整型、浮点型、字符型变量的方法
掌握规范化指数形式等不同数值表示,并能分析整型数据溢出和浮点型数据舍入误差等关键问题
04
浮点型常量和字符型常量的表示方法及其在内存中的存储原理
02
掌握常量与变量的基本概念,并区分整型、浮点型、字符型等主要数据类型
01
教学重难点
二
03
整型变量的值域范围,导致数据溢出的现象及原因
变量的定义与使用规则
04
字符型数据的处理与存储机制
02
浮点型数据的表示与存储
01
导入新课
三
程序世界的基本积木——常量与变量
假设我们要为一位学生“小明”建立数字档案,我们需要记录以下信息:
姓名: ‘M’(字符)
年龄: 18(整数)
身高: 1.75(带小数)
班级: ‘A’(字符)
如何用程序描述一个“学生”?
(1)哪些信息是固定不变的?哪些可能会变?
(2)为什么年龄用整数,而身高要带小数?
思考
今天,我们就来深入剖析程序世界中这些最基本、最重要的积木——常量与变量,看看它们有哪些类型,以及如何在内存中“安家落户”。
新知讲授
四
知识点1:浮点型常量
浮点型数据是用来表示具有小数点的实数的。在C语言中,实数是以指数形式存放在存储单元中的。一个实数表示为指数可以有不止一种形式,如3.14159可以表示为3.14159×100、0.314159×101、0.0314159×102、31.4159×10-1、314.159×10-2、等,它们代表同一个值。可以看到,小数点的位置是可以在314159几个数字之间、之前或之后(加0)浮动的,只要在小数点位置浮动的同时改变指数的值,就可以保证它的值不会改变。由于小数点位置可以浮动,所以实数的指数形式称为浮点数。
概述
新知讲授
四
知识点1:浮点型常量
1、浮点型常量的表示方法
C语言中的浮点类型主要分为单精度浮点型(float)和双精度浮点型(double)两种,一般以双精度浮点型(double)为主。
C语言中的浮点数就是生活中常说的“实数”。浮点数有两种表示形式:
(1)十进制小数形式。它由数字和小数点组成(注意:必须有小数点)。如下表所示:
0.123 123. 123.0 0.0 -1.2
1234.56 .5 6. 100000000.0 -1.4
新知讲授
四
知识点1:浮点型常量
1、浮点型常量的表示方法
(2)指数形式。如123e3或123E3都代表123×103 。但注意字符e(或E)之前必须有数字,且e (或E)后面的指数必须为整数。
e3 2.1e3.5 .e3 e 13.4E1.2
1.2345e2 0.345E-3 -765e12 -.5E-8 6.e-7
1.0e10 .2E-1 1.22E1 -1E-1 6.0E3
新知讲授
四
知识点1:浮点型常量
1、浮点型常量的表示方法
(3)规范化的指数形式。
一个浮点数可以有多种指数表现形式。例如“123.456”可以表示为下表所示的形式:
其中,“1.23456e2”可以称为“规范化的指数形式”。即在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字,如2.3478e2、3.0999e5等均属于规范化的指数形式。一个浮点数在用指数形式输出时,采用规范化的指数形式输出。
123.456e0 12.3456e1 1.23456e2 ……………………
0.123456e3 0.0123456e4 0.00123456e5
新知讲授
四
知识点1:浮点型常量
2、浮点型数据在内存中的存放形式
编译系统为每一个float型变量分配4个字节,数值以规范化的二进制数指数形式存放在存储单元中,在存储时,系统将实型数据分成小数部分和指数部分两个部分,分别存放。小数部分的小数点前面的数为0。如3.14159在内存中的存放形式如下图所示:
3.14159=3.14159*100=0.314159*101=314.159*10-2
注意
由于用二进制形式表示一个实数以及存储单元的长度是有限的,因此不可能得到完全精确的值,只能存储成有限的精确度。
新知讲授
四
知识点2:字符型常量
1、认识字符型常量
(1)C语言的字符常量是用单引号(即撇号)括起来的一个字符,如‘*’‘a’‘A’‘&’‘!’等都是字符常量。但要注意,‘a’和‘A’是不同的字符常量。
(2)字符数据存放在内存中的,并不是字符本身,而是字符的代码,即ASCII码(美国标准信息交换码)。ASCII标准字符集定义了128个字符,每个字符对应于一个ASCII码,编码值为0~127。
新知讲授
四
知识点2:字符型常量
2、认识ASCII字符集
ASCII字符集包括:
【字母】大写英文字母A~Z,小写英文字母a~z
【数字】0~9
【专门符号】29个,包括
! " # & ' ( ) * + , - . / : ; < = > ? [ \ ] ^ _ ` { | } ~
【空格符】空格、水平制表符(tab)、垂直制表符、换行、换页(form feed)
【不能显示的字符】
空(null)字符(以'\0'表示)、警告(以'\a'表示)、退格(以'\b'表示)、回车(以'\r'表示)等
新知讲授
四
知识点2:字符型常量
2、认识部分ASCII字符集
通过下表可以看出,字符的存储形式与整数相似,不同的是,它在内存中仅占一个字节。C语言字符型数据与整型数据之间可以通用。
新知讲授
四
知识点2:字符型常量
3、认识转义字符
【概述】除了ASCII码表内所示的字符常量以外,一些不可显示的控制字符(如回车符、制表符、退格键等)在程序中无法用一个一般形式的字符表示,C语言允许使用一种特殊形式的字符常量来表示这些字符:一个以反斜杠“\”开头的字符,称为转义字符。转义字符实际上只能算一个字符。
常用转义字符如表所示:
换行符(将当前位置移到下一行开头) \’ 单引号
\t 水平制表符(跳到下一个<Tab>位置) \’’ 双引号
\b 退格 \0 表示空字符
\r 回车(将当前位置移到本行开头) \33或\033 表示Esc键(27)
\f 走纸 \07 表示响铃
\\ 反斜杠 \x0A 表示换行(10)
也可以使用“\”加上一个1~3位的八进制数或“\x”加上一个1~2位的十六进制数表示的ASCII码值来表示转义字符。
新知讲授
四
知识点3:整型变量
1、整型变量的分类
整型数据类型 缺省形式的
整型数据类型 字节数 取值范围
[signed ]int int 4 -2147483648~2147483647(-231~231-1)
unsigned [int] unsigned 4 0~4294967295(0~232-1)
[signed] short [int] short 2 -32768~32767(-215~215-1)
unsigned short [int] unsigned short 2 0~65535(0~216-1)
[signed ]long [int] long 4 -2147483648~2147483647(-231~231-1)
unsigned long [int] unsigned long 4 0~4294967295(0~232-1)
[signed ]long long [int] long long 8 -9223372036854775808~9223372036854775807
(-263~263-1)
unsigned long long [int] unsigned long long 8 0~18446744073709551615(0~264-1)
新知讲授
四
知识点3:整型变量
2、整型变量的定义和使用
(1)概述:
在程序的运行过程中,其值可以改变的量称为变量。每个变量都有一个名字,称为变量名。每个变量都必须进行变量说明,指明变量的类型,相当于给变量进行注册。编译时,系统根据变量的类型,在内存中分配合适大小的存储空间,这样就可以将该变量与其对应的存储空间联系起来。即:
变量代表一个有名字的、具有特定属性的一个存储单元。
变量用来存放数据,也就是存放变量的值。
在程序运行期间,变量的值是可以改变的。
变量必须先定义,后使用。
a
3
变量名
变量值
存储单元
新知讲授
四
知识点3:整型变量
2、整型变量的定义和使用
(2)变量名的命名规则:
C语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线。(注意:C编译系统将大写字母和小写字母认为是两个不同的字符)。
(3)整型变量的定义:
int a,b; //指定变量a,b为整型
unsigned short c,d; //指定变量c,d为无符号短整型
long e,f; //指定变量e,f为长整型
#include<stdio.h>
main()
{int a,b,c,d;//定义整型变量
unsigned u;//定义无符号整型变量
a=12;b=-24;u=10;
c=a+u;
d=b+u;
printf("a+u=%d
",c);
printf("b+u=%d
",d);
}
新知讲授
四
知识点3:整型变量
3、整型数据的溢出
#include<stdio.h>
main()
{
short a,b;
a=32767;
b=a+1;
printf("%d,%d
",a,b);
}
运行结果为:32767,-32768
a: 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
b: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
32767
-32768
新知讲授
四
知识点4:浮点型变量
浮点型数据的舍入误差与定义
类型 字节数 有效数字 数值范围(绝对值)
float 4 7 10-37~10+38
double 8 17 10-307~10+308
C语言中float的有效位数是7,即精确到有效数字的第7位,每个单精度变量占用4个字节,有效范围是10-37~10+38。double的有效位数是17位,每个双精度变量占用8个字节,有效范围是10-307~10+308。
#include<stdio.h>
main()
{float x;//定义单精度浮点型变量
double y;//定义双精度浮点型变量
x=123456.789;
y=1.23456789E5;
printf("%f
%lf",x,y); }
注意:有效位数是指,一个float型变量只能保证有效数字是7位,后面的数字是无异于且无法准确表示的。
新知讲授
四
知识点5:字符型变量
字符型变量的定义和存储
(1)概述:字符型变量用来存放字符常量,一个字符型变量只能存放一个字符。
(2)字符型变量的定义:
char c1=97;//定义了一个字符型的变量,名为c1,可以存储一个字符。
char c2=98;//定义了一个字符型的变量,名为c2,可以存储一个字符。
(3)字符型变量的存储:(一个字符型数据,既可以以字符形式输出,也可以以整数形式输出)
97
c1
98
c2
a
b
ASCII码
字符
师生互动
五
互动挑战:给数据贴上“身份证”
【任务】
让我们一起分析以下数据项,判断它们通常属于哪种数据类型(整型、浮点型、字符型),以及其身份是“常量”还是“变量”。
【要求】
(1)个体思考:给1分钟时间,独立完成表格前两列的判断。
(2)小组讨论:3分钟小组讨论,统一答案,并思考“为什么”。
(3)全班分享:教师随机邀请小组分享答案,并重点引导讨论最后一列的“关键知识点”。
师生互动
五
互动挑战:给数据贴上“身份证”
数据项 数据类型 常量/变量(?)
圆周率 π (3.14159)
时间
班级的代号 ‘A’
光速 (3.0e8 m/s)
你的姓名首字母
银行账户的余额
随堂练习
六
1.关于C语言中的常量,以下叙述正确的是( )
A. 常量在程序运行期间其值可以被改变
B. 浮点型常量只有十进制小数一种表示形式
C. 字符型常量'\0'表示一个空格字符
D. 整型常量10和浮点型常量10.0在内存中的存储形式不同
答案:D
解析:常量值不可变;浮点型常量还有指数形式(如1.0e1);'\0'是空字符(NULL),ASCII码为0,空格字符是' ',ASCII码为32;整型和浮点型数据的编码存储方式有本质区别。
随堂练习
六
2.以下选项中的浮点常量,属于正确规范化指数形式的是( )
A. 1.23e2
B. 12.3e1
C. 123e0
D. 1230e-1
答案:A
解析:规范化指数形式要求尾数部分小数点前有且只有一位非零数字。
随堂练习
六
3.以下关于转义字符的叙述,错误的是( )
A. '
' 代表换行符。
B. '\101' 代表八进制数101对应的ASCII字符,即'A'。
C. '\\' 代表一个反斜杠字符。
D. '\0' 通常用作字符串的结束标志,它和空格字符' '是等价的。
答案:D
解析: '\0'是空字符(NULL),ASCII码为0;' '是空格字符,ASCII码为32。两者不等价。'\0'常用作字符串结束符。
随堂练习
六
4.在C语言中,字符型变量在内存中占用的字节数和存储形式是( )
A. 2个字节,存储Unicode编码
B. 1个字节,存储该字符的ASCII码值
C. 4个字节,存储该字符的图形点阵
D. 由编译器决定,存储形式不确定
答案:B
解析:在标准C中,char类型通常占1个字节,存储的是该字符的ASCII码值(一个整数)。
随堂练习
六
5.以下不能作为C语言合法常量的是( )
A. 1.2e0.5
B. '\x41'
C. 100L
D. 3.14F
答案:A
解析:A错误,指数形式(e或E)后面的指数必须为整数。B是十六进制转义字符(代表'A'),C是长整型常量,D是单精度浮点型常量。
随堂练习
六
6.关于变量的定义和初始化,下列说法正确的是( )
A. 变量必须先定义后使用,但不可以初始化。
B. 定义一个变量后,它的值默认为0。
C. 字符型变量只能存储字母字符,不能存储数字字符。
D. 浮点型变量可以用指数形式进行初始化,如:float f = 1.5e2;
答案:D
解析:浮点变量可以用十进制或指数形式初始化。
随堂练习
六
7.下列变量定义中,合法的是( )
A. int 3abc;
B. float long;
C. char _name;
D. double 123.45;
答案:C
解析: A、D错误,变量名不能以数字开头;B错误,long是关键字,不能用作变量名;C正确,变量名可以以下划线开头。
随堂练习
六
8. ASCII 码中,字符'A'的编码值比'a'的编码值( )
A. 大 32
B. 小 32
C. 大 1
D. 小 1
答案:B
解析:'A'的 ASCII 码是 65,'a'是 97,65 比 97 小 32。
课堂小结
七
谢谢
EV录屏5.4.2软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
EV录屏5.4.2软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
$