专升本考试C语言模拟试题及参考答案一

一.单项选择题

1. 以下定义语句中正确的是 (C)
A)char a='A'b='B'; B)float a=b=10.0;
C)int a=10,*b= &a; D)float *a,b=&a;

2. 下列运算符中,优先级最高的是 (A) 。

A. -> B. ++ C. && D. =

3. 表达式!(x>0&&y>0)等价于 (A) 。

A. ! (x>0) || ! (y>0) B. !x>0 || !y>0 C. !x>0 && !y>0 D. !(x>0) && ! (y>0)

4. 有以下程序
main()
{ int a=666,b=888;
printf( "%d\n",a,b);
}
程序运行后的输出结果是(B)
A) 错误信息 B)666 C)888 D)666,888 
5. 有以下程序
main()
{ int i;
for(i=0;i <3;i++)
switch(i)
{
case 0:printf( "%d",i);
case 2:printf( "%d",i);
default:printf( "%d",i);
}
}
程序运行后的输出结果是 (C)
A)022111 B)021021 C)000122 D)012 

6. 若x和y代表整型数,以下表达式中不能正确表示数学关系|x-y|<10的是 (C)
A)abs(x-y)<10 B)x-y>-10&& x-y<10
C)!(x-y) <-10||!(y-x)>10 D)(x-y)*(x-y)<100 

7. 数组定义为,int a[11][11]; 则数组a 的元素个数为: (D)

A. 12 B. 144 C. 100 D. 121

8. 对于以下的变量定义,不正确的表达式是:(D) 。

struct node {

int j , k ;

}x,*p=&x;

A. p->k=2; B. (*p).k=2; C. x . k=2 D. x->k=2

9. 不正确的赋值或赋初值的方式是 (B) 。

A. char str[ ]=”string”; B. char str[10]; str=”string”;

C. char *p=”string”; D. char *p; p=”string”;

10. 设程序中不再定义新的变量,写出在函数main中可以使用的所有变量为:(B)

#include

int z;

int p(int x)

{ static int y;

return (x+y);

}

void main( )

{ int a,b;

printf(“%dn”, p(a));

………

A. a,b B. a,b,z C. a,b,y,z D. a,b,x,y,z

11.有以下程序
main()
{ int i=0,x=0;
for (;;)
{
if(i==3||i==5) continue;
if (i==6) break;
i++;
s+=i;
};
printf( "%d\n",s);
}
程序运行后的输出结果是 (D)
A)10 B)13 C)21 D) 程序进入死循环 
12.有以下程序
main()
{ char a,b,c,d;
scanf( "%c,%c,%d,%d",&a,&b,&c,&d);
printf( "c,%c,%c,%c\n",a,b,c,d);

若运行时从键盘上输入:6,5,65,66<回车>。则输出结果是(A)
A)6,5,A,B B)6,5,65,66 C)6,5,6,5 D)6,5,6,6 
13.s12和s2已正确定义并分别指向两个字符串。若要求:当s1所指串大于s2所指串时,执行语句S;则以下选项中正确的是 (D)
A)if(s1 >s2)S; B)if(strcmp(s1,s2))S;
C)if(strcmp(s2,s1) >0)S; D)if(strcmp(s1,s2)>0)S; 
14.有以下定义和语句
int a[3][2]={1,2,3,4,5,6,},*p[3];
p[0]=a[1];
则*p[0]+1)所代表的数组元素是 (C)
A)a[0][1] B)a[1][0] C)a[1][1] D)a[1][2]

