数据描述与基本操作.docx
- 文档编号:28671430
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:36
- 大小:58.11KB
数据描述与基本操作.docx
《数据描述与基本操作.docx》由会员分享,可在线阅读,更多相关《数据描述与基本操作.docx(36页珍藏版)》请在冰豆网上搜索。
数据描述与基本操作
第二章数据描述与基本操作
教学目的:
程序设计是对数据进行不同的操作来解决实际问题的,通过该章的学习,使学生掌握程序中所用的数据类型有哪些?
对这些数据的操作有哪些?
各种操作对不同的数据类型运算后的结果是什么?
为编程序中用到常量、变量、函数、表达式时打下一个好的基础,能用表达式表示要解决的问题。
重点与难点:
变量定义,各种运算符的操作结果,输入与输出语句的合理使用,各种表达式值的判断,用表达式处理具体问题。
数据与操作是构成程序的两个要素。
程序中所用的数据和对数据的操作是编程序的主要内容,掌握了数据和对数据的基本操作,是编程序的基础,特别是求表达式的值,对程序执行结果和程序流程起着决定的作用。
2.1数据类型
数据是程序的必要组成部分,也是程序处理的对象。
程序中使用“数据类型”的概念,主要是数据的存储形式和数据所参加的运算不同,程序中所用到的数据和变量都要归属于某一类型。
C语言中数据类型介绍:
⒈基本类型(整型、实型、字符型)
⒉构造类型(数组、结构体、共用体、文件)
⒊指针类型
⒋空类型
2.1.1数值的定点表示与浮点表示形式
浮点数:
看π的不同形式
3.14159×1003.14159e0
0.314159×1010.314159e+1
31.4159×10-131.4159e-1
同一个π可用不同的形式表示,主要是小数点的位置在变化,
0.314159
+1
即一个实数可分“尾数和阶码”两部分来表示,称为浮点数。
即
是实数在内存中的存储形式。
12、–20,10称为定点数,在计算机中的存储形式按字节用二进制形式存储。
00000000
00001010
左图为10的16位存储形式
2.1.2字符型数据的表示和存储形式
0
1
1
0
0
0
0
1
如:
'A','9'为字符型数据,在内存中以ASCII码代码存放(字符的ASCII代码可查阅附录I),例'a'的ASCII码为97,则存储形式为:
与存放整数97一样,即字符型的数据在ASCII码允许在范围内与整型数相同。
以下程序运行结果可说明问题:
main()
{charch;
ch=’a’;
printf(“%d,%c”,ch,ch);
}
输出结果为:
97,a
即字符型数据和整型数在一定范围内是通用的。
2.1.3数据的存储空间长度与取值范围
C语言中不同的数据类型分配不同的长度(以字节为单位1字节存8位二进制)的存储空间。
分配如下:
1字节字符型(char)2字节整型(int)
4字节长整型(long)单精度型(float)
8字节双精度型(double)
由于存储字节不同,所以取值范围就不同:
int–32768~32767
long–2147483648~2147483647
float和double取值范围更大。
2.1.4带符号的数据类型与无符号的数据类型
计算机内存中的正负数在存储时是通过最高位来表示的,如:
(以8位为例)
01101011表示正数107
10100111表示负数(补码)-89
即负数在内存中以负数的补码形式存放。
正数的补码就是该数本身化为二进制数。
如何求负数的补码:
先求该数的绝对值,化为二进制数;按位取反(1变0,0变1);再加1;如|-89|=8989=(01011001)2取反后等于10100110加1后变为10100111为补码。
有符号整型数的取值范围:
两字节十六位二进制数
最大数:
0111111111111111=32767
最小数:
1000000000000000=-32768(为负数的存储形式)
大家计算一下为什么是-32768?
无符号整型数的取值范围:
对于无符号数来说,高位不再来表示整数的符号位,16位的二进制数全部用来存放整数,因此无符号数不会是负数。
这时:
最大数:
1111111111111111=65535(不再代表-1,而是65535)
最小数:
0000000000000000=0
程序举例:
main()main()
{charch;{inta=-1;
ch=0362;/*八进制数*/printf("%d,%u\n",a,a);
printf("%d\n",ch);}}
输出结果为:
-14-1,65535
2.2常量和变量
不同的数据类型既可以以常量形式出现,也可以以变量形式出现。
常量在程序执行期间不发生变化、具有固定值。
变量则其值可发生变化,其实变量对应的是内存中的某一存储单元。
2.2.1直接常量和符号常量
直接常量就是程序中直接书写的常数:
12整型常量12.0,13.56实型常量's','D','A'字符型常量
符号常量在程序中用名字代表的常量,需要由编译预处理和说明语句定义。
例:
#definePI3.1415926
#defineM100
PI与M就是符号常量。
constfloatN356;说明语句N是符号常量。
在程序的其它语句中用到PI,M,N它的值就是对应的常数
2.2.2直接常量的书写格式
㈠整型常数(十进制、八进制、十六进制)
0开头八进制0x0X开头十六进制
02540890x1FF20af
12与12L加L为长整型,大小相同,但存储所占空间不同
㈡实型常量(小数形式和指数形式)
34.5.3451e21.5e-3e-31e-0.5
㈢字符常量(用单引号括起来的字符)
'A','W','\\'代表字符\,'\'不正确
㈣转义字符(以\开头后跟一个字符代表控制字符)
'\n'表示回车换行'\t'表示跳格
'\b'表示退格'\ddd'表示3位8进制数所对应的字符
'\xhh'表示2位16进制数所对应的字符
㈤字符串常量(用双引号括起来的多个字符)
"hello","12345","A"与'A'值相同,存储形式不同,前者2字节,后1字节。
2.2.3变量和对变量的赋值
数据被存储在一定的存储空间中,数据的加工就是在它们所在的存储区与运算器之间传送过程中实现的。
在高级语言程序中,数据连同存储空间被抽象为变量。
变量有名字标识,即变量名,用字母等来表示,它代表某个存储空和所存储的数据,存储空间的数据就是变量的值。
赋值运算就是从运算器向变量所对应的存储单元传送数据。
用“=”表示赋值操作。
C语言中的“=”符号称为赋值运算,由赋值运算符组成的表达式称为赋值表达式,形式如下:
变量名=赋值表达式
赋值号的左边必须是变量名,即代表一个存储单元或是代表某个存储单元的表达式;赋值号右边必须是C语言中合法的表达式。
它的作用是把右边表达式的值计算出来后赋给左边的变量,即放入存储单元。
若定义了inta,b则a=10b=a都是合法的赋值表达式。
若一个变量经过了多次赋值,则最后一次才是它的值。
赋值语句的注意事项:
1.和数学中的“等于号”不是等同关系。
2.赋值运算的执行方向同右向左,执行为先计算再赋值。
3.赋值号连接的式子称为赋值表达式,如:
a=3+5,赋值表达式的值等于赋值后左边变量中的值。
可写成连续赋值表达式:
b=a=3=5d=c=b=a=3+5
4.n=n+1数学式子无意义,但在程序中则有用的,是把n的值增加1再放到n中,程序中可用来计数。
2.2.4变量的声明
变量声明的意义
C程序中用到的变量都要声明它们属于哪一种类型。
即要明确指定变量的类型。
为什么呢?
不同变量所占存储单元大小不同。
不同数据类型对应不同的取值范围。
不同数据类型对应一组允许的操作(运算)。
int整型float单精度
double双精度char字符型
2.2.5标识符
标识符是给程序中处理的实体—变量、常量、函数、数组、结构体、文件等起名字的。
标识符定义的规则如下:
由字母、数字及下划线组成,且第一个字符必须是字母或下划线。
area,PI,_int,a_array,s1234,P101p都是合法的标识符;
456P、cade-y、w.w、a&b都是不合法的标识符;
C语言中规定,大写字母和小写母是两个不同的标识符,因此page与Page,p1与P1都是不同的标识符。
对标识符的长度(含字母、数字和下划线的个数)不同的系统也有不同规定,一般规定只识别前8个,即前8个字符相同就被认为是同一个标识符(如:
abcdefgh1与abcdefgh2认为是同一个变量名)。
关键字
是C语言中规定的一批专用标识符,它们在程序中在专门的用处,不能用作它用,也就是用户再不能对它们重新定义。
这些关键字如下:
caseifforintdouble等。
预定义标识符
这种标识符在C语言中也有规定,它是库函数名或预编译处理命令等。
如:
printf,define,scanf等。
这类标识符允许用户另作它用,但将失去系统规定的原意,鉴于这种原因,建议用户不要把这些预定义标识符另作它用。
主要是各种函数名(数学、字符、文件函数)。
用户标识符:
由用户根据需要定义的标识符。
一般用来给变量、函数、数组或文件命名,是用户编程的关键(类似与数学中列方程解应用题时:
设××是x;××是y)。
用户应遵守标识符命名的规则,尽量不要和关键字和预定义标识符相同,还应做到“见名知义”,增加程序的可读性,如果用户定义的标识符与关键字相同,编译时会给出错误信息;如果和预定义标识符相同,系统不报错,只是预定义标识符失去原来的含义,代之以用户确定的含义,也可能引起程序运行时的错误。
2.3运算符与表达式
运算是对数据的加工,基本运算符是用简洁的符号记述,参加运算的对象称为操作数。
表达式描术了对哪些数据,以什么顺序以及施以什么样的操作,由运算符与运算量组成。
C语言中提供了丰富的运算符,能构成多种表达式,掌握了C语言中的表达式,及表达式值的计算方法是必需的。
C语言中的运算有13种:
算术运算符:
+,-,*,/,%,++,--
关系运算符:
>,<,==,>=,<=,!
=
逻辑运算符:
!
&&,||
位运算符:
<<,>>,~,|,^,&
赋值运算符:
=条件运算符:
?
:
逗号运算符:
指针运算符:
&,*
求字节数运算符:
sizeof()
强制类型转换运算符:
(类型说明符)
分量运算符:
.->下标运算符[]
学习运算符应注意以下几点:
⑴运算符的功能是什么?
⑵与运算量的关系(个数、类型)。
⑶运算的优先级(多种运算组成的表达式)。
⑷结合方向。
如:
3*5/6与a=3>5
⑸结果类型,两个一同类型的数据参加运算后产生结果的数据类型是什么?
如:
3/2与3/2.0的结果就不同。
2.3.1算术运算与算术表达式
基本算术运算符
在C语言中的算术运算有+、-、*、/、%分别代表加、减、乘、除、求余运算。
其中求余运算的两个数必须是整型数,余数的符号与被除数相同。
如:
13%-3,结果为2;-19%4结果为-3
由于+、-号的特殊性,可作单目运算。
但必须出现在左边。
双目运算时,数据类型一致,才能进行运算,所得类型与运算数的类型一致,如1/2结果为0;而1.0/2.0结果为0.5,如数据类型不一致,系统会自动进行转换,转换见附录二。
所有实型数运算均为以双精度型方式进行,若是单精度则在尾数补0,转换为双精度型。
运算符的优先级
在C语言中,常量、变量、函数调用及按C语言语法规则用运算符把运算数连接起来的式子都是合法的表达式。
凡是表达式都有一个值,即运算结果。
算术运算符的优选级:
()、+、-、*、/、%、+、-
单目双目
同级同级同级
高低
算术运算符和括号的结合性和四则混合运算法则基本一致。
算术运算符中只有单目运算“-”和“+”的结合性是从右到左,其余都是从左到右。
如:
(5+1)/2结果为3;5+1/2结果为5;5*-2结果为-10;等价于5*(-2)的值。
书中附录三给出了C语言运算符优先级和结合方向。
算术表达式
用算术运算符和括号将运算量(操作数)连接起来符合C语法的表达式称为算术表达式。
运算对象可以是:
常量、变量、函数等。
如:
x*y/(a+b)(a+b)*h/2
复合的赋值表达式
在赋值运算符之前加上其它运算就构成了复合赋值运算符,C语言中规定了10复合运算符,与算术有关是+=、-=、*=、/=、%=有5种,它的运算优先级与赋值运算同级。
它们代表的赋值表达式是什么形式呢?
n+=1代表n=n+1
n-=m+3代表n=n-(m+3)
n*=m+3代表n=n*(m+3)
n/=m+3代表n=n/(m+3)
n%=(m+3)代表n=n%(m+3)
举例:
已有变量a,其值为9计算表达式a+=a-=a+a的值。
由赋值运算与复合赋值运算同级,运算从右到左,所以:
a+a值为18a-=18值为-9a+=-9值为-18
自加、自减运算
1、自加运算符(++)、和自减运算符(--)的运算结果是使运算对象的值增1和减1,如:
i++相等于i=i+1,i--相等于i=i-1,其实是一种赋值运算。
2、++、--是单目运算,运算对象可以是整型和实型变量,不能是常量和表达式,如:
++3、(j+i)--是不正确的,
3、自加、自减运算可作为前缀运算行,也可作为后缀运算符,所以:
++i、--i、i++、i--都是正确的。
自加和自减运算对变量本身来说都是加1和减1,但对表达式来说值是不同的。
若i=5,则++i的值为6;i的值为6;若i=4,则--i的值为3;i的值为3;
若i=5,则i++的值为5;i的值为6;若i=4,则i--的值为4;i的值为3;
4、++和--运算结合方向是“自右向左”-i++相等于-(i++)
5、不要在一个表达式中对一个变量重复使用自加、自减运算,由于编译系统不同,可能结果也不同。
赋值类运算符的副作用及限制
C语言允许在表达式中使用一个以上的赋值类运算符,但这种灵活性会给程序的理解困难,也会引起副作用:
⒈费解、易于误解
c=b*=a+2;容易理解为b*=a,c=a+2
x=i+++j;是i+(++j)还是(i++)+j应为(i++)+j
⒉不定解
j=3;i=(k=j+1)+(j=5);
执行以上语句,不同的系统得到的结果不同。
关系运算符和关系表达式
C语言的关系表达式和逻辑表达式,其运算结果会得到一个逻辑值。
逻辑值只有两个,在其它高级语言中用“真”、“假”来表示。
在C语言中没有专门的“逻辑值”,而是用非零值来表示“真”,用零表示“假”。
因此,对任意一个表达式,若它的值为0时,就代表一个“假”值,只要它的值是非零,无论是正数和负数,都代表一个“真”值。
关系运算是一种比较运算,即将两个运算量进行比较,判断它们的大小相等不等的关系。
关系运算符;<,<=,>,>=,==,!
=;在两个字符组成的关系运算符中间不能加空格。
关系运算符是双目运算符,具有自左向左的结合性。
运算的优先级前四种同级,后两种同级,前四种高于后两种。
如果一个表达式中既有算术运算、关系运算和赋值运算,则优先级次序是:
算术运算;关系运算;赋值运算。
关系表达式及关系表达式的值
由关系运算符与运算量组成的表达式称为关系表达式。
关系运算符两边的运算对象可是C语言中任意合法的表达式。
如:
a+b a=x>ya=(x>y) 判别式b2-4ac≥0的C语言关系表达式为b*b-4*a*c>=0 关系运算的结果得一个整数值0或者1,在C语言中没有专门的逻辑值,而用0代表真,1代表假。 分析: x∈(5,13)关系表达式5 当关系运算符两边的类型不一致时,一边是整型,另一边是实型,系统要自动把不整型转换为实型,然后进行比较(转换规则见附录二)。 若两个数x和y都是实数,在进行相等的比较时,由于内存中的实数表示有误差,不可能精确相等,这将导致关系表达式x==y的值总为0,即在程序设计时应尽量避免两个实型进行相等的关系运算。 逻辑运算符和逻辑表达式 当表示一些比较复杂的关系时,只有关系表达式是不行的。 如: 要表示x∈[a,b]。 三角形任意两边之和大于第三边。 坐标(x,y)在单位圆内,且在第一象限。 这些条件只用关系运算是不能表达的。 C语言中提供了三种逻辑运算,可以表示这些复杂的条件。 逻辑运算符为: ! 、&&、||。 x∈[a,b]表示为: x>=a&&x<=b a,b,c为三角形的三条边,能组成三角形表示为: a+b>c&&b+c>a&&a+c>b (x,y)在单位圆内且在第一象限表示为: x*x+y*y<1&&x>0&&y>0 逻辑运算的优先次序为! 、&&、||。 若一个表达式中有前面介绍的所有运算(算术、赋值、关系、逻辑),它们之间的运算优先次序从高到低为: ! 、算术运算、关系运算、&&、||、赋值 逻辑表达式的值 由逻辑运算符和运算对象组成的表达式称为逻辑表达式,运算对象可以是C语言中任意合法的表达式,它们的值是什么呢? 和关系表达式值一样,逻辑表达式值运算的结果只有真 (1)假(0)值。 x∈[a,b]当x=2;a=1;b=4x>=a&&x<=b值为1(真) 当x=-2;a=1;b=4x>=a&&x<=b值为0(假) a,b,c为三角形的三条边 当a=3;b=4;c=5a+b>c&&b+c>a&&a+c>b值为1(真) 当a=2;b=1;c=3a+b>c&&b+c>a&&a+c>b值为0(假) 当x=2,a=1;b=4xb的值为(假) 当x=-2,a=1;b=4xb的值为(真) 逻辑表达式的值可以通过下列运算规则表中查到: A B ! A A&&B A||B 0 0 1 0 0 1 0 0 0 1 0 1 1 0 1 1 1 0 1 1 逻辑表达式注意事项 数学式子和逻辑表达式,如数学式子0 )。 应用0 (注意是编程序,不是写数学式子) 在由&&和||组成的逻辑表达式中,在特定情况下会出现短路现象(一旦可以确定逻辑表达式的真、假值),例如有如下逻辑表达式: a++&&b++ 若a的值为0,此时的逻辑表达式的值已确定为假0,就不对b进行求值而跳过,这时a的值发生了变化(0变成1),而b的值不发生变化。 若a的值不是0,此时逻辑表达式的值还需通过b的值来确定,不管逻辑表达式的值是真假,a、b的值都要发生了变化。 又如下逻辑表达式: a++||b++ 若a的值为1,此时的逻辑表达式的值已确定为真1,就不对b进行求值而跳过,这时a的值发生了变化(1变成2),而b的值不发生变化。 若a的值是0,此时逻辑表达式的值还需通过b的值来确定,不管逻辑表达式的值是真假,a、b的值都要发生了变化。 关系表达式和逻辑表达式练习题: 1.若a=4,则! a的值是什么? 2.若a=4;b=5,则a&&b的值是什么? 3.a,b的值同前,则a||b的值是什么? 4.a,b的值同前,则! a||b的值是什么? 5.4&&0||2的值是什么? 关系表达式和逻辑表达式举例: 6.5>3&&2||8<4-! 0的值是什么? 7.若a=3,b=4,c=5;下列逻辑表达式的值是什么? a+b>c&&b==ca||b+c&&b-c ! (a>b)&&! c||1! (x=a)&&(y=b)&&0 ! (a+b)+c-1&&b+c/2 8.表示条件10 9.判断x能被2整除的关系表达式是什么? 10.分别判断x是偶数或是奇数的关系表达式是什么? 11.判断某年是否是闰年的逻辑表达式是什么? (能被4整除,但不能被100整;能被4整除,又能被400整除) 条件运算及条件表达式 C语言中还提供了一种特殊的运算—条件运算符,由此构成的表达式也可形成简单的选择结构,这种选择结构以表达式的形式内嵌在允许出现表达式的地方,使得可根据不同的条件使用不同的表达式。 (类似于Excel中的IF()函数) 条件运算符: ? : 是唯一的一个三目运算符,要求三个对象。 由条件运算符构成的条件表达式: 表达式1? 表达式2: 表达式3 条件运算及条件表达式 条件表达式的运算功能: 表达式1的值为非0时,求出表达式2的值,此时表达式2的值就是整个条件表达式的值;若表达式1的值为0时,求出表达式3的值,此时表达式3的值就是整个条件表达式的值。 例如: x=5,y=10,则max=x>y? x: y的值max等于多少? 条件运算的优先级 优于赋值运算,但低于逻辑、关系、算术运算。 y=x>10? 100: 200; printf(“abs(x)=%d”\n,x>0? (-1)*x: x)(输出x的绝对值) 程序举例: 用条件表达式,求三个数中的最大和最小数并输出。 main() {inta,b,c,max,min; scanf("%d%d%d",&a,&b,&c); max=a>b? a: b; min=a a: b; max=max>c? max: c; min=min min: c; printf("max=%d,min=%d\n",max,min); } 逗号运算和逗号表达式 “,”是C语言提供的一种特殊运算符,用逗号连起来的式子称为逗号表达式,一般形式为: 表达式1,表达式2,…,表达式N 说明: 1、逗号运算结合从左到右,先计算表达式1的值,最后计算表达式N的值,最后一个表达式的值是整个表达式的值。 如: (i=3,i++,++i,i+5)执行后,i的值为5,整个表达式的值为10 2、在所有运算符中,逗号运算符优先最低。 2.4不同类型数据间的转换 2.4.1几个概念 C语言允许数值从一种类型转换成另一种类型(同一类型但占字节数不同、定点与浮点、有符号与无符号) ㈠提示与降格(所占字节数的变在与变小) ㈡符号位扩展与零扩展(字节数变高位补什么) ㈢最高位失去符号功能与最高位变为符号位 ㈣截去小数与四舍五入 ㈤丢失精度 ㈥结果不确定与截去高位(例2.11) 2.4.2不同类型的隐式转换 隐式转换的发生: 运算时、赋值时、输出时、函数返回值时。 ㈠一般算术转换。 2*1.0结果为2.0 ㈡赋值转换。 inta=13.789a的值为13 ㈢输出转换。 x=45;printf("%d%x%o\n",x,x,x); 2.4.3不同类型的显式转换 提供强制类型转换,形式为: (类型说明符)表达式 例如: charch;inta;doub
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 描述 基本 操作
![提示](https://static.bdocx.com/images/bang_tan.gif)