第02章-数据类型以及有关运算_第1页
第02章-数据类型以及有关运算_第2页
第02章-数据类型以及有关运算_第3页
第02章-数据类型以及有关运算_第4页
第02章-数据类型以及有关运算_第5页
已阅读5页,还剩93页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言程序设计语言程序设计C C语言程序设计语言程序设计第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算2.1 C2.1 C的基本数据类型的基本数据类型不管现实中的数据和信息表现形式如何不管现实中的数据和信息表现形式如何, ,要用要用C C程序来处理程序来处理, ,必须把各式各样的数据转换成必须把各式各样的数据转换成C C能识别的数能识别的数据类型。据类型。C C的数据类型可简单分为基本类型、构造类型和的数据类型可简单分为基本类型、构造类型和指针类型等。构造类型是由基本类型衍生出来的。指针类型等。构造类型是由基本类型衍生出来的。不管哪种程序设计语言,其基本数据类型几乎

2、是一致的不管哪种程序设计语言,其基本数据类型几乎是一致的2.1.1 2.1.1 常量与变量常量与变量不管哪种程序设计语言,其数据的表现形式有两大类型不管哪种程序设计语言,其数据的表现形式有两大类型即常量和变量即常量和变量 1.1.常量常量“常量常量”,顾名思义,就是在程序运行过程中固定不变,顾名思义,就是在程序运行过程中固定不变的量。即在程序运行过程中,常量值不能被改变。的量。即在程序运行过程中,常量值不能被改变。第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算常量分常量分“字面常量字面常量”和和“符号常量符号常量”。(1 1)字面常量)字面常量字面常量就是通过字面直

3、接反映其内容。字面常量就是通过字面直接反映其内容。很显然,程序中很显然,程序中 “”里面的内容以及里面的内容以及20082008、8 8、2929都都是字面常量,程序在运行期间,它们都无法改变。是字面常量,程序在运行期间,它们都无法改变。 第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算(2 2)符号常量)符号常量在一个程序中,如果某个固定的数据多次使用,在一个程序中,如果某个固定的数据多次使用,或者不方便记忆和书写,那么我们就可以给它一个容易或者不方便记忆和书写,那么我们就可以给它一个容易记忆的名称。一旦这种名称确定,并为该名称规定了一记忆的名称。一旦这种名称确定,

4、并为该名称规定了一个值,那么在程序代码中不允许再次改变它的值。个值,那么在程序代码中不允许再次改变它的值。 该语句定义一个名为该语句定义一个名为PIPI的符号,它的符号,它代表代表3.14159263.1415926这个值。一旦该符这个值。一旦该符号被定义,在整个程序代码中,只号被定义,在整个程序代码中,只能使用该符号,而不能改变该符号能使用该符号,而不能改变该符号的值。的值。符号常量的值也是固定不变的符号常量的值也是固定不变的。第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算符号常量的定义方法符号常量的定义方法1 1:#define #define 符号名符号名 值

5、值例如:例如:#define PI 3.1415926 #define PI 3.1415926 声明声明PIPI这个符号,它代表这个符号,它代表3.14159263.1415926这个值。这个值。符号常量的定义方法符号常量的定义方法2 2:const const 数据类型数据类型 符号常量名符号常量名= =值值; ; 例如:例如:const float PI=3.1415926; const float PI=3.1415926; 也是声明也是声明PIPI这个符号,它的值为这个符号,它的值为3.14159263.1415926。该方法规定。该方法规定PIPI是是floatfloat类型的,它

6、的值和类型必须匹配。类型的,它的值和类型必须匹配。两种声明方法的区别:两种声明方法的区别:方法方法2 2是一种比较严格的带类型定义方式,在定义符号常是一种比较严格的带类型定义方式,在定义符号常量的同时必须规定其类型,并且值和类型之间必须匹配量的同时必须规定其类型,并且值和类型之间必须匹配floatfloat是一种可以带小数的数据类型。方法是一种可以带小数的数据类型。方法1 1不是很严格不是很严格第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算2.2.变量变量和常量恰恰相反,变量是指其值可以变化的和常量恰恰相反,变量是指其值可以变化的数据量。数据量。“变量变量”可以看作

7、是程序中存放数据的容器,变量可以看作是程序中存放数据的容器,变量的名字就是这个容器的标签,变量的值就是容器里的名字就是这个容器的标签,变量的值就是容器里面存放的内容。面存放的内容。变量是以名字出现,以值参加运算变量是以名字出现,以值参加运算。变量在程序运。变量在程序运行过程中可以根据需要改变其值。行过程中可以根据需要改变其值。第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算程序运行后,会在屏幕上显示程序运行后,会在屏幕上显示 信息,信息,并停顿等待用户的输入,这时候你可以随便输入一个整并停顿等待用户的输入,这时候你可以随便输入一个整数做年龄,也就是说数做年龄,也就是说