15.程序中对fun函数有如下说明 
void *fun();
此说明的含义是:(C) 
A)fun 了数无返回值
B)fun 函数的返回值可以是任意的数据类型
C)fun 函数的返回值是无值型的指针类型
D) 指针fun指向一个函数,该函数无返回值
16.有以下程序
void fun(int *a,int i,int j)
{ int t;
if(i { t=a;a=a[j];a[j]=t;
i++; j--;
fun(a,i,j);
}
}
main()
{ int x[]={2,6,18},i;
fun(x,0,3);
for(i=0;i <4;i++) printf("%2d",x);
printf( "\n");
}
程序运行后的输出结果是 (C)
A)1 2 6 8 B) 8 6 2 1 C) 8 1 6 2 D)8 6 1 2
17. 有以下说明和定义语句
struct student
{ int age; char num[8];};
struct student stu[3]={{20, "200401"},{21,"200402"},{10\9,"200403"}};
struct student *p=stu;
以下选项中引用结构体变量成员的表达式错误的是 (D)
A) (p++)- >num B)p->num C)(*p).num D)stu[3].age
18.已定义ch为字符型变量,以下赋值语句中错误的是 (A)
A )ch='\'; B)ch=62+3; C)ch=NULL; D)ch='\xaa';
19.以下选项中不能正确把cl定义成结构体变量的是 (B)
A )typedef struct B)struct color cl
{ int red; { int red;
int green; int green;
int blue; int blue;
} COLOR; };
COLOR cl;
C )struct color D)struct
{ int red; { int red;
int green; int green;
int blue; int blue;
} cl; } cl;
20.有以下程序
fun(int a, int b)
{ if(a >b) return(a);
else return(b);
}
main()
{ int x=3, y=8, z=6, r;
r=fun(fun(x,y), 2*z);
printf( "%d\n", r);
}
程序运行后的输出结果是 (D)
A )3 B)6 C)8 D)12
21.有以下程序段
main()
{ int a=5,*b,**c;
c= &b; b=&a;
……
}
程序在执行了c=&b;b=&a;语句后,表达式:**c的值是 (C)
A )变量a的地址 B)变量b中的值 C)变量a中的值 D)变量b的地址
22. 设有 int x=11; 则表达式 (x++ * 1/3) 的值是 (A)
A) 3 B) 4 C) 11 D) 12

23. 下列程序的输出结果是 (C)
A) 3 B) 3.2 C) 0 D) 3.07
main()
{ double d=3.2; int x,y;
x=1.2; y=(x+3.8)/5.0;
printf( "%d \n", d*y);
}
24. 下列变量定义中合法的是 (A)
A) short _a=1-.le-1; B) double b=1+5e2.5;
C) long do=0xfdaL; D) float 2_and=1-e-3;
25. 以下循环体的执行次数是 (C)
A) 3 B) 2 C) 1 D) 0
main()
{ int i,j;
for(i=0,j=1; i <=j+1; i+=2, j--)printf("%d \n",i);
}
26. 以下叙述正确的是 (D)
A) do-while 语句构成的循环不能用其它语句构成的循环来代替。
B) do-while 语句构成的循环只能用break语句退出。
C) 用do-while语句构成的循环,在while后的表达式为非零时结束循环。
D) 用do-while语句构成的循环,在while后的表达式为零时结束循环。
27. 下列程序执行后的输出结果是(A)
A) G B) H C) I D) J
main()
{ int x='f'; printf( "%c \n",'A'+(x-'a'+1)); }
28. 下列程序执行后的输出结果是 (A)
A) 6 B) 7 C) 8 D) 9
void func(int *a,int b[])
{ b[0]=*a+6; }
main()
{ int a,b[5];
a=0; b[0]=3;
func( &a,b); printf("%d \n,b[0]);
}
29. 下列程序的运行结果是 (B)
A) a=%2,b=%5 B) a=2,b=5
C) a=d, b=d D) a=%d,b=%d
#include 
main()
{ int a=2,c=5;
printf( "a=%d,b=%d\n",a,c); }
30. 设有数组定义: char array [ ]="China"; 则数组 array所占的空间为 (C)
A) 4 个字节 B) 5个字节 C) 6个字节 D) 7个字节
31. 下列程序的输出结果是 (B)
A) 5 B) 6 C) 7 D) 8
struct abc
{ int a, b, c; };
main()
{ struct abc s[2]={{1,2,3},{4,5,6}}; int t;
t=s[0],a+s[1],b;
printf( "%d \n",t);
}
32. 若有以下调用语句,则不正确的fun函数的首部是 (C)
A) void fun(int m, int x[]) B) void fun(int s, int h[41])
C) void fun(int p, int *s) D) void fun(int n, int a)
main()
{ …
int a[50],n;

fun(n, &a[9]);

}
33. 设已有定义: char *st="how are you"; 下列程序段中正确的是 (A)
A) char a[11], *p; strcpy(p=a+1, &st[4]);
B) char a[11]; strcpy(++a, st);
C) char a[11]; strcpy(a, st);
D) char a[], *p; strcpy(p= &a[1],st+2);
34. 下列程序执行后的输出结果是 (A)
A) you &ne B) you C) me D) err
mai()
{ char arr[2][4];
strcpy(arr, "you"); strcpy(arr[1],"me");
arr[0][3]=' &';
printf( "%s \n",arr);
}
35. 下列程序执行后的输出结果是 (B)
A) 6 B) 8 C) 10 D) 12
#define MA(x) x*(x-1)
main()
{ int a=1,b=2; printf( "%d \n",MA(1+a+b));}
36. 变量a所占内存字节数是 (C)
A) 4 B) 5 C) 6 D) 8
union U
{ char st[4];
int i;
long l;
};
struct A
{ int c;
union U u;
}a;

