国家二级C语言机试(选择题)模拟试卷107 (题后含答案及解析)
题型有:1. 选择题
选择题
1. 下列选项中不属于结构化程序设计原则的是(    )。
A.可封装
B.自顶向下
C.模块化
D.逐步求精
正确答案:A
解析:结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用goto语句,所以选择A。 知识模块:选择题
2. 有两个关系R和T如下:则由关系R得到关系T的操作是(    )。
A.投影
B.交
C.选择
D.并
正确答案:A
解析:从表图中可以看出,关系T是从关系R中选取一部分字段(A和C)及其值构成新的关系,是一种纵向操作产生新列,属于投影,正确选项为A。 知识模块:选择题
3. 有以下程序:#include  <stdio.h>main( ){printf(″%d\n”,NULL);}程序运行后的输出结果是(    )。
A.1
B.变量无定义,输出不确定
C.—1
D.0
正确答案:D
解析:NULL为一个符号常量,对应的ASCⅡ码值为0,答案选D。 知识模块:选择题
4. 有以下程序:#include<stdio.h>#define f(x)x*x*xmain( ){int a=3,s,t;s=f(a+1);t=f((a+1));printf(″%d,%d\n″,s,t);}程序运行后的输出结果是(    )。
A.10,64
B.10,10
C.64,10
D.64,64
正确答案:A
解析:C语言中带参数的宏可以理解为用参数直接替代定义式中的变量,而不经过任何修改。所以s=f(a+1)=a+1*a+1*a+1,t=f((a+1))=(a+1)*(a+1)*(a+1),所以有无括号的运算结果是不同的。 知识模块:选择题
5. 有以下程序:#include<stdio.h>int f(int x,int y){return((y—x) * x);}void main( ){int a=3,b=4,c=5,d;d=f(f(a,b),f(a,c));printf(″%d\n″,d);}程序运行后的输出结果是(    )。
A.9
B.10
C.8
D.7
正确答案:A
解析:考查函数的返回值。d=f(f(a,b),f(a,c))=f((b—a)*a,(c—a)*a)=f(3,6)=(6—3)*3=9,所以答案选A。 知识模块:选择题
6. 以下叙述中正确的是(    )。
A.如果p是指针变量,则&p是不合法的表达式
B.如果p是指针变量,则*p表示变量p的地址值
C.在对指针进行加、减算术运算时,数字1表示1个存储单元的长度
D.如果p是指针变量,则*p+1和*(p+1)的效果是一样的
正确答案:C
解析:考查指针的用法。指针进行算术运算的时候,数字“1”不再代表十进制整数“1”,而是指一个存储单元长度,选项C正确。指针变量存储的是其指向的变量的地址,其本身的地址仍用取地址运算符“&”求得,*p表示的是p指向的变量的值,选项A、B错。*p+1表示的是指针p指向的变量值+1,而*(p+1)则是取得了下一个变量的值,两者不同,选项D错。答案选C。
知识模块:选择题
7. 有以下程序:#include<stdio.h>void main( ){unsigned char a=8,c;c =a>>3:printf(″%d\n″,c);}程序运行后的输出结果是(    )。A.32
B.16
关于printf函数正确的是
C.1
D.0
A.32
B.16
C.1
D.0
正确答案:C
解析:字符常量与其ASCⅡ码值一一对应,在计算的时候,可以使用该字符的ASCⅡ码参与运算,输出时会根据格式控制符输出对应的字符或者ASCⅡ码。右移运算符“>>”的运算规则是把左边运算数的各二进制位全部右移n位,n取决于“>>”右边的数值。字符a的ASCⅡ码值为8,对应二进制为1000,所以a>>3=1,输出的字符c的ASCⅡ码值为1,答案选C。 知识模块:选择题
8. 下列各项中,对对象概念描述正确的是(    )。
A.对象间的通信靠消息传递
B.对象是名字和方法的封装体
C.任何对象必须有继承性
D.对象的多态性是指一个对象有多个操作
正确答案:A
解析:对象之间进行通信的构造叫作消息,选项A正确、封装性是指从外面看只能看到对象
的外部特征,而不知道也无须知道数据的具体结构以及实现操作,选项B错误。对象不一定必须有继承性,选项C错误,多态性是指同一个操作可以是不同对象的行为,选项D错误。 知识模块:选择题
9. 以下函数的功能是计算a的n次方并作为函数值返回:double fun(double a,int n){int i;double s=1.0;for(i=1;i<=n;i+ +)S=___  ____;return s:}为实现上述功能,函数中下画线处应填入的是(    )。
A.s * i
B.s * a
C.s+i * i
D.s+a * a
正确答案:B
解析:s为a的(i—1)次方的结果,所以令s=s*a即可得到a的i次方。 知识模块:选择题
10. 有以下程序:#include<stdio.h>int fun(int n){if(n)return fun(n—1)+n;elsereturn 0;}main( ){printf(″%d\n″,fun(3));}程序的运行结果是(    )。
A.4
B.5
C.6
D.7
正确答案:C
解析:fun函数是一个递归函数,n=3,返回f(3—1)+3=f(2)+3=f(1)+2+3=f(0)+1+2+3=0+6=6。 知识模块:选择题
11. 有以下程序:#include<stdio.h>main( ){char ch=′Z′;ch=(ch—′A′+1)%26+′A′;putchar(ch);printf(″\n″);}程序的运行结果是(    )。
A.Z
B.Y
C.B
D.A
正确答案:D
解析:z的ASCⅡ码是90,A的ASCⅡ码是65,所以ch=(ch—′A′+1)%26+′A′=26%26+65=65,65对应的字符即A。 知识模块:选择题
12. 有以下程序:#include<stdio.h>#define N 4void fun(int a[],int b[]){int i;for(i=0;i<N;i+ +)b[i]=a[i][N—1—i];}main( ){int x[N][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},y[N],i;fun(x,y);for(i=0;i<N;i+ +)printf(″%d,″,y[i]);printf(″\n″);}程序的运行结果是(    )。
A.1,2,3,4,
B.3,6,9,12,
C.4,7,10,13,
D.1,5,9,13,
正确答案:C
解析:调用fun函数,y[i]=x[i][N—1—i],N=4,x是4行4列的二维数组。i=0时,y[0]=x[0][4—1]=x[0][3]=4;j=1时,y[1]=x[1][4—1—1]=x[1][2]=7;i=2时,y[2]=x[2][4—1—2]=x[2][1]=10;i=3时,y[3]=x[3][0]=13。 知识模块:选择题
13. 若有定义:int a=1,b=2,c=3;,则执行表达式(a=b+c)||(+ +b)后,a,b,c的值依次为(    )。
A.1,2,3
B.5,3,2
C.5,2,3
D.5,3,3
正确答案:C
解析:||表示或运算,当第一个表达式为真时,第二个表达式就不会被执行。根据优先级规则,两边都是括号,所以先计算(a=b+c),将b+c的值赋值给a,则a=5,而右边的括号不会被执行,所以b=2,c=3。 知识模块:选择题
14. 算法的空间复杂度是指(    )。
A.算法在执行过程中所需要的计算机存储空间
B.算法所处理的数据量
C.算法程序中的语句或指令条数
D.算法在执行过程中所需要的临时工作单元数
正确答案:A
解析:算法的空间复杂度是指算法在执行过程中所需要的内存空间,因此本题答案为A。 知识模块:选择题
15. 数据库管理系统是(    )。
A.操作系统的一部分
B.在操作系统支持下的系统软件
C.一种编译系统
D.一种操作系统
正确答案:B
解析:数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和提供数据服务等,是一种在操作系统支持下的系统软件,因此本题答案为B。 知识模块:选择题
16. 若有C语言表达式2+3*4+7/3,则以下选项中叙述正确的执行顺序是(    )。
A.先执行3*4得12,再执行2+12得14,再执行7/3得2,最后执行14+2得16
B.先执行3*4得12,再执行7/3得2.5,最后执行2+12+2.5得16.5
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
正确答案:A
解析:C语言表达式的执行顺序是从左向右,当遇到优先级高的表达式组分时,先执行优先级高的表达式,故选项A正确。 知识模块:选择题
17. 有以下程序:#include<stdio.h>main( ){char x=2,y=2,z;z=(y<<1)&(x>>1);printf(″%d\n″,z);}程序的输出结果是(    )。
A.1
B.0
C.4
D.8
正确答案:B
解析:本题考查位运算<<和&。y<<1为4,x>>1为1,二者与运算后为0,故B选项正确 知识模块:选择题
18. 有以下程序:#include<stdio.h>#include<string.h>main( )}char a[]=″1234″,*b=″ABC″;printf(″%d%d%d%d\n″,strlen(a),sizeof(a),strlen(b),sizeof(b));}程序运行后的输出结果是(    )。
A.4 5 3 4
B.4 3 2 1
C.4 5 3 3