二级C语言课后练习题及答案.doc_第1页
二级C语言课后练习题及答案.doc_第2页
二级C语言课后练习题及答案.doc_第3页
二级C语言课后练习题及答案.doc_第4页
二级C语言课后练习题及答案.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

一、单项选择题1.C语言程序的执行,总是起始于【 】。A) 程序中的第一条可执行语句B) 程序中的第一个函数C) main函数 D) 包含文件中的第一个函数分析:在一个C语言源程序中,无论main函数书写在程序的前部,还是后部,程序的执行总是从main函数开始,并且在main函数中结束。本题正确答案为C。2.下列说法中正确的是【 】。A) C程序书写时,不区分大小写字母B) C程序书写时,一行只能写一个语句C) C程序书写时,一个语句可分成几行书写D) C程序书写时每行必须有行号分析:C语言严格区分大小写字母,如A1和a1被认为是两个不同的标识符,C程序的书写非常灵活,既可以一行多句,又可以一句多行,且每行不加行号。本题正确答案为C。3.下面对C语言特点,不正确描述的是【 】。A) C语言兼有高级语言和低级语言的双重特点,执行效率高B) C语言既可以用来编写应用程序,又可以用来编写系统软件C) C语言的可移植性较差D) C语言是一种结构式模块化程序设计语言分析:C语言是介于汇编语言和高级语言之间的一种语言,由于它可以直接访问物理地址,对硬件操作,所以C语言既可以编写应用程序,又可以开发系统软件,而且C程序可移植性好于汇编语言,程序清晰具有模块化的特点。本题正确答案为C。4.C语言源程序的最小单位是【 】。A) 程序行B) 语句C) 函数D) 字符分析:程序行、语句、函数都是由字符构成的,字符是C语言的最小单位。本题正确答案为D。5.以下四项中属于C语言关键字的是【 】。A) CHAR B) define C) unsigned D) return分析:C语言有32个关键字(或称保留字),它们都有特定的含意,并且由小写字母组成,所以选项A是错的,选项B不是保留字,选项D是return的错误拼写。本题正确答案为C。6.十进制数2403转换成十六进制数为【 】。A) 963 B) 369 C) 953 D) 359分析:十进制数化成十六进制数的方法是:不断除以16,商0为止,倒取余数。本题正确答案为A。7.二进制数00110101转换成八进制数是【 】。A) 055 B) 065 C) 056 D) 152分析:二进制数化成八进制数的方法是:从右向左划分,将每3位二进制数书写成1位八进制数。本题正确答案为B。8.将二进制数1011011.011转换成十进制数是【 】。A) 91.75 B) 91.375 C) 91.125 D) 91.25分析:二进制数化成十进制数的方法是:各数字乘以权重再相加,题中整数部分为:(1011011)2=126+124+123+121+120=64+16+8+2+1=91,小数部分为:(0.011)2=02-1+12-2+12-3=0.25+0.125=0.375,再将两者合在一起得91.375。本题正确答案为B。9.计算机内部运算使用的数是【 】。A) 十进制数 B) 十六进制数 C) 二进制数 D) 八进制数分析:在实际生活中找不到具有十个稳定状态的物理元件,而具有两种稳定状态的元件到处可见,如一个开关具有通电和断电两个稳定状态,计算机内部的元件正是以1代表通电,以0代表断电的,所以计算机内部运算使用的数是二进制数,至于八进制数和十六进制数是对二进制数的人为缩写。本题正确答案为C。10.一个字长的二进制位数是【 】。A) 2个BYTE,即16个bit B) 3个BYTE,即24个bit C) 4个BYTE,即32个bit D) 随计算机系统不同而不同分析:一个二进制位也称做1bit,八个二进制位称做1个BYTE,即所说的一个字节,BYTE和bit有固定的换算关系,但是计算机中的字长WORD和字节BYTE没有固定的换算关系,字长WORD是随CPU型号而异的。本题正确答案为D。11.在C语言系统中,假设int类型数据占2个字节,则double、long、unsigned int、char类型数据所占字节数分别多少【 】。A) 8,2,4,1 B) 2,8,4,1 C) 4,2,8,1 D) 8,4,2,1分析:由上题知CPU字长决定了分配给各种类型变量多少个字节,当int类型占2个字节时,double、long、unsigned int、char型所占的字节分别为8、4、2、1个字节。本题正确答案为D。12.下面程序段执行结果是【 】。int i=5,k;k=(+i)+(+i)+(i+);printf(%d,%d,k,i);A) 24,8 B) 21,8 C) 21,7 D) 24,7分析:k=(+i)+(+i)+(i+)表达式中,+号在i前面的有两个,所以在计算k之前,i要先增两次,即i变为7,然后再将3个7相加,使k得21,表达式中+号在i后面的有1个,所以得出k的值以后i又增1次变为8。本题正确答案为B。13.下面程序段执行结果是【 】。int i=5;printf(%d,%d,%d, i,(+i)+(+i)+(i+),i);A) 8,20,5 B) 8,21,5 C) 5,20,8 D) 5,21,8分析:此题不能看作将12题中的k=(+i)+(+i)+(i+)代入printf函数,因为函数处理参数的顺序是从右向左,所以(+i)+(+i)+(i+)表达式的值不再是求7+7+7,而是为8+7+5=20。本题正确答案为A。14.下面程序段的输出结果是【 】。int i=32769;printf(%dn,i);A) 32769 B) 32767 C) -32767 D) 输出不是确定的数分析:int型变量表示数据的范围是-32768+32767,赋值时比-32768小或比+32767大,都会发生溢出,溢出后存放的数值是:正向溢出时,为该数减去模65536,负向溢出时,为该数加上模65536,所以本题输出为32769-65536=-32767。本题正确答案为C。15.下面的程序运行后输出为【 】。main( ) int a=-32769;ptintf(%8Un,a);A) 32769 B) %8U C) 32767 D) -32767分析:格式字符必须小写,题中的%8U不会当作格式控制符,而是原样输出,变量a将没有对应的格式说明,也不会送出。本题正确答案为B。二、填空题1.若以下程序的输出结果是13,请填空。main( ) int x=016;printf(%dn,【1】); 分析:在C语言中以0开头的数字是八进制数,016相当于十进制数14,执行printf语句时,输出项应为x的值减1。本题正确答案为 【1】 -x或x-=1。2.下面程序段的输出结果是【2】。int k=10;float a=3.5,b=6.7,c;c=a+k%3*(int)(a+b)%2/4;分析:本题考查运算符的优先级概念,式中要先算(a+b)的值,再算强制类型变换,*、/、%是同级的要从左到右计算,最后算加法和赋值。本题正确答案为【2】 3.5000003.若执行下面程序段后的输出为:3,4,5,请填空。int a,b=3,c=5;a=bc?【3】:c+;printf(%d,%d,%d,a,b,c);分析:本题考查条件运算符和增量运算符的概念,题中bC为真,应取B+的值给A,因B的值是先用后增1,所以A为3,题中的C+没有执行到,C保持原值。本题正确答案为 【3】 b+。4.C语言中的运算符,优先级最低的是【4】。分析:与其它高级语言相比,在C语言中赋值号并不是优先级最低的,C语言中优先级最低的运算符是逗号运算符。本题正确答案为 【4】 逗号运算符。5.若下面程序的输出结果是4,请填空。main( ) int i,j,k;k=0 ; i=j=-2 ;k+=-i-【5】;printf(%dn,k);分析在C语言中当3个加号或3个减号连在一起时,中间的符号归属左边的变量,即-i-j相当于-(i-)-j。本题正确答案为 【5】-j 。/C为真,应取B+的值给A,因B的值是先用后增1,所以A为3,题中的C+没有执行到,C保持原值。/c?【3】:c+;=A&ch=A&chb?a:cd?c:d分析:因题中ab的值为假,故求解表达式k=ab?a:cd?c:d相当于求k=ab?a:(cd?c:d)。本题正确答案为 【5】 4。4.已知:int a=5;则执行a+=a-=a*a;语句后,a的值为【6】。分析:a+=a-=a*a的运算顺序是从右向左,相当于求a+=(a-=a*a),其中小括号内的运算得a=5-5*5即a=-20,下一步再求a+=a,即a=a+a,将-20代入得a=-40。本题正确答案为 【6】 -40。5.下面程序的运行结果是x=【7】,y=【8】。main( ) float x=4.9;int y;y=(int)x;printf(x=%f,y=%d,x,y); 分析:强制类型变换并不改变x的原值,x仍为4.9,而变换得到的是中间结果,此题将中间结果赋给了y,另外注意是舍弃小数部分,而不是四舍五入。本题正确答案为 【7】 4.900000 【8】 4。一、单项选择题1.对if语句中表达式的类型,下面正确的描述是【 】。A) 必须是关系表达式B) 必须是关系表达式或逻辑表达式C) 必须是关系表达式或算术表达式D) 可以是任意表达式分析:C语言中if语句的表达式可以是任意类型,只要表达式的值非0就算作真,是0就作为假。本题正确答案为D。2.多重if_else语句嵌套使用时,寻找与else配套的if方法是【 】。A) 缩排位置相同的ifB) 其上最近的ifC) 下面最近的ifD) 同行上的if分析:多重if_else嵌套时,else总是与它上面最近的if配对。本题正确答案为B。3.以下错误的if语句是【 】。A) if(xy) z=x;B) if(x=y) z=0;C) if(x!=y) printf(%d,x) else printf(%d,y);D) if(x分析:选项C)中的第一个printf语句后面丢了分号,所以是错误的。本题正确答案为C。4.以下判断两个字符串相等的正确方法是【 】。A) if(str1=str2)B) if(str1=str2)C) if(strcpy(str1,str2)=0)D) if(strcmp(str1,str2)=0)分析:选项A)中用了赋值号,显然是错误的,选项C)中的字符串拷贝函数strcpy不能比较大小,选项B)中的=号也不具有串比较功能,比较两个字符串的大小应用字符串比较函数。本题正确答案为D。5.执行下面程序的正确结果是【 】。main( ) float a=1.9;switch(a) case 0: printf(0000);case 1: printf(1111);case 2: printf(2222);printf(%f,a);A) 1.900000B) 111122221.900000C) 22221.900000D) 0000111122221.900000分析:题中定义了单精度实数a,所以最下面的printf语句输出有6位小数,另外C语言在判断switch表达式的值时,是按整型数据处理的(但不4舍5入),所以程序是从case 1处开始执行的,因没有break语句,接着会执行case 2。本题正确答案为B。6.以下程序的输出为【 】。main( ) int a=20,b=30,c=40;if(ab) a=b,b=c;c=a;printf(a=%d,b=%d,c=%d,a,b,c); A) a=20,b=30,c=20B) a=20,b=40,c=20C) a=30,b=40,c=20D) a=30,b=40,c=30分析:题中的a=b , b=c;是一个语句书写在了两行,因ab为假,所此句不执行,又c=a与if语句无关,总要执行,故a,b值不变,c值为20。本题正确答案为A。7.对于条件表达式(k)?(i+):(i-)来说,其中的表达式k等价于【 】。A) k=0 B) k=1 C) k!=0 D) k!=1分析:因为条件表达式e1?e2:e3的含义是e1为真时,取表达式e2的值,否则取表达式e3的值,为真的意思就是不等于0。本题正确答案为C。8.执行下面的程序后,输出为【 】。main( ) int m=20;swith(m) case 19: m+=1;case 20: m+=1;case 21: m+=1;case 22: m+=1; printf(%dn,m); A) 20 B) 21 C) 22 D) 23分析:因无break控制语句,程序会从case 20开始连续执行后面的各个case语句,最后结果是m=23。本题正确答案为D。9.下面程序运行结果为【 】。main( ) char c=a;if(aC=Z)PRINTF(LOW);elseprintf(UP);A) LOW B) UP C) LOWUP D) 语句错误,编译不能通过分析:关系运算符“”和“=”的优先级相同,计算顺序是从左向右,求解表达式aC=Z时,是先计算出Ab)a=b; b=a;elsea+; b+;printf(%d,%d,a,b); A) 有语法错误不能通过编译B) 若输入4,5则输出5,6C) 若输入5,4则输出4,5D) 若输入5,4则输出5,5分析:不管if语句中的条件真假,它只能执行一个语句,要想根据条件执行多个语句,应写成复合语句,程序中if和else的后面都有两个语句,违反了这一点。本题正确答案为A。11.分析以下程序,结论是【 】。main( ) int x=5,a=0,b=0;if(x=a+b) printf(*n);elseprintf(#n);A) 有语法错,不能通过编译B) 能通过编译,但不能连接C) 输出*D) 输出 #分析:if语句中的判别式可以是赋值表达式,题中if(x=a+b)的含义是,先把a+b的值赋给x,再判断x的值是否为0。本题正确答案为D。12.对下面的程序,正确的说法是【 】。main( ) int a,b=1,c=2;a=b+c,a+b,c+3;c=(c)?a+:b-;printf(c=%d/n,(a+b,c); A) 无错误 B) 第三行有错误 C) 第四行有错误 D) 第五行有错误分析:第三行是由逗号表达式组成的语句,第四行是由条件表达式组成的语句,第五行printf语句的输出项为逗号表达式,本题没有语法错误。本题正确答案为A。13.执行下面的程序时,输入abc(其中CR代表回车),输出结果是【 】。#include #include main( ) char ch;while(ch=getchar( )!=n) switch(ch-a) case 0: putchar(ch+1); case 1: putchar(ch+1);break;case 2: putchar(ch+2);case 3: putchar(ch+2);break;A) abc B) bbc C) abcd D) bbcee分析:用getchar函数输入数据,接收的是ASCII码,当输入为a时对应执行case 0和case 1处的语句,当输入为b时,执行case 1处的语句,当输入为c时,对应执行case 2和case 3处的语句。本题正确答案为D。二、填空题1.下面程序的输出结果是-11,请填空。main( ) int x=100,a=200,b=50;int v1=25,v2=20;if(a8)printf(%dn,+x);else printf(%dn,x-);分析:在【2】处不能为大于8的数,否则要执行printf(%dn,+x);语句,使输出值大于9,if语句的条件表达式中应有一个先用后增1的变量x,才能在输入x为8时,执行else后面的语句:printf(%dn,x-);输出9。本题正确答案为 【2】 x+。3.执行下面程序时输出为1,请填空。main( ) int a=4,b=3,c=2,d=1;printf(%dn,(ab?a:dc?【3】:b);分析:因为ab的值为假,此题相当于求ab?a:(dc?【3】:b),即先算出dc?_:b的值1后,再和左半部的ab?a:_组成新的条件运算。本题正确答案为 【3】d或1。4.执行以下程序后的输出结果为a=【4】,b=【5】。main( ) int k=1,m=0;int a=10,b=10;switch(k) case 1: switch(m) case 0: a+=1;break;case 1: b+ ;break;case 2: a+;b+;break;case 3: a+;b+;printf(na=%d,b=%d,a,b);分析:此题概念是考查switch语句的嵌套应用,switch语句的特点是在没有遇到break语句时,要连续执行后面的case语句,本程序的执行路线是外部switch的case 1内部switch的case 0外部switch的case 2。本题正确答案为 【4】12 【5】11。5.根据下式填空,将程序补充完整。 y=-1.0(x0.0) 2.0/(x-1.0)(0.0X 3.0/x(x=1.0或10.0X=20)main( ) float x,y;scanf(%f,&x);if(【6】)y=-1.0;else if(【7】)&(x!=1)y=2.0/(x-1.0);else if(【8】)y=3.0/x;else y=4.0;printf(%f/n,y); 分析:本题可根据已知的分段函数式中x与y之间的关系和条件判断语句if的先后顺序,将x的值按从小到大进行判断填空。本题正确答案为 【6】 x0.0 【7】 x10.0 【8】 x20.0。/X20.0)/X/b的值为假,此题相当于求ab?a:(dc?【3】:b),即先算出dc?_:b的值1后,再和左半部的ab?a:_组成新的条件运算。/b?a:dc?【3】:b);/B)/C=Z时,是先计算出AC的值(此值只有0和1两种情况),接着再判断该值小于等于Z(Z的ASCII码是122),所以该式的值永远为1,程序输出LOW。/Cnext=NULL B)p=NULLC)p-next=head D)p=head 正确答案: C (3)已知数据表A中每个元素距其最终位置不远,为节省时间,应采用的算法是A)堆排序 B)直接插入排序 C)快速排序 D)直接选择排序 正确答案: B (4)对建立良好的程序设计风格,下面描述正确的是A)程序应简单、清晰、可读性好B)符号名的命名只要符合语法C)充分考虑程序的执行效率D)程序的注释可有可无 正确答案: A (5)下列不属于结构化分析的常用工具的是A)数据流图 B)数据字典C)判定树 D)PAD图 正确答案: A (6)在软件生产过程中,需求信息的给出是A)程序员 B)项目管理者C)软件分析设计人员 D)软件用户 正确答案: D (7)下列工具中为需求分析常用工具的是A)PAD B)PFDC)N-S D)DFD 正确答案: D (8)NULL是指A)0 B)空格 C)未知的值或无任何值 D)空字符串 正确答案: C (9)数据库的故障恢复一般是由A)数据流图完成的 B)数据字典完成的C)DBA完成的 D)PAD图完成的 正确答案: C (10)下列说法中,不属于数据模型所描述的内容的是A)数据结构 B)数据操作C)数据查询 D)数据约束 正确答案: C (11)C语言程序的基本单位是A)程序行B)语句C)函数D)字符正确答案: C (12)下面四个选项中,均是合法整型常量的选项是A)160 -0xffff 011B)-0xcdf 01a 0xeC)-01 986,012 0668D)-0x48a 2e5 0x正确答案: A (13)以下选项中合法的用户标识符是A)longB)_2TestC)3DmaxD)A.dat正确答案: B (14)假定x和y为double型,则表达式x=2,y=x+3/2的值是A)3.500000B)3C)2.000000D)3.000000正确答案: D (15)以下变量x,y,z均为double类型且已正确赋值,不能正确表示数学式子xyz的C语言表达式是A)x/y*zB)x*(1/(y*z)C)x/y*1/zD)x/y/z正确答案: A (16)设x,y,t均为int型变量,执行语句:x=y=3;t=+x|+y;完成后,y的值为A)不确定B)4C)3D)1正确答案: C (17)已知i,j,k为int型变量,若从键盘输入:1,2,3,使i的值为1,j的值为2,k的值为3,以下选项中正确的输入语句是A)scanf(-,-,-, i, j, k);B)scanf(%d %d %d,&i,&j,&k);C)scanf(%d,%d,%d,&i,&j,&k);D)scanf(i=%d,j=%d,k=%d,&i,&j,&k);正确答案: C (18)若变量已正确定义并赋值,下面符合C语言语法的表达式是A)m=5B)c=b=a=1C)float 8%5D)x+5=y+2正确答案: B (19)下列程序运行的结果是main()float x;int i;x=3.6;i=(int)x;printf(x=%f,i=%d ,x,i);A)x=3.600000,i=3B)x=3.6,i=3C)x=3,i=3D)x=3.600000,i=3.000000正确答案: A (20)若执行下面的程序时,从键盘上输入5和2,则输出结果是main() int a,b,k;scanf(%d,%d ,&a,&b);k=a;if(aelse k=b%a;printf(%dn ,k);A)5B)3C)2D)0正确答案: C (21)C语言中 while 和do-while循环的主要区别是A)do-while的循环体至少无条件执行一次B)while的循环控制条件比do-while的循环控制条件更严格C)do-while允许从外部转到循环体内D)do-while 的循环体不能是复合语句正确答案: A (22)以下程序的输出结果是main() int x=1,y=3;printf(%d,x+); int x=0;x+=y*2;printf(%d,%d, ,x,y);printf(%d,%dn,x,y);A)1,6,3,1,3B)1,6,3,6,3C)1,6,3,2,3D)1,7,3,2,3正确答案: C (23)下面程序输出的结果是main() int i;int a33=1,2,3,4,5,6,7,8,9;for(i=0;i3;i+)printf(%d ,a2-ii);A)1 5 9B)7 5 3C)3 5 7D)5 9 1正确答案: B (24)请阅读以下程序:main() int a=5,b=0,c=0;if(a=b+c)printf(*n);else printf(n);以上程序A)有语法错不能通过编译B)可以通过编译但不能通过连接C)输出*D)输出正确答案: D (25)以下程序的输出结果是main() char c=z;printf(%c,c-25);A)aB)ZC)z-25D)y正确答案: A (26)下面函数的功能是char *fun(char *str1,char*str2)while(*str1)&(*str2+=*str1+);return str2;A)求字符串的长度B)比较两个字符串的大小C)将字符串str1复制到字符串str2中D)将字符串str1接续到字符串str2中正确答案: C (27)下面函数调用语句含有实参的个数为func(exp1,exp2),(exp3,exp4,exp5);A)1B)2C)4D)5正确答案: B (28)下面程序段的运行结果是char *s=abcde;s+=2;printf(%d,s);A)cdeB)字符cC)字符c的地址D)无确定的输出结果正确答案: C (29)已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的正确输出结果是void print_value(int *x)printf(%dn,+*x);A

温馨提示

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

评论

0/150

提交评论