二级C语言选择题专项强化真题试卷46
选择题
1.下列叙述中正确的是( )。(A)
A. 程序执行的效率与数据的存储结构密切相关
B. 程序执行的效率只取决于程序的控制结构
C. 程序执行的效率只取决于所处理的数据量
D. 以上说法均错误
解析:程序执行的效率与数据的存储结构、数据的逻辑结构、程序的控制结构、所处理的数据量等有关。
2.若有以下定义:
int x[10],*pt=x;
则对x数组元素的正确引用是( )。(B)
A. *&x[10]
B. *(x+3)
C. *(pt+10)
D. pt+3
解析:数组的下标是从O开始的,故x[10]实际上具体为x[0],x[1],…,x[9],而若使用x[10]就会溢出,编译出错。所以AC两项错误;D项是指向地址的,并未引用到元素;B项的表达正确,代表x[3]中的元素。
3.有如下程序段:
int x=1 2;
double y=3.141593;
printf(\\(A)
A. 123.141593
B. 123.141493
C. 12,3.141593
D. 123.1415930
解析:输出的x与y间没有空格,“%8.6f”代表输出字符型数据y的格式应为小数点后保留6位。
4.下面描述中不属于数据库系统特点的是( )。(C)
A. 数据共享
B. 数据完整性
C. 数据冗余度高
D. 数据独立性高
解析:数据库系统的特点为高共享、低冗余、独立性高、具有完整性等,故C选项错误。
5.下面选项中关于位运算的叙述正确的是( )。(A)
A. 位运算的对象只能是整型或字符型数据
B. 位运算符都需要两个操作数
C. 左移运算的结果总是原操作数据的2倍
D. 右移运算时,高位总是补0
解析:本题考查位运算。按位取反只需要一个操作数,所以B选项错误;左移一位是原操作数的2倍,其他情况不是,比如左移两位就是原操作数的4倍,所以C选项错误;右移运算时,高位在某些情况下不是补0,所以D选项错误。故A选项正确。
6.有以下程序:
#include<stdio.h>
void fun(char*c){
while(*c){
if(*c>=’a’&&*c<=’z’)
*c=*c=-(’a’-’A’)。
c++;
}
}
main( )
{
char s[81];
gets(s);
fun(s);
puts(s);
}
当执行程序时从键盘上输入Hello Beijing<回车>,则程序运行后的输出结果是( )。(C)
A. hello beijing
B. Hello Beijing
C. HELLO BEllING
D. hELLO Beijing
解析:主程序读取整个字符串存于s中,调用fun函数,字符指针c指向数组s。函数fun的功能是把指针c所指向的字符数组中的所有小写字符转换为大写。gets函数可以把空格作为字符串的一部分输入,以回车作为输入结束。如果*c为小写字符,则*c=*c-32(转大写)。因此C选项正确。
7.有以下程序:
#include<stdio.h>
main( )
{
int a[4][4]={{1,4,3,2},
{8,6,5,7},
{3,7,2,5},
{4,8,6,1}};
inti,j,k,t;
for(i=0;i<4;i++)
for(j=0;j<3;j++)
for(k=j+1;k<4;k++)
if(a[j][i]>a[k][i])
{
t=a[j][i];
a[j][i]=a[k][i];
a[k][i]=t;
}/*按列排序*/
for(i=0;i<4;i++)
printf(\\(D)
A. 1,6,2,1,
B. 8,7,3,1,
C. 4,7,5,2,
D. 1,6,5,7,
解析:首先对二维数组进行赋值操作,a[0][0]、a[0][1]、…、a[3][2]、a[3][3]的值为1、4、…、6、1。通过for语句和if语句,对二维数组各列元素进行由小到大的排序操作,程序最后通过for语句输出二维数组对角线上的元素。因此D选项正确。
8.有以下程序
#include
main()
{FILE*fp;
int i,a[6]={1,2,3,4,5,6},k;
fp=fopen(\\(A)
A. 6
B. 21
C. 123456
D. 654321
解析:本题首先定义文件指针变量fp和一个数组a[],再打开一个文件“dat(a)dat”,随后先给文件写入数据a[0],由于rewind函数是将文件指针从当前位置重新指向文件开始位置,所以for循环依次将数组a中的数据写入文件开始位置,退出循环后,文件中的数据顺序为:654321,重新使指针指向文件开始位置,将此时fp指向的数据(即文件中第一个数据6)写入变量k中,关闭文件,输出k值,答案为A选项。
9.有以下程序:
#include<stdio.h>
void fun1(char*p)
{
char*q;
q=p;
while(*q!=’\0’)
{
(*q)++;
q++;
}
}
main( )
{
char a[]={\\(B)
A. Prphsbn
B. Prohsbn
C. Progsbn
D. Program
解析:(*q)++是q所指的字符加1,q++就是指针移到下一个字符。因此B选项正确。
10.若要建立下图所示的存储结构,以下正确的程序段是( )。
(A)
A. char**q,*p,c;
p=&c;q=&p;
B. char**q,*p,c;
p=&c;q=*p;
C. char*q,*p,c;
p=&c;*q=p;
D. char*q,*p,c;
q=p;p=* c;
解析:由图示可知,c是个普通变量,p指向c,因此p是指针,且p=&c,q指向p,但是p也是指针,因此q是指向指针的指针q=&p,因此定义是int**q,*p,c,q=&p,P=&c。答案为A选项。
11.有以下程序:
#include
mmn()
{ char s[
本文档预览:3600字符,共7567字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载