(总分96,考试时间90分钟)
一、选择题
下列各题A)、B)、C)、D)4个选项中,只有1个选项是正确的。
1. 有以下程序:
    void sum(int  a[])
      a[0]=a[-1]+a[1];  
    main()
     int a[10]=1,2,3,4,5,6,7,8,9,10;
       sum(&a[2]);
       printf("%d\n",a[2]);
    
    程序运行后的输出结果是(    )。
A. 6         B. 7
C. 5         D. 8
2. 若变量x、y已正确定义并赋值,以下符合C语言语法的表达式是(    )。
A. ++x,y=x--         B. x+1=y
C. x=x+10=x+y         D. double(x)/10
3. 有以下程序段:
    main()
    
      int a=5,*b,**c;
      c=&b;    b=&a;
      ……
    
    程序在执行了“c=&b; b=&a;”语句后,表达式“**c”的值是(    )。
A. 变量a的地址         B. 变量b中的值
C. 变量a中的值         D. 变量b的地址
4. 下列叙述中正确的是(    )。
A. break语句只能用于switch语句
B. 在switch语句中必须使用default
C. break语句必须与switch语句中的case配对使用
D. 在switch语句中,不一定使用break语句
5. 有以下程序:
    #include  <stdio.h>
    int fun(char s[])
     int  n=0;
      while(*s<='9'&&*s>='0')  n=10*n+*s-'0';s++;
      return(n);
    
    main()
     char s[10]='6','1','*','4','*','9','*','0','*';
       printf("%d\n",fun(s));
    
    程序的运行结果是(    )。
A. 9         B. 61490
C. 61         D. 5
6. 有以下程序;
    main()
     char s[]="aaiou",*ps;
      ps=s;   printf("%c\n",*ps+4);
    
    程序运行后的输出结果是(    )。
A. a         B. e
C. u         D. 元素s[4]的地址
7. 数据库技术的根本目标是要解决数据的(    )。
A. 存储问题         B. 共享问题
C. 安全问题         D. 保护问题
8. 有以下程序:
    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
9. 有以下程序:
    #include <stdio.h>
    main()
    
      FILE  *fp;
      int   i,k,n;
       fp=fopen("data.dar","w+");
      for(i=1;i<6;i++)
      
        fprintf(fp,"%d   ",i);
        if(i%3==0)
           fprintf(fp,"\n");
      
      rewind(fp);
      fscanf(fp,"%d%d",&k,&n);    printf("%d%d\n",k,n);
      fclose(fp);
    
    程序运行后的输出结果是(  )。
