二级C语言选择题专项强化真题试卷40
选择题
1.程序测试的目的是( )。(C)
A. 为被测程序设计正确的测试用例
B. 发现并改正程序中的错误
C. 发现程序中的错误
D. 改正程序中的错误
解析:程序测试是使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别,即为发现错误而执行程序的过程,而不是改正错误。故正确答案为C。
2.若有以下程序:
#include<stdio.h>
main()
{
int a=6,b=0,c=0;
for(;a;)
{b+=a;a-=++c;}
printf(\\(B)
A. 1,14,3
B. 0,14,3
C. 0,18,3
D. 0,14,6
解析:for循环的条件判断是只要a为0就退出循环体。初始值a的值为6,满足条件,执行完循环体后,b的值为6,a—=++c,即a=a—(++c),所以a的值为5,c的值为1。第二次循环后b的值为11,a的值为3,c的值为2。第三次也是最后循环后,a的值为0,b的值为14。c的值为3。
3.以下选项中,合法的实数是( )。(A)
A. 4.5E2
B. E1.3
C. 7.11E
D. 1.2E1.2
解析:实型常量用带小数点的数字表示,其值有两种表达形式,分别为十进制小数形式和指数形式。十进制小数形式由数字和小数组成,必须有小数点,且小数点的位置不受限制。指数形式由十进制数加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。4.5E2为指数形式实数,A项正确。E1.3阶码标志前缺少十进制数,并且阶数不是整数,B项错误。7.11E缺少阶数,C项错误。1.2E1.2阶数不是整数,D项错误。
4.关于地址和指针,以下说法正确的是( )。(A)
A. 通过强制类型转换可以将一种类型的指针变量赋值给另一种类型的指针变量
B. 可以取一个常数的地址赋值给同类型的指针变量
C. 可以取一个表达式的地址赋值给同类型的指针变量
D. 可以取一个指针变量的地址赋值给基类型相同的指针变量
解析:常数的地址存储在内存的常量区,常量区存储的都是常量,值都是不可修改的,所以直接取常量的地址赋值给指针变量没有任何意义,C语言也不允许这样做,编译会出错,故B选项错误;表达式的值存储在临时变量中,内存中存在专门用来存储临时变量的区域,对这块地址进行操作也是没有意义的,C语言也不允许这样做,编译会出错,故C选项错误;可以取一个指针变量的地址,但是指针变量的地址属于指针,只能赋值给指针类型的指针变量,故D选项错误。因此答案为A选项。
5.有以下程序:
#include
main()
{
int i,*ptr;
int array[4]={ 0,1};
for(ptr=array,i=0;i<3;i++,ptr++)
{
if(*ptr==0)
putchar(’#’);
else
putchar(’M’+*ptr);
}
printf(\\(D)
A. MO#
B. #F#
C. MMM
D. #N#
解析:for语句中把array数组首地址值赋给变量ptr,ptr++表示每次执行完循环体后,ptr指向下一数组元素,当指针指向值为0时,输出#,否则’M’再加上指针对应数组值进行输出。当*ptr=1时,’M’+1=’N’,结果输出为#N#,故答案为D选项。
6.有以下程序:
#inelude
char*a=\\(A)
A. you to Beijing!
B. to Beijing!
C. Welcome you to Beijing!
D. Beijing!
解析:程序首先定义两个字符串,a,b指针分别指向这两个字符串首地址,然后定义了一个指针p,把b指针指向的地址赋给了p指针后,判断p指针指向地址的内容是否和a指针指向地址的内容相等,如果不相等,则移动指针p+1。当p指向*b字符串中的’y’时,和*a首地址元素相等,退出while语句,输出剩下字符串的内容,故程序运行后的输出结果是“You To BeiJing!”。因此答案为A选项。
7.有以下程序段:
char name[20];
int num;
scanf(\\(D)
A. name=Lili num=1001
B. name=Lili
C. Lili num=
D. Lili
解析:在输入格式控制“name=%s num=%d”中,普通字符“name=num=”在输入时要原样输入,而格式控制符%s和%d对应各自的输入项,将输入的数据赋给相应的输入项。本题中输入“name=Lili num=1001<回车>”后,将字符串Lili赋给字符数组name,整数1001赋给变量num。因此D选项正确。
8.以下程序段中,与其他三个功能不同的程序段是( )。
A
解析:B,C,D选项都表示对1到10进行累加后赋给s,而A中含break语句,循环体只执行一次,结束整个循环过程,因此答案为A选项。
9.有以下程序:
#nclude
#include
void fun(double*p1,double*02,double * s)
{s=(double*)calloc(1,sizeof(double));
*s=*p1+* 02;
}
main()
{double aE 2]={1.1,2.2},b[2]={10.0,20.0},*q=NULL;
fun(a,b,q);
printf(\\(A)
A. 有运行错误
B. 输出11.10
C. 输出12.10
D. 输出21.10
解析:calloc(n,sizeof(type))在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针,如果分配不成功,返回NULL。s在函数fun()内申请了内存空间,但是在调用fun()函数后会释放掉,最后q指向NULL,因此运行时打印出错。答案为A选项。
10.有以下程序:
#nclude
main()
{ char c;
for(;(c=getchar())!=’#’;)
{if(c>=’a’ && c<=’z’)c=c一’a’+’A’;
putchar(++c);
}
}
执行时输入:aBcDefG##,则输出结果是( )。(C)
A. AbCdEFg
B. ABCDEFG
C. BCDEFGH
D. bcdefgh
解析:循环的作用是将输入的字符串转化为大写,getchar()每次读入一个字
本文档预览:3600字符,共8472字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载