8、ageage可以接受可以接受2323,也可以接受,也可以接受8585即即ageage的值在程序运行过程中是可以变化的,我们在的值在程序运行过程中是可以变化的,我们在阅读程序代码时,并不知道阅读程序代码时,并不知道ageage的值是多少。的值是多少。 请分析下面代码中变量请分析下面代码中变量ageage的使用的使用: 第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算C C语言对变量的使用有如下规定:语言对变量的使用有如下规定:(1 1)变量必须先定义后使用)变量必须先定义后使用定义变量也叫声明变量,其实质就是向系统申请内存定义变量也叫声明变量,其实质就是向系统申请内存空

9、间,系统会根据变量类型安排内存空间,并且根据变空间,系统会根据变量类型安排内存空间,并且根据变量类型对后续的变量运算做语法检查。量类型对后续的变量运算做语法检查。变量的基本定义形式为:变量的基本定义形式为:数据类型数据类型 变量名;变量名;例如:例如:int age;int age;语句是向系统申请一块内存空间,该语句是向系统申请一块内存空间,该空间只能用来存放整数(空间只能用来存放整数(intint规定),该空间的名字为规定),该空间的名字为ageage系统接到要求后,在没有冲突的前提下,会按照系统接到要求后,在没有冲突的前提下,会按照ageage的的类型(类型(intint)在内存中安排)

10、在内存中安排4 4个连续的字节给个连续的字节给ageage使用。使用。在编写程序时,我们可以用名字在编写程序时,我们可以用名字ageage来表示对应内存空来表示对应内存空间的内容。并可以随时改变这块空间的内容。间的内容。并可以随时改变这块空间的内容。第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算我们可以用我们可以用age=65;age=65;这条该语句,把这条该语句,把ageage对应的内存对应的内存空间的值该为空间的值该为6565,即以后再遇到,即以后再遇到ageage,它就代表,它就代表65.65. 如果有如果有int age=18;int age=18;则该语

11、句定义变量则该语句定义变量ageage,同时给该变量赋值同时给该变量赋值1818(以后可以随时改变(以后可以随时改变ageage的值,的值,例如例如age=34;age=34;) 第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算(2 2)变量命名规则)变量命名规则在定义变量时,需要给变量起名字,变量的在定义变量时,需要给变量起名字,变量的名字不能随便起,必须遵守下面的语法规定:名字不能随便起,必须遵守下面的语法规定:变量名字可由字母、数字和下划线以及变量名字可由字母、数字和下划线以及$ $组成,组成, 但但第一个字符只能是字母或下划线以及第一个字符只能是字母或下划线以

12、及$ $。例如:例如:a1a1、studentNamestudentName、x_2x_2、$3$3和和_y_y都是正确的名都是正确的名字,但字,但5m5m、w-3w-3都是错误的。都是错误的。变量的命名不能和系统关键字及其库函数重名,且变量的命名不能和系统关键字及其库函数重名,且严格区分大小写。严格区分大小写。例如:例如:不能把变量起名为不能把变量起名为intint或或printfprintf等。等。A A和和a a是两是两个不同的变量名字个不同的变量名字好的变量名字要能够见名知意。这一点在项目开发好的变量名字要能够见名知意。这一点在项目开发中尤其重要。中尤其重要。第第2 2章章-C-C的基

13、本数据类型以及有关运算的基本数据类型以及有关运算例如,我们用例如,我们用abcabc这个名字来表示年龄,虽然这个名字来表示年龄,虽然可行,但不如用可行,但不如用ageage直观。直观。(3 3)函数内的变量的作用区域)函数内的变量的作用区域如果一个变量要在整个函数范围内有效,则该变量的如果一个变量要在整个函数范围内有效,则该变量的定义一定要放在函数体的开头(不考虑注释语句)。定义一定要放在函数体的开头(不考虑注释语句)。在函数内其它位置定义的变量必须用在函数内其它位置定义的变量必须用括起,它们的括起,它们的作用范围也限制在作用范围也限制在内。内。第第2 2章章-C-C的基本数据类型以及有关运算

14、的基本数据类型以及有关运算例如下面的代码段完成了例如下面的代码段完成了x x和和y y这两个这两个变量值的互换,其中变量值的互换,其中t t变量的作用范围被限制变量的作用范围被限制在一个局部区域在一个局部区域这种变量叫块变量,而这种变量叫块变量,而x x和和y y这两这两个变量叫做函数变量或局部变量。个变量叫做函数变量或局部变量。 注意:注意:上面的代码段,如果上面的代码段,如果去掉了中间的那对括号,则去掉了中间的那对括号,则程序不能通过编译程序不能通过编译 第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算3. 3. 变量赋初值变量赋初值把一个合理的值送给一个变量就叫

15、变量的赋值。把一个合理的值送给一个变量就叫变量的赋值。变量的首次赋值叫做变量赋初值变量的首次赋值叫做变量赋初值,程序中所定义的变,程序中所定义的变量必须赋值后使用,否则是没有意义的。量必须赋值后使用,否则是没有意义的。变量赋初值可以按以下两种方式变量赋初值可以按以下两种方式。(1 1)在定义的同时赋初值,例如在定义的同时赋初值,例如int x=20;int x=20;语句定义语句定义一个整型变量一个整型变量x x,同时把,同时把2020送给送给x x。. .(2 2)先定义变量,在使用变量之前赋初值。先定义变量,在使用变量之前赋初值。例如:例如:下面的代码段,定义下面的代码段,定义x x时,没

