第2,5,9章 习题与答案.doc_第1页
第2,5,9章 习题与答案.doc_第2页
第2,5,9章 习题与答案.doc_第3页
第2,5,9章 习题与答案.doc_第4页
第2,5,9章 习题与答案.doc_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

第2章数据类型和运算符 习题及解答一选择题。1.下列是用户自定义标识符的是A)_w1 B)3_xy C)int D)LINE-3答案:A解析: C语言规定用户标识符由英文字母、数字和下划线组成,且第一个字符必须是字母或下划线,由此可见选项B),D)是错的;此外,C语言不允许用户将关键字作为标识符,而选项C)选项项中的int是C语言的关键字。2.C语言中最简单的数据类型包括A)整型、实型、逻辑型 B)整型、实型、字符型C)整型、字符型、逻辑型 D)字符型、实型、逻辑型答案:B解析: 本题考查C语言的数据类型。在C语言中,没有专门的逻辑型数据类型,可以用0和1来表示逻辑值。所以,在本题的选择答案中,不应该包括逻辑型。3.假定int类型变量占用两个字节,其有定义:int x10=0,2,4;,则数组x在内存中所占字节数是A)3 B)6 C)10 D)20答案:D解析: x数组共有10个元素,在花括弧内只提供3个初值,这表示只给前面的3个成员赋值,后7个元素的值为0,所以,一共有20个字节。4.以下选项中不正确的实型常量是A)1.607E-1 B)0.7204e C)-77.77 D)234e-2答案:B解析:实型常量表示时字母E或e前必须有数字,其后数字必需为整数,故B错。5.若变量已正确定义并赋值,以下符合C语言语法的表达式是A)a:=b+1 B)a=b=c+2 C)int 18.5%3 D)a=a+7=c+b答案:B解析: 选项A)中包含一个不合法的运算符“:=”;选项C)应改为(int)18.5%3;选项D)可理解为两个表达式:a+7=c+b和a=a+7,其中第一个是错的,因为C语言规定赋值号的左边只能是单个变量,不能是表达式或常量等。因此,正确答案是选项B),它实际上相当于a=(b=c+2),进而可分解为两个表达式:b=c+2和a=b。6.下列可用于C语言用户标识符的一组是A)void, define, WORD B)a3_b3, _123,CarC)For, -abc, IF Case D)2a, DO, sizeof答案:B解析: C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线,排除选项C)和D)。C语言中还规定标识符不能为C语言的关键字,而选项A)中void为关键字,故排除选项A)。7.C语言中运算对象必须是整型的运算符是A)%= B)/ C)= D)=答案:A解析: C语言规定:取余运算符的运算对象必须是整型,复合运算符“%=”中包含%运算,它的运算对象也必须是整型。8.若变量a,i已正确定义,且i已正确赋值,合法的语句是A)a= =1 B)+i; C)a=a+=5; D)a=int(i);答案:B解析: 选项A是一个表达式,因为缺少分号,所以不是语句;选项C)包含一个不合法的运算符“+=”;选项D)应改为a=(int)i;。9.设x,y和z都是int型变量,且x=3,y=4,z=5,则下面表达式中,值为0的表达式是A)x&y B)x=y C)x|+y&y-z D)!(xy&!z|1)答案:D解析: 该题考查逻辑与“&”和逻辑或“|”以及逻辑非“!”符号的用法。选项A)即3&4为真,选项B)即3=4为真,选项C)是一个逻辑或与逻辑与的混合运算,只要执行了逻辑或左半部分,程序将直接停止执行逻辑或右半部分程序,因为x的值为真,此时选项C)变为1&-1为真。选项D)不用计算,括号内逻辑或右边的值为1,因而括号内的值为1,再进行逻辑非运算得0。10.有以下程序main()int i=1,j=1,k=2;if(j+|k+)&i+)printf(%d,%d,%dn,i,j,k);执行后输出结果是 A)1,1,2 B)2,2,1 C)2,2,2 D)2,2,3答案:C解析: 该题目的关键是要搞清楚“&”和“|”两个逻辑运算符的运算功能。运算符“&”和“|”是双目运算符,要求有两个运算量。且规定逻辑与运算中,只有前面运算量的值为真时,才需要判别后面的值。只要前面为假,就不必判别后面的值。而逻辑或则为只要前为真,就不必判别后面的值;只有前为假,才判别后。本题中j+值为真,不进行k+的运算,所以k的值保持不变。11.设int x=1,y=1;表达式(!x|y-)的值是A)0 B)1 C)2 D)-1答案:B解析:C语言规定的运算优先级由高到低分别是逻辑非、算术运算、逻辑或。所以先计算!x,值是0,然后再计算y-,由于是后缀运算符,所以y在本次运算中的值仍然是1,最后计算0|1,值为1。12.若有说明语句:char c=72;则变量cA)包含1个字符 B)包含2个字符 C)包含3个字符 D)说明不合法,c的值不确定答案:A解析: C语言的字符型常量中,允许用一种特殊形式的字符常量,就是以一个“”开头的字符。其中“ddd”表示用ASCII码(八进制数)表示一个字符,本题中的char c=72即表示占一个字符的变量c的ASCII码值。13.在C语言中,退格符是A)nB)tC)fD)b答案:D解析: C语言的转义字符见下表所示。转义字符转义字符的意义n回车换行t横向跳到下一制表位置v竖向跳格b退格r回车f换页反斜线符“”单引号符14.在C程序中,判逻辑值时,用“非0”表示逻辑值“真”, 又用“0”表示逻辑值“假”。 在求逻辑值时,用()表示逻辑表达式值为“真”, 又用()表示逻辑表达式值为“假”。A)1 0 B)0 1 C)非0 非0 D)1 1答案:A解析: 在C程序中,判断逻辑值时,用非0表示真,用0表示假。逻辑表达式计算时,逻辑表达式值为真是用1表示的,若逻辑表达式的值为假,则用0表示。15.字符型数据在机器中是用ASCII码表示的,字符“5”和“7”在机器中表示为A)10100011和 01110111 B)01000101和01100011C)00110101和00110111 D)01100101和01100111答案:C解析: 为便于表示各种数据类型,机器中采用了BCD码(表示十进制数)、ASCII码(字符型)、汉字机内码等等各种码。数据采用了补码、原码和反码为表示形式。实型数据表示方法有浮点法和定点法等,考生需熟练掌握各种码的含义,并用之来计算、比较。需要提出的是,在机器内部,所有码都是由二进制编码而成的,它都是以二进制存储在机器之中的。字符“5”和“7”的ASCII的值分别为53和55,其二进制形式分别为00110101和00110111。16.若已定义:int a=25,b=14,c=19;以下三目运算符(?:)所构成语句的执行后a=25&b-=2&c?printf(*a=%d,b=%d,c=%dn,a,b,c):printf(#a=%d,b=%d,c=%dn,a,b,c);程序输出的结果是A)*a=25,b=13,c=19 B)*a=26,b=14,c=19C)# a=25,b=13,c=19 D)# a=26,b=14,c=19答案:C解析: 此题综合考查多种运算符的使用;首先计算表达式a=25 &b-=2 &c的值,很容易看出b-=2的值为假,因此表达式为假;根据三目运算的特点,由于前面的表达式为假,应执行printf(“#a=%d,b=%d,c=%dn”,a,b,c),应注意a的值依然为25,b的值经过b-运算后改变为13,而c的值仍为19。17.若有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是A)2.500000 B)2.750000 C)3.500000 D)0.000000答案:A解析: x+y的值为实型7.200000,经强制类型转化成整型7。a%3的值为1,1*7的值为7,7%2值为1。1/4的值为0,而非0.25,因而为两个整数相除的结果为整数,舍去小数部分。与实型x相加,最终得结果为2.500000。18.有如下程序段int a=14,b=15,x;char c=A;x=(a&b)&(cB);执行该程序段后,x的值为A)ture B)false C)0 D)1答案:D解析: 在C语言中,逻辑运算符有4个,它们分别是:!(逻辑非)、|(逻辑或)、&(逻辑与)、(异或)。在位运算里面还有(位与)、|(位或)的运算。本题考查逻辑与运算符的用法,在表达式x=(a&b)&(cB);中,先判断a&b条件,逻辑与条件的两边都要保证为1,即a和b都成立,当然cB是成立的,显然,该表达式的值为1。19.在以下一组运算符中,优先级最高的运算符是A)= B)= C)% D)&答案:C解析:关系运算符、逻辑与和算术运算符总算术运算符的优先级最高,故选C)。20.以下选项中,与k=n+完全等价的表达式是A)k=n,n=n+1 B)n=n+1,k=n C)k=+n D)k+=n+1答案:A解析: k=n+的意思是先将n的值赋给k,然后n的值再加1,选项A)符合题意;选项C)是先使n的值加1,然后再赋值给k;选项D)等价于k=k+(n+1)。21.以下选项错误的是A)main() B)main() int x,y,z; int x,y,z;x=0;y=x-1; x=0,y=x+1;z=x+y; z=x+y;C)main() D)main() int x; int x,y,z;int y; x=0;y=x+1;x=0,y=x+1; z=x+y,z=x+y;答案:D解析: 在选项A)中的语句没有一条是错误的。选项B)和C)中有一个逗号表达式,选项B)中是x=0,y=x+1;在选项C)中是y=x+1,z=x+y;所以B)和C)中也没有错误。选项D)中的最后一条语句是以逗号结束的,而C语言中不能用逗号作为一个语句的结束标志,每一条语句最后应该是分号,所以D)选项中的程序是错误的。22.以下4个选项中,不能看做一条语句的是A); B)a=5,b=2.5,c=3.6; C)if(a5); D)if(b!=5)x=2;y=6;答案:D解析: 选项D)为两条语句。23. 下列运算符中优先级最高的是_。A) B) + C) & D) ! =答案:B24判断char型变量ch是否为大写字母的正确表达式是_。A)A=CH=A)& (CH=A)& (CH=Z) D) (A=ch)答案:C25.设int a=12,则执行完语句a+=a-=a*a后,a的值是_。A) 552 B) 264 C) 144 D) -264答案:D26. 设a=5, b=6, c=7, d=8, m=2,n=2, 执行(m=ab)&(n=cb) 后n的值为_。A)1 B)2 C)3 D)4答案:B27. 逻辑运算符两侧运算对象的数据类型_。A)只能是0或1 B)只能是0或非0正数 C)只能是整型或字符型数据 D)可以是任何类型的数据答案:D28.正确表示当x的取值在1,10和200,210范围内为真,否则为假的表达式是_。A)(X=1)&(X=200)&(X=1)| (X=200) | (X=1)&(X=10) | (X=200)&(X=1) | (X=200) | (X=210)答案:A29. 设x,y和z是int 型变量,且x=3,y=4,z=5,则下面表达式中值为0的是_。A)x &y B)x=y C)x | y+z&y-z D)!(xy)&!z| 1)答案:D30. 已知x=43,ch=A,y=0;则表达式x=y& ch0) B) !a|a C) a%=a D) a=a答案:C47. 假定有以下变量定义: int k=7,x=12;则能使值为3的表达式是_。A)x%=(k%=5) B)x%=(k-4%5) C)x%=k-k%5 D)(x%=k)-(k%=5)答案:D48. 设x和y均为int型变量,则语句:x+=y;y=x-y;x-=y;的功能是_。A)把x和y按从大到小排列 B)把x和y按从小到大排列C)无确定结果 D)交换x和y中的值答案:D49.下面能正确表示整数x的绝对值大于等于5的C语言表达式是_。A) x0 B) abs(x) 0 C) abs(x)=0 D) abs(int(x)=0答案:C50.以下所列的C语言常量中,错误的是_。A) 0xFF B) 1.2e0.5 C) 1.0/2.0 D) 72答案:C二填空题。1在C语言中用关键字【1】定义整型类型变量,用关键字float定义单精度实型变量,用关键字double定义双精度实型变量。答案:【1】int解析:C语言中规定用关键字int定义整型变量。2. 3.5+1/2的计算结果是【2】 答案:【2】3.5解析:1/2的值为0,故3.5+1/2的值为3.5。3.设y是int型,请写出y为奇数的关系表达式 【3】 。答案:【3】 (y%2)=1 或 (y%2)!=04.设int a=5,b=6,表达式(a=b-)?+a:-b的值是【4】 。答案:【4】7解析: 此表达式为三目运算符,a的值为6,b的值为6,则整个表达式的值为+a的值,a的值为7。请注意前缀,-和后缀,-的区别。5.以下程序的输出结果是【5】。int a=1234;printf (%2dn,a);答案:【5】1234解析: 在%与格式符之间插入一个整形数来指这输出宽度,并不影响数据的完整性,当插入的宽度小于实际的宽度时,则实际的宽度输出。6. 以下程序的输出结果是【6】。main()int a=0;a+=(a=8);printf(%dn,a);答案:【6】16解析: 赋值表达式的值就是所赋值变量的值,本题中a+=8相当于a=a+8,对表达式逐步进行求解:a+=(a=8)此时,a的值由于赋值为8,而不是0a+=8a=a+8a=167.在计算机中,字符的比较是对它们的【7】进行比较。答案:ASCII码解析:【7】 C语言中,字符也可以进行比较运算,且是按照ASCII码值进行的。8.在内存中,存储字符x要占用1个字节,存储字符串X要占用【8】个字节。答案:【8】2解析: 计算机存储一个字符用1个字节,存储字符串时,每个字符用占用1个字节,另在字符串的有效字符之后存储1个字符串的结束标记符。所以存储字符串“X”要占用2个字节,存储字符x只要1个字节。9. 以下程序的运行结果是【9】。main() int m=5; if(m+5) printf(%dnm); else printf(%dn,m - -);答案:【9】610.设有 int x=8; 则表达式 (+x*1/3) 的值是【10】。答案:【10】311. 设x,y,z和k都是int型变量,则执行表达式:x=(y=4,z=16,k=32)后,x的值为【11】。答案:【11】3212.设int类型的数据长度为2个字节,则unsigned int 类型数据的取值范围是【12】。答案:【12】0至6553513.执行以下语句后b的值为【13】。 int a,b,c; a=b=c=1; +a|+b&+c;答案:【13】114.设 int x=2, y=1; 则表达式(!x|y-)的值是【14】。答案:【14】115.设int a=5,b=2,c=3,d=4;则表达式ab?a:cd?c:d值为【15】。答案:【15】516若有以下程序段,int c1=1,c2=2,c3;c3=1.0/c2*c1;则执行后,c3的值是【16】。答案:【16】0.517. 有程序:main() int y=3,x=3,z=1; printf(%d %dn,(+x,y+),z+2);运行该程序的输出结果是【17】。答案:【17】3 318. 能正确表示逻辑关系:a5或a-1的C语言表达式是【18】。答案:【18】a=5|a=-119. 执行下面程序段:int a=10,b=9,c;c=(a-=(b-5);c=(a%11)+(b=3);则变量b的值是【19】。答案:【19】920.假定w、x、y、z、m均为整型变量,且w=1, x=2, y=3, z=4则执行语句:m=(wx)?w:x;m=(my)?m:y;m=(mz)?m:z;后,m的值是【20】。答案:【20】1第 5章函数 习题及解答一选择题。1.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是A)函数调用可以作为独立的语句存在 B)函数调用可以作为一个函数的实参C)函数调用可以出现在表达式中 D)函数调用可以作为一个函数的形参答案:D解析: 本题综合考查函数的调用方式。函数的形参和实参具有以下特点:形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存单元。因此,形参只有在函数内部有效。 函数调用结束返回主调函数后则不能再使用该形参变量。实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。实参和形参在数量上,类型上,顺序上应严格一致, 否则会发生“类型不匹配”的错误。函数调用中发生的数据传送是单向的。 即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。2.有以下程序float fun(int x,int y)return(x+y);main()int a=2,b=5,c=8;printf(%3.0fn,fun(int)fun(a+c,b),a-c);程序运行后的输出结果是A)编译出错B)9C)21D)9.0答案:B解析: 本题考查函数的综合知识。首先,我们可以利用强制转换类型转换运算符将一个表达式转换成所需类型。如:(double)a是将a转换成double类型;(int)(x+y)是将x+y的值转换成整型。本题可按部就班地逐步运算:fun(int)fun(a+c,b),a-c)fun(int)fun(10,5),2-8)fun(int)15.000000,-6)fun(15,-6)93.若有以下调用语句,则不正确的fun函数的首部是main() int a50,n;fun(n, &a9);A)void fun(int m, int x)B)void fun(int s, int h41)C)void fun(int p, int *s)D)void fun(int n, int a)答案:D解析: 函数定义的一般形式为:类型说明符 函数名()类型说明语句根据fun函数的调用语句可知,fun函数的第二个参数是一个地址值。4.以下说法正确的是A)C语言程序总是从第一个的函数开始执行B)在C语言程序中,要调用函数必须在main()函数中定义C)C语言程序总是从main()函数开始执行D)C语言程序中的main()函数必须放在程序的开始部分答案:C解析: C语言的程序是由主函数main()开始运行,由主函数来调用其他函数,所以,选项A)错误。C语言中定义的函数必须是并列的,不能在一个函数中定义其他函数,选项B)错。函数必须先定义后使用,在调用函数以前要定义函数,而main()函数不必放在最前面,故选项D)错。5.以下程序中函数sort的功能是对a数组中的数据进行由大到小的排序void sort(int a,int n)int i,j,t;for(i=0;in-1;i+)for(j=i+1;jn;j+)if(aiaj)t=ai;ai=aj;aj=t;main()int aa10=1,2,3,4,5,6,7,8,9,10,i;sort(&aa3,5);for(i=0;i10;i+)printf(%d,aai);printf(n);程序运行后的输出结果是A)1,2,3,4,5,6,7,8,9,10,B)10,9,8,7,6,5,4,3,2,1,C)1,2,3,8,7,6,5,4,9,10,D)1,2,10,9,8,7,6,5,4,3,答案:C解析: C语言中,实参变量和形参变量之间的数据传递是单向的“值传递”方式。指针变量作函数参也要遵循这一规则,调用函数不可能改变实参指针变量的值,但可以改变实参指针变量所指变量的值。6.在调用函数时,如果实参是简单的变量,它与对应形参之间的数据传递方式是A)地址传递B)单向值传递C)由实参传形参,再由形参传实参D)传递方式由用户指定答案:B解析: 如果实参是简单变量,它与对应形参之间的数据传递方式是由实参传给形参,而形参值的改变不能改变实参的值。7.以下叙述中正确的是A)构成C程序的基本单位是函数B)可以在一个函数中定义另一个函数C)main()函数必须放在其他函数之前D)所有被调用的函数一定要在调用之前进行定义答案:A解析: 本题综合考查C语言的概念部分,关于C语言,我们应该了解以下必须要掌握的基础知识:C程序是由函数构成的。一个函数由两部分组成:函数的首部和函数体。一个C程序总是从main函数开始执行的,而不论main函数的整个程序中的位置如何(main函数可以放在程序最开始,也可以放在程序最后,或写在一些函数之前,在另一些函数之后)。C程序在书写上,表现形式比较自由,一行内可以写几个语句,一个语句可以分写在几行上。每个语句和数据定义的最后必须有一个分号。8.若有函数内部说明:int a34;则数组a中各元素A)可在程序的运行阶段得到初值0B)可在程序的编译阶段得到初值0C)不能得到确定的初值D)可在程序的编译或运行阶段得到初值0答案:C解析: 我们可以把二维数组的常量表达式看做是矩阵或者表格的行数与列数,要注意每个元素有两个下标,第一个是方括号中的下标代表行号,称行下标;第二个是方括号中的下标代表列号。行下标和列下标总是从0开始的,二维数组在不赋初值时,不能得到确定。9.有以下函数char fun(char *p)return p;该函数的返回值是A)无确切的值B)形参p中存放的地址值 C)一个临时存储单元的地址D)形参p自身的地址值答案:B解析: 本题考查函数返回值的知识。函数返回值是通过函数中的return语句获得,return语句中的表达式的值就是所求函数的值。此表达式的值必须与函数首部所说明的类型一致。若类型不一致,则以函数值的类型为准,由系统进行转换。10.以下正确的说法是A)定义函数时,形参的类型说明可以放在函数体内B)return后边的值不能为表达式C)如果函数值的类型与返回值类型不一致,以函数值类型为准D)如果形参与实参类型不一致,以实参类型为准答案:C解析: 选项A)中定义函数时,形参的类型说明应该放在形参表列内说明。老版本C语言中,对形参类型的声明是放在函数定义的第2行,也就是不在第1行的括号内指定形参的类型,而在括号外单独指定。选项B)中return后面的值可以是一个表达式。选项D)中实参与形参的类型应相同或赋值兼容。如果实参为整型而形参为实型,或者相反,则按不同类型数值的赋值规则进行转换,以形参类型为准。11.有以下程序int f(int n) if(n=1)return 1;else return f(n-1)+1;main() int i,j=0;for(i=1;i3;i+)j+=f(i);printf(%dn,j);程序运行后的输出结果是A)4B)3C)2D)1答案:B解析: 在main函数中,对f(1)和f(2)的值进行了累加。 f(1)=1 f(2)=f(1)+1=2最后,j的值为1+2=312.在C语言中,变量的隐含存储类别是A)autoB)staticC)externD)无存储类别答案:A解析: auto变量:无static声明的局部变量。用auto作存储类别的声明时,可以不写auto,存储类别隐含确定为auto(自动存储类别)。是动态存储方式。大多数变量是自动变量。用static声明的局部变量是静态局部变量。函数调用结束后静态局部变量占据的内存存储单元空间不释放,局部变量保留原值,下次调用时可以继续使用该值。用extern声明外部变量,外部变量即全局变量,可以用extern声明来改变全局变量的作用域,实际上,关键字“auto ”可以省略,auto不写则隐含确定为“自动存储类别”,它属于动态存储方式。13.若有以下程序#include void f(int n);main() void f(int n);f(5);void f(int n) printf(%dn,n); 则以下叙述中不正确的是A)若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数fB)若在主函数前对函数f进行说明,则在主函数和其后的其他函数中都可以正确调用函数fC)对于以上程序,编译时系统会提示出错信息:提示对f函数重复说明D)函数f无返回值,所以可用void将其类型定义为无返回值型答案:C解析: C语言规定,一个函数中调用另一个函数(即被调用函数)需要具备的条件有:首先被调用的函数必须是已经存在的函数(是库函数或用户自己定义的函数)。如果使用库函数,一般还应该在本文件开头用#include命令将函数调用有关库函数时所需要到的信息“包含”到本文件中来。如果使用自定义函数,而且该函数与调用它的函数在同一个文件中,一般还应该在主调函数中对被调用的函数作声明,即向编译系统声明将要调用此函数,并将有关信息通知编译系统。在C语言中,可以使用函数原型进行声明,函数原型的一般形式为:函数类型 函数名(参数类型1,参数类型2)或函数类型 函数名(参数类型1 参数名1,参数类型2 参数名2)14.下列程序的运行结果是void fun(int *a, int *b) int *k;k=a; a=b; b=k;main() int a=3, b=6, *x=&a, *y=&b;fun(x,y);printf(%d %d, a, b);A)6 3B)3 6C)编译出错D)0 0答案:B解析: 函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中去。在本题解析中,我们试图将这一问题解释清楚!大家可以考虑一下利用下面这函数可不可以实现a和b的互换。swap(x,y)int x,y; int t;t=x;x=y;y=t;15.已定义以下函数 fun(char *p2, char *p1) while(*p2=*p1)!=0)p1+;p2+; 函数的功能是 A)将p1所指字符串复制到p2所指内存空间 B)将p1所指字符串的地址赋给指针p2 C)对p1和p2两个指针所指字符串进行比较 D)检查p1和p2两个指针所指字符串中是否有0答案:A解析: 在本题中,while(*p2=*p1)!= 0)有两个作用,一个是判断条件是否成立以决定是否再次进入循环,另一个作用是判定前先完成*p2=*p1,该处的作用是把p1所指存储单元的字符逐一送p2所指存储单元中,直到p1所指单元内容为0为止。16.有以下程序void ss(char *s,char t)while(*s)if(*s= =t)*s=t-a+A;s+;main()char str1100=abcddfefdbd,c=d;ss(str1,c); printf(%sn,str1);程序运行后的输出结果是A)ABCDDEFEDBDB)abcDDfefDbDC)abcAAfefAbAD)Abcddfefdbd答案:B解析: 在内存中,字符数据以ASCII码存储,它的存储形式就与整数的存储形式相类似。C语言使字符型数据和整型数据之间可以通用。也可以对字符数据进行算术运算,此时相当于对它们的ASCII码进行算术运算,在本题中,s+相当于s=s+1,即让s指向数组中的下一个元素17.以下存储类型只有在使用时才为该类型变量分配内存的是_。A)auto和static B)auto和register C)register和static D)static和extern答案:B18. 设有以下函数:fun(int x) int y=0; static int z=2; y+; z+; return(x+y+z);若在下面主程序中调用该函数,则输出结果是_。main() int x=3,k; for(k=1;k=3;k+) printf(%dn,fun(x);A) 7 B) 7 C) 7 D) 7 8 9 10 7 9 11 13 7答案:A19.运行下面程序: int ff(int n) static int f=1; f=f*n; return f;main() int k; for(k=1;k4;k+) printf(%dn,ff(k);则输出结果是_。A) 1 B) 1 C) 1 D) 1 2 2 2 2 6 6 3 3 24 4答案:B20. 一个C程序的执行是从_。A)本程序的main函数开始,到main函数结束B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C)本程序的main函数开始,到本程序文件的最后一个函数结束D)本程序文件的第一个函数开始,到本程序main函数结束答案:A二填空题。1.设在主函数中有以下定义和函数调用语句,且fun函数为void类型;请写出fun函数的首部【1】。要求形参名为b。main()double s1022;int n; fun(s);答案:【1】void fun(double s22)解析: 本题中,为了明确表示“不带回值”,可以用“void”定义“无类型”(或称“空类型”)。这系统就保证不使函数带回任何值,二维数组的第一维可以省略。2.若给fun函数的形参s传送字符串:“6354abcc” (其中表示空格字符),则函数的返回值是【2】。 #include long fun(char s)long n;int sign;for(;isspace(*s);s+);sign=(*s=-)?-1:1;if(*s=+|*s=-)s+;for(n=0;isdigit(*s);s+)n=10*n+(*s-0);return sign*n;答案:【2】6354解析: 函数fun的第一个for循环跳过字符串的前导空白符,接着判断第一个非空白符是否是负号,若是则置变量sign为-1;否则,置变量sign为1。接着的if语句在第一个非空白字符是负号或正号时,跳过该字符。以后的for循环将后面的数字符当作十进制数的各位数字译出一个长整数n。遇字符a时,结束循环。最后,函数返回sign与n的乘积。所以若调用函数时提供的实参是“6354abc”,函数返回值是6354。3.当调用函数时,实参是一个数组名,则向函数传递的是【3】。答案:【3】数组的首地址。解析: 在函数中,可以通过指针变量来引用调用函数中对应的数组元素,此操作是通过传递数组的首地址来实现。4.下列程序执行后的输出结果是【4】void func(int *a,int b) b0=*a+6; main()int a,b5;a=0; b0=3;func(&a,b); printf(%dn,b0);答案:【4】6解析: 函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传递到另一个函数中。当数组名作参数时,如果形参数组中的各元素的值发生变化,实参数组元素的值随之发生变化。5.该程序运行的结果是【5】。#include#include#define M 100void fun(int m, int *a, int *n) int i,j=0;for(i=1;i=m;i+)if(i%7=0|i%11=0)aj+=i;*n=j;main() int aaM,n,k;clrscr();fun(10,aa,&n);for(k=0;kn;k+)if(k+1)%20=0)printf(n);else printf(%4d,aak);printf(n);答案:【5】7解析: 解答本题的关键是要读懂程序,试题要找出能被7或11整除的所有整数,注意数学中的“或”和C语言中的“或”的区别,但在

温馨提示

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

评论

0/150

提交评论