![]() ![]() |
|
07年4月等级考试二级C语言模拟练习一[2] | |
作者:佚名 文章来源:不详 点击数 更新时间:2008/4/18 14:12:06 文章录入:杜斌 责任编辑:杜斌 | |
|
|
int a=1234; printf("%2d\n",a); A)12 B)34 C)1234 D)提示出错、无结果 【答案】C 【解析】 printf()函数的输出格式,当整数的值超过格式要求输出范围时,原样输出。本题中要求输出两个有效数字,而实际上a有4个有效数字,故原样输出,输出1234。 (19)以下选项中不属于C语言的类型的是 A)signed short int B)unsigned long int C)unsigned int D)long short 【答案】D 【解析】在选项中很明显选项A为无符号短整型,选项B为无符号长整型,选项C为无符号整型,而选项D的类型在C语言中不存在。 (20)若有说明语句:int a,b,c,*d=&c;则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是 A)scanf("%d%d%d",&a,&b,d); B)scanf("%d%d%d",&a,&b,&d); C)scanf("%d%d%d",a,b,d); D)scanf("%d%d%d",a,b,*d); 【答案】A 【解析】scanf()函数有两个参数,第一个参数是输入格式字符串,第二个参数是输入变量地址列表。输入格式字符串主要由“%”符号和格式字符组成。地址列表是由多个地址组成的。选项B中d已经为地址,不应在加上求地址符号“&”;选项C中,a和b都为变量不是地址,应该在a和b之前加上求地址符号“&”;选项D中指针d所指向的存储空间的位置为变量c的值,不为地址。 (21)在16位C编译系统上,若定义long a;,则能给a赋40000的正确语句是 A)a=20000+20000; B)a=4000*10; C)a=30000+10000; D)a=4000L*10L; 【答案】D 【解析】由于20000+20000、4000*10及30000+10000都是整型表达式,故运算的结果仍然是整型,表达式运算的结果超出了整型数据的范围,不正确。而D是长整型运算,不会超出长整型的范围。 (22)以下叙述正确的是 A)可以把define和if定义为用户标识符 B)可以把define定义为用户标识符,但不能把if定义为用户标识符 C)可以把if定义为用户标识符,但不能把define定义为用户标识符 D)define和if都不能定义为用户标识符 【答案】B 【解析】C语言中的保留字,而define不是保留字。用户标识符不允许使用保留字。 (23)若定义:int a=511,*b=&a;则printf("%d\n",*b);的输出结果为
(28)以下程序的输出结果是 #include <stdio.h> main() { int i=0,a=0; while (i<20) { for(;;) { if((i%10)==0) break; else i--; } i+=11;a+=i; } printf("%d\n",a); } A)21 B)32 C)33 D)11 【答案】B 【解析】break语句只能在循环体和switch语句体内使用。本题程序为在while循环中嵌套for循环。先看内层for循环,该循环的3个表达式全部省略,循环条件始终为真,但循环体内的break语句为终止循环的条件。首先,由初始条件判断外层循环while括号内表达式的值,该值为真,执行本次while循环,即执行循环体内的if语句,判断该表达式后面括号里表达式的值为真,执行break语句,跳出内层循环,执行下面的语句,此时i和a的值均变为11;回到外层循环,判断表达式“i<20”仍为真,执行内层循环语句,此时if条件不满足,执行else语句,i的值为10,继续内层循环,if语句条件满足,执行break语句,跳出内层循环,执行下面的语句后,i和a的值分别是21和32。再判断外层循环的条件为假,结束循环。 (29)以下程序的输出结果是 char cchar(char ch) { if(ch>='A' &&ch<='Z')ch=ch-'A'+'a'; return ch; } main() { char s[]="ABC+abc=defDEF",*p=s; while(*p) { *p=cchar(*p); p++; } printf("%s\n",s); } A)abd+ABC=DEFdef B)abc+abc=defdef C)abcABCDEFdef D)abcabcdefdef 【答案】B 【解析】本题首先定义了一个函数cchar(),有一个字符型参数ch。在函数中首先判断该字符是否为大写字母,如果是则把它转换成小写字符再赋值给ch,把ch作为函数值返回。在主函数中定义了一个字符数组s并初始化,然后定义了一个指针变量并使它指向数组s。接着通过一个while循环利用指针变量p,依次取出字符数组的字符(直到遇到字符串结束标志'\0'),并调用cchar()函数,把大写字母转换成小写字母,其他字符不变。最后输出字符数组为s中的内容,结果为“abc+abc=defdef”。 (30)以下程序的输出结果是 int f() { static int i=0; int s=1; s+=i;i++; return s; } main() { int i,a=0; for(i=0;i<5;i++)a+=f(); printf("%d\n",a); } A)20 B)24 C)25 D)15 【答案】D 【解析】在C语言中声明为static型的变量,在整个程序运行期间,静态局部变量在内存的静态存储区中占据永久性的存储单元。即使退出函数后,下次再进入该函数时,静态局部变量仍使用原来的存储单元。由于并不释放这些存储单元,因此这些存储单元中的值得以保留;因而可以继续使用存储单元中原来的值。本题中函数f()中定义了一个static型变量i,故每调用一次函数f(),i的值加1,返回s的值等于i,在主函数中用了一个for循环,该循环执行了5次,每次都调用f()函数,将其返回值累加到变量a中,故最后a的值为1+2+3+4+5=15。 (31)以下程序段的输出结果是 char s[]="\\141\141abc\t"; printf("%d\n",strlen(s)); A)9 B)12 C)13 D)14 【答案】A 【解析】字符数组中可以存放字符串,但字符数组的长度并不是字符串的长度,字符串的长度是指字符数组中存放的有效字符个数,即'\0',之前的字符数。字符数组s中依次存放的字符是:'\\'、'1'、'4'、'1'、'\141'、'a'、'b'、'c'和'\t',和最后一个字符串结束标记'\0',故字符串的长度是9。 (32)若有以下程序 #include <stdio.h> void f(int n); main() { void f(int n); f(5); } void f(int n) { printf("%d\n",n);} 则以下叙述中不正确的是 A)若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f B)若在主函数前对函数f进行说明,则在主函数和其后的其他函数中都可以 正确调用函数f C)对于以上程序,编译时系统会提示出错信息;提示对f函数重复说明 D)函数f无返回值,所以可用void将其类型定义为无值型 【答案】C 【解析】若一个函数定义在主调函数之后,其返回值不是int或char型,则必须对之进行函数说明。可在函数外说明也可以在函数内说明,在函数外说明,在其后的所有函数均可调用该函数,若在函数内说明,则只能在本函数内调用该函数。函数只能定义一次,但函数说明可以出现多次。 (33)以下程序调用findmax函数返回数组中的最大值 findmax(int * a,int n) { int * p,* s; for (p=a,s=a;p-a<n;p++) if( ) s=p; return(*s); } main() { int x[5]={12,21,13,6,18}; printf("%d\n",findmax(x,5)); } 在下划线处应填入的是 A)p>s B)*p>*s C)a[p]>a[s] D)p-a>p-s 【答案】B 【解析】在main()函数中定义了一个具有5个元素的x数组并赋初值,然后调用findmax()函数求数组中元素的最大值。调用时把数组元素x的首地址,传给了形参指针变量a,把5传给形参n。在函数findmax()中定义了两种指针变量p和s,其中s用来记录最大元素的地址,p作为循环控制变量,表示每个元素的地址。求最大值的算法是先将第5个元素(用s记下它的地址)做为最大值,然后用最大值(*s)与后面的每个元素比较(*p),若后面的元素大,则用s记下它的地址,所以下划线应填“*s<*p”或“*p>*s”。 (34)以下程序的输出结果是 main() { char ch[3][5]={"AAAA","BBB","CC"}; printf("\"%s"\n",ch[1]); } A)"AAAA" B)"BBB" C)"BBBCC" D)"CC" 【答案】B 【解析】二维字符数组可以看成由若干个一维字符数组组成,每行是一个一维字符数组。本题首先定义了一个数组ch[3][5],并给它们按行赋初值,即相当于给ch[0]赋值“AAAA”,给ch[1]赋值“BBB”,给ch[2]赋值“BBB”,最后输出转义字符“'\'”、ch[1]和转义字符“\”,因此输出为“BBB”。 |
|
![]() ![]() |