16、有给时,没有给x x赋值,但后赋值,但后续代码为续代码为x x赋了初值。赋了初值。 第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算2.1.2 2.1.2 整形数据以及整形变量整形数据以及整形变量1. 1. 整型数据整型数据在现实生活中,我们经常用到一些不带小数点的数在现实生活中,我们经常用到一些不带小数点的数据,比如据,比如20112011年年1212月月2323日,这些表示年、月、日的日,这些表示年、月、日的数据是没有小数的。另外我们每个同学的学号是不数据是没有小数的。另外我们每个同学的学号是不带小数的。带小数的。现实生活中,我们把这些不带小数的数据称为整数现实生

17、活中,我们把这些不带小数的数据称为整数,另外整数也有正数和负数之分。,另外整数也有正数和负数之分。C C语言系统为了语言系统为了更好的处理这类不带小数的数据,规定了以下更好的处理这类不带小数的数据,规定了以下6 6种种整数类型,它们类型符号、范围以及在整数类型,它们类型符号、范围以及在VC+6.0VC+6.0下下的内存分配见表的内存分配见表2-12-1所示:所示: 第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算大家需要注意的是,在现实生活中大家需要注意的是,在现实生活中的整数几乎是没有大小限制的,但的整数几乎是没有大小限制的,但C C语言规定语言规定的数据类型是有大

18、小限制的。的数据类型是有大小限制的。第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算2. 2. 整形常量的书写方法整形常量的书写方法在程序中,书写整形常量可以用以下几种方式在程序中,书写整形常量可以用以下几种方式(1 1)十进制形式:)十进制形式:按照生活中的习惯,以十进制书按照生活中的习惯,以十进制书写,比如写,比如500 500 。 (2 2)八进制形式:)八进制形式:八进制的标志是以八进制的标志是以0 0开头,比如十开头,比如十进制的进制的500500写成八进制为写成八进制为0764 0764 。(3 3)十六进制形式:)十六进制形式:十六进制的标志是以十六进制

19、的标志是以0 x0 x开头,开头,比如十进制的比如十进制的500500写成十六进制为写成十六进制为0 x1f40 x1f4既既a=500a=500和和a=0764a=0764及及a=0 x1f4a=0 x1f4是完全等价的语句,都是是完全等价的语句,都是把十进制的把十进制的500500送给变量送给变量a a。一般情况下,如果没有特一般情况下,如果没有特别需要,在书写整形常量数据时,以习惯的十进制书别需要,在书写整形常量数据时,以习惯的十进制书写形式写形式 第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算3. 3. 整形变量整形变量如果一个变量用表如果一个变量用表2-1

20、2-1的类型之一定义,则的类型之一定义,则该变量就是整形变量。该变量就是整形变量。例如,下面定义的变量例如,下面定义的变量x x、y y以及以及z z都是整形变量。都是整形变量。int x;short y;long int z;int x;short y;long int z;一般情况下,定义了何种类型的变量,则在输入输出一般情况下,定义了何种类型的变量,则在输入输出这个变量时,一定要使用相对应的格式符号这个变量时,一定要使用相对应的格式符号。【例题例题2-12-1】整形变量使用举例:编程,从键盘输入整形变量使用举例:编程,从键盘输入两个人的出生年份,输出它们相隔了多少年。两个人的出生年份,输

21、出它们相隔了多少年。分析:分析:此处要求我们输入两个年份,显然输入的内容此处要求我们输入两个年份,显然输入的内容是不固定的。这种情况下,程序中必须定义两个变量是不固定的。这种情况下,程序中必须定义两个变量来接受和保存我们输入的年份。来接受和保存我们输入的年份。第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算而变量的使用必须先定义,在定义时而变量的使用必须先定义,在定义时必须先确定其数据类型,即变量要存放的数据必须先确定其数据类型,即变量要存放的数据是什么类型的。我们知道年份是没有小数的是什么类型的。我们知道年份是没有小数的( (比如比如19681968、2001200

22、1等等) ),我们可以用整型数据来定义它,下面是一种编,我们可以用整型数据来定义它,下面是一种编程方法:程方法: 运行结果如右图所示:运行结果如右图所示:第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算下面的程序使用了另一种整数类型下面的程序使用了另一种整数类型short short intint型,对应的格式符号为型,对应的格式符号为%hd,%hd,也能达到同也能达到同样的效果样的效果说明:说明:short类型的变量占两个字节,完全可以存放一类型的变量占两个字节,完全可以存放一个合理的年份(年份没有负数),该方法为系统节约个合理的年份(年份没有负数),该方法为系统节

