研究生招生

计算机程序设计考试样题

发布日期:2021-09-29

计算机程序设计考研样题

发布日期:2021-09-20

 北京石油化工学院

全日制硕士研究生入学样题

考试科目:计算机程序设计   满分:150分   考试时间:3小时

 注意事项:

(1) 答案用钢笔或圆珠笔写在答题纸上,写在本试题纸上的答案一律无效。

(2)不用抄题,按下述格式注明答题顺序号、填写试题答案:

例如:一(题号)

1、(题号)  (答案)

  (答案)


 

 

 

 

 

 

一、单项选择题(每小题140题共40)

1.  程序编译链接后显示" 0 error,0 warning" 代表(   

A. 程序中没有语法错误           B. 程序是正确的

C. 程序是不正确的               D. 程序中有语义错误

2.  若变量aint类型,并执行了语句:a='A'+1.6;,则正确的叙述是(   

A. 不允许字符型和浮点型相加      B.  a的值是字符型

C.  a的值是浮点型               D.  a的值还是整型

3. 下列选项中,合法的C语言标识符是(   

A. _a1       B. b!      C. %a     D. 123abc

4. 设有语句“int a = 3;”,执行语句“a += a -= a * a;”后,变量a的值是(   

A. -12     B. 9    C. 0    D. 3

5. 十进制3位数整数x,下面哪条语句能正确分离出它的十位上的数字d?    

A. d=x;     B. d=(x-x)/10;    C. d=(x-(x/100)*100)/10;    D. d=x0;

6. 程序运行后的输出结果是(   

#include <stdio.h>

void main(){ int m=3,n=4,x;x=m++; ++n; x=x+8/n; printf("%d,%d\n",x,m);}

A. 4,4        B. 4,3        C. 5,4       D. 5,3

7. 若以下选项中的变量已正确定义,则正确的赋值语句是(   

A. 1+2=x2;      B. x3=x2=x1=0;     C. x4=1+2=3;        D. x1=26.8%3;

8. 给出程序的运行结果, 程序运行时从键盘输入: 1<空格>2<回车>   

#include <stdio.h>

void main(){  char a,b;  int s;

  printf("please input a and b:\n");

  a=getchar();  b=getchar();  s=a+b;

  printf("a=%c,b=%c",a,b);

}

A. 输出乱码       B. a=1,b=2       C. a=1,b=        D. a= ,b=2

9. 若运行以上程序时从键盘上输入:6565,66<回车>。则输出结果是(   

#include <stdio.h>

void main(){  int a,b,c,d;

    scanf("%c%c%d,%d",&a,&b,&c,&d);

    printf("%c,%c,%c,%c\n",a,b,c,d);

}

A. 6,5,65,66        B. 6,5,6,6       C. 6,5,6,5      D. 6,5,A,B

10. 以下程序的运行结果是(   

include <stdio.h>

void main() {

    int  a = 12, b = 3;   float  x = 18.5, y = 4.5;

    printf("%f\n", (float)(a * b) / 2);

    printf("%d\n", (int)x %(int)y);

}

A. 18            B. 18.000000        C. 18.000000         D. 18

2.000000         2.000000            2                    2

11. 在下面的条件语句中(其中s1s2表示是C语言的语句),只有一个在功能上与其它三个语句不等价,它是(    )。

    Aif (a)   s1 ;  else  s2;             B. if (a= =0)  s2;  else  s1;

C. if (a!=0)  s1;  else  s2;            D. if (a= =0)  s1;  else  s2;

12. 假定所有变量均已正确定义,则下列程序段运行后x的值是     )。

  a=b=c=0; x=35;

    if(!a) x--; else if(b); if(c) x=3; else x=4;

A34        B4         C35         D3

13. C语言中用(    )表示逻辑

A true         B.整数值1        C.非零整数值        D false

14、判断char型变量c1是否为大写字母的表达式为     )。

    A’A’<=c1<=’Z’                B(c1>=’A’) & (c1<=’Z’)    

C(’A’<=c1)AND (‘Z’>=c1)      D(c1>=’A’)&& (c1<=’’Z’)

15. 下面循环执行(    )次。

  int a=1,x=1;

while(a<10) x++; a++;  

A.无限次     B.不确定次    C10次      D9

16. ijint类型,则以下程序段中的语句内 printf(“*”); 执行次数是(   

for(i=5;i>1;i--)

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

     { printf(“*”); }

A5         B4        C20        D16

17.要求以下程序的功能是计算:s=1+1/2+1/3+...+1/10

    main()  {  int n; float s=1.0;

   for(n=10;n>1;n--)

   s=s+1/n;

   printf("%6.4f\n",s);   }

   程序运行后输出结果错误,导致错误结果的程序运行是(    )。

As=1.0;Bfor(n=10;n>1;n--);

Cs=s+1/n;Dprintf("%6.4f\n",s);

18.若有如下程序段,其中s,a,b,c均已定义为整型变量,且a,c 均已赋值(c大于0

   s=a;

   for(b=1;b<=c;b++) s=s+1;

则上述程序段功能等价的赋值语句是(    )。

As=a+b;Bs=a+c;Cs=s+c;Ds=b+c;

19.以下能正确定义一维数组的选项是(    )。

Aint num[];   B#define N 100    Cint num[0..100];   Dint N=100;

int num[N];                            int num[N];

20.已知int型变量占用4个字节的内存空间,则以下程序执行后输出结果是(    )。

main( )

{  int a[]={0,1,2},b[5]={0,1,2};

        printf("%d%d\n",sizeof(a),sizeof(b));

}  

A4  4 B12  12 C12  20 D20  20

21.下面程序段的输出结果是:    

int i,x[3][3]={1,2,3,4,5,6,7,8,9};

for (i=0;i<3;i++)

printf("%d ",x[i][2-i]);

A1 5 9        B1 4 7       C3 5 7       D3 6 9

22. 下面初始化与此初始化charc[ ]=I am happy”;等价的是(   

Achar c[ ]={‘I’,’ ’,’a’,’m’,’ ’,’h’,’a’,’p’,’p’,’y’,’\0’};    

Bchar c[ ]={‘I’,’am’,’happy’};

Cchar c[ ]={‘I’, ’’,’a’,’m’,’’,’h’,’a’,’p’,’p’,’y’};       

Dchar c[ ]={‘I’,’am’,’happy’,’\0’};

23. 以下函数返回值的类型是(   

    fun(float x)

{  float y;  y=3*x-4;   return y;  }

Afloat     Bint     Cvoid    D.任意类型

24. 对于一个正常运行和正常退出的C程序,以下叙述正确的是(   

    A.程序从main()函数第一条可执行语句开始执行,在main()函数中结束

B.程序的执行总是从程序的第一个函数开始,在main()函数结束

C.程序的执行总是从main()开始,在最后一个函数中结束

D.从程序的第一个函数开始,在程序的最后一个函数中结束

25. 以下不正确的描述是(   

A.在函数外部定义的变量是全局变量     B.在函数内部定义的变量是局部变量

    C.函数的形参是局部变量               D.局部变量不能与全局变量同名

26. 如下程序的输出结果是(   

int func(int a,int b){   return(a+b); }

main(){   int   x=2,y=x,z=8,r;

r=func(func(x,y),func(y,z));

printf(“%d\n”,r);   }

A12              B13              C14            D15

27.  int  *p,a=10,b=0;  p=&a;  a=*p+b;  执行该程序段后,a的值为(   

A.编译出错     B10           C11            D12

28. 指针变量p指向整型数组a[10], p=a ; 下列能正确表示数组元素a[i]的是(  

Ap+i    B&( a+i)    C*(a+i)    D*(p+i*2)

29. 对以下说明语句,后面的叙述不正确的是(   

    struct  date

      { int year;  int month;   int day;  }brithday;     

Astruct是声明结构体类型时用的关键字   

Bstruct date 是用户定义的结构体类型名

Cbrithday是用户定义的结构体类型名     

Dyear,day 都是结构体成员名

30. 以下对结构变量stu1中成员age的非法引用是(    )。

struct student

{ int age;int num;}stu1,*p;

p=&stu1;

Astu1.age   Bstudent.age   Cp->age    D(*p).age

31. 下面程序段的时间复杂度是(     )。

Int i=0; Int s=0;

while(s<n)

++ i

s+=i;

}

A. O(n)    B. O(n2)   C. O(log2n)   D. O(n3)

32. 计算机内数据有链式和顺序两种存储方式, 在存储空间使用的灵活性上顺序存储比链式存储要(     )。

A.低  B.C.相同D.不好说

33. 线性表的顺序存储结构是一种(     )的存储结构。

A.顺序存取B.随机存取         C.索引存取D.散列存取

34. 单链表中,在结点p之后插入结点s的操作是(     )。

A.p.next=s; s.next=p.next;  

B.s.next=p.next;   p.next=p.next.next;

C.s.next=p.next; p.next=s;

D.s.next=p; p.next=s;

35. 计算机中的算法必须具备输入、输出、(     )等5个特性。

A. 可执行性、可移植性和可扩充性

B. 可执行性、有穷性和确定性

C. 确定性、有穷性和稳定性   

D. 易读性、稳定性和确定性

36. 线性表采用链式存储时,结点的存储地址(      )。

A. 必须是连续的

B. 必须是不连续的

C. 连续与否均可   

D. 和头结点的存储地址相连续

37. 一个顺序表的第一个元素的存储地址是90,每个元素的长度为2,则第6个元素的存储地址是(     )。

A98      B.100      C.102      D.106

38. 一个栈的输入序列为:abcde,则栈的不可能输出的序列是(    )。

A. a,b,c,d,e             B. d,e,c,b,a  

C. d,c,e,a,b            D. e,d,c,b,a

39. 某铁路调度站(栈)中有五节车厢以12345编号,车厢顺序进入铁路调度站(栈),可以得到(     )的编组。

A. 34512

B. 24135

C. 35421

D. 13524

40. 依次在初始为空的队列中插入元素1234以后,然后紧接着做两次删除操作,此时的队头元素是(      )。

A. 1 B. 2    C. 3    D. 4

 

 

二、阅读程序,写出运行结果。(每小题3分,共42分)

1.

void main(){

int a=0,b=1,c=0,d=20;

if(a) 

d=d-10;

else

if(!b)

if(!c)

d=15;

else

d=25;

printf("d=%d\n",d);

}

运行结果为:

 

2. 

void main( )

{  int a=1,b=0;

   scanf(“%d”,&a);

switch(a)

{  case 1: b=1;break;

case 2: b=2;break;

default : b=10;

}

printf("%d", b);

}

若键盘输入5,运行结果为:

 

 

3.

void  main() {

int i;

printf("\n");

for(i=0;i<6;i++)

{ printf("%d",i);

if (i%2==0)

printf("\n");

}

}

运行结果为:

 

 

4.                                    

void main( )

{  int i,k,a[10],p[3];

k=5;

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

for(i=0;i<3;i++)  p[i]=a[i*(i+1)];

for(i=0;i<3;i++)  k+=p[i]*2;

printf("%d\n",k);

}

运行结果为:

 

 

5

void main()

{  int k=0; char c='A';

do {  switch(c)

{ case 'A': k++;break;

case 'B': k--;

case 'C': k+=2;break;

case 'D': k=k%2;continue;

case 'E': k=k+10;break;

default: k=k/3;

}

c++,k++; }while(c<'C') ;

printf("k=%d\n",k);

}

运行结果为:

 

6.

p( char s[] ) ;

main()   

{  char s[]="aBcdEfG";

    p(s);

    printf("s[]=%s\n",s);

}

p( char s[] ) 

{  int i;

for(i=0;s[i]!='\0';i++)

if(s[i]<='A'+26)

s[i]=s[i]+32;

}

运行结果为:

 

 

 

7.

void main()

{char a[4][4]={' '};

int i,j;

for(i=0;i<4;i++){

a[i][0]=a[i][3]='#';

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

  {a[0][j]=a[3][j]='#';

    if((i!=0)&&(i!=3))  a[i][j]='o';

} }

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

{for(j=0;j<4;j++)

printf(",",a[i][j]);

printf("\n");

} }

程序的运行结果是:

 

 

8.

int  fun(int m,int n)

{  static s=1;

  s++;

return(s*(m+n));

}

main( )

{  int a=0,b=1;

printf("%d,",fun(a,b));

   printf("%d,",fun(a,b));

}  

运行结果为:

 

 

9.

main()

{ static int a[ ] ={2,5,7};

  int s,k,*p=NULL;

  s=1; p=a;

  for (k=0;k<3;k++)  s*=*(p+k);

  printf("%d\n",s);

}

运行结果为:

 

 

10.

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);

}

运行结果是:

 

 

11. 阅读算法f2,设顺序存储线性表元素为

整型L=(3,7,3,2,1,1,8,7,3)写出执行算法f2后

的线性表L的数据元素,并描述该算法的功能。

void f2(SeqList *L){ 

int i,j,k=0;

for(i=0;i<L->length;i++){ 

for(j=0;j<k&&L->data[i]!=L->data[j];j++);

  if(j==k){

if(k!=i)L->data[k]=L->data[i];

   k++;

    }

}

L->length=k;

}

 

 

12.

int MyList(head){

node *head;

int n=0;

node *p;

p=head;

while(p!=NULL)

{ p=p->next;

S1:    n++;

}

return(n);

}

1)说明该算法的功能;

2)给出语句S1的频度。

 

 

 

13.

(栈的元素类型Selemtype 为char,

队列中的元素类型Qelemtype为char)

void  main(  ){

    Stack   S;

    char    x, y;

    InitStack ( S );

    x = ‘c’;  y = ‘k’;

    Push( S , x); Push ( S, ‘a’ );  Push( S, y);

    Pop( S, x); Push( S, ‘t’); Push ( S, x);

    Pop( S, x); Push ( S, ‘s’);

    while (!Empty ( S ))

{Pop( S, y);  printf(y); };

    printf(x);

}

写出程序的运行结果:

 

 

14.

void  print(int  w){  

int  i;

  if ( w!=0) {    

print(w-1);

    for(i=1;i<=w;++i)

        printf(“=,”,w);

    printf(“\n”);

   }

}

 

写出程序的运行结果:

 

 

三、在划线处填写适当的表达式或语句,使程序完整并符合题目要求(每空2分,共20分)

 

1. 下面是判断一个数是否为素数的函数

# include <math.h>

int IsPrime (                     )

{ int  i;

if (number <= 1 ) return 0 ;

if (number == 2 ) return 1 ;

for (i=2; i<sqrt(number); i++)

       if (                      )

    return 0;

    return 1;

}

 

2. 从键盘输入10名学生的成绩数据,按成绩从高到低的顺序排列并输出。

#include<stdio.h>

main(){

int a[10];

 int i,j,temp;

 printf("Input scores:\n");

   for(i=0;i<10;i++)

                         

for(i=0;i<9;i++)

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

if(                )

                                    }

for(i=0;i<10;i++)

      printf("%d,",a[i]);

}

 

3. 函数GetElem实现返回单链表的第i个元素,请在空格处将算法补充完整。

int GetElem(LinkList L,int i,Elemtype *e){

LinkList p;int j;

p=L->next;j=1;

while(p&&j<i){

                        ;

++j;

}

if(!p||j>i)  return ERROR;

*e=                     ;

return OK;

}

 

4. 已知栈的基本操作函数:

int InitStack(SqStack *S); //构造空栈

int StackEmpty(SqStack *S);//判断栈空

int Push(SqStack *S,ElemType e);//入栈

int Pop(SqStack *S,ElemType *e);//出栈

函数conversion实现十进制数转换为二进制数,请将空格处的内容补充完整。

void conversion(){

InitStack(S);

scanf(“%d”,&N);

while(N){

                        ;

N=N/2;

}

while(                         ) {

Pop(S,&e);

printf(“%d”,e);

}}//conversion

 

5. 已知函数为出栈函数,请补全空格处的内容。

status Pop(SqStack &S,SElemType &e){

       if(S.top==S.base) return ERROR;

                               

    return OK;

}//Pop

 

 

四、编程题8分,48分)

评分标准:

(1) 对于程序中出现的语法错误,每错一处扣0.5分,最多不得超过3分。

(2) 变量数据类型定义准确,编程思路清晰,算法设计合理,程序结构完整,输入输出语句格式正确,完全实现了题目的要求,程序书写规范,给满分。

(3) 算法设计合理,但程序中出现有逻辑错误,给70%得分。

(4) 没有明确的编程思路,基本上没有实现题目的要求,给1-2分。

(5) 最低得分为0分。

 

1. 公司根据销售额发放提成,销售额[0,10000),提成10%;销售额[10000,20000),高于10000元部分提成7.5%;销售额[20000,40000),高于20000元部分提成5%;销售额[40000,60000),高于40000元部分提成3%;销售额[60000,100000),高于60000元部分提成1.5%;销售额高于100000元时,超出部分提成1%。编程,输入销售额,计算提成。

 

2. 输出所有的水仙花数,所谓“水仙花”数是指一个3位数,其各位数字立方和等于该数本身。

 

3. 从键盘中任意输入10 个整型数据存到数组a 中,编程求出a 中相邻两元素之和,并将这些和存在数组b 中,按每行5 个元素的形式输。

 

4. 输入学生的学号及语文、数学、英语成绩,按平均成绩升序输出学生各科成绩信息及平均成绩。

 

5.编写一个字符串删除函数 void strdel(char* str,char delch),其功能从字符串str中删除指定字符delch

 

6. 已知有序数组 int a[ ]={0,8,12,13,15,18,22,23,28,31,56,60,62,63,65,68,77,101,123,156}; 输入1个数,用二分法查找返回该数在数组中的位置,如果该数不在数组中,返回-1