I am a teacher!

导航

计算机等级考试二级C语言模拟试卷(七)

一、选择题(每小题1分,共40分)

1、下列关于循环队列的叙述,正确的是

A.循环队列是队列的一种顺序存储结构

B.循环队列是队列的一种链式存储结构

C.循环队列是非线性结构

D.循环队列是一种逻辑结构

2、下列叙述中,正确的是

A.栈是一种先进先出的线性表

B.队列是一种后进先出的线性表

C.栈和队列都是非线性结构

D.栈和队列都是操作受限的线性结构

3、一棵二叉树共有25个节点,其中5个叶子节点,那么度为1的节点数为

A.4                      B.6                       C.10                       D.16

4、在下列模式中,能够给出数据库物理存储结构与物理存取方法的是

A.内模式              B.外模式              C.概念模式             D.逻辑模式

5、在满足实体完整性约束的条件下

A.一个关系中可以没有候选关键字

B.一个关系中只能有一个候选关键字

C.一个关系中必须有多个候选关键字

D.一个关系中应该有一个或者多个候选关键字

6、有三个关系R、S和T如下:

 

则由关系R和S得到关系T的操作是

A.自然连接          B.并                     C.差                       D.交

7、软件生命周期中的活动不包括

A.软件维护          B.市场调研          C.软件测试             D.需求分析

8、下列不属于需求分析阶段任务的是

A.确定软件系统的功能需求                B.确定软件系统的性能需求

C.制定软件集成测试计划                   D.需求规格说明书审评

9、在黑盒测试方式中,设计测试用例的主要根据是

A.程序外部功能                                  B.程序内部逻辑

C.程序数据结构                                  D.程序流程图

10、在软件设计中不使用的工具是

A.系统结构图                                     B.程序流程图        

C.PAD图                                            D.数据流图(DFD图) 

11、针对简单程序设计,以下叙述的实施步骤正确的是

A.确定算法和数据结构、编码、调试、整理文档

B.编码、确定算法和数据结构、调试、整理文档

C.整理文档、确定算法和数据结构、编码、调试

D.确定算法和数据结构、调试、编码、整理文档

12、下列关于C语言中数的表示的叙述,正确的是

A.只有整型数在允许范围内能精确无误的表示,实型数会有误差

B.只要在允许范围内整型和实型都能精确的表示

C.只有实型数在允许范围内能精确无误的表示,整型数会有误差

D.只有用八进制表示的数才不会有误差

13、下列关于算法的叙述,错误的是

A.算法可以用伪代码、流程图等多种形式来描述

B.一个正确的算法必须有输入

C.一个正确的算法必须有输出

D.用流程图可以描述的算法可以用任何一种计算机高级语言编写成程序代码

14、以下叙述错误的是

A.一个C程序可以包含多个不同名的函数

B.一个C程序只能有一个主函数

C.C程序在书写时,有严格的缩进要求,否则不能编译通过

D.C程序的主函数必须用main作为函数名

15、设有以下语句

char ch1,ch2;   scanf(”%c%c”,&ch1,&ch2);

若要为变量ch1和ch2分别输入字符A和B,正确的输入形式应该是

A.A和B之间用逗号间隔

B.A和B之间不能有任何间隔符

C.A和B之间可以用回车间隔

D.A和B之间用空格间隔

16、下列选项中,非法的字符常量是

A.’\102’                B.’\65’                  C.’\xff’                   D.’\019’

17、有以下程序

#include <stdio.h>

main()

{

int a=0,b=0,c=0;

c=(a-=a-5);    a=b,b+=4;

printf(“%d, %d, %d\n”,a,b,c)

}

程序运行后输出的结果是

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

18、设变量均已正确定义并且赋值,以下与其他三组输出结构不同的一组语句是