23、约内存内存4个字节。在做练习时,个字节。在做练习时,int型数据用的较频繁,型数据用的较频繁,但在项目开发时,变量的数据类型要合理。但在项目开发时,变量的数据类型要合理。 第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算2.1.3 2.1.3 实型数据以及实型变量实型数据以及实型变量我们知道生活中不仅仅只有整数,还有许多我们知道生活中不仅仅只有整数,还有许多带小数的数据。比如国家统计局发布带小数的数据。比如国家统计局发布20112011年年1010月份我国月份我国CPICPI同比涨幅同比涨幅5.5% 5.5% 即即0.0550.055。20112011年年1010月份

24、某人的工资为月份某人的工资为3012.723012.72元,圆周元,圆周率的值为率的值为3.14159263.1415926等。这些带小数的数据,等。这些带小数的数据,C C语言又如何处理呢?语言又如何处理呢?1. 1. 实型数据实型数据C C语言中对带小数的数据统称为实型数据,常用形式语言中对带小数的数据统称为实型数据,常用形式有两种(有两种(floatfloat型和型和doubledouble型)型), , 它们的类型符号它们的类型符号、范围以及在、范围以及在VC+6.0VC+6.0下的内存分配见表下的内存分配见表2-22-2所示:所示: 第第2 2章章-C-C的基本数据类型以及有关运算的

25、基本数据类型以及有关运算有效数字:有效数字:有效数字是指实数的精确度。有效数字是指实数的精确度。即有效数字之后位置上的数字无法保证其准确。即有效数字之后位置上的数字无法保证其准确。大家可以看到,整型数据是没有任何误差的,但相大家可以看到,整型数据是没有任何误差的,但相对于整型数据来说,实型数据增加了数据的表示范对于整型数据来说,实型数据增加了数据的表示范围,但却以牺牲准确度为前提的。所以在用实型数围,但却以牺牲准确度为前提的。所以在用实型数据进行运算时,很有可能有一定的误差。据进行运算时,很有可能有一定的误差。例如:例如:假定有假定有float x=123456.7891287float x=

26、123456.7891287,由于,由于floatfloat类型的有效位数是类型的有效位数是6-76-7,则,则C C系统只能保证系统只能保证12345671234567这这7 7位数字的准确度,其他位数上的数字可能和真实的位数字的准确度,其他位数上的数字可能和真实的不符。不符。 第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算2. 2. 实型常量的表示方法实型常量的表示方法在程序中,如果需要我们书写带小数的常量,在程序中,如果需要我们书写带小数的常量,则可按以下两种形式:则可按以下两种形式:(1 1)十进制小数形式)十进制小数形式:它由整数部分、小数点和小数:它由整

27、数部分、小数点和小数部分三部分组成。当整数部分为部分三部分组成。当整数部分为0 0或小数部分为或小数部分为0 0时都时都可省略,但小数点不能省略。如:可省略,但小数点不能省略。如:1256.78 ,0.3451256.78 ,0.345或或.345 , 12, 987.0.345 , 12, 987.0都是正确的十进制实型常量都是正确的十进制实型常量。(2 2)指数形式:)指数形式:它由三部分组成:尾数、字母它由三部分组成:尾数、字母E E或或e e、整型指数。字符整型指数。字符E E(e e)前必须有数字,且)前必须有数字,且E E(e e)后的)后的指数必须为整数。例如:指数必须为整数。例

28、如:1234.5e+3, 123.45e4 , 1234.5e+3, 123.45e4 , 1.2345e6 , 1.2345e6 , 都表示都表示12345001234500。其中。其中1.2345e61.2345e6为标准指为标准指数形式数形式。计算机内存中一律用标准指数形式存储。计算机内存中一律用标准指数形式存储 第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算3. 3. 实型变量实型变量如果一个变量的类型是如果一个变量的类型是floatfloat型或者型或者doubledouble型,则型,则这个变量就是实型变量,它可用来表示一些带小数这个变量就是实型变量,它

29、可用来表示一些带小数的数据。当然,它也可以用来表示整数,只是小数的数据。当然,它也可以用来表示整数,只是小数点后面的部分为点后面的部分为0 0。【例题例题2-22-2】假设银行一年期定期存款的年利率是假设银行一年期定期存款的年利率是3.25%3.25%,某人存了,某人存了x x元,存期为一年,并且和银行约元,存期为一年,并且和银行约定,到期不取就自动转存定,到期不取就自动转存( (连本带利转存到下一年连本带利转存到下一年) )。假定该人。假定该人n n年后取款,且在这期间银行利率没有年后取款,且在这期间银行利率没有调整,编写程序计算他能得到多少利息。调整,编写程序计算他能得到多少利息。第第2

30、2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算算法分析:算法分析:假定该人假定该人3 3年后取钱,则他的年后取钱,则他的存款经历了以下几个过程:存款经历了以下几个过程:第一年到期后,本息之和第一年到期后,本息之和=x(1+3.25%)=x(1+3.25%),该值转到,该值转到下一年做本金。下一年做本金。第二年到期后第二年到期后, ,本息之和本息之和=x(1+3.25%)(1+3.25%)=x(1+3.25%)(1+3.25%),即本息之和即本息之和=x(1+3.25%)=x(1+3.25%)2 2,该值转到下一年做本金,该值转到下一年做本金,同理,第三年到期后,本息之和,同

