![C语言程序设计(教案)_第1页](http://file4.renrendoc.com/view12/M07/3C/03/wKhkGWcxxYuAJXSnAAGTrHGtTJo560.jpg)
![C语言程序设计(教案)_第2页](http://file4.renrendoc.com/view12/M07/3C/03/wKhkGWcxxYuAJXSnAAGTrHGtTJo5602.jpg)
![C语言程序设计(教案)_第3页](http://file4.renrendoc.com/view12/M07/3C/03/wKhkGWcxxYuAJXSnAAGTrHGtTJo5603.jpg)
![C语言程序设计(教案)_第4页](http://file4.renrendoc.com/view12/M07/3C/03/wKhkGWcxxYuAJXSnAAGTrHGtTJo5604.jpg)
![C语言程序设计(教案)_第5页](http://file4.renrendoc.com/view12/M07/3C/03/wKhkGWcxxYuAJXSnAAGTrHGtTJo5605.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章c语言概述1.1重点、难点1.c语言的特点(1)语言简洁、紧凑、使用方便灵活(2)运算符丰富(3)具有结构化的控制语句(4)语法限制不太严格,程序设计自由度大(5)c语言允许用户直接访问物理地址,能进行位操作,可以直接对硬件进行操作。2.源程序的书写规则(1)c语言书写自由,一行内可以写几个语句,并且一个语句可以写在多行上。(2)c程序没有行号,每个语句和数据定义的最后必须有一个分号。(3)c语言分号是语句中必不可少的。即使是程序的最后一个语句也应该包含分号。(4)c语言中的注释可以用“/*”开始,用“*/”结束,注释可以在任何允许插入空格符的地方插入。且“/”与“*”间不允许有空格。(5)c语言的注释不允许用嵌套,注释可以用西文也可以用中文。3.c程序的组成(1)一个c程序由一个或多个源程序文件组成(2)一个c源程序文件是由若干个函数组成的。函数是c程序的基本单位。在这些函数中有且只用一个主函数main(),主函数由系统提供。各个函数在程序中所处的位置不是固定的。(3)一个源程序文件是一个编译单位,即以源文件为单位进行编译,而不是以函数为单位进行编译。C语言源程序文件的扩展名为.c。(4)任何c程序都是从主函数开始执行的,调用其他函数后,回到main()主函数,在main()主函数中结束程序运行。4.函数的组成一个函数由两部分组成(1)函数的首部函数类型、函数名、函数参数类型、函数参数名函数名后必须是一对圆括弧,但可以没有函数参数(2)函数体函数体是最外层{}括起来的部分,包括变量的声明和执行两部分1.2例题【例题1-1】判断(1)c语言是以函数为程序的基本单位,便于实现程序的模块化()解析:c程序是由函数组成的,一个c源程序至少包含一个主函数main()。函数是c程序的基本单位。C语言的这种特点使c程序容易实现模块化。答案:正确(2)c程序的执行总是从程序第一句开始()解析:一个c程序总是从main()函数开始执行,而不论main()函数处在程序中的任何位置。答案:错误(3)c程序中可以不使用函数()解析:c语言是函数式语言,一个c源程序至少包含有一个main函数。答案:错误(4)c语言提供了一个输入语句scanf()和一个输出语句printf()解析:c语言本身没有输入输出语句,输入输出操作由库函数scanf和printf等函数来完成。答案:错误(5)c程序的一条语句必须写在一行中()解析:c程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上。答案:错误(6)c程序中注释说明只能写在一条语句的后面()解析:c语言中的注释可以用“/*”开始,用“*/”结束,注释可以在任何允许插入空格符的地方插入。且“/”与“*”间不允许有空格。答案:错误【例题1-2】下列程序中格式错在何处A.main()B.{inta,b,z;C.a=2:b=3;D.z=a+b;}解析:A,B,D没有错误,C中,在a=2后应该是分号“;”或逗号“,”,不应该是冒号“:”,因此c处有错误。答案:c【例题1-3】c语言的程序一行写不下时,可以A.用逗号换行B.用分号换行C.在任意空格处换行D.用回车符换行解析:c语言可以在任何一个分隔符或空格处换行答案:c【例题1-4】下列程序段中那一个是错误的注释方法?A.#in/*包含*/clued<stdio.h>B.#include<stdio.h>voidmain()voidmain/**/(/*主函数*/){{}}C.#include<stdio.h>D.#include<stdio.h>voidmain()voidmain(){intx/*初始化*/=10;{intx=10;/*打印*/printf(“%d”,x);printf(“%d”,x);}/*打印X的值*“*=10*/}解析:根据c语言的规定:注释不能插在标识符的中间,在其他有分隔符的地方都可以插入注释,上面四个程序段中只有A是将注释插入一标识符的中间了,因此A的注释是错误的。答案:A【例题1-5】下列程序中的错误在()main(){……..{{……..}}解析:从上面的c程序的结构中,可以明显看出花括号不是成对出现的,必须在上面的程序中再加上对应的花括号,可以加到最后,也可以加在第四行或第五行,看程序的具体情况而定。答案:程序中少了一个花括号“}”第三章数据类型、运算符与表达式3.1重点、难点1.关键字关键字又称保留字,是一种语言中用于固定用途的名字。C语言的关键字共有32个。,所有关键字都用小写的英文单词来表示。c语言的关键字如下:autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregistreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile2.标识符1、概念:用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列称为标识符。简单地说,标识符就是一个名字。2、c语言的标识符命名规则c语言的标识符只能由字母、数字、下划线三种字符组成。且第一个字符必须为字母或下划线。3、标识符的分类关键字:是一些特殊的标识符,又称保留字,这些保留字不允许用户对它重新定义。标准标识符:也是特殊含义的标识符,例如库函数(printf()函数)、编译预处理命令等用户自定义标识符4、对标识符的说明用户标识符长度最好不要超过8个字符用户标识符不要和32个关键字同名用户标识符最好不要与c语言中的库函数和其他一些命令(如编译预处理命令)重名大小写是不同的标识符用户标识符应做到见名知意3.c语言的数据类型在C语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。1.基本数据类型基本数据类型最主要的特点是,其值不可以再分解为其它类型。也就是说,基本数据类型是自我说明的。2.构造数据类型是根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个构造类型的值可以分解成若干个“成员”或“元素”。每个“成员”都是一个基本数据类型或又是一个构造类型。在C语言中,构造类型有以下几种:·数组类型·结构类型·联合类型3.指针类型指针是一种特殊的,同时又是具有重要作用的数据类型。其值用来表示某个量在内存储器中的地址。虽然指针变量的取值类似于整型量,但这是两个类型完全不同的量,因此不能混为一谈。4.空类型在调用函数值时,通常应向调用者返回一个函数值。这个返回的函数值是具有一定的数据类型的,应在函数定义及函数说明中给以说明。但是,也有一类函数,调用后并不需要向调用者返回函数值,这种函数可以定义为“空类型”。其类型说明符为void。4.常量和变量对于基本数据类型量,按其取值是否可改变又分为常量和变量两种。(一)常量概念:常量(即常数)是程序运行过程中值不可改变的量,它又分为直接常量和符号常量。具体分为以下几类。1.普通整型常量整型常量有三种表示形式十进制数:123,-456,0八进制数:(0开头)0123即(123)8十六制数:(0x开头)0x123,即(123)16、0x2bf即(2bf)16整型常量占2个字节整型常量表示范围为-32768——32767即215-1。2.长整型常量在一个整数后加字母l或L则变成长整型常量长整型常量占4个字节长整型常量表示范围为231-13.无符号整型常量:一个整型常量后加一个字母u或U则认为它是无符号整型数据。在内存中按无符号整型规定的形式存放。如果是负数后加字母u或U则先把负数转换成补码,然后按无符号数存储。例如:-12345u先将-12345转换成补码53191,然后按无符号数存储。4.实型常量:又称浮点数实型常量有两种表示形式:十进制小数表示形式和指数表示形式十进制小数表示形式:由整数、小数点、和小数三部分组成,而且必须有小数点。例如0.123,0.23、45.0、3.67、0.0等当小数部分或整数部分为0时0可以省略,但两部分不能同时省略。例如45.0可以写成45.,0.23可以写成.23。0.0可以写成.0或0.。指数形式:由尾数、E或e和指数三部分组成。例如123e3或123E3(123×103)或1.23E5(1.23×105)注意:1、尾数和指数都不能省略。即e或E的前后必须有数字。例如:3.58e4是正确的表示形式。1.23e或e5都是错误的表示形式。2、e或E后面的指数必须为整数。例如:2.34e4.5是错误的表示形式。3、小数点的前面有且只有一位非0的数字称为规范化的指数形式。例如:5.67e34、如果一个实数在用指数形式输出时,是按规范化的指数形式输出的。例如将5689.65指定按指数形式输出会输出5.68965e+003或5.68965e+03实型常量占8个字节64位按双精度方式处理如果在实数的后面加字母f或F则系统会按单精度处理。如1.65f。5.字符常量:是一对单引号括起来的一个字符。如‘a’、‘A’、‘%’等。字符常量占一个字节字符常量存储时存储的是字符的ASCII值大小写是不同的字符常量。例如‘A’和‘a’,’C’和‘c’等是不同的字符常量c语言还使用特殊形式的字符常量,就是以“\”开头的字符序列,称为转义字符。常用的转义字符如下:\n 回车换行,将光标移到下一行行首。
\t 横向跳格(跳到下一个输出区,一个输出区8列,下个输出区到第9列)\b 回退一格\r 回车光标回到本行行首\f 走纸换页\\ 反斜线符"\"\' 单引号符\a 鸣铃\” 输出双引号\ddd 1~3位八进制数所代表的字符
\xhh 1~2位十六进制数所代表的字符
广义地讲,C语言字符集中的任何一个字符均可用转义字符来表示。上述的\ddd和\xhh正是为此而提出的。ddd和hh分别为八进制和十六进制的ASCII代码。如\101表示字符"A",\102表示字母"B",\134表示反斜线,\x0A表示换行等。6.字符串常量:字符串常量是一对双引号括起来的字符序列。如“boy”、“ABCDE”等。每个字符串的结尾加一个字符串结束标志(‘\0’)系统根据此标志判断字符串是否结束。“\0“是一个ASCII为0的字符,是空操作符,由系统自动加到字符串的结尾,不是人工操作。例“china”实际内存中:china\0字符串常量所占的字节数是它的字符的个数加1。而字符串的长度是从第一个字符开始到第一个’\0’之间的字符的个数。例如:“qwert\0gs”的字节数是9而长度为5。7.符号常量:是用一个标识符标识一个常量。在使用过程中,这个标识符就代表了该常量。若程序的开头有#definePI3.1415926则PI即是符号常量,在程序中代表3.1415926(二)变量:概念:在程序执行过程中取值可变的量称为变量。它们可与数据类型结合起来分类。例如,可分为整型常量、整型变量、浮点常量、浮点变量、字符常量、字符变量、枚举常量、枚举变量。在程序中,常量是可以不经说明而直接引用的,而变量则必须先说明后使用。变量定义的形式:存储类型名类型标识符变量名1[=表达式1],…….变量名n[=表达式n];1.整形变量(1)整形变量分类:基本型(int)、短整型(short[int])、长整形(long[int])、无符号整形(unsignedint、unsignedshort、unsignedlong)。基本型类型说明符为int或signedint,在内存中占2个字节,其取值范围为-32768-32767短整型类型说明符为shortint或short。所占字节和取值范围均与基本型相同。长整型类型说明符为longint或long,在内存中占4个字节,其取值同长整常数的取值范围。无符号型类型说明符为unsigned。
无符号型又可与上述三种类型匹配而构成:
无符号基本型类型说明符为unsignedint或unsigned。
无符号短整型类型说明符为unsignedshort
无符号长整型类型说明符为unsignedlong
各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同。但由于省去了符号位,故不能表示负数。下表列出了TurboC中各类整型量所分配的内存字节数及数的表示范围。
类型说明符数的范围分配字节数
int-32768~32767 ■■
shortint-32768~32767 ■■
longint-2147483648~2147483647 ■■■■
unsignedint0~65535 ■■unsignedshort0~65535 ■■
unsignedlong0~4294967295 ■■■■(2)整型变量的说明
变量说明的一般形式为:类型说明符变量名标识符,变量名标识符例如:
inta,b,c;(a,b,c为整型变量)
longx,y;(x,y为长整型变量)
unsignedp,q;(p,q为无符号整型变量)(3)在书写变量说明时,应注意以下几点:允许在一个类型说明符后,说明多个相同类型的变量。各变量名之间用逗号间隔。类型说明符与变量名之间至少用一个空格间隔。最后一个变量名之后必须以“;”号结尾。变量说明必须放在变量使用之前。一般放在函数体的开头部分。2.实型变量(1)实型变量分类:单精度(float)、双精度(double)、长双精度(longdouble)在TurboC中单精度型占4个字节(32位)内存空间,其数值范围为-3.4E-38~3.4E+38,只能提供7位有效数字。双精度型占8个字节(64位)内存空间,其数值范围为-1.7E-308~1.7E+308,可提供16位有效数字。(2)实型变量说明的格式和书写规则与整型相同。
例如:floatx,y;(x,y为单精度实型量)
doublea,b,c;(a,b,c为双精度实型量)3.字符型变量:用char来定义字符型变量用来存放一个字符型常量,且只能放一个字符。实际在内存中存放的是该字符的ASCII值。C语言中字符型数据和整形数据间可以通用,一个字符型数据既可以按字符型数据处理也可以按整形数据处理,按整形数据处理时将ASCII值作为整数处理,故字符型数据可以进行算术运算。字符型数据占一个字节,只能存放0-255之间的整数。字符变量类型说明的格式和书写规则都与整型变量相同。4.在c语言中没有专门的字符串变量,如果要将字符串放在变量中,应使用字符数组。5.变量的初值和类型转换(一)变量赋初值在程序中常常需要对变量赋初值,以便使用变量。语言程序中可有多种方法。在定义时赋以初值的方法,这种方法称为初始化。在变量说明中赋初值的一般形式为:类型说明符变量1=值1,变量2=值2,……;例如:(1)对被定义的变量均赋初值floatx=3.2,y=3f,z=0.75;charch1='K',ch2='P';(2)对被定义的变量的一部分赋初值inta,b,c=5;(3)对几个变量赋同一初值inta=3,b=3,c=3;(二)变量类型的转换变量的数据类型是可以转换的。转换的方法有两种,一种是自动转换,一种是强制转换。1、自动转换自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成。自动转换遵循以下规则:若参与运算量的类型不同,则先转换成同一类型,然后进行运算。高高doublefloatlongunsigned低intshort,char图2.1所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。char型和short型参与运算时,必须先转换成int型。在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度。图2.1表示了类型自动转换的规则。2、强制类型转换强制类型转换是通过强制类型转换运算符来实现的。其一般形式为:(类型说明符)(表达式)其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。例如:(float)a把a转换为实型,(int)(x+y)把x+y的结果转换为整型。在使用强制转换时应注意以下问题:类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。6.运算符(一)算术运算符和算术表达式1.加法运算符“+”:加法运算符为双目运算符,即应有两个量参与加法运算。如a+b,4+8等。具有左结合性。
2.减法运算符“-”:减法运算符为双目运算符。但“-”也可作负值运算符,此时为单目运算,如-x,-5等具有左结合性。
3.乘法运算符“*”:双目运算,具有左结合性。
4.除法运算符“/”:双目运算,具有左结合性。参与运算量均为整型时,结果也为整型,舍去小数。如果运算量中有一个是实型,则结果为双精度实型。
voidmain(){printf("\n\n%d,%d\n",20/7,-20/7);
printf("%f,%f\n",20.0/7,-20.0/7);
}结果为:2,-22.857143,-2.857143本例中,20/7,-20/7的结果均为整型,小数全部舍去。而20.0/7和-20.0/7由于有实数参与运算,因此结果也为实型。5.求余运算符(模运算符)“%”:双目运算,具有左结合性。要求参与运算的量均为整型。求余运算的结果等于两数相除后的余数。
voidmain(){
printf("%d\n",100%3);
}结果:1“%”为双目运算,具有左结合性。求余运算符%要求参与运算的量均为整型。本例输出100除以3所得的余数1。6.算术表达式算术表达式是由算术运算符和括号连接起来的、符合c语法规则的式子,以下是算术表达式的例子:
a+b(a*2)/c(x+r)*8-(a+b)/7++isin(x)+sin(y)(++i)-(j++)+(k--)(二)自增1,自减1运算符
自增1运算符记为“++”,其功能是使变量的值自增1。自减1运算符记为“--”,其功能是使变量值自减1。自增1,自减1运算符均为单目运算,都具有右结合性。可有以下几种形式:++ii自增1后再参与其它运算。--ii自减1后再参与其它运算。
i++i参与运算后,i的值再自增1。
i--i参与运算后,i的值再自减1。
在理解和使用上容易出错的是i++和i--。特别是当它们出现在较复杂的表达式或语句中时,常常难于弄清,因此应仔细分析。注意:1、自增、自减运算符只能用于变量不能用于常量或表达式2、自增、自减运算符的结合方向为自右向左。例如:若i的原值为3则执行语句printf(“%d”,-i++);的结果为-3。(先取出i的值3输出-i的值-3,然后i增值为4)3、对于i+++j类表达式c编译系统在处理时自左而右尽可能多的将若干个字符组成一个运算符。所以它相当于(i++)+j4、在函数调用时对函数参数的求值顺序是自右而左。例如:若i的初值位3则执行printf(“%d,%d”,i,i++);的结果为4,3(三)赋值运算符和赋值表达式
简单赋值运算符和表达式,简单赋值运算符记为“=”。由“=”连接的式子称为赋值表达式。其一般形式为:变量=表达式例如:x=a+bw=sin(a)+sin(b)y=i+++--j赋值表达式的功能是计算表达式的值再赋予左边的变量。赋值运算符具有右结合性。因此a=b=c=5
可理解为
a=(b=(c=5))如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下:
1、实型赋予整型,舍去小数部分。整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。3、字符型赋予整型,由于字符型为一个字节,而整型为二个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0或为1视系统而定。4、整型赋予字符型,只把低八位赋予字符量。5、将unsignedint型数据赋给longint型变量时,只需将高位补0。6、将非unsigned型数据赋给长度相同的unsigned型变量,也是原样照赋。(四)复合赋值符及表达式
在赋值符“=”之前加上其它二目运算符可构成复合赋值符。例如:+=,-=,*=,/=,%=构成复合赋值表达式的一般形式为:变量双目运算符=表达式它等效于变量=变量运算符表达式例如:a+=5等价于a=a+5x*=y+7等价于x=x*(y+7)r%=p等价于r=r%p复合赋值符这种写法,对初学者可能不习惯,但十分有利于编译处理,能提高编译效率并产生质量较高的目标代码。(五)逗号运算符和逗号表达式C语言中逗号“,”也是一种运算符,称为逗号运算符。其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。
其一般形式为:表达式1,表达式2其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。说明两点:
1、逗号表达式中的表达式1和表达式2也可以又是逗号表达式。例如:表达式1,(表达式2,表达式3)形成了嵌套情形。因此可以把逗号表达式扩展为以下形式:表达式1,表达式2,…表达式n整个逗号表达式的值等于表达式n的值。2、程序中使用逗号表达式,通常是要分别求逗号表达式内各表达式的值,并不一定要求整个逗号表达式的值。3、并不是在所有出现逗号的地方都组成逗号表达式,如在变量说明中,函数参数表中逗号只是用作各变量之间的间隔符。3.2例题【例题3-1】下列哪些是c语言提供的合法的数据关键字A.FloatB.signedC.integerD.Char解析:此题的选项A和D中有一个字母是大写字母,c语言的关键字不允许用大写字母,所以是不正确的,c也不对,在c语言中,用int而不用integer做为整形数据定义的关键字,只有B是对的,signed是有符号的意思,是c语言中的一个关键字。答案:B【例题3-2】下面标识符中,合法的用户标识符为A.变量aB.fast+1c.printfD.2ab解析:标识符只能由字母、数字、下划线三种字符组成。且第一个字符必须为字母或下划线。A是汉字不是上述三种情况之一,不能用做用户标识符。而B含有加号,加号不能用做标识符。D是以数字开头,不符合标识符命名规则。C选项是c语言的库函数,可以做用户标识符。答案:C【例题3-3】下列属于整形常量的是A.0X12AB.12xC.-12.D.1E2解析:十六进制整数是以0x开头,所以选项B不合法。选项C有小数点所以是实型常量的十进制表示形式,D是实型常量的指数表示形式。c语言能用来表示整常数的有三种:十进制、八进制、十六进制。A是整形常量的十六进制表示形式。答案:A【例题3-4】下述四项中,合法的c语言整型常量是A.-087B.5LC.(long)123456D.1.23e+2解析:选项A中087虽然是以0开头的,但它不是一个八进制数,因为一个八进制数的数字字符在0—7之间,八进制数前可以带负号。选项C是一个表达式而不是一个常量。选项D是一个实形常量。选项B是在一个整数后加L构成一个长整形常量。答案:B【例题3-5】以下不正确的实型常量是()A.–2.B.123E-2C.-.543D.2.1E3.5解析:1、实型常量的十进制表示形式中,小数部分或整数部分可省略,但不能同时省略。2、在指数形式(fem或fEm)的表示中,f为十进制整数或浮点数,m必须是整数,并且f和m都不能省略,“+”号可以省略,“-”号不能省略。)观察以上A、B、C三个选项都是合法实型常量。选项D中指数部分不是整数,是错误的。答案:D【例题3-6】若有以下定义和语句:intu=010,v=0x10,w=10;printf(“%d,%d,%d”,u,v,w);则结果输出为()A.8,16,10B.10,10,10C.8,8,10D.8,10,10解析:函数printf要求三个整形变量u,v,w按十进制形式输出,所以八进制数“010”要转换成十进制数8,十六进制数0x10要转换成十进制16。答案:A【例题3-7】下述常量中,哪些是不合法的常量A.’\12’B.“”C.‘’D.“\483”解析:显然,B和D是字符串常量,A是字符常量。选项A是一个普通的八进制转义字符,ASCII值为10。B是空字符串。选项D初看起来是一个八进制转义序列。但因为8超过了八进制范围,系统自动将其识别为’\4’、’8’和’3’组成,在输出时显示为“
83”。选项c仅由两个连续的单引号组成,是错误的字符常量。答案:C【例题3-8】以下不合法的常量是()A.‘\6’B.""C.‘\286’D.”\286”解析:B选项""是空字符串常量,此串仅占用一个字节。A选项为转义字符。D选项为字符串常量,而C选项看似为转义字符,但超过了\后的八进制的表示范围,是不合法的。答案:C【例题3-9】字符串”\\\”AAA\123\xAA\t”的长度为A.8B.17C.14D.10解析:c语言对上述问题的处理方法是从左向右尽可能多的将连续的字符组成一个有意义的项。所以\\为转义字符\,\”为转义字符输出为”。AAA是三个普通字符。\123也是转义字符。\XAA是转义字符。\t为一个转义字符。答案:A【例题3-10】下列选项中,()是正确的转义字符。A.'\xef'B.'\082'C.'xab'D.'\'解析:B选项“\”后应为1-3位八进制,但8超过了八进制的表示范围,故是错误的。C选项不是转义字符的表示形式。D选项不是转义字符的正确表示形式。A选项表示十六进制ef所表示的字符∩。答案:A【例题3-11】下面程序段的结果是inti=65536;printf(“%d\n”,i);A.65536B.0C.有语法错误,无出结果D.1解析:c语言规定,int类型变量占两个字节的存储单元,表示的数值范围为-32768——32767,题目中的i赋值为65536,已超过两个字节所能表示的数值,c语言认为这并不是出错,而是自动取低位两个字节的内容。将该数减去整型数据类型的模,所以65536-65536=0答案:B【例题3-12】若int类型数据占两个字节,则执行以下语句的输出为()intk=-1;printf(“%d,%u\n”,k,k);A.–1,-1B.-1,32767C.-1,32768D.-1,65535解析:c语言中,负数在内存中是以补码形式存在的。k=-1在内存中的存储形式是1111111111111111,当把k的值按“%d”格式(有符号整数)输出时为-1。按“%u”格式(无符号整数)输出时为65535。答案:D补充:求负数的补码(以-7为例)(1)写出绝对值|-7|的二进制表示形式0000000000000111(2)按位取反(即将0变为1,将1变为0)1111111111111000(3)末位加1即得到-7在内存中的表示形式1111111111111001【例题3-13】在下述输出语句的判定中,正确的是()intx=0x123456L;longinty=0xe;printf(“%x,%ld”,x,y);A.输出值为3456,14B.非法赋值C.输出值不确定D.输出值为0x123456,0xe解析:Long型数据0x123456L赋给int型变量x,系统自动对其进行类型转换,将数据中低16位3456赋值给x,舍弃高16位的0x0012。将0xe赋值给long型变量y,其值送到y的低16位,因为0xe是正数,所以变量y的高16位补0。十六进制0xe的十进制为14。故选项A是正确的。答案:A【例题3-14】下列程序的输出是#include<stdio.h>main(){printf(“%d”,null);}A.0B.变量无定义C.–1D.1解析:(1)要把此处的null与c语言中预定义表标识符NULL区分开。NULL是在头文件stdio.h中定义的的标识符,它代表‘\0’;而null是小写拼音字母拼写,因此不能将它当做NULL,而是一般的用户标识符。(2)c语言规定,程序中用到的所有变量在使用前必须先进行定义,而本题中的程序在对null做输出处理之前对它没有给出明确的变量定义答案:B【例题3-15】若k为整形变量,则以下语句inta=-2L;printf(“%d\n”,a);A.赋值不合法B.输出值为-2C.输出为不确定值D.输出值为2解析:本题的主要关键是要弄清c语言中常量的表示方法和有关的赋值原则。在一个整形常量后面加一个L则被认为是长整形常量。一个整常量,如果其值在-32768-32767之间内,可以赋给一个int型或longint型变量。但如果整常量的值超过了上述范围,而在-2147483648---2147483674范围内,则应将其值赋给一个longint型变量。本例中-2L虽然为longint但是其值为-2,因此可以通过类型转换把长整形转换为短整形,然后赋给整形变量a,并按照%d格式输出该值即为-2。答案:B【例题3-16】在c语言中,若下面的变量都是int类型的,则输出的结果是sum=pad=5;PAD=sum++,PAD++,++PAD;printf(“%d\n”,pad);A.7B.6C.5D.4解析:在c语言中,标识符的大小写含义是不同的,因而本题中的pad和PAD分别代表两个不同的变量名称。由于pad已赋值为5,所以显示pad的结果也是5。答案:C【例题3-17】已知ch是字符变量,以下不正确的赋值语句是()A.ch=“a”;B.ch=’a’;C.ch=’\141’;D.ch=’\x61’+3;解析:‘a’是字符占用一个字节。“a”是字符串占用两个字节,不能赋值给字符型变量,因为字符型变量只能存放一个字节的内容。所以A应该是错误的。C选项和D选项是转义字符分别用八进制和十六进制的ASCII码表示字符常量‘a’和‘d’。答案:A【例题3-18】下面选项中,()是对字符变量不正确的赋值方式A.ch=’$’B.ch=’7’+3C.ch=‘\t’D.ch=‘a+b’解析:A选项是将字符$赋给字符变量。选项B是数字字符7与整数3相加做算术运算。C语言中字符型数据和整形数据间可以通用,一个字符型数据既可以按字符型数据处理也可以按整形数据处理。按整形数据处理时将ASCII值作为整数处理,故字符数据可以进行算术运算。选项c为转义字符。选项D单引号括起来三个字符。而字符常量是单引号括起来的一个字符,字符型变量用来存放一个字符型常量,且只能放一个字符。故选项D为错误。答案:D【例题3-19】若有以下定义和语句charc1=’b’,c2=’e’;printf(“%d,%c\n”,c2-c1,c2-‘a’+’A’);则输出结果是A.2,MB.3,EC.2,eD.输出项与对应的格式控制不一致,输出结果不稳定解析:c语言中规定,字符型常量在内存中占一个字节,用于存放字符的ASCII值。所有字符型常量都作为整形量处理,其对应的整数值就是ASCII字符集中该字符的序号。执行表达式“c2-c1”相当于字符‘e’与字符‘b’的ASCII码值相减,即101-98得3。而“c2-‘a’+’A’”即101-97+65得69,而ASCII码值69对应的字符是‘E’。答案:B【例题3-20】请选出合法的c语言赋值语句A.a=b==58B.i++;C.a=58,b=58D.k=int(a+b);解析:由于c语言规定,c程序中的任一语句都必须有一个分号做结束标志,分号是构成任何语句的重要成分,所以答案A、C均错。答案D中的书写int(a+b)是完全错误的,根据c语言规定,使用强制类型转换运算符的书写形式为:(类型名)(表达式),所以答案D应改写为:k=(int)(a+b)。答案 B当于语句i=i+1;由此可见,该语句是合法的赋值语句。答案:B【例题3-21】已知:‘a’的ASCⅡ码值为97,‘0’的ASCⅡ码值为48,下述程序的输出结果是#include<stdio.h>main(){printf(“%s”,”\tabc%L\’\”\064\x41\085”);}A.□□□□□□□□abc%L’”4AB.\tabc%L\’\”\064\x41\085C.abc%L’”0AD.abc%L’”0A\085解析:(1)转义字符“\t”的作用是使后面的输出跳到下一个输出区。一个输出区为8列。(2)abc为三个普通字符,原样输出。(3)对应“\’\””的输出是单撇号和双撇号。(4)“%”后面不是格式字符,它作为普通字符输出,即输出一个“%”。“L”是普通字符,原样输出。(5)转义字符的ASCII码表示一个字符,,八进制的转义字符“\064”为八进制,转换为十进制为52,表示字符’4’。十六进制的“\x41”表示字符‘A’。(6)“\085”不是八进制的ASCII码表示的一个字符,而是‘\0’、‘8’、‘5’字符,输出时输出到第一个空字符‘\0’时结束,所以,‘8’、‘5’不输出。答案:A【例题3-22】下列语句中,符合c语言语法的赋值语句是A.a=7+b+c=a+c;B.a=7+b++=a+7;C.a=7+b,b++,a++D.a=7+b,c=a+7;解析:答案A和B均错,c语言中的赋值运算符的左边只能是变量或表示一个存储单元的表达式。答案c错,c语言中规定任何语句都必须有一个分号来结束。答案D正确,c语言允许用逗号运算符把若干个表达式连接起来形成逗号表达式。答案:D【例题3-23】经过下述赋值后,变量x的数据类型是()intx=3;doubley;y=(double)x;A.intB.charC.floatD.double解析:将变量x的值3强制转换成double类型,再赋值给y,变量x的数据类型还是int型。因为任何变量定义后其数据类型不能改变。答案:A【例题3-24】以下程序的输出结果()main(){floatx=3.6;inti;i=(int)x;printf(“x=%f,i=%d”,x,i);}A.x=3.600000,i=4B.x=3,i=3C.x=3.600000,i=3D.x=3i=3.600000解析:变量被作强制类型转换后,其类型不会改变,改变的只有表达式的值,因此,执行语句i=(int)x后,x的值仍为3.6,但i的值为3。答案:C【例题3-25】设x=2.5,a=7,y=4.7,算术表达式x+a%3*(int)(x+y)%2/4的值A.2.5B.7C.4.7D.2.25解析:取模运算只能在整形数据之间进行,a为整形变量。因为%、*、/这三个运算符的优先级别相同,类型转换符优先于*、/运算符,a的值为7,7%3=1,又因为(int)(2.5+4.7)=7,1*7=7,7%2=1,1/4=0,所以表达式x+a%3*(int)(x+y)%2/4=x+0=2.5答案:A【例题3-26】下述程序的输出结果main(){inta=016;a%=6-1;printf(“%d,”,a);a+=a*=a/=3;printf(“%d,”,a++);printf(“%d”,++a);}A.4,0,3B.4,0,2C.4,2,4D.4,1,3解析:(1)016是八进制整形常量,十进制表示为14。复合的赋值运算符的优先级别比算术运算符“-”的优先级别低,先计算6-1=5,在计算a%5(即14%5得4)赋值给a,所以a的值是4,先输出4。(2)计算a/=3(即4/3等于1,赋值给a,a的值为1)。计算a*=1(a*1等于1*1,赋值给a,a的值为1),计算a+=1(a+1等于1+1=2,赋值给a,a的值为2)。(3)执行printf(“%d,”,a++);语句,先输出a的值为2,然后,变量a的值在自增1(a的值为3)。(4)执行printf(“%d,”,++a);语句,先将变量a的值自增1(a的值为4),再输出a的值4。答案:C【例题3-27】以下程序的输出结果是()main(){inta=1,b=2,c=3,k;k=a+++b+++c++;printf(“\n%d,%d,%d,%d”,a,b,c,k);}A.1,2,3,6B.2,3,4,6C.1,3,3,7D.1,3,3,6解析:表达式a+++b+++c++应理解为:(a++)+(b++)+(c++)所以执行此语句后,k的值是6,a的值是2,b的值是3,c的值是4,输出结果为:2,3,4,6。答案:B【例题3-28】下面正确的语句是()A.intx=y=25;B.intz=(x+y)++;C.x=+8==7;D.x%=4.5;解析:在c语言中,可以在定义变量时对变量初始化,例如:intx=25,但是,对几个变量赋同一初值时不允许以A方式定义变量或对变量初始化。选项B中++运算符只能用于变量不能用于常量或表达式,在本题中不能用于表达式(x+y)。选项D中,%运算符的操作是只能是整形数据,不能是4.5。选项c中的运算符“==“比”=“的优先级高,先进行”+8==7“的运算,其值为假(0),再赋值给x,选项c是正确的赋值语句。况且排除A、B、D只有C选项是正确的。答案:C【例题3-29】若x,y都是整形变量,x=100,y=200,执行完printf(“%d”,(x,y));后,输出结果是A.200B.100C.100200D.输出格式不符,输出不确定的值解析:c语言将逗号作为一种特殊的运算符,其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。答案:A【例题3-30】若有说明语句inti,j;则计算表达式i=(j=3,j++,j=5,j+5)后i的值为A.3B.4C.5D.10解析:求逗号表达式的过程是:先求表达式1的值,再求表达式2的值,最后求表达式n的值,整个逗号表达式的值等于表达n的值)答案:D【例题3-31】下述程序运行的结果是:main(){intx,y;x=sizeof3.14*5;y=sizeof(3.14*5);printf(“%d,%d\n”,x,y);}A.15,4B.40,8C.8,8D.20,8解析:sizef运算符的优先级高于算术运算符的优先级,所以sizeof3.14*5相当于(sizeof3.14)*5为8*5得40。sizeof(3.14*5)为sizeof(15.70)其值为8(c语言中规定每个实型常量当作双精度处理)。答案:B第四章最简单的C程序设计——顺序程序设计4.1重点、难点1.C语言中的语句C语言中的语句用来向计算机发出命令,一个语句经编译后产生若干条机器指令。一个C源程序由若干函数构成,每个函数应包含若干条语句。在C语言中所有语句都是“可执行语句”,没有非执行语句。C语言中的语句分为简单句和复合句两大类,简单句由分号(;)结尾,表示一个语句的终结,分号必不可少;复合句用一对花括号({})把一些语句括起来。注意:“}”后不必加“;”,但复合语句中最后一个语句中的“;”不能忽略不写,例如:{y=a+b;printf(“%d”,y);}。复合语句中的每一个语句可以是任意语句,当然包括复合语句本身,复合语句在形式上是多个语句的组合,但在语法上只相当于一个简单语句,可出现在任何简单语句可以出现的地方。C语言中的语句按语句功能又可分为以下四类:(1)控制语句(共9种),完成一定的控制功能。①if(条件)语句else语句(条件语句)②for(表达式1;表达式2;表达式3)循环体(循环语句)③while(条件)循环体(循环语句)④do循环体while(条件)(循环语句)⑤continue(结束本次循环语句)⑥break(中止执行switch或循环语句)⑦switch(多分支选择语句)⑧goto(转向语句)⑨return(从函数返回语句)(2)函数调用语句。由一次函数调用加一个分号(;)构成。例:printf(“ThisaCprogram”);(3)表达式语句。由一个表达式加一个分号(;)构成。例:area=3.1415926*r*r;(4)空语句。只有一个分号(;)构成,它什么也不做。有时用来做循环体,表示循环体什么也不做。2.常用的顺序执行语句1.赋值语句由赋值表达式加上分号构成。注意:a=x+y和a=x+y;意义不同,前者是表达式,后者是表达式语句。2.输入输出函数调用语句C语言本身没有提供输入输出语句,而是在标准库函数中定义了一系列的输入输出函数,通过对这些函数的调用来实现数据的输入输出,如果在调用这些函数的结尾加上“;”,就构成了输入输出函数调用语句。注意:在使用标准输入输出(I/O)库函数时,要用#include“stdio.h”预编译命令将“stdio.h”文件包括到用户源文件中。(1)字符输入函数调用形式:getchar()作用:从终端(或系统隐含指定的输入设备)输入一个字符。注意:getchar没有参数,函数值是从输入设备得到的字符。该函数可以不赋给任何变量直接输出,例putchar(getchar())。(2)字符输出函数调用形式:putchar(c)作用:向终端输出一个字符。函数值是输出的字符。C可以是字符型常量、字符型变量、整形常量、整形变量及其表达式。(3)格式输出函数形式:printf(格式控制字符串,输出表列)例如:printf(“%d,%d”,a,b)作用:选择输出数据的格式,向终端(或系统隐含指定的输出设备)输出若干任意类型的数据。说明:①格式控制字符串是用双引号括起来的字符串,用于描述输出项的输出方式,包括两类,一类是普通字符和转义字符,普通字符(如上例中的“,”)按原样输出,转义字符按转义后的字符输出;另一类是以%号开头的格式说明符,用于描述输出数据的显示格式。若输出%本身,应在%前加一个%,即两个%连写。②输出表列为若干个输出项,应尽可能与格式控制串中以%号开头的格式控制说明符在数量、数据类型、顺序上保持一致。如果格式控制说明符与输出项数据类型不一致,以格式说明符为主;如果输出项的个数多余格式控制说明符的个数,没有格式控制说明符的输出项不输出;如果格式控制说明符的个数多余输出项的个数,按格式控制说明符输出对应的输出项的值,对应多余的格式控制说明符输出随机值。③常用格式说明如下:1)d格式(输出十进制整数)%d按数据实际长度输出;%mdm为正整数,是指定的输出字段宽度,若实际数据位数<m,则数据左端补空格,若实际数据位数≥m,按实际位数输出(保证数据正确,突破场宽)。%-mdm是指定的输出字段宽度,若实际数据位数<m,则数据右端补空格,若实际数据位数≥m,按实际位数输出。%ld输出长整形数据,也可在l之前加上m。2)o格式(输出八进制整数)把内存单元(连同符号位)一起按八进制形式输出,因此不会输出负号,同d格式符一样,有%o,%mo,%lo等形式。3)x格式(输出十六进制整数)类似o格式,也有%x,%mx,%lx等形式,不会输出负值。4)u格式(以十进制形式输出unsigned数据类型)5)c格式(用以输出一个字符,其范围为ASCII码在0——127之间)6)s格式(用于输出字符串)%s按原样输出字符串。例:printf(“%s”,“China”);输出China(注意:不输出双引号);%ms当字符串长度大于m时,按实际长度输出,否则左边补空格;%-ms当字符串长度小于m时右边补空格;%m.ns输出m列,但只取字符串左边的n个字符,左边补空格;%-m.ns同上,但n个字符右边补空格。7)f格式(以小数点形式输出实数)%f不指定宽度时,由系统自动确定,整数部分全部输出,小数部分输出六位,但有效数位单精度为7位,双精度为16位。8)e格式(以指数形式输出实数)%e数值按规格化数形式输出(即小数点前有一位非零数字),系统自动确定6位小数部分和4位阶码部分(其中e本身占一位,阶符一位,阶二位,例如e+03)。%m.ne%-m.nem为总列数,n为小数点后位数。9)g格式(输出实数,系统自动选用e或f且不输出无意义的0)系统自动在e或f格式中选择输出宽度小的一种方式。表4-1、表4-2总结了printf的各种格式字符及附加格式字符(修饰符)。4-1printf格式字符表格式字符说明格式字符说明d,i以带符号的十进制形式输出整数(正数不输出+)f以小数形式输出单、双精度数(小数部分占6位)o以八进制无符号形式输出整数(不输出前导符0)E,e以指数形式输出单、双精度数(6位小数,4位阶码)X,x以十六进制无符号形式输出整数(不输出前导符0x),用X时,则以大写字母输出g选%f或%e格式中输出宽度较短的一种格式,不输出无意义的0u以无符号的十进制形式输出整数s输出字符串c以字符形式输出一个字符表4-2printf附加格式字符表附加字符说明字母l用于长整形数据的输出,可加在d,o,x,u的前面正整数m指定输出数据的宽度,实际数据超出时,按实际输出,可加在d、o、x、u的前面正整数n输出实数时,保留n位小数;输出字符串时,表示截取n个字符-输出项在输出域内左对齐排放,不加-号的格式输出项按默认的右对齐输出+无论正、负数,输出时都带符号位表4-3scanf格式字符表格式字符说明格式字符说明d,i输入有符号的十进制整数c输入单个字符u输入无符号的十进制整数s输入字符串,将字符串送入一个字符数组中,输入时以非空白字符开始,以第一个空白字符结束。字符串以串结束标志’\0’作为其最后一个字符o输入无符号的八进制整数f输入实数,可以用小数形式或指数形式X,x输入无符号的十六进制整数(大小写作用相同)E,e,G,g与f作用相同,e与f,g可以互相替换(大小写作用相同)表4-4scanf附加格式字符表附加字符说明字母l用于长整形数据的输入(加在d,o,x的前面)及double型数据(%lf、%le)的输入字母h用于短整形数据的输入正整数m指定输入数据的宽度,按指定宽度取值赋给相应变量*对应的输入项不赋给相应的变量,跳过此数据(4)格式输入函数形式:scanf(格式控制字符串,地址表列)作用:按格式控制串的格式从终端为一个或多个不同类型的变量赋值。说明:①scanf函数的格式控制字符串与printf函数的格式控制字符串类似,其格式字符及附加格式字符见表4-3和表4-4。注意:除表中给出的大写字符外,其它格式说明符只能用小写字母,如%d不能写成%D。②地址表列由若干个地址组成,可以是变量的地址(如&a)或已经赋值的指针变量(第十章介绍)。③在输入数据时,数据分隔方法。1)当格式控制字符之间不包括其它字符,且输入的是数值型数据(整形或浮点型)时,数据之间可以用空格、Tab键或回车键(<CR>)分隔;2)当指定了数据宽度时,可连续输入数据。例如:假设inta;floatb,c;执行scanf(“%2d%3f%4f”,&a,&b,&c);语句时,输入数据123456789<CR>,相当于a=12,b=345.000000,c=6789.0000003)当输入的是数值型(整形和浮点型)和字符型,且两种类型交错出现,可连续输入,系统自动识别。例如:假设inta;charb;floatc;执行scanf(“%d%c%f”,&a,&b,&c);语句时,输入数据1234c6789<CR>,相当于a=1234,b=’c’,c=6789.000000。当遇到“c”时,系统知道相应于“&x”项的输入已经结束,“c”是相应于“&y”项的输入,只接收一个字符,余下的是相应于“&z”的输入。4)如果格式控制字符串中有其它字符,输入数据时必须在相应位置输入这些字符。当这类普通字符出现在数值型数据之间时,可以当成数据分隔符。例如:假设intx;floatz;执行scanf(“%d,%f”,&x,&z);语句时,输入数据12,34<CR>,相当于x=12,z=34.000000,普通字符“,”看成数据间隔符。5)当输入字符数据时,空格、回车、Tab键和转义字符均为有效字符输入,所以此时不能使用间隔符,例如:scanf(“%c%c%c”,&c1,&c2,&c3);当输入数据abc<CR>,相当于c1=‘a’,c2=‘b’,c3=‘c’。④输入数据时不能规定实型(即浮点型)数据精度,例如:scanf(“%7.2f”,&a)是不合法的。⑤输入数据时遇到下列情况之一,认为输入数据结束。空格、回车、Tab键遇到宽度满足时,例如:“%4d”,只取4列。遇到非法输入。例如:scanf(“%d%c%f”,&x,&y,&z);当输入数据12345a12o.56<CR>(其中把数字0错打为英文字母o,则x=12345,y=‘a’,z=12.000000。⑥“%”后的附加说明符“*”用来表示本输入项在读入后不赋值给相应的变量,即跳过它对应的数据。例如:inta;charc;scanf(“%2c:%*2d%d”,&c,&a);运行时,输入数据AB:1020<CR>“AB”是对应格式“%2c“的输入,则c=‘A’,普通字符“:”原样输入,“10”是对应格式“%*2d”的输入,跳过这两位数10,将20赋值给变量a,使a=20。4.2例题一、填空【例4-1】已知boy=54,girl=46,(1)如果想输出boy=54%,girl=46%,则输出部分应为:;(2)如果想输出boy=54%,girl=46%则输出部分应为:;解析:(1)中的“boy=”、“,”、“girl=”为普通字符,原样输出,在格式串中直接写出,“%”在格式串中用“%%”表示,“54”在格式串中用%d控制,与输出项boy对应,“46”在格式串中也用%d控制,与输出项girl对应。(2)与(1)不同之处在于分两行输出,用“\n”控制。答案:(1)printf(“boy=%d%%,girl=%d%%”,boy,girl);(2)printf(“boy=%d%%\ngirl=%d%%”,boy,girl);【例4-2】若有程序main(){inti,j;scanf("i=%d,j=%d",&i,&j);printf("i=%d,j=%d\n",i,j);}要求给i赋10,给j赋20,则应该从键盘输入。解析:scanf函数中的格式串中的“i=,j=”为普通字符,原样输入,其中“,j=”又在两个%d中间起分隔作用。答案:i=10,j=20<CR>【例4-3】若使用语句:scanf("%d,%d",&x1,&x2); scanf("%3c%c",&x3,&x4);将10、20、a、b分别赋值给整型变量x1、x2、x3、x4,应按方式输入数据。解析:本题考查的是scanf函数的数据输入间隔问题。"%d,%d"用普通字符“,”间隔,输入时,原样输入;%d和%3c之间属于不同数据类型的控制字符,自动分隔,不用间隔符;%3c%c用字符宽度间隔,也不用间隔符。答案:10,20a**b(说明:**也可换成其它字符)【例4-4】以下程序运行后的输出结果是_______。main(){intx,y;x=97;y=097;printf(“%d%d\n”,x,y);printf(“%c%c\n”,x,y);}解析:x,y均为整型变量,第一个输出语句按十进制整型输出,且数据之间有一个空格,按原样输出,第二个输出语句按字符型数据输出。注意:y应转成十进制形式输出。答案:9779a0【例4-5】写出下面程序的结果。main(){intx=34;floaty=45.9867;printf(“%6D,%6.2F\n”,x,y);/*①输出为:%6D,%6.2F*/printf(“%6d,%6.2f\n”,x,y);/*②输出为:□□□□34,□45.99*/printf(“%-6d\n”,x);/*③输出为:34□□□□(右补4个空格)*/printf(“%06d\n”,x);/*④输出为:000034(左补4个0)*/printf(“%-06d\n”,x);}/*⑤输出为:34(0将失去作用)*/解析:格式控制符应为小写字母,输出语句①由于D、F是大写字母,所以它们被当成普通字符,原样输出;输出语句②的d、f是格式控制字符,6和6.2是附加格式说明符,要求x按6位输出,(左补4个空格),y按6位输出,四舍五入保留2位小数(左补一个空格,小数点占一位);输出语句③要求x按6位输出,附加格式说明符-要求右补4个空格;输出语句④要求x按6位输出,附加格式说明符0要求左补4个0;输出语句⑤要求x按6位输出,附加格式说明符-0要求右补4个0,0将失去作用,否则出现错误。答案:输出结果在题右侧。【例4-6】以下程序段的输出结果是。inta,c;unsignedd;floatb,e;a=3.5+3/2;b=23;c=’\xe0’;d=-1;e=2.555555555;printf(“\n%d,%f,%d,%u,%f”,a,b,c,d,e);解析:(1)变量a的值是4(3.5+3/2=3.5+1再取整,而不是3.5+1.5)。(2)b=23;将整形数据转换成实型数据后再输出。(3)转义字符’\xe0’在内存中占一位,其存储形式为:11100000,将其赋值给int型变量c,系统将其赋给c的低八位,自动将高八位补11111111,即c变量的值为1111111111100000,十进制输出是-32。(4)d=-1;-1在内存中表示为:1111111111111111,数据中16位原样赋值给变量d。输出65535。(5)e=2.555555555;将double浮点数按四舍五入转换成单精度赋值给变量e。本题主要考查不同类型的数据之间的赋值、数据在内存中的存储形式。提示:我们在编写程序时也应像本题一样,注意输出项的数据类型与格式控制符保持一致。答案:4,23.000000,-32,65535,2.555556二、选择【例4-1】下列语句中,不正确的是。A.c=2*5;B.{x++==8;x/=4;} C.;D.c=a+b解析:本题主要考查语句的基本概念,c语句由分号(;)结尾,表示一个语句的终结,分号必不可少,所以D错。B是复合语句;C是空语句。答案:D【例4-2】以下是非法函数调用语句。A.charc=’T’;B.charc;putchar(c);getchar(c);C.putchar(0x61);D.putchar(‘a’+1);解析:getchar函数没有参数,调用函数形式为getchar()putchar函数有参数,调用函数形式为putchar(c),c可以是字符型常量、字符型变量、整型常量及其表达式。答案:B【例4-3】若输入12345、abc下列程序的输出结果为:。main(){inta;charch;scanf(“%3d%3c”,&a,&ch);printf(“%d,%c”,a,ch);}A.123,abcB.123,4C.123,aD.12345,abc解析:本题输入项为两个不同的数据类型,且指定了数据宽度,所以按指定宽度截取数据为变量赋值,整形变量a=123,字符型变量ch为一个字符,取截取的三个字符中的第一个,即ch=‘4’;输出时,注意“,”原样输出。答案:B【例4-4】有如下语句:longinta;doublex;unsignedy;charch;则是合法的输入语句。A.scanf("%ld%lf%x%c",a,x,y,ch); B.scanf("%d%5.2f%d%c",&a,&x,&y,&ch);C.scanf("%ld%lf%o%c",&a,&x,&y,&ch); D.scanf("%ld%f%x%c",&a,&x,&y,&ch); 解析:本题考查的是输入语句的格式控制字符串应与输入项在数据类型上应保持一致。,所以B错,另外B的%5.2f加了精度限制,也属于错误之处;双精度型变量x应与格式控制符%lf对应,所以D错;无符号型变量y应与格式控制符%u、%x或%o对应;字符型变量ch应与格式控制符%c或%d对应,用%d作为格式控制符时,从键盘上输入的数据应为输入字符的ASCII码值。A错在输入项是变量名本身,应该是变量的地址。答案:C【例4-5】有如下定义和输入语句,若要求a,b,c,d的值分别为23,45,’M’,’N’,正确的输入应该是。inta,b;charc,d;scanf(“%d%d”,&a,&b);scanf(“%c%c”,&c,&d);A.2345MN<CR>B.2345<CR>MN<CR>C.2345MN<CR>D.2345MN<CR>解析:A是错误的,它使a=2345。因为输入数据时,23和45之间没有数据分隔符。选项B是错误的,它使a=23,b=45,c是“回车”,d=’M’。选项C也是错误的,它使a=23,b=45,c=’□’,d=’M’。因为以%c格式输入字符数据时,对应的变量只接收一个字符。“空格”和“回车”也是字符数据。本题主要考查scanf函数的使用。注意:以%c格式输入字符数据时,对应的变量只接收一个字符。“空格”和“回车”也是字符数据。答案:D【例4-6】以下程序段的输出结果是。floatx=32.76888888;printf(“%6.3f,%f”,x,x);A.32.769,32.76888888B.32.769,32.768890C.32.76888888,32.7688888D.有语法错误,无输出解析:%6.3f要求输出占6位(包括小数点),小数部分按四舍五入取值,占3位,输出32.769。%f要求正常按实数输出,7位有效数字,小数部分取6位,输出32.768890,3,2,7,6,8,8,9为有效数字,0为随机值。答案:B【例4-7】若int类型数据占两个字节,则执行以下语句的输出为。intx=-7;printf(“%d,%u\n”,x,x);A.-7,-7B.-7,32762C.-7,-32762D.-7,65529解析:首先明确变量的值在内存中的存放形式(以补码存放),x=-7在内存中的存放形式是:1111111111111001,当把x的值按“%d”格式(有符号整数)输出时为-7;按“%u”格式(无符号整数)输出时为65529。本题如果将k以无符号整数格式“%o”和“%x”输出时结果为17771和fff9。答案:D【例4-8】以下程序段的输出结果是。intk=32768;printf(“%d”,k);A.0B.-32768C.-1D.有语法错误,无输出解析:int型数据的范围是:-32768~32767,k值超出了int型数据的范围,系统做出了溢出处理,将该数减去整型数据类型的模(即该类型数据能表示的数据的个数,基本整形的模为65536),所以32768-65536=-32768。答案:B【例4-9】在下述输出语句的输出结果中,正确的是。intx=0xabcdefL;longinty=0x11;printf(“%x,%ld”,x,y);A.输出值为cdef,17B.非法赋值C.输出值不确定D.输出值为0xabcdef,0x11解析:Long型数据0xabcdef赋给int型变量x,系统自动对其进行类型转换,将数据中低16位cdef赋值给x,舍弃高16位的0x00ab。将0x11赋值给long型变量y,其值送到y的低16位,因为0x11是正数,所以,变量y的高16位补0。高16位低
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江西环境工程职业学院《人居环境概论一》2023-2024学年第二学期期末试卷
- 对外经济贸易大学《专利代理与审查专题》2023-2024学年第二学期期末试卷
- 湖北师范大学文理学院《国际投资》2023-2024学年第二学期期末试卷
- 武汉电力职业技术学院《国际营销nternatonaMarketng》2023-2024学年第二学期期末试卷
- 重庆对外经贸学院《现代冶金工程设计原理》2023-2024学年第二学期期末试卷
- 南京体育学院《成本管理》2023-2024学年第二学期期末试卷
- 武汉轻工大学《新媒体产品策划实训》2023-2024学年第二学期期末试卷
- 江西卫生职业学院《设计理论》2023-2024学年第二学期期末试卷
- 上海外国语大学《幼儿园舞蹈创编》2023-2024学年第二学期期末试卷
- 2025年度个人车辆抵押贷款购车二手车鉴定评估报告审查合同
- 蔚来用户运营分析报告-数字化
- 中学生低碳生活调查报告
- 东软入职合同
- 游泳池经营合作方案
- 擘画未来技术蓝图
- 基于情报基本理论的公安情报
- 《“白山黑水”-东北三省》示范课课件(第1课时)
- 孔氏家庙的社会调查报告
- 员工节能环保培训课件
- 华为公司的内部审计制度
- 肿瘤医院病历书写培训课件
评论
0/150
提交评论