2009 年山东青岛大学程序设计考研真题
一、单项选择题(每题2分,共40分)
1、以下选项中非法的表达式是( )。
(A)0<=x<100
(B)i= j= =0
(C)(char)(65+3)
(D)x+1=x+1
2、若有定义:int *p[3];,则以下叙述中正确的是( )。
(A)定义了一个基类型为 int 的指针变量 p,该变量具有三个指针
(B)定义了一个含有三个元素的指针数组 p,每个元素都是基类型为 int 的指针
(C)定义了一个名为*p 的整型数组,该数组含有三个 int 类型元素
(D)定义了一个可指向一维数组的指针变量 p,所指数组应具有三个 int 类型元素
3、已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( )。
(A)函数调用可以作为独立的语句存在
(B)函数调用可以作为一个函数的实参
(C)函数调用可以出现在表达式中
(D)函数调用可以作为一个函数的形参
4、下列关于单目运算符++、--的叙述中正确的是( )。
(A)它们的运算对象可以是任何变量和常量
(B)它们的运算对象可以是char型变量和int型变量,但不能是float型变量
(C)它们的运算对象可以是int型变量,但不能是double型变量和float型变量
(D)它们的运算对象可以是char型变量、int型变量和float型变量
5、有以下程序
main()
{
}
int i=1,j=1,k=2;
if((j++||k++)&&i++) printf("%d,%d,%d\n",i,j,k);
执行后输出的结果是( )。
(A)1,1,2
(B)2,2,1
(C)2,2,2
(D)2,2,3
6、有以下程序
main()
{
}
int x[8]={8,7,6,5,0,0},*s;
s=x+3;
printf("%d\n",s[2]);
执行后输出结果是( )。
(A)随机值
(B)0
(C)5
(D)6
7、以下程序的输出结果是( )。
main()
{
}
char st[20]= "hello\0\t\\";
printf(%d,%d \n",strlen(st),sizeof(st));
(A)9,9
(B)5,20
(C)13,20
(D)20,20
8、设int a,x; 表达式正确的是( )。
(A)a=(a[0]+a[1])/2
(B)a=(x=1,x++,x+2),10
(C)a*=*a+1
(D)a="good"
9、若有说明语句:double *p,a; 则能通过 scanf 语句正确给输入项读入数据的程
序段是( )。
(A)*p=&a; scanf("%lf",p);
(B)*p=&a; scanf("%f",p);
(C)p=&a; scanf("%lf",*p);
(D)p=&a; scanf("%lf",p);
10、有以下程序
main()
{
}
int a=0,b=0,c=0,d=0;
if(a=1) b=1;c=2;
else d=3;
printf("%d,%d,%d,%d\n",a,b,c,d);
程序输出( )。
(A)0,1,2,0
(B)0,0,0,3
(C)1,1,2,0
(D)编译有错
11、有以下程序
main()
{
}
int i,t[][3]={9,8,7,6,5,4,3,2,1};
for(i=0;i<3;i++) printf("%d",t[2-i][i]);
程序的执行后的输出结果是( )。
(A)7 5 3
(B)3 5 7
(C)3 6 9
(D)7 5 1
12、以下函数值的类型是( )。
fun (float x)
{
}
float y;
y= 3*x-4;
return y;
(A) int
(B) 不确定
(C) void
(D) float
13、表达式 3.6-5/2+1.2+5%2 的值是( )。
(A)4.3
(B)4.8
(C)3.3
(D)3.8
14、若有定义:float x=1.5; int a=1,b=3,c=2; 则正确的 switch 语句是( )。
(A)switch(x)
{
}
case 1.0: printf("*\n");
case 2.0: printf("**\n");
(B) switch((int)x);
{
}
case 1: printf("*\n");
case 2: printf("**\n");
(C) switch(a+b)
{
case 1: printf("*\n");
case 2+1: printf("**\n");
}
(D) switch(a+b)
{
}
case 1: printf(*\n");
case c: printf("**\n");
15、下列程序的运行结果是( )。
void fun(int *a, int *b)
{
}
int *k;
k=a; a=b; b=k;
main()
{
}
int a=3, b=6, *x=&a, *y=&b;
fun(x,y);
printf("%d %d", a, b);
(A)6 3
(B)3 6
(C)编译出错 (D)0 0
16、设有以下说明语句
struct ex
{
int x ; float y; char z ;
}example;
则下面的叙述中不正确的是( )。
(A) struct 是结构体类型的关键字
(B) example 是结构体类型名
(C) x,y,z 都是结构体成员名
(D) struct ex 是结构体类型名
17、若变量已正确定义,要求程序段写成 5!的计算,不能完成此操作的程序段是
( )。
(A)for(i=1,p=1;i<=5;i++) p*=i;
(B)for(i=1;i<=5;i++){p=1;p*=i;}
(C)i=1;p=1;while(i<=5){p*=i;i++;}
(D)i=1;p=1;do{p*=i;i++;}while(i<=5);
18、有以下程序
#include
void main()
{
}
int a[10]={1,2,3,4,5,6,7,8,9,10}, *p=&a[3], *q=p+2;
printf("%d\n", *p + *q);
程序运行后的输出结果是( )。
(A)16
(B)10
(C)8
(D)6
19、若函数的形参为一维数组,则下列说法中正确的是( )。
(A)调用函数时的对应实参必为数组名
(B)形参数组可以不指定大小
(C)形参数组的元素个数必须等于实参数组的元素个数
(D)形参数组的元素个数必须多于实参数组的元素个数
20、以下关于函数的叙述中正确的是( )。
(A)每个函数都可以被其它函数调用(包括 main 函数)
(B)每个函数都可以被单独编译
(C)每个函数都可以单独运行
(D)在一个函数内部可以定义另一个函数
二、程序分析题(每题 5 分,共 30 分)
1、写出下列程序的运行结果:
main()
{
int c;
while ((c=getchar())!='\n')
switch (c-'2')
{
case 0
case 1
case 2
case 3
:
:
:
:
putchar(c+4);
putchar(c+4); break;
putchar(c+3);
default
:
putchar(c+2); break;
}
}
从键盘输入数据:2473,代表回车。
2、写出下列程序的运行结果:
void fun1(char *p)
{
}
char *q;
q=p;
while(*q!='\0')
{ (*q)++; q++; }
main()
{
}
char a[]={"Program"},*p;
p=&a[3];
fun1(p);
printf("%s\n",a);
3、写出下列程序的运行结果
int fun(int n)
{
}
if(n= =1) return 1;
else
return (n+fun(n-1));
main( )
{
}
int x;
scanf("%d",&x);
x=fun(x);
printf("%d\n",x);
程序执行时,给变量 x 输入 10,程序的输出结果是什么?
4、指出下列程序实现的功能
main( )
{
int i=0,j=0,k=0,a[3]={2,4,18},b[6]={5,20,25,29,35,60},c[10];
while(i<3&&j<5)
if(a[i]>b[j]) { c[k]=b[j];k++;j++;}
else { c[k]=a[i];k++;i++;}
while(i<3)
{ c[k]=a[i];k++;i++;}
while(j<6)
{ c[k]=b[j];k++;j++;}
for(i=0;i
printf(“d:%d\n”,d);
}
问程序中 a,d 与两个数 num1,num2 的关系是什么?如果 num1=12,num2=8,则运行程
序结束后,a,d 的值是多少?
6、指出下面函数实现的功能
fun(char *sl,char *s2)
{ int i=0;
while(sl[i]= =s2[i]&&s2[i]!='\0') i++;
return(sl[i]= ='\0'&&s2[i]= ='\0');
}
三、程序填空(每题 10 分,共 20 分)
1、下面是一个选择法递增排序的程序,将划线部分补齐
void selectsort(int a[ ], int n)
{
int i, j, loc, temp;
for(i=0;i<
①
;i++)
{loc=i;
for(j=
②
;j