31、理,第三年到期后,本息之和=x(1+3.25%)=x(1+3.25%)3 3通过上面的分析通过上面的分析, ,第第n n年到期后年到期后, ,本息之和可以用公本息之和可以用公式式x(1+3.25%)x(1+3.25%)n n来计算来计算。其中。其中x x是最初的本金,是最初的本金,3.25%3.25%是年利率,是年利率,n n是存款年数。是存款年数。这是一个数学公式,在编程的时候需要转换成这是一个数学公式,在编程的时候需要转换成C C语语言系统能识别的形式。言系统能识别的形式。第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算C C系统为我们提供了一个名为系统为我们提供

32、了一个名为powpow的函数,的函数,它专门用来计算一个数的次方数。它专门用来计算一个数的次方数。pow(2,3)pow(2,3)得到的结果是得到的结果是2 2的的3 3次方,即次方,即8 8。 第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算2.1.4 2.1.4 字符型数据以及字符型变量字符型数据以及字符型变量现实生活中,我们不仅仅和数值打交道。还现实生活中,我们不仅仅和数值打交道。还经常和各式各样的字符打交到。比如你的成绩经常和各式各样的字符打交到。比如你的成绩如果在如果在9090分以上,你得到的等级就会是分以上,你得到的等级就会是A A,而,而不幸考了不幸考了

33、6060分以下的成绩,你可能要拿到一分以下的成绩,你可能要拿到一个个E E的等级。那么的等级。那么C C语言又用什么样的类型来语言又用什么样的类型来定义这类数据呢?定义这类数据呢?1. 1. 字符型数据字符型数据如果有一种数据,只表示一个单个字符,则这类数据如果有一种数据,只表示一个单个字符,则这类数据为字符型数据。为字符型数据。其类型符号为其类型符号为charchar,对应的格式符,对应的格式符号为号为%c%c,C C系统为系统为charchar型数据安排型数据安排1 1个字节来存储。个字节来存储。字符型数据是以其字符型数据是以其ASCIIASCII码的二进制形式存储的,并码的二进制形式存储

34、的,并以其以其ASCIIASCII码参加各种运算。码参加各种运算。 第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算2. 2. 字符型常量的表示方法字符型常量的表示方法(1 1) 普通字符常量:普通字符常量:用英文单引号括起来的任用英文单引号括起来的任意一个字符都是字符型常量,如:意一个字符都是字符型常量,如:aa、AA、#、,、.、99。需要注意的是单个的汉字即使用需要注意的是单个的汉字即使用引起来,也不引起来,也不是字符常量。因为一个汉字在是字符常量。因为一个汉字在C C语言中占两个字符语言中占两个字符的位置,中文标点符号和普通汉字一样处理。的位置,中文标点符号和

35、普通汉字一样处理。(2 2)转义字符常量:)转义字符常量:有一部分字符常量,表面上有一部分字符常量,表面上看似是多个字符,但实际上代表一个字符。这些看似是多个字符,但实际上代表一个字符。这些字符常量就是转义字符。比如以前用到的字符常量就是转义字符。比如以前用到的nn,看起来是两个字符,但其实质它对应着一个看起来是两个字符,但其实质它对应着一个ASCIIASCII码为码为1010的控制字符的控制字符就是回车换行。就是回车换行。 第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算例如,英文字母例如,英

36、文字母A A的的ASCIIASCII码为码为6565,而,而6565对应的对应的8 8进进制为制为101101,对应的,对应的1616进制为进制为4141,则,则字符常量为字符常量为A A、101101、x41x41都表示字符都表示字符A A。其中都是用转义字符表示其中都是用转义字符表示A A 3 3字符型变量字符型变量如果一个变量用如果一个变量用charchar来定义,则这个变量是字符型来定义,则这个变量是字符型变量。变量。例如:例如:char x;char x;则则x x是字符变量,只占是字符变量,只占1 1个字节,只个字节,只能存放一个单字符。单字符数据表示一个字符,这能存放一个单字符。

37、单字符数据表示一个字符,这些字符的些字符的ASCIIASCII在在00,255255之间。之间。第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算说明:说明:(1 1)由于字符是按其由于字符是按其ASCIIASCII码存储。所以码存储。所以char x= A ;char x= A ;和和char x=65;char x=65;是等价的是等价的。都是把字符。都是把字符A A送给送给charchar型变量型变量x x,存放的都是,存放的都是A A的的ASCIIASCII码码6565的二进的二进制形式。制形式。(2 2)在输出字符型数据时,如果按在输出字符型数据时,如果按%c

38、%c格式输出,则格式输出,则是输出对应的字符,如果按是输出对应的字符,如果按%d%d输出,则输出的是字符输出,则输出的是字符的的ASCIIASCII码。码。(3 3)同理,如果一个同理,如果一个00,255255之间的整数,按之间的整数,按%d%d输输出,则输出其具体数值,按出,则输出其具体数值,按%c%c输出,输出其对应的字输出,输出其对应的字符。符。第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算【例题例题2-3】编程,接受从键盘输入的一个编程,接受从键盘输入的一个小写字母,输出其小写字母,输出其ASCII码以及对应的大写字母。码以及对应的大写字母。分析:分析:同