A. 0 0         B. 123 45
C. 1 4         D. 1 2
10. 以下不能正确计算代数式sin2()值的C语言表达式是(    )。
A. 1/3*sin(1/2)*sin(1/2)
B. sin(0.5)*sin(0.5)/3
C. pow(sin(0.5),2)/3
D. 1/3.0*pow(sin(1.0/2),2)
11. 以下程序的输出结果是(  )。
    main()
     int  a=0,i;
      for(i=1;i<5;i++)
        switch(i)
           casc 0:
            case 3:a+=2;
            case 1:
            case 2:a+=3;
            default:a+=5;
         
      
      printf("%d\n",
A. ;
   &nbsp         12. 有以下程序:
    main()
      char str[]="xyz",*ps=str;
       while(*ps) ps++;
       for(ps--;ps-str>=0;ps--)  puts(ps);
    
    执行后输出结果是(    )。
A. yz
    xyZ
B. z
    yz
C. z
    yz
D. x
    xy
    xyz    xyz
13. 下列叙述中正确的是(    )。
A. 在面向对象的程序设计中,各个对象之间具有密切的联系
B. 在面向对象的程序设计中,各个对象都是公用的
C. 在面向对象的程序设计中,各个对象之间相对独立,相互依赖性小
D. 上述3种说法都不对
14. 若有以下函数首部:
    int fun(double x[10],int  *n)
    则下面针对此函数的函数声明语句中正确的是(    )。
A. int fun(double x, int *n);
B. int fun(double, int);
C. int fun(double *x, int n);
D. int fun(double*, int*);
15. 以下程序中,while循环的循环次数是(  )。
    main()
    
      int i=0;
      while(i<10)
      
        if(i<1) continue;
        if(i==5) break;
        i++;
      
      ……
    
A. 1         B. 10
C. 6         D. 死循环,不能确定次数
16. 可在C程序中用作用户标识符的一组标识符是(    )。
A. and
    _2007
B. Date
    y-m-d
C. Hi
    Dr.Tom
D. case
    Bigl
17. 在关系数据库中,用来表示实体之间联系的是(    )。
A. 树结构         B. 网结构
C. 线性表         D. 二维表
18. 有以下程序段:
    int k=0,a=1,b=2,c=3;
    k=a<b ? b:a;   k=k>c ? c:k;
    执行该程序段后,k的值是(    )。
A. 3         B. 2
C. 1         D. 0
19. 有定义语句:“int x,y;”,若要通过“scanf("%d,%d",&x,&y);”语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,错误的是(    )。
A. 11 12<回车>         B. 11, 12<回车>
C. 11,12<回车>         D. 11,<回车>
    12<回车>
20. 有以下程序:
    main()
     int c=35; printf("%d\n",c&c);
    程序运行后的输出结果是(    )。
A. 0         B. 70
C. 35         D. 1
21. 设有定义语句:char  c1=92,c2=92;,则以下表达式中值为零的是(    )。
A. c1^c2         B. c1&c2
C. ~c2         D. c1|c2
22. 有以下程序:
    main()
     int   y=10;
      while(y--);  printf("y=%d\n",y);
    
    程序执行后的输出结果是(    )。
A. y=0         B. y=-1
C. y=1         D. while构成无限循环
23. 有以下程序:
    #include <stdio.h>
    main()
      FILE *fp;  int i,k=0, n=0;
       fp=fopen("d1.dat","w");
       for(i=1;i<4;i++)    fprintf(fp,"%d",i);
       fclose(fp);
       fp=fopen("d1.dat","r");
       fscanf(fp,"%d%d",&k,&n);    printf("%d%d\n",k,n);
       fclose(fp);
    
    执行后输出结果是(  )。
A. 1 2         B. 123 0
C. 1 23         D. 0 0
24. 有以下程序:
    point(char *p)     p+=3;  
    main()
      char b[4]='a','b','c','d', *p=b;
       point(p);
       printf("%c\n",*p);
    
    程序运行后的输出结果是(    )。
A. a         B. b
C. c         D. d
25. 以下选项中非法的表达式是(    )。
A. 0<=x<100         B. i=j==0
C. (char)(65+3)         D. x+1=x+1
26. 设有如下3个关系表:
    
    下列操作中正确的是(    )。

27. 有以下程序:
    void sort(int a[], int n)
    int i,j,t;
      for(i=0;i<n-1;i++)
         for(j=i+1;j<n;j++)
            if(a[i]<a[j])
            
               t=a[i];
               a[i]=a[j];
               a[j]=t;
            
    
    main()
     int aa[10]=1,2,3,4,5,6,7,8,9,10,i;
       sort(aa+2,5);
       for(i=0;i<10;i++)printf("%d,",aa[i]);
       printf("\n");
    
    程序运行后的输出结果是(    )。
A. 1,2,3,4,5,6,7,8,9,10,
B. 1,2,7,6,3,4,5,8,9,10,
C. 1,2,7,6,5,4,3,8,9,10,
D. 1,2,9,8,7,6,5,4,3,10,
28. 以下叙述中错误的是(    )。
A. C程序必须由一个或一个以上的函数组成
B. 函数调用可以作为一个独立的语句存在
C. 若函数有返回值,必须通过咖语句返回
D. 函数形参的值也可以传回给对应的实参
29. 下面程序的功能是输出以下形式的金字塔图案:
                  *
                 ***
                *****
               *******
    main()
    int  i,j;
       for(i=1;i<=4;i++)
         for(j=1;j<=4-i;j++)printf(" ");
          for(j=1;j<=(  );j++)printf("*");
          printf("\n");
       
    
    在下划线处应填入的是(    )。
A. i         B. 2*1-1
C. 2*i+1         D. i+2
30. 有定义语句:int  b;char  c[10];,则正确的输入语句是(    )。
A. scanf("%d%s",&b,&c);
B. scanf("%d%s",&b,c);
C. scanf("%d%s",b,c);
D. scanf("%d%s",b,&c);
31. 已有定义:char a[]="xyz",b[]='x','y','z';,以下叙述中正确的是(    )。
A. 数组a和b的长度相同         B. a数组长度小于b数组长度
C. a数组长度大于b数组长度         D. 以述说法都不对
32. 一棵二叉树中共有70个叶子结点与80个度为1的结点,则该二叉树中的总结点数为(    )。
A. 221         B. 219
C. 231         D. 229
33. 程序中已构成如下图所示的不带头结点的单向链表结构,指针变量s、p、q均已正确定义,并用于指向链表结点,指针变量s总是作为头指针指向链表的第一个结点。
    
    若有以下程序段:
    q=s;   s=s->next;   p=s;
    while (p->next)  p=p->next;
    p->next=q;    q->next=NULL;
    该程序段实现的功能是(    )。

34. 在结构化程序设计中,模块划分的原则是(    )。
A. 各模块应包括尽量多的功能         B. 各模块的规模应尽量大
C. 各模块之间的联系应尽量紧密         D. 模块内具有高内聚度、模块间具有低耦合度
35. 设有定义:int a=2,b=3,c=4;,则以下选项中值为0的表达式是(    )。
A. (!a==1)&&(!b==0)         B. (a<b)&&!c||1
C. a&&b         D. a||(b+b)&&(c-
36. 有以下程序:
    #include     <stdio.h>
    main()
     int  a=1,b=2,c=3,x;
       x=(a^b)&c;   printf("%d\n",x);
    
    程序的运行结果是(    )。
A. 0         B. 1
C. 2         D. 3
37. 有以下程序:
    main()
    
      char a1='M',a2='m';
      printf("%c\n",(a1,a2));
    
    以下叙述中正确的是(    )。
A. 程序输出大写字母M         B. 程序输出小写字母m
C. 格式说明符不足,编译出错         D. 程序运行时产生出错信息
38. 有以下程序:
    #include    <string.h>
    main()
    
      char str[][20]="Hello","beijing",*p=str;
      ptintf("%\n",strlen(p+20));
    
    程序运行后的输出结果是(    )。
A. 0         B. 5
C. 7         D. 20
39. 有以下计算公式:
    
    若程序前面已在命令行中包含math.h文件,不能够正确计算上述公式的程序段是(    )。

40. 若整型变量a、b、c、d中的值依次为:1、4、3、2。则条件表达式a<b?a:c<d?c:d的值是(    )。
A. 1         B. 2
C. 3         D. 4
41. 下面选项中不属于面向对象程序设计特征的是(    )。
A. 继承性         B. 多态性
C. 类比性         D. 封装性
42. 若有一些定义和语句:
     #include    <stdio.h>
     int  a=4,b=3,*p,*q,*w;
     p=&a;  q=&b;  w=q;  q=NULL;
    则以下选项中错误的语句是(    )。
A. *q=0;         B. w=p;
C. *p=a;         D. *p=*w;
43. 以下不能定义为用户标识符的是(    )。
A. scanf         B. Void
C. _3com_         D. int
44. 以下叙述中正确的是(    )。
A. 构成C程序的基本单位是函数
B. 可以在一个函数中定义另一个函数
C. main()函数必须放在其他函数之前
D. 所有被调用的函数一定要在调用之前进行定义
45. 以下数组定义中错误的是(    )。
A. int x[][3]=0;
B. int x[2][3]=1,2,3,4,5,6;
C. int x[][3]=1,2,3,4,5,6;
D. int x[2][3]=(1,2,3,4,5,6;
46. 以下程序调用fmdmax函数返回数组中的量大值:
    findmax(int *a,int n)
      int *p,*s;
       for(p=a,s=a;p-a<n;p++)
          if(      )s=p;
       return(*s);
    
    main()
     int  x[5]=12,21,13,6,18;
      printf("%d\n",findmax(x,5));
    
    在下划线处应填入的是(  )。
A. p>s         B. *p>*s
C. a[p]>a[s]         D. p-a>p-s
47. 有以下程序;
      void f(int  *x,int  *y)
        int  t;
         t=*x; *x=*y; *y=t;
      
      main()
        int  a[8]=1,2,3,4,5,6,7,8,i,*p,*q;
         p=a; q=&a[7];
         while (p>q)
           f(p,q);p++; q--;  
         for(i=0;i<8; i++) printf("%d,",a[i]);
      
    程序运行后的输出结果是(    )。
A. 8,2,3,4,5,6,7,1,
B. 5,6,7,8,1,2,3,4,
C. 1,2,3,4,5,6,7,8,
D. 8,7,6,5,4,3,2,1,
48. 下列叙述中错误的是(    )。
A. 在数据库系统中,数据的物理结构必须与逻辑结构一致
B. 数据库技术的根本目标是要解决数据的共享问题
C. 数据库设计是指在已有数据库管理系统的基础上建立数据库
D. 数据库系统需要操作系统的支持
49. 某二叉树中有n个度为2的结点,则该二叉树中的叶子结点数为(    )。
A. n+1         B. n-1
C. 2n         D. n/2
50. 下列选项中不属于结构化程序设计方法的是(    )。
A. 自顶向下         B. 逐步求精
C. 模块化         D. 可复用
二、填空题
1. 设一棵完全二叉树共有700个结点,则在该二叉树中有  【1】  个叶子结点。
2. 在面向对象方法中,  【2】  描述的是具有相似属性与操作的一组对象。
3. 诊断和改正程序中错误的工作通常称为  【3】  。
4. 对下列二叉树进行中序遍历的结果为  【4】  。
    

5. 在结构化分析使用的数据流图(DFD)中,利用  【5】  对其中的图形元素进行确切解释。
6. 执行以下程序后的输出结果是  【6】  。
    main()
     int a=10;
      a=(3*5,a+4);   printf("a=%d\n",a);
    
7. 以下程序运行后的输出结果是  【7】  。
    main()
     int m=011,n=11;
       printf("%d  %d\n",++m,n++);
    
8. 有以下程序:
    main()
     int t=1,i=5;
        for(; i>=0;i--)  t*=i;
        printf("%d\n",t);
    
    执行后输出结果是  【8】  。
9. 以下程序的运行结果是  【9】  。
    main()
     int a=2,b=7,c=5;
      switch(a>0)
      
      case 1:
        switch (b<0)
         case 1:printf("@"); break;
          case 2:pnntf("!"); break;
        
      case 0:
        switch (c==5)
         case 0:pnntf("*"); break;
          case 1:printf("#"); break;
          case 2:printf("$"); break;
        
      default: printf("&");
      
      printf("\n");
    
有以下程序段,且变量已正确定义和赋值。
         for(s=1.0, k=1; k<=n;k++)  s=s+1.0/(k*(k/1));
         printf("s=%f\n\",s);
     请填空,使下面程序段的功能与之完全相同。
         s=1.0; k=1;
         while(  【10】  )    s=s+1.0/(k*(k+1));   【11】  ;  
         printf("s-=%f\n\n",s);
10. 以下程序的输出结果是  【12】  。
    #include  <stdio.h>
    main()
      int  i;
       for(i-'a'; i<'f'; i++,i++)  printf("%c",i-'a'+'A');
       printf("\n");
    
11. 函数YangHui的功能是把杨辉三角形的数据赋给二维数组的下半三角,形式如下:
    1
    1 1
    1 2 1
    1 3 3 1
    1 4 6 4 1
    其构成规律是:
    ①第0列元素和主对角线元素均为1。
    ②其余元素为其左上方和正上方元素之和。
    ③数据的个数每行递增1。
    请将程序补充完整。
    #define    N    6
    void  yanghui(int  x[N][N])
      int  i,j;
       x[O][0]=1;
       for(i=1;i<N;i++)
          x[i][0]=  【13】  =1;
           for(j=1;j<i;j++)
               x[i][j]=  【14】  ;
       
    )
12. 以下sstrcpy()函数实现字符串复制,即将t所指字符串复制到s所指向内存空间中,形成一个新的字符串s。请填空。
    void sstrcpy(char *s,char *t)
     while(*s++=  【15】  );
    main()
      char str1[100],str2[]="abcdefgh";
       sstrcpy(str1,str2);
       printf("%s\n",str1);
    
13. 请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。
      【16】  (double,double);
    main()
      double x,y;
       scanf("%1f%1f",&x,&y);
       printf("%1f\n",max(x,y));
    
    double max(double a,double B) 
      return(a>b ? a:b);
14. 以下程序的功能是输入任意整数给n后,输出n行由大写字母A开始构成的三角形字符阵列图形。例如,输入整数5时(注意:n不得大于10),程序运行结果如下:
              ABCDE
              FGHI
              JKL
              MN
              O
    请填空完成该程序。
              main()
               int i,j,n;   char  ch='A';
                 scanf("%d",&n);
                 if(n<11)
                  for(i=1;i<=n;i++)
                     for(j=1;j<=n-i+1;j++)
                          printf("%2c",ch);
                             【17】  ;
                       
                         【18】  ;
                    
                 
                 else printf("n is too large!\n")
                 printf("\n"0);
              
设有说明;
    struct DATE int year; int month; int day;
    请写出一条定义语句,该语句定义d为上述结构体类型变量,并同时为其成员year、month、day依次赋初值2006、10、1:  【19】  。
15. 以下程序的功能是将宁符串s中的数字字符放入d数组中,最后输出d中的字符串。例如,输入字符串:abcl23edf4568h,执行程序后输出:123456。请填空。
    #include  <stdio.h>
    #include  <ctype.h>
    main()
      char  s[80],d[80];   int i,j;
       gets(s);
       for(i=j=0;s[i]!='\0';i++)
         if(  【20】  )  d[j]=s[i];j++;
       d[j]='\0';
       puts(d);
    

02-04 04:04