A.x++;  printf((“%d\n”,x);               B.n=++x;  printf((“%d\n”,n);

C.++x;  printf((“%d\n”,x);               D.n=x++;  printf((“%d\n”,n);

19、以下选项中,能表示逻辑值“假”的是

A. 0                     B.0.000001           C. 1                        D.100.0

20、有以下程序

#include  <stdio.h>

main()

{    

int a;

scanf(“%d”,&a);

if (a++<9)  printf((“%d\n”,a);

else   printf(“%d\n”,a--);

}

程序运行时键盘输入9<回车>,则输出的结果是

A.8                      B.9                       C.10                       D.11

21、有以下程序

#include <stdio.h>

int  main()

{

    int s=0,n;

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

    { 

              switch(s)

              { case 0:

              case 1:s+=1;

              case 2:s+=2;break;

              case 3:s+=3;

              default:s+=4;

              }

              printf("%d,",s);

    }

    return 0;

}

程序运行后的结果是

A.1,2,4,                B.1,3,6 ,                C.3,6,10,                 D.3,10,14,

22、若k是int类型变量,且有以下for语句

for(k=-1;k<0;k++) printf(“****\n”);

下面关于语句执行情况的叙述中正确的是

A.循环体执行一次                              B.循环体执行两次

C.循环体一次也不执行                        D.构成无限循环

23、有以下程序

#include <stdio.h>

int  main()

{

    char a,b,c;

    b='1';c='A';

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

    {

         if(a%2) putchar(b+a);

        else putchar(c+a);

    }

    return 0;

}

程序运行后输出的结果是

A.123456              B.1B3D5F            C.A2C4E6              D.ABCDEF

24、设有如下定义语句

int m[ ]={2,4,6,8},*k=m;

以下选项中,表达式的值为6的是

A.*(k+2)              B.k+2                   C.*k+2                   D.*k+=2

25、fun函数的功能是:通过键盘输入给x所指的整型数组所有元素赋值。在下列划线处应该填写的是(  )。

#include <stdio.h>

#define N 5

viod fun(int  x[N])

{    int m;

     for(m=N-1;m>=0;m--)  scanf(“%d\n”, ________);

}

A.&x[++m]          B.&x[m+1]           C.x+(m++)              D.x+m

26、若有函数

viod fun(double a[], int *n)

{………}

以下叙述中正确的是

A.形参a和n都是指针变量

B.形参a是一个数组名,n是指针变量

C.调用fun函数时将把double型实参数组元素一一对应地传送给形参a数组

D.调用fun函数时只有数组执行按值传送,其他实参和形参之间执行按地址传送

27、有以下程序

#include <stdio.h>

int  main()

{

    int a,b,k,m,*p1,*p2;

    k=1, m=8;

    p1=&k, p2=&m;

    a=/*p1-m;   b=*p1+*p2+6;

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

    return 0;

}

编译时编译器提示错误信息,你认为出错的语句是

A.a=/*p1-m                                         B.b=*p1+*p2+6

C.k=1,m=8;                                         D.p1=&k,p2=&m;

28、以下选项中有语法错误的是

A.char *str[ ]={ "guest"};                     B.char str[10 ]={ "guest"};

C.char *str[3];  str[1]={ "guest"};         D.char str[3][10];  str[1]={ "guest"};

29、设avg函数的功能是求整型数组中的前n个元素的平均值,设数组元素个数最多不超过

10,则下列函数说明语句错误的是

A.int avg(int *a,int n);                      B.int avg(int a[10],int n);

C.int avg(int a,int n) ;                      D.int avg(int a[],int n);

30、函数strlen(”ATS\n012\1”)的返回值是

A.4                      B.8                       C.9                         D.10

31、有以下程序

#include <stdio.h>

int  main()

{

    char a[20],b[20],c[20];

    scanf("%s%s",a,b);

    gets(c);

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

    return 0;

}

程序运行时从行开始输入 this  is  a  cat!<回车>,则输出结果是

A.thisisacat!          B.thisis  a           C.thisis  a  cat!      D.thisisa  cat!

32、有以下程序

#include <stdio.h>

void fun(char c)

{

       if(c>'x') fun(c-1);

      printf("%c",c);

}

int  main()

{

    fun('z');

    return 0;

}

程序运行输出结果是

A.xyz                   B.wxyz                  C.zyxw                   D.zyx

33、有以下程序

#include <stdio.h>

void func(int n)

{

       int i;

       for (i=0;i<=n;i++) printf("*");

       printf("#");

}

int  main()

{

       func(3); printf("????");

       func(4); printf("\n");

       return 0;

}

程序运行输出结果是

A.****#????***#                                 B.***#????****#

C.**#????*****#                                 D.****#????*****#

34、有以下程序

#include <stdio.h>

void fun(int *s)

{

       static int j=0;

       do {s[j]=s[j]+s[j+1];} while(++j<2);

}

int  main()

{

    int k,a[10]={1,2,3,4,5};

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

    for (k=0;k<5;k++) printf("%d",a[k]);

    printf("\n");

    return 0;

}

程序运行输出结果是

A.12345               B.23445                C.34756                  D.35745

35、有以下程序

#include <stdio.h>

#define S(x) (x)*x*2

int  main()

{

    int k=5,j=2;

    printf("%d,",S(k+j));

    printf("%d\n",S(k-j));

    return 0;

}

程序运行输出结果是

A.39,11                B.39,18                C.98,11                   D.98,18

36、有以下程序

#include <stdio.h>

void exch(int t[])

{    t[0]=t[5];}

int  main()

{

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

    while(i<=4)  { exch(&x[i]);i++; }

    for(i=0;i<5;i++) printf("%d ",x[i]);

    printf("\n");

    return 0;

}

程序运行输出结果是

A.1 2 3 4 5           B.1 3 5 7 9            C.2 4 6 8 10            D.6 7 8 9 10

37、设有以下程序段

struct  MP3

{  char name[20];

char color;

float price;

}std,*ptr;

ptr=& std;

若要引用结构体变量std中的color成员,写法错误的是

A.std.color            B.ptr->color          C.std->color            D.(*ptr) .color

38、有以下程序

#include <stdio.h>

struct stu

{ int mun; char name[10]; int age;};

void fun(struct stu *p)

{  printf("%s\n",p->name); }

int  main()

{

    struct stu x[3]={{01,"zhang",20},{02,"wang",19},{03,"zhao",18}};

    fun(x+2);

    return 0;

}

程序运行输出结果是

A.zhang                B.zhao                  C.wang                   D.19

39、设有int a=12,c; 表达式c=(a<<2)<<1执行后,c的值为

A.2                      B.3                       C.50                       D.96

40、以下函数不能用于向文件写入数据的是

A.ftell                  B.fwrite                C.fputc                   D.fprintf 

二、程序填空题(18分)

下列给定程序中已建立了一个带头结点的单向链表,链表中的各结点按数据域递增有序链接。函数fun的功能是:删除链表中数据域值相同的结点,使之只保留一个。

请在下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。

注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!

试题程序:

#include <stdio.h>
#include<stdlib.h>
#define N 8
typedef  struct list
{  int  data;
   struct list  *next;
} SLIST;
void  fun( SLIST *h)
{  SLIST  *p, *q;
   p=h->next;
   if (p!=NULL)
   {  q=p->next;
      while(q!=NULL)
      {  if (p->data==q->data)
         {  p->next=q->next;
/**********found**********/
            free(___1___);
/**********found**********/
            q=p->___2___;
         }
         else
         { p=q;
/**********found**********/
           q=q->___3___;
         }
      }
   }
}
SLIST *creatlist(int  *a)
{  SLIST  *h,*p,*q;int  i;
   h=p=(SLIST *)malloc(sizeof(SLIST));
   for(i=0; i<N; i++)
   {  q=(SLIST *)malloc(sizeof(SLIST));
      q->data=a[i];  p->next=q;  p=q;
   }
   p->next=0;
   return h;
}
void outlist(SLIST  *h)
{  SLIST  *p;
   p=h->next;
   if (p==NULL)  printf("\nThe list is NULL!\n");
   else
   {  printf("\nHead");
      do { printf("->%d",p->data);  p=p->next;    } while(p!=NULL);
      printf("->End\n");
  }
}
int main( )
{  SLIST  *head;      int  a[N]={1,2,2,3,4,4,4,5};
   head=creatlist(a);
   printf("The list before deleting :\n");  outlist(head);
   fun(head);
   printf("The list after deleting :\n");  outlist(head);
   return 0;
}

三、程序修改题(18分)

下列给定程序中,fun函数的功能是:根据形参m,计算下列公式的值。

t=1+1/2+1/3+1/4+…+1/m

例如,若输入5,则应输出2.283333。

请改正程序中的错误,使它能得出正确的结果。

注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
double fun(int m)
{
  double t=1.0;
  int i;
  for(i=2;i<=m;i++)
/*************found**************/
      t+=1.0/k;
/*************found**************/
  return i;
}
int main()
{int m;
 system("CLS");
 printf("Please enter 1integer number: ");
 scanf("%d",&m);
 printf("The result is %1f\n", fun(m));
 return 0;
}

四、程序设计题(24分)

规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:使字符串的前导*号不得多于n个,若多于n个,则删除多余的*号;若少于或等n个,则不做处理,字符串中间和尾部的*号不删除。

例如,字符串中的内容为:*******A*BC*DEF*G****,若n的值为4,删除后,字符串中的内容应当是:****A*BC*DEF*G****;若n的值为8,则字符串中的内容仍为:*******A*BC*DEF*G****。n的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。

注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

试题程序:

#include <stdio.h>
void  fun( char *a, int  n )
{ 

}
int main()
{  char s[81]; int n; void NONO();
   printf("Enter a string:\n");gets(s);
   printf("Enter n :  ");scanf("%d",&n);
   fun( s,n );
   printf("The string after deleted:\n");puts(s);
   NONO();
   return 0;
}
void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
  FILE *in, *out ;
  int i, n ; char s[81] ;
  in = fopen("in.dat","r") ;
  out = fopen("out.dat","w") ;
  for(i = 0 ; i < 10 ; i++) {
    fscanf(in, "%s", s) ;
    fscanf(in, "%d", &n) ;
    fun(s,n) ;
    fprintf(out, "%s\n", s) ;    
  }
  fclose(in) ;
  fclose(out) ;
}
一、选择题
( 1)~(10)  :ADDAD  CBCAD
(11)~(20) :ABBCB  DBDAC
(21)~(30) :DACAD  BADCB
(31)~(40) :CADDA  DCBDA
二、程序填空题
    (1)q
    (2) next
    (3) next
三、程序改错题
    (1)  t+=1.0/i;
    (2)  return t;
四、程序设计题
       int i=0,k=0;
    char *p,*t;
    p=t=a;
    while (*t=='*')
    { k++; t++; }
    if (k>n)
    {
        while (*p)
        {
            a[i]=*(p+k-n);
            i++;
            p++;
        }
        a[i]='\0';
    }
参考答案:

posted on 2022-11-10 05:58  aTeacher  阅读(955)  评论(0编辑  收藏  举报