39、一个字母的大小写之间,同一个字母的大小写之间,ASCII码相差码相差32,本,本例题的代码如下:例题的代码如下:第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算【例题例题2-4】我有一个朋友,他特别喜欢玩我有一个朋友,他特别喜欢玩扑克,他想让我们用最简单的方法显示出扑克扑克,他想让我们用最简单的方法显示出扑克牌的四个代表图案。下面的代码用了四种方法输出扑克牌的四个代表图案。下面的代码用了四种方法输出扑克牌的四个图案牌的四个图案 第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算4. 单字符的输入和输出函数单字符的输入和输出函数对于单个字符变量,

40、前面我们都是用对于单个字符变量,前面我们都是用scanf和和printf结合结合%c格式符号进行输入输出。格式符号进行输入输出。C系统专门为系统专门为单字符操作提供了有关函数,比较常用的有以下两个:单字符操作提供了有关函数,比较常用的有以下两个:(1)单字符输入函数)单字符输入函数getchar()格式:格式:getchar( )功能:功能:该函数是一个无参函数,其功能是从键盘缓冲区该函数是一个无参函数,其功能是从键盘缓冲区读取一个字符,函数的返回值就是所读取的字符(可以读取一个字符,函数的返回值就是所读取的字符(可以把函数值送给一个字符变量)。把函数值送给一个字符变量)。例如例如:char

41、x; x=getchar();该语句从键盘缓冲区读该语句从键盘缓冲区读一个字符送给字符变量一个字符送给字符变量x。而。而getchar();语句是仅仅从键语句是仅仅从键盘缓冲区读一个字符,谁也不给!盘缓冲区读一个字符,谁也不给!第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算注意:注意:1. getchar( )函数一次只读取一个字符。函数一次只读取一个字符。getchar()函数在读入时,空格、回车符等等都将作函数在读入时,空格、回车符等等都将作为字符读入。为字符读入。2. 如果键盘缓冲区没有字符,则该函数会停顿,等待如果键盘缓冲区没有字符,则该函数会停顿,等待用户

42、输入。用户输入。【例题例题2-5】编写程序,实现以下效果,其中编写程序,实现以下效果,其中w和和p是用是用户输入的内容,其他是程序运行时显示的信息。户输入的内容,其他是程序运行时显示的信息。 第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算下面是某个同学编写的代码,但运行下面是某个同学编写的代码,但运行结果不符合要求,你知道为什么吗?结果不符合要求,你知道为什么吗?第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算分析分析: : 当第一个提示出现时,输入了当第一个提示出现时,输入了w w和和 ,则则w w和和 这两个字符就进入了键盘缓冲区,而这

43、两个字符就进入了键盘缓冲区,而x=getchar();x=getchar();只读一个字符只读一个字符w w,并送给了,并送给了x x,等到执行,等到执行y=getchar();y=getchar();时,由于键盘缓冲区里面有一个时,由于键盘缓冲区里面有一个 符号,符号,则则getchar()getchar()直接读取并送给了直接读取并送给了y y,所以,所以y=getchar();y=getchar();没没有停顿。有停顿。解决方法:解决方法:在在x=getchar();x=getchar();之后,多加一个之后,多加一个getchar();getchar();语句,让它把语句,让它把 符号

44、吃掉,但不送给任何变量。由于符号吃掉,但不送给任何变量。由于 被被getchar()getchar()消化,从而不影响消化,从而不影响y=getchar();y=getchar();的执行。的执行。注意:注意:单纯从键盘给数值变量赋值时单纯从键盘给数值变量赋值时, ,所输入数值后面所输入数值后面的的 符号并不影响下一个数值的输入符号并不影响下一个数值的输入, ,但当同时给字符变但当同时给字符变量赋值时量赋值时, ,则数值后面的则数值后面的 符号就会对输入有影响。符号就会对输入有影响。第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算(2)单字符输出函数)单字符输出函数p

45、utchar()格式格式:putchar(参数参数) ;功能:功能:输出参数对应的一个字符。输出参数对应的一个字符。说明:说明:参数可以是字符或数值表达式参数可以是字符或数值表达式(表达式值的范表达式值的范围在围在0,255之间才有意义之间才有意义)putchar(65);和和putchar(A);以及以及putchar(90-25);还有还有putchar(B-1)等执行后都输出字符等执行后都输出字符A。实质上实质上putchar(参数参数)等价于等价于printf(“%c”,参数参数),它们,它们都是输出参数对应的那个字符。都是输出参数对应的那个字符。 第第2 2章章-C-C的基本数据类型

