国家二级(C语言)机试模拟试卷110
选择题
1.有以下程序:
#include
main()
{ int a=5,b=1,t;
t=(a<<2)|b;
printf(\\(A)
A. 21
B. 11
C. 6
D. 1
解析:5的二进制是101,计算5<<2,即将101左移2位后为10100,然后和00001进行逐位或运算等于10101,其十进制为21。
2.设函数中有整型变量n,为保证其在未赋值的情况下初值为0,应选择的存储类别是( )。(C)
A. auto
B. register
C. static
D. auto或register
解析:静态存储类型变量在未对其初始化时的默认初始化值是0,其他存储类型不能确定变量在未赋值情况的初值。
3.若有以下定义:
int x[10],*pt=x;
则对x数组元素的正确引用是( )。(B)
A. *&x[10]
B. *(x+3)
C. *(pt+10)
D. pt+3
解析:数组的下标是从0开始的,故x[10]实际上具体为x[0],x[1],…,x[9],而若使用x[10]就会溢出,编译出错,所以AC两项错误;D项,pt+3指向地址,并未引用到元素;B项的表达正确,引用x[3]。
4.有以下程序:
#include
struet ord
{ int x,y;}dt[2]={1,2,3,4};
main()
{ struet ord*p=dt;
printf(\\(B)
A. 1,2
B. 2,3
C. 3,4
D. 4,1
解析:dt是一个结构体数组,所以初始化的结果为dt[0]={1,2},at[1]={3,4}。*P=dt;,表示p指向dt[0]。++P->x中,->的优先级大于++,所以表达式等价于++(P->x),因为P->x为1,所以输出这个值为2,同理,第二个++P->Y的值为2+1=3。
5.以下函数按每行8个输出数组中的数据:
void fun(int*w,int n)
{ int i:
for(i=0;i<n;i++)
{
printf(\\(C)
A. if(i/8==0)printf(\\
B. if(i/8==0)continue;
C. if(i%8==0)printf(\\
D. if(i%8==0)continue;
解析:每行输出8个数组数据后输入一个换行,应该采取对8取余的方法,余数循环一次便换行一次,所以语句为if(i%8==0)printf(\\
6.有以下程序:
#include
int b=2;
int fun(int*k)
{ b=*k+b;
return(b);
}
main()
{ int a[10]={1,2,3,4,5,6,7,8},i;
for(i=2;i<4;i++){b=fun(&a[i])+b;printf(\\(C)
A. 1012
B. 810
C. 1028
D. 1016
解析:变量b是全局变量,所以它的值在整个程序结束时才会消失。for循环第一次i=2,a[i]=3,所以fun(&a[i])=3+2=5,这时b为5,所以输出的b=fun(&a[i])+b=5+5=10。for循环第二次,i=3,b=10,然后fun(&a[i]),代入a[i]=4,这时fun(&a[i])=10+4=14,所以输出的b=fun(&a[i])+b=14+14=28。
7.有以下程序:
#include
void fun(char*s)
{
while(*s)
{
if(*s%2==0)printf(\\(A)
A. d
B. go
C. god
D. good
解析:字符串\\
8.有以下程序:
#include
main()
{ FILE*f;
f=fopen(\\(C)
A. helloabe
B. abelo
C. abe
D. abchello
解析:fopen(\\
9.有以下程序:
#include
int f(int x,int y)
{
return((y-x)*x);
}
main()
{
int a=3,b=4,c=5,d;
d=f(f(a,b),f(a,c));
printf(\\(B)
A. 10
B. 9
C. 8
D. 7
解析:程序执行过程:首先计算f(a,b),代入a=3,b=4得3,然后计算f(a,c),代入a=3,c=5得6,所以d=f(3,6)=9。
10.有以下程序:
#include
#define PT 3.5
#define S(x)PT*x*x
main()
{ int a=1,b=2;
printf(\\(C)
A. 14.0
B. 31.5
C. 7.5
D. 程序有错无输出结果
解析:S(a+b)=PT*a+b*a+b=(PT*a)+(b*a)+b=7.5,程序输出7.5。
注意:宏只能简单替换,不能做任何修改。
11.有以下程序:
#include
main()
{
int a1,a2;char c1,c2;
scanf(\\(A)
A. 12a34b
B. 12_a_34_b
C. 12,a,34,b
D. 12_a34_b
解析:根据scanf函数中的格式说明字符串,各个输入之间没有任何符号,所以键盘输入也应该没有符号。
12.设有宏定义:#define IsDIV(k,n)((k%n=1)?1:0)且变量m已正确定义并赋值,则宏调用:IsDIV(m,5)&&IsDIV(m,7)为真时所要表达的是( )。(D)
A. 判断m是否能被5或者7整除
B. 判断m是否能被5和7整除
C. 判断m被5或者7整除是否余1
D. 判断m被5和7整除是否都余1
解析:IsDIV(m,5)&&IsDIV(m,7)为真,
本文档预览:3600字符,共13036字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载