二、填空题

1. 表达式1<0<5的值是 1 。

3. 表达式 ~(10>>1^~5) 的值是 0 。

2. 设变量已正确定义,在程序段B中填入正确的内容,使程序段 A 和程序段B等价。

程序段 A

for(k=s=0;k<=10;s+=a[k++])

if(a[k]<0) break;

程序段B

for(k=0,s=0; ; s+=a[k++])

if( a[k]<0 || k>10 ) break;

3. 下列程序的输出结果是 100 。

#define T 10

#define MD 3*T

printf(“%d”,30/MD);

4. 下列程序的输出结果是 k=5, s=15 。

int k,s;

for(k=s=0;k<10&&s<=10;s+=k)

k++;

printf(“k=%d,s=%d”,k,s);

5. 下列程序的输出结果是 5,9 。

#include

int f(int m)

{ static int k=2;

k++;

return k+m;

}

void main( )

{ int s;

s=f(2);

printf(“%d,%dn”,s,f(s));

}

6. 对于以下递归函数f,条用f(3)的返回值是 -2 。

f(int n)

return((n<=0)?n:f(n-1)+f(n-2));

}

7. 下列程序的输出结果是 -10 。

int c[ ]={10,0,-10};

int *k=c+2;

printf(“%d”,*k--);

8. 下列程序的输出结果是 2 1 。

int k=1,j=2,*p=&k,*q=p;

p=&j;

printf(“%d %d”,*p,*q);

9. 下列程序的输出结果是 un, g 。

#include

char *f(char *str)

{ return str=”fun”;

}

void main( )

{ char *str=”one”;

printf(“%s,%cn”, f(str)+1,*f(str)+1);

}

10. 下列程序的输出结果是 1,3 。

#include

void p(int *x,int y)

{ ++*x; y--; }

void main( )

{ int x=0,y=3;

p(&x,y);

printf(“%d,%d”x,y);

}

11. 下列程序的输出结果是 1 0 0 1 。

#include

{ int j,k,a[2][2];

for(k=1;k<3;k++)

for(j=1;j<3;j++)

a[k-1][j-1]=(k/j)*(j/k);

for(k=0;k<2;k++)

for(j=0;j<2;j++)

printf(”%d”,a[k][j]);

}

12. 下面程序的功能是:计算1到10之间奇数之和及偶数之和,请填空。
#include 
main()
{ int a, b, c, i;
a=c=0;
for(i=0;i <10;i+=2)
{ a+=i;
b = i + 1 ;
c+=b;
}
printf( "偶数之和=%d\n",a);
printf( "奇数之和=%d\n",c-11);
}
13. 下面程序的功能是:输出100以内能被3整除且个位数为6的所有整数,请填空。
#include 
main()
{ int i, j;
for(i=0; i<10 ; i++)
{ j=i*10+6;
if( i % 3 != 0 ) continue;
printf( "%d",j);
}
}