1、第2章 C语言中的基本数据与运算C语言基本元素2.1 常量常量2.2 变量变量2.3 数据类型与存储结构数据类型与存储结构2.4 算术表达式算术表达式实操训练实操训练课外练习课外练习C语言的基本元素有哪些?语言的基本元素有哪些?从一般的语言体系来讲,一种语言最基本的内容是语言元素。C语言的基本元素是构成C程序语句的基本成分。从C程序的功能来讲,一个C语言程序就是对一个问题的特定数据进行存储、加工处理,并将结果输送给用户,因此程序最基本的内容应是基本数据与运算。C语言的基本元素包括基本字符集、数据、表达式和函数。(1)基本字符集。C语言的基本字符集是ASCII码表中的一些基本字符。在C语句中对使
2、用的字符一般都有具体的规定,这里不再专门介绍。(2)数据。C语言中的数据是C语句的组成部分,又是C程序加工处理的对象。数据对象各种各样,在C语言中划分为不同的数据类型。一种数据类型代表了一种数据对象的逻辑结构,而且定义了它的存储结构。C语言允许使用的数据类型如图2.1所示。类型名称后括号内的字符是定义该类型数据的关键字。图2.1 C语言中允许使用的数据类型C语言中的数据按其在程序中的表现形态又可分为常量和变量。(3)表达式。表达式既是C语句的组成部分,又是C程序中对数据进行运算的主要方式。表达式有算术表达式、关系表达式、逻辑表达式等。(4)函数。函数可以出现在C语句中,是语句的构成部分,但函数
3、又是C程序的功能模块,贯穿于C语言程序设计的始终,这将在后续章节中介绍。从上述内容可知,C语言的基本元素包含的内容较广泛,有些内容需要具备一定的C语言知识才能够理解。本章将从尽快进入C语言程序设计学习的角度,介绍最基本的数据类型和算术表达式,其他内容将在后续章节介绍。2.1 常常 量量何谓常量?常量有哪些类型?常量在程序中如何表示?何谓常量?常量有哪些类型?常量在程序中如何表示?常量是在程序中以数学中常数的形式出现的数据。常量在程序运行过程中其值始终保持不变,这是相对于变量而言的。其实,常量就是常数数据。不同类型的常量在程序中的书写形式是不同的。2.1.1 整型常量整型常量整型常量用数学中的整
4、数形式书写,如10、105、2386、-1、-20、-15678等。在C语言中,整型常量除采用十进制数外,还可以采用八进制和十六进制数表示。八进制数和十六进制数实际上是二进制数的缩写。八进制整数:以0开头,作为八进制数的标识,后跟八进制基本数字07。如0123表示八进制数123,即十进制数83;-011表示八进制数-11,即十进制数-9。十六进制整数:以0 x开头,作为十六进制数的标识,后跟十六进制基本数字09、A、B、C、D、E、F。如0 x12F表示十六进制数12F,即十进制数303;-0 x1B表示十六进制数-1B,即十进制数-27。2.1.2 实型常量实型常量实型常量有小数和指数两种形
5、式。1小数形式小数形式小数形式实数以数学中的小数形式书写,如0.01、123.456、-5.78、1.0、12.0等。注意:注意:如果一个实数没有小数位,则必须在数的末尾加小数点,或将小数点后的小数部分写为“0”;否则,就按整数处理。例如,12.和12.0都是正确的实数表示。2指数形式指数形式指数形式的实数与数学中的指数形式不同,用字母“e”或“E”表示数学指数中的底数“10”,指数不能写成上标形式,而应与所有字符平等书写,“e”或“E”之前必须有数字,“e”或“E”后面必须为整数。例如,12.34e3代表12.34103,-346.87e-25(代表-346.8710-25,0.145E25
6、代表0.1451025。e4和12e2.5是错误的写法,因为e4的e前无数字,12e2.5的e后面是小数。指数形式的实数与数学中的写法不同,因此务必注意,一定要从学习C语言之初就养成良好的习惯。2.1.3 字符常量字符常量字符常量是以单个字符为一个数据对象的常数,在计算机内部按字符的ASCII码进行存储与处理。字符常量分为普通字符和转义字符两种。1普通字符普通字符普通字符以单撇号界定,如a、A、3、0、?、#都表示字符常量。字符常量必须是单个字符,如ab、12就不是字符常量了。注意:注意:数字作为字符常量就不代表数字值了,它的值是ASCII码。例如3的值是51(见附录A)。2转义字符转义字符C
7、程序中还允许使用一种特殊形式的字符常量,即转义字符,它是单撇号界定的以“”开头的字符序列。例如,前面在printf函数中已用过的n,它代表一个“换行符”。t代表将输出位置跳到下一个tab位置(制表位置),一个tab位置是向后跳8个字符位的位置。这是一种在屏幕上无法显示的“控制字符”,在程序中也无法用一般形式的字符来表示,只能采用这样的特殊形式来表示。常用的以“”开头的特殊字符见表2.1。2.1.4 字符串常量字符串常量字符串常量是将一个字符序列作为一个数据对象。它是用双撇号界定的一个字符序列。例如,boy和123是两个字符串常量。注意不要把字符串界定符双撇号写成单撇号。如boy,这样的写法既不
8、表示字符串常量,也不表示字符常量。2.1.5 符号常量符号常量在C程序中,可以将一个常量定义成一个符号,用符号来表示所定义的常量。这样,可以给程序设计带来很大便利。一般在程序的开头,用预处理指令进行定义。其一般形式如下:#define 符号 常量数据例如:#define PI 3.1415926在程序中,在定义后的的任意地方,都可以用PI来表示3.1415926。PI就是符号常量。在程序设计中,如果一个常量比较冗长,或一个常量要在多处书写,将该常量定义成符号常量,会带来极大便利。一方面,可避免书写冗长数据容易出错的问题;另一方面,如果一个常量在程序中多处出现,要改变此数据,必须多处修改,而定义
9、成符号常量后,只要在定义处修改即可。在定义符号常量时,标识符采用“顾名思义”的习惯,为与变量有所区分,常将字母大写。例如,要定义商品价格常量符号,可用“PRICE”作为符号名。2.2 变变 量量2.2.1 变量的内涵变量的内涵一个变量就代表一个数据的存储单元。可以把一个存储单元比作存放一个数据的盒子,如图2.2所示。盒子中存放了数据,这个数据可以多次取出来使用,也可以将一个新数据存放在盒子中,但新数据存入时,旧数据就自然丢掉了。盒子里面的内容(数)是变量的值。存储单元随时可存入新数,在程序运行过程中,一个变量的值随时可发生变化,正是从这个意义上称之为变量的。图2.2 存储单元示意图2.2.2
10、变量的定义变量的定义程序中使用的变量必须先定义、后使用。只有定义了的变量,程序编译时,系统才会给其分配相应的存储单元。变量定义的一般形式为类型符 变量名;其中,类型符可以是图2.1中基本类型中的各种数据类型后标注的关键字,例如,整型用int,字符型用char,单精度浮点型用float,双精度浮点型用double。类型关键字规定了变量的类型,也就是变量值的类型。从数据存储的角度来讲,不同类型的数据,系统给其分配不同长度的存储单元。例如,系统给char型数据分配一个字节的存储单元,给int型数据分配4个字节的存储单元。只有定义了类型,系统才能给变量分配相应长度的存储单元。变量名是变量所表示的数据对
11、象的名称。从存储器的特性来说,每一个存储单元都有一个编号,称之为地址,对存储单元中数据进行存取,必须要给出单元地址。C语言规定标识符只能由字母、数字和下划线三种字符组成,且首字符必须是字母或下划线。下面列出的是合法的标识符,也是合法的变量名:Sum,average,_total,student_name,lotus_1_2_3下面列出的是不合法的标识符和变量名:M.D.John,123,#33,3D64,ab在C语言标识符中,大写字母与小写字母被认为是两个不同的字符。因此,Sum和sum、class和Class是两个不同的标识符。一般地,变量名用小写字母表示,这已成为C语言中约定俗成的变量命名
12、方法。在选择变量名和其他标识符时,应养成“顾名思义”的习惯,即选有含义的英文单词(或其缩写)作标识符。如sum表示和数,average 表示平均值,total表示总数。这样可提高程序的可读性。从以上变量的定义语句可以看出,一个定义语句可以定义一个变量,也可以定义多个变量,但在一个语句中定义的多个变量必须是同类型的,变量之间要用逗号分隔。2.3 数据类型与存储结构数据类型与存储结构不同类型的数据如何存储?与数据处理的精度有何关不同类型的数据如何存储?与数据处理的精度有何关系?系?C语言程序中,定义了数据类型,就表示告知了编译系统数据的存储结构。编译系统根据类型给数据分配相应长度的存储单元,从而也
13、就决定了数据的数值范围,亦决定了数据的精度。了解各种数据类型的存储长度及取值范围,可在程序中恰当地定义变量的类型。2.3.1 整型数据的存储结构整型数据的存储结构整型数据在存储器中用补码的形式存储。C语言标准中没有具体规定各种类型数据所占存储单元的长度,但在各种编译系统中都有自己的规定。整型数据常见的存储长度和值的范围见表2.2。2.3.2 字符型数据的存储结构字符型数据的存储结构字符型数据在存储器中存储的是字符的ASCII码,一个字符型数据只占一个字节,数值范围为0255,若取值范围超出0255,则出错。2.3.3 实型实型(浮点型浮点型)数据的存储结构数据的存储结构实型数据是以指数形式存放
14、在存储单元中的。一个实数表示为指数,可以有不止一种形式,如3.1416可以表示为3.14159100,0.314159101,0.0314159102,31.415910-1等。显然,小数点位置在浮动,同时指数的值也在改变。由于小数点位置可以浮动,所以把实数的指数形式称为浮点型。在存储实型数据时,系统把小数和指数两个部分分别存放,如图2.3所示。图中是以十进制数来示意的。实际上,计算机用二进制数表示小数部分,用2的幂次的二进制数表示指数部分。小数部分和指数部分各占多少位,C标准中并无规定,是由各编译系统自行规定的。小数部分的位数决定了实数表示的精度,位数越多,数的有效位数越多,精度也就越高。指
15、数部分的位数越多,则数值的取值范围就越大。图2.3 指数存储示意图常见的3种实型数据的存储长度、有效数字和取值范围如表2.3所示。Turbo C 对long double型分配16个字节的存储长度。Visual C+6.0对long double型分配8个字节的存储长度。2.4 算术表达式算术表达式C语言中有哪些算术表达式?计算机对算术表达式如何求值?语言中有哪些算术表达式?计算机对算术表达式如何求值?算术表达式是用算术运算符和括号将运算对象连接起来的、符合C语言规则的式子。C语言中运算符的范围很广,通常把起数值运算作用的运算符统称为算术运算符。2.4.1 基本算术运算符与表达式基本算术运算符
16、与表达式1基本算术运算符基本算术运算符C语言中的基本算术运算符见表2.4。2运算符的优先级与结合性运算符的优先级与结合性C语言规定了运算符的优先级和结合性。在对表达式求值时,需按运算符的优先级高低次序进行。5个基本算术运算符的优先级是先*、/、%,后+、-。如a-b*c,b的左侧是减号,右侧是乘号,因乘号优先于减号,所以,相当于a-(b*c)。如果一个运算对象两侧的运算符的优先级相同,如a-b+c,则按规定的结合方向处理。C语言规定了运算符的结合方向(结合性)。基本算术运算符的结合方向为自左至右,又称为左结合性,即运算对象先与左侧的运算符结合。因此,b先与减号结合,进行a-b运算,再执行加c运
17、算。关于结合性的概念,在其他高级语言中是没有的,是C语言的特点之一,需认真加以理解。例如:表达式a*b/c-1.5+d的运算顺序为(a*b)/c)-1.5)+c)。3混合运算的数值类型转换混合运算的数值类型转换如果一个表达式中包含了不同数据类型的运算对象,则在进行运算时,不同类型的数据先要转换成同一类型,然后进行运算。转换的规则是:把存储长度短的类型向存储长度长的类型转换。各种数据类型间的一般转换顺序可表示如下:(short,char)intunsignedlongfloatdouble算术运算符是双目运算符,一个运算符涉及两个运算对象,一次转换只在两种不同类型间进行。例如,int型与doub
18、le型数据进行运算,先将int型数据转换成double型,然后进行运算,结果是double型。假设已定义i为int型变量,f为float型变量,d为double型变量,l为long型变量,e为float型变量,分析下面表达式的运算:10+a+i*f-d/e计算机执行时从左至右扫描,运算次序如下:(1)进行10+a的运算,先将a转换成整数97,运算结果为107。(2)由于“*”比“+”优先,因此先进行i*f的运算,将i转换成float型,运算结果为float型。(3)整数107与i*f相加。先将整数107转换成实数(小数点后加若干个0,即107.00000),结果为float型。(4)将变量e转
19、换成double型,d/e的结果为double型。(5)将10+a+i*f的结果与d/e的商相减,结果为double型。上述表达式运算过程中的类型转换是由系统自动进行的。在某些情况下,需要在程序中设置操作数类型的转换,这样的转换方式称为强制转换。如%运算要求两运算数必须是整型数,如果在程序中遇到一个或两个运算数不是整型数,就需要强制转换。强制类型转换的一般形式为(类型符)(表达式)例如:(double)a表示将a转换成double类型。(int)(x+y)表示将x+y的值转换成整型。(float)(5%3)表示将5%3的值转换成float型。需要说明的是,在强制类型转换时,得到一个所需类型的中
20、间变量,原来变量的类型未发生变化。例如:(int)x 如果已定义x为float型,则进行强制类型转换后得到一个int型的中间变量,它的值等于x的整数部分,而x的类型不变,仍为float型。分析:从程序的运行结果可以看出,x强制转换为int型并赋给变量i,输出i的值,为整型;x仍为float型,保持原值不变。从上述内容可知,有两种类型转换:一种是在运算时不必由用户指定,系统自动进行的类型转换;另一种是强制类型转换。当自动类型转换不能达到目的时,可以用强制类型转换。如x为float型,则“x%3”不合法,必须用“(int)x%3”。2.4.2 自加、自减运算符与表达式自加、自减运算符与表达式1自加
21、、自减运算符与表达式自加、自减运算符与表达式自加运算符(+)和自减运算符(-)都是单目运算符,只作用于单个变量,使变量的值加1或减1。它们各有两种使用方式:一种是变量在运算符前,另一种是变量在运算符后。分析:程序中4个表达式求值都是在变量i的初值为3的基础上进行的。执行“a1=i+;”时,先把变量i的值3赋给变量a1,再使变量i的值加1,变量i的值变为4。执行“a2=+i;”时,先使变量i的值加1,变为4,再赋给变量a2,变量i和a2的值都为4。执行“s1=i-;”时,先把变量i的值3赋给变量s1,再使变量i的值减1,变为2。执行“s2=-i;”时,先使变量i的值减1,变为2,再赋给变量s2,
22、变量i和s2的值都为2。特别强调:特别强调:自增运算符(+)和自减运算符(-)只能用于变量,而不能用于常量或表达式,如5+或(a+b)+都是不合法的。因为加1或减1后的值仍要存放在原变量中,常量和表达式是不能存储值的。2“+”和和“-”的结合性的结合性“+”和“-”的结合方向是自右至左,也称为右结合性。如果有-i+,i的左面是负号运算符,右面是自加运算符。如果i的原值等于3,若按左结合性,相当于(-i)+,而(-i)+是不合法的,因为对表达式不能进行自加、自减运算。从附录C可知,负号运算符和“+”“-”运算符同优先级,而结合方向为自右至左(右结合性),即它相当于-(i+)。“+”和“-”的结合
23、性可通过下例程序来验证。分析:先使用i的值3,输出-i的值-3,然后i值增加为4。表达式-i+的结合性为-(i+),执行时,先用i的值3取负号,将-3赋给a1,再对i加1,i的值变为4。表达式-+i的结合性为-(+i),执行时,先将i的值3加1后取负号,再将-4赋给a2。3自加、自减运算符表达式使用中需注意的问题自加、自减运算符表达式使用中需注意的问题C运算符和表达式使用灵活,利用这一点可以巧妙地处理许多在其他语言中难以处理的问题,但使用中也有一些需要注意的问题:(1)注意不同系统对表达式的求值顺序的差异,避免求值歧义。例如,i的初值为3,有以下表达式:(i+)+(i+)+(i+)表达式的值是
24、多少呢?有的系统按照自左而右顺序求解括号内的运算,求完笫1个括号的值后,实现i自加,i值变为4,再求第2个括号的值,结果表达式相当于3+4+5,即12。而另一些系统(如Turbo C和Visual C+6.0)把3作为表达式中所有i的值,因此3个i相加,得到表达式的值为9,在求出整个表达式的值后再实现自加3次,i的值变为6。应该避免出现这种歧义性。如果编程者的原意是想得到12,可以写成下列语句:(2)注意运算符的组合。C语言中有的运算符为一个符号,有的运算符由两个符号组成,如果有多个运算符连写在一个表达式中,怎样组合运算符呢?如i+j,是理解为(i+)+j,还是理解为i+(+j)呢?C编译系统
25、在处理时,尽可能多地自左而右,将若干个字符组成一个运算符(在处理标识符、关键字时也按同一原则处理)。i+j被理解为(i+)+j,而不是i+(+j)。为避免误解,最好采取便于理解的写法,不要写成i+j的形式,而应写成(i+)+j的形式。(3)注意不同系统在调用函数时实参数的求值顺序的差异,避免求值歧义。C标准对函数参数的求值顺序并无统一规定。例如,i的初值为3,如果有下面的函数调用语句:printf(%d,%d,i,i+);在有的系统中,从左至右求值,输出“3,3”;在有的系统中,对函数参数的求值顺序则是自右而左。上面printf函数中要输出两个表达式的值,先输出第2个表达式i的值3,然后执行i
26、+,使i加1变为4,因此输出的是“4,3”。为了避免这种求值的歧义,最好改写成函数参数求值与处理顺序无关的形式。如将上面的语句改为j=i+;printf(%d,%d,j,i);由于编译系统的处理方法不同而引起的差异问题,并不是C语言标准,不必死记,必要时上机测试一下即可。但遇到问题时,应知道问题可能出在哪里。2.4.3 赋值运算符与表达式赋值运算符与表达式1基本的赋值运算符与表达式基本的赋值运算符与表达式“=”就是赋值运算符。用赋值运算符构成表达式的一般形式为变量=表达式这里的“=”不表示数量相等的关系,而表示一种“赋值”操作。其作用就是把右侧表达式的值赋给左侧的变量。也就是说,表达式的运算结
27、果使变量具有赋值符号右侧表达式的值。从变量的含义来讲,就是把右侧表达式的值存放到变量所标识的存储单元中。将赋值表达式作为表达式的一种,使赋值操作也可以出现在赋值语句中,而且可以出现在其他语句中,这是C语言灵活性的一种表现。赋值运算符的结合方向为自右至左,又称为右结合性。如a=b=c=5等价于a=(b=(c=5),操作次序为:5赋给c,c的值赋给b,b的值赋给a。例如:a=5+(c=6)的处理步骤是c=65+ca=5+c,表达式的值为11,变量a的值是11,变量c的值是6。a=(b=4)+(c=6)的处理步骤是c=6b=4b+ca=b+c,表达式的值为10,变量a的值是10,变量b的值是4,变量
28、c的值是6。a=(b=10)/(c=2)的处理步骤是c=2b=10b/ca=b/c,表达式的值为5,变量a的值是5,变量b的值是10,变量c的值是2。程序中的表达式在程序运行时,由计算机自动处理。但在程序设计中,或程序调试中往往需要分析表达式的求值。复杂表达式的求值要根据运算符的优先级和结合性(见附录C)分析处理顺序。初学者最好通过上机运行一个简单程序来验证表达式的求值,以加深对复杂表达式求值的理解。分析:在printf的最后一个输出项直接写表达式,输出结果就是该表达式的值。利用printf函数,可以输出变量、表达式的值。这里只要模仿使用就行了,关于输出格式描述符,将在后面章节介绍。2赋值过程
29、中的类型转换赋值过程中的类型转换如果赋值运算符左侧变量与右侧表达式的类型不一致,则在赋值时,系统自动进行类型转换。类型转换的一般规则是:把右侧表达式的值转换为左侧变量的类型,再进行赋值操作。(1)将浮点型数据(包括单、双精度)赋给整型变量时,舍弃浮点数的小数部分,只将整数值赋给变量。(2)将整型数据赋给单/双精度变量时,数值不变,但以浮点数形式存储到变量中。(3)将一个double型数据赋给float型变量时,应先将双精度数转换成单精度数,即只截取其前面67位有效数字,存放到float型变量的存储单元中。注意:注意:被赋值的双精度数的大小应不超出float型变量的数值范围,否则将产生溢出。将一
30、个float型数据赋给double型变量时,数值不变,有效位数扩展到双精度型。(4)字符型数据赋给整型变量时,将字符的ASCII码赋给整型变量,不存在数据丢失问题。(5)将一个存储长度长的整型数据赋给一个存储长度短的整型变量时,将按等长度截取低字节值存放到短变量存储单元中。从存储结构看,353的二进制数为0000000101100001,将低字节01100001赋给字符变量c,其十进制数为97,对应的是字符a的ASCII码,高字节将截断丢失。一般来说,将存储长度长的类型数据赋给存储长度短的类型变量,会发生数据截断丢失的问题,实际应用中要尽量避免。3复合赋值运算符与表达式复合赋值运算符与表达式在
31、赋值运算符“=”之前加上其他运算符,可以构成复合赋值运算符。凡是二目运算符,都可以与赋值运算符一起组合成复合赋值运算符。C语言中有10种复合赋值运算符,即+=、-=、*=、/=、%=、=、&=、=、|=。其中,后5种是有关位运算的,将在后面章节学习。使用复合赋值运算符,按照一般赋值表达式的形式,可构造出各种表达式。下面是使用复合赋值运算符构造表达式的例子:a+=3 等价于 a=a+3x*=y+8 等价于 x=x*(y+8)x%=3 等价于 x=x%3赋值表达式中可以包含复合赋值运算符。例如下面的表达式是一个正确的赋值表达式:a+=a-=a*a如果a的初值为12,此赋值表达式的求解步骤如下:(1
32、)进行a-=a*a的运算,相当于a=a-a*a,a的值是12-144=-132;(2)进行a+=-132的运算,相当于a=a+(-132),a的值为-132+(-132)=-264。2.4.4 逗号运算符与表达式逗号运算符与表达式C语言中“,”也可以作为一种运算符,用它将两个以上表达式连接起来就构成了逗号表达式。逗号表达式的一般形式为表达式表达式1,表达式表达式2,表达式表达式3,表达式表达式n逗号运算符的作用是将若干表达式“串联”起来,确定这些表达式的求值顺序。逗号表达式的求值顺序是从左到右依次求表达式1,表达式2,最后求表达式n的值。逗号运算符在C语言的所有运算符中优先级最低,具有左结合性
33、(见附录C)。事实上,它仅能确定被连接表达式的求值顺序。但它作为一个表达式,应该具有值。逗号表达式的值是最后一个表达式的值。一个逗号表达式可以作为逗号表达式中的表达式,构成复合逗号表达式。例如:(a=3*5,a*4),a+5把(a=3*5,a*4)作为逗号表达式的表达式1,a+5作为逗号表达式的表达式2。(a=3*5,a*4)又是一个逗号表达式,先处理a=3*5,得到a的值15,再处理a*4,运算结果为60,然后处理a+5,得到20。所以整个表达式的值为20。逗号表达式的求值,尤其是复合逗号表达式的求值不容易理解。下面通过程序的运行来验证上述表达式的求值。其实,逗号表达式无非是把若干个表达式“
34、串联”起来。在许多情况下,使用逗号表达式的目的只是想分别得到各个表达式的值,而非一定需要得到整个逗号表达式的值。逗号表达式最常用于循环语句(for语句)中,详见第5章。注意:注意:逗号在逗号表达式中是运算符,但在C语言中也有不作为运算符使用的情况,要根据逗号出现的地方加以区分。如函数参数列表中用逗号来作为间隔符使用:printf(%d,%d,%d,a,b,c);其中的“a,b,c”并不是一个逗号表达式,而是作为3个输出项间的分隔符。这一点在前面printf函数的使用中应该有所体会。如果改写为printf(%d,(a,b,c);则(a,b,c)是一个逗号表达式,作为printf函数的一个输出项,
35、输出逗号表达式的值,即c的值。C语言表达能力强,其中一个重要原因就在于它的表达式类型丰富,运算符功能强,因而使用灵活、适应性强。在后面章节中读者将会对此有进一步体会。实操训练实操训练实训任务二实训任务二 熟悉熟悉C语言变量定义与表达式求值语言变量定义与表达式求值实训项目 模拟表达式求值计算器。实训指导(2)根据表达式,在框架程序中定义变量,给变量赋初值,填写表达式,设置输出格式字符(若表达式的值是整型,则设置为d;若是实型,则设置为f)。如第一个表达式的求值程序为课外练习课外练习1思考:思考:(1)C语言中数据类型的内涵是什么?(2)C语言中整型常量可以用哪几种进制数表示?怎样区分不同进制的数
36、?(3)C语言中实型常量有哪几种表示形式?与数学中的书写有何异同?(4)C语言中字符常量怎样表示?在计算机内部怎样表示?(5)C语言中字符串常量怎样表示?字符常量与字符串常量有什么区别?(6)在C语言程序中怎样使用符号常量?(7)C语言中变量的内涵是什么?为什么程序中变量必须先定义后使用?怎样定义变量?(8)char、int、float、double型数据的存储长度(字节数)有何不同?2分析以下各题,选择一个正确项。从以下每一小题的4个备选项中选择一个正确项。(1)设有“int x=11;”,则表达式x+*1/3的值是()。A3B4C11D12(2)下面程序的输出结果是()。A3B3.2C0D3.07(3)若x和n均是int 型变量,且x的初值为12,n的初值为5,则表达式x%=(n%=2)求值后x的值为()。A0B1C2D3(4)下面程序执行后的输出结果是(小数点后只写一位)()。A6 6 6.0 6.0B6 6 6.7 6.7C6 6 6.0 6.7D6 6 6.7 6.0(5)下面程序的输出结果是()。A-6B12C0D-12