二级C语言选择题专项强化真题试卷52
选择题
1.有以下程序:
#include<stdio.h>
int*f(int*s,int*t)
{
int k;
if(*s<*t)
{ k=*s;*s=*t;*t=k;}
return s;
}
main()
{
int i=3,j=5,*p=&i,*q=&j,*r;
r=f(p,q);
printf(\\(D)
A. 5,3,3,5,5
B. 3,5,5,3,5
C. 3,5,3,5,5
D. 5,3,5,3,5
解析:在主函数中分别给整型变量i、j和指针型变量p、q赋初值,并声明指针变量r,调用f函数,并将实参变量p和q的值传递给形参变量s和t,并且f函数是指针型函数,即函数的返回值将是一个地址。在f函数中,如果条件成立,则将指针变量s和t的值互换,并且将指针s的地址返回主函数。最后输出i,j,*p,*q,*r的值,即5,3,5,3,5。故D选项正确。
2.定义无符号整数类为UInt,下面可以作为类UInt实例化值的是( )。
B
解析:只有B选项369可以用无符号整数来表示和存储。A选项—369有负号,C选项0.369是小数,都不能用无符号整数类存储。D选项是一个整数集合,得用数组来存储。
3.以下程序中,函数scmp的功能足返回形参指针s1和s2所指字符串中较小字符串的首地址:
#include<stdio.h>
#include<string.h>
char*scmp(char*s1.char*s2)
{
if(strcmp(s1,s2)<0)return(s1);
else return(s2);
}
void main()
{
int i;
char string[20],str[3][20];
for(i=0;i<3;i++)
gets(str[i]);
strcpy(string,scmp(str[0],str[1]));
/*库函数strcpy功能是对字符串进行复制*/
strcpy(string,scmp(string,str[2]));
printf(\\(B)
A. abcd
B. abba
C. abbc
D. abca
解析:本题主要考查函数调用和字符串大小的比较。strcmp(s1,s2)用来比较两个字符串的大小,比较方式是两个字符串自左向右逐个字符进行比较(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止。当s1<s2时,返回值为负数;当s1==s2时,返回值为0;当s1>s2时,返回值为正数。gets()函数用来输入字符串,for循环用来控制逐个输入字符串。当分别输入字符串abcd、abba和abc后,执行程序strcpy(string,scrnp(str[0],str[1])),然后调用scmp函数,此时返回str[1]的地址(因为字符串abcd的第三个字符c的ASCII码值大于字符串abba的第三个字符b的ASCII码值),并把该地址存放到string中。接着执行语句strcpy(string,scmp(string,str[2])),结果是把字符串string,即abba的地址存放到string中,最后执行printf()函数,输出当前字符串string,即abba。
4.若有C语言表达式2+3*4+7/3,以下选项中叙述正确的执行顺序是( )。(B)
A. 先执行3*4得12,再执行7/3得2.5,最后执行2+12+2.5得16.5
B. 先执行3*4得12,再执行2+12得14,再执行7/3得2,最后执行14+2得16
C. 先执行7/3得2,再执行3*4得12,再执行12+2得14,最后执行2+14得16
D. 先执行2+3得5,再执行5*4得20.再执行20+7得27,最后执行27/3得9
解析:首先,在C语言中,乘除法优先级要高于加减法;其次,除法运算符“/”两边参加运算的对象都是整数,运算结果要取整,故排除A、D选项;C语言中,因为运算符“*”和“/”都满足从左到右的运算规则,故应先计算3*4=12,因此C选项排除,由排除法可知答案为B选项。
5.以下定义数组的语句中错误的是( )。
B
解析:B选项中,int num[2][4]={{1,2},{3,4},{5,6}};定义数组是2行4列,但是初始化的结构是3行2列,因此初始化错误。故答案为B选项。
6.下面不属于对象主要特征的是( )。(C)
A. 唯一性
B. 多态性
C. 可复用性
D. 封装性
解析:对象的基本特点如下:
7.下列叙述中正确的是( )。(D)
A. 循环队列有队头和队尾两个指针,因此,循环队列是非线性结构
B. 在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况
C. 在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况
D. 循环队列中元素的个数是由队头指针和队尾指针共同决定的
解析:循环队列有队头和队尾两个指针,但是循环队列仍是线性结构的,所以A)错误;在循环队列中只需要队头指针与队尾两个指针来共同反映队列中元素的动态变化情况,所以B)与C)错误。
8.有三个关系R、S和T如下:
(C)
A. 自然连接
B. 交
C. 除
D. 并
解析:如果S=T/R,则S称为T除以R的商。在除运算中s的域由T中那些不出现在R中的域所组成,对于S中的任一有序组,由它与关系R中每个有序组所构成的有序组均出现在关系T中。所以本题选择C。
9.有以下程序
#include<stdio.h>
void swap(int*a,int*b)
{int t,*tp;
t=*a;*a=*b;*b=t;
tp=a;a=b;b=tp;
prinff(\\(D)
A. 3,7,3,7,3,7
B. 7,3,7,3,7,3
C. 3,7,3,7,7,3
D. 3,7,7,3,7,3
解析:main( )函数中,首先定义两个整型变量i和j,初值为3和7,并将i的地址赋给p,j的地址赋给q,传给swap( )函数,swap( )函数接收两个整型指针变量a,b,然后使用整型变量t交换a、b所指向的值并输出,通过指针变量,这次交换改变了实参i、j的值,使得i=7,j=3;指针变量tp交换a和b的值,由于a、b的值是p,q值的拷贝,所以这次交换只改变了形参a.b的值,对实参p,q的值没有
本文档预览:3600字符,共8809字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载