46、以及有关运算的基本数据类型以及有关运算2.1.5 字符串字符串char型的变量可以用来存放要处理的单个字符型的变量可以用来存放要处理的单个字符。如果程序要处理一行字符,即一个以上的。如果程序要处理一行字符,即一个以上的字符,那么字符,那么C系统又有什么样的类型来定义系统又有什么样的类型来定义它们呢?它们呢?1. 字符串常量字符串常量字符串常量是用一对英文双引号括起来的字符序列。字符串常量是用一对英文双引号括起来的字符序列。例如例如How are you.、Good morning.以及以及你好你好D.M.Ritchie先生先生和和等等都是正确的字符串常等等都是正确的字符串常量。量。也就是说不管

47、什么内容,只要是用英文也就是说不管什么内容,只要是用英文引号引号括起来,则里面的东西就是字符串常量。括起来,则里面的东西就是字符串常量。第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算有关字符串,我们必须了解以下说法:有关字符串,我们必须了解以下说法:字符串结束标志:字符串结束标志:转义字符转义字符0有一个特殊的作用有一个特殊的作用它被用来做字符串的结束标志。它被用来做字符串的结束标志。比如比如CHINA这个字符串,系统在存储的时候,会自这个字符串,系统在存储的时候,会自动在后面加一个动在后面加一个0作为该字符串的结束标志。所以作为该字符串的结束标志。所以CHINA这

48、个字符串的有效字符数是这个字符串的有效字符数是5个,但其实际个,但其实际占用了占用了6个字节的内存空间个字节的内存空间反过来说,反过来说,如果一个字符串里有如果一个字符串里有0,则,则0出现则意出现则意味者字符串的结束。味者字符串的结束。比如比如ABC0XYZ这个字符串有这个字符串有效字符个数为效字符个数为3,内容为,内容为ABC。字符串的长度:字符串的长度:字符串的有效字符个数。例如字符串的有效字符个数。例如“你好你好”的长度为的长度为4,“HellonWorld”的长度为的长度为11。空串:空串:长度为长度为0的串,例如的串,例如。 第第2 2章章-C-C的基本数据类型以及有关运算的基本数

49、据类型以及有关运算2. 2. 字符串变量字符串变量从严格意义上来说,从严格意义上来说,C C语言中没有提供字符串变量。语言中没有提供字符串变量。那么大家可能要问,我们的学生成绩管理系统肯定要那么大家可能要问,我们的学生成绩管理系统肯定要处理学生的名字,如果没有字符串变量,那么类似处理学生的名字,如果没有字符串变量,那么类似“张三张三”、“李四李四”、“王五王五”等这些名字怎样来用变等这些名字怎样来用变量表示呢?量表示呢?诸位读者请你不要着急,诸位读者请你不要着急,C C语言借用一维字符数组来语言借用一维字符数组来处理字符串处理字符串,详细的内容我们将在第,详细的内容我们将在第5 5章讲解。但是

50、章讲解。但是由于我们的由于我们的“小学生四则运算测试系统小学生四则运算测试系统”和和“学生成学生成绩管理系统绩管理系统”马上就要用到字符串变量,所以在这里马上就要用到字符串变量,所以在这里我先适当的透露一二我先适当的透露一二 第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算(1 1)字符串变量的声明)字符串变量的声明如果我们想声明一个变量,准备用他来存储字符串如果我们想声明一个变量,准备用他来存储字符串,估计该变量存储的字符个数最多不超过,估计该变量存储的字符个数最多不超过8080个字符个字符(一个汉字相当于两个字符),该如何定义呢?(一个汉字相当于两个字符),该如何

51、定义呢?char str81;char str81;该语句声明了一个变量该语句声明了一个变量strstr,它最多,它最多能存放能存放8080个字符,最少存放个字符,最少存放0 0个字符。个字符。有的同学可能有的同学可能要问:要问:“那你在那你在char str81;char str81;里面为什么要写里面为什么要写8181而而不写不写8080呢?呢?”!诸位读者,我上面刚刚提到一个名!诸位读者,我上面刚刚提到一个名词词“字符串结束标志字符串结束标志”,如果你没有忘记,那么,如果你没有忘记,那么多出来的一个字符就是为了存放字符串结束标志的多出来的一个字符就是为了存放字符串结束标志的。 第第2 2

52、章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算(2 2)字符串变量的赋值)字符串变量的赋值也许大家还记得,单个字符的格式符号为也许大家还记得,单个字符的格式符号为%c%c。字符串是多个字符的集合,它对应的格式符号为字符串是多个字符的集合,它对应的格式符号为%s%s,如果我们用如果我们用char str81;char str81;定义了一个字符串变量定义了一个字符串变量strstr,则我们可以利用以下方式之一给字符串变量赋值:,则我们可以利用以下方式之一给字符串变量赋值: 利用利用scanfscanf给字符串变量赋值给字符串变量赋值scanf(scanf(“%s%s”,str)

53、;,str);是从键盘缓冲区读一串字符给是从键盘缓冲区读一串字符给strstr,如果键盘缓冲区没有,则停顿等待用户输入。所以我如果键盘缓冲区没有,则停顿等待用户输入。所以我们可以用它给字符串变量们可以用它给字符串变量strstr赋值。在赋值过程中,需赋值。在赋值过程中,需要注意以下几点:要注意以下几点:l在赋值过程中,读入字符的不能超过定义在赋值过程中,读入字符的不能超过定义str时所约时所约定的长度。注意至少要留出一个字符位置存放字符串定的长度。注意至少要留出一个字符位置存放字符串结束标志。结束标志。 第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算lscanf(s

54、canf(“%s%s”,str);,str);不接受空串不接受空串即不能直接按下回车结束输入。即不能直接按下回车结束输入。lscanf(scanf(“%s%s”,str);,str);不接受空格不接受空格即读入过程中即读入过程中遇到空格就结束读入。遇到空格就结束读入。分析下面代码的运行结果分析下面代码的运行结果: 分析:分析:用户输入的名字是张三用户输入的名字是张三 丰丰 ,中间夹带着,中间夹带着空格,则空格,则scanf只接受只接受“张三张三”这个字符串。如果这个字符串。如果在输入时直接按下回车或者直接输入空格再按回车在输入时直接按下回车或者直接输入空格再按回车,scanf函数会继续等待你输

55、入,直到你输入的内函数会继续等待你输入,直到你输入的内容满足它的要求为止容满足它的要求为止 第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算 利用利用gets函数给字符串变量赋值函数给字符串变量赋值从叙述我们知道,从叙述我们知道,scanf用来输入字符串时,用来输入字符串时,限制颇多,限制颇多,C系统专门提供了系统专门提供了gets函数来接受字符串的函数来接受字符串的输入,输入,gets函数几乎没有限制,可以接受空串和空格,函数几乎没有限制,可以接受空串和空格,但输入的内容不能超长。但输入的内容不能超长。使用格式:使用格式:gets(字符串变量名字符串变量名);例如:

56、例如:gets(name);可以接受一个任意内容的字符串并可以接受一个任意内容的字符串并送给送给name。在编写程序中我们通常使用。在编写程序中我们通常使用gets函数来接函数来接受来自键盘的字符串输入。受来自键盘的字符串输入。把前面代码中的把前面代码中的scanf(“%s”,name);语句,换成语句,换成gets(name);语句,则运行时输入同样的内容,显示结语句,则运行时输入同样的内容,显示结果截然不同,如图所示:果截然不同,如图所示:第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算(3)字符串的比较函数)字符串的比较函数尽管我们在第尽管我们在第5章才能详细讲

57、解有关字符串操作的函章才能详细讲解有关字符串操作的函数,但我还是迫不及待的告诉大家一个数,但我还是迫不及待的告诉大家一个strcmp函数,函数,这个函数在这个函数在头文件中做出说明,它可以用头文件中做出说明,它可以用来比较两个字符串是否相等,如果相等,函数值为来比较两个字符串是否相等,如果相等,函数值为0,不相等,函数值不为,不相等,函数值不为0。使用格式:使用格式:strcmp (字符串字符串1,字符串字符串2)例如例如strcmp (“1234”,“ABC”)的值不等于的值不等于0,是因为参,是因为参加比较的两个字符串常量确实不相等。加比较的两个字符串常量确实不相等。而而strcmp (1

58、234,1234)的值为的值为0。我们可以利用我们可以利用strcmp(name, “张三张三”)函数的值是否为函数的值是否为0,来判断字符串变量,来判断字符串变量name的值是否为张三。的值是否为张三。 第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算2.2.1 算术运算符和算术表达式算术运算符和算术表达式1. 算术运算符算术运算符一般情况下,算术运算符作用在数值数据身上,并对一般情况下,算术运算符作用在数值数据身上,并对它们进行一些大家熟悉的数学运算。数值数据的表它们进行一些大家熟悉的数学运算。数值数据的表现形式可以是常量、变量和表达式。下面是算术运现形式可以是常

59、量、变量和表达式。下面是算术运算符号列表:算符号列表: 第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算由于偶数是由于偶数是2的倍数,所以偶数除以的倍数,所以偶数除以2是没有余数的,而奇数除以是没有余数的,而奇数除以2余数为余数为1,所以我,所以我们可以利用求余(们可以利用求余(%)运算,来判断一个整数是偶数还是)运算,来判断一个整数是偶数还是奇数。另外求余等运算还有一些巧妙之处,诸位且看下面奇数。另外求余等运算还有一些巧妙之处,诸位且看下面的例题:的例题:【例题例题2-5】从键盘输入一个正整数,输出其个位、十位从键盘输入一个正整数,输出其个位、十位、百位上的数字分别

60、是几?,运行效果要求如下类似:、百位上的数字分别是几?,运行效果要求如下类似: 分析:分析:如果一个整数如果一个整数398723,它与,它与10求余数会得到求余数会得到3个位数字。而该整数除以个位数字。而该整数除以10会得到会得到39872,而,而39872与与10求余数又可以得到求余数又可以得到2398723的十位数的十位数字。依次类推,本题目的代码如下:字。依次类推,本题目的代码如下: 第第2 2章章-C-C的基本数据类型以及有关运算的基本数据类型以及有关运算【例题例题2-5】从键盘输入一个正整数,输出其个位从键盘输入一个正整数,输出其个位、十位、百位上的数字分别是几?代码如下:、十位、百

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论