(总分101,考试时间90分钟)
一、选择题
1. 设有如下关系表:
    
    A) T=R∩S    B) T=R∪S    C) T=R×S    D) T=R/S

2. 在一棵二叉树中,叶子结点共有30个,度为1的结点共有40个,则该二叉树中的总结点数共有(    )个。
    A) 89    B) 93    C) 99    D) 100
3. 某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为      。(假设根结点在第1层)
    A) 3    B) 4    C) 6    D) 7
4. 内聚性是对模块功能强度的衡量,下列选项中,内聚性较弱的是(    )。 
    A) 顺序内聚    B) 偶然内聚    C) 时间内聚    D) 逻辑内聚
5. 计算机网络的主要特点是      。
    A) 运算速度快    B) 运算精度高    C) 资源共享    D) 人机交互
6. 应用数据库的主要目的是(    )。
    A) 解决数据保密问题    B) 解决数据完整性问题
    C) 解决数据共享问题    D) 解决数据量大的问题
7. 程序中若有如下说明和定义语句:
    char fun(char *);
    main()
    char * s="one", a[5]=0,(* f1)()=fun,ch;
        ┆
    
    以下选项中对函数fun的正确调用语句是(    )。
    A) (* f1)(a);    B) * f1(* s);    C) fun(&a);    D) ch=* f1(s)
8. 阅读以下程序:
    #include<stdio.h>
    main()
     int case;float printF;
      printf("请输入2个数:");
      scanf("%d%f",&case,&printF);
      printf("%d%f\n",case,printF);
    
    该程序在编译时产生错误,其出错原因是(    )。
    A.定义语句出错,case是关键字,不能用做用户自定义标识符
    B.定义语句出错,printF不能用作用户自定义标识符
    C.定义语句无错,scanf不能作为输入函数使用
    D.定义语句无错,printf不能输出case的值
9. 下列程序的运行结果是(    )。
    inty=5,x=14;
    y=((x=3*y,x+1),x-1;
    printf("x=%d,y=%d",x,y);
    A) x=27,y=27    B) x=12,y=13
    C) x=15,y=14    D) x=y=27
10. 若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是
    A) 函数的实参和其对应的形参共占同一存储单元    B) 形参只是形式上的存在,不占用具体存储单元
    C) 同名的实参和形参占同一存储单元    D) 函数的形参和实参分别占用不同的存储单元
11. 设int x=2,y=1;表达式(!x||y--)的值是(    )。
    A.0    B.1    C.2    D.-1
12. 在Visual FoxPro中,“表”通常是指      。
    A) 表单    B) 报表    C) 关系数据库中的关系D) 以上都不对
13. 若有代数式,(其中P仅代表自然对数的底数,不是变量),则下列能够正确表示该代数式的C语言表达式是(    )。 
    A) sqrt(abs(n^x+e^x))    B) sqrt(fabs(pow(n,x)+pow(x,e))) 
    C) sqrt(fabs(pow(n,x)+exp(x)))    D) sqrt(fabs(pow(x,n)+exp(x)))
14. 若变量已正确说明为float类型,要通过语句scanf("%f %f %f", &a, &b, &c);给a赋于19.0,b赋予22.0,c赋予33.0,不正确的输入形式是      。
    A) 10<回车>
    22<回车>
    33<回车>
    B) 19.0, 22.0, 33.0<回车>
    C) 19.0<回车>
    22.0 33.0<同车>
    D) 10 22<回车>
    33<回车>
15. 下面的for语句的循环次数为(    )。 
    A) 是无限循环    B) 循环次数不定  C) 最多执行6次  D) 最多执行5次
16. 已定义以下函数:
    fun(char*p2,char*p1)
      while((*p2=*p1)!='\0')p1++;p2++
    函数的功能是       。
    A) 将p1所指字符串复制到p2所指内存空间
    B) 将p1所指字符串的地址赋给指针p2
    C) 对p1和p2两个指针所指字符串进行比较
    D) 检查p1和p2两个指针所指字符串中是否有'\0'
17. 设已有定义:float x; 则以下对指针变量p进行定义且赋初值的语句中正确的是      。
(A) float *p=1024;
(B) int *p=(float)x;
(C) float p=&x;
(D) float *p=&x;
18. 以下程序运行后的输出结果是
    #include
    void fun(int P)
     int d=2;
     P=d++; printf("%d", P);
     main()
     int a=1;
     fun(a); printf("%d\n', a);
    
    A) 32    B) 12    C) 21    D) 22
19. 以下正确的函数头定义形式是
    A) double fun(int x,int y)    B) double fun(int x;int y)
    C) double fun(int x,int y);D) double fun(int x,y);
若有以下定义和语句:
    double r=99,*p=&r;*p=r;
    则以下正确的叙述是(    )。
    A.两个*p含义相同,都说明给指针变量p赋值
    B.在“double r=99,*p=&r;”中,把r的地址赋值给了p所指的存储单元
    C.语句“*p=r;”把变量r的值赋给指针变量p
    D.语句“*p=r;”取变量r的值放回r中
20. 
21. 
22. 若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是(    )。
    A) 函数调用可以作为独立的语句存在    B) 函数调用可以作为一个函数的实参
    C) 函数调用可以出现在表达式中    D) 函数调用可以作为一个函数的形参
23. 以下程序的输出结果是      。
    fun(int x, int Y, int z)
     z=x*x+y*y;
    main()
     int a=31;
      fun(5, 2, a);
      printf("% d", a);
    
    A) 0    B) 29    C) 31    D) 无定值
24. 若有以下定义,则对x数组元素的正确应用是
    int x[10], *pt=x;
    A) *&x[10]    B) *(x+3)    C) *(pt+10)    D) pt+3
25. 若有定义:int a[2][3];,以下选项中对a数组元素正确引用的是      。
(A) a[2][!1]
(B) a[2][3]
(C) a[0][3]
(D) a[1>2][!1]
26. 有以下程序
    #include<stdio.h>
    void fun(char *C)
    while (*C)
     if(*c>='a' && *c<='z')*c=*c-('a'-'A');
    c++;
    
    
    main()
    char s[81];
    gets(s); fun(s); puts(s):
    
    当执行程序时从键盘上输入Hello Beijing<回车>,则程序的输出结果是      。
    A) hello Beijing    B) Hello Beijing    C) HELLO BEIJING    D) hELLO Beijing
27. 有以下程序:
    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
28. 下列二维数组初始化语句中,不正确的是(    )。
    A) int b[][2]=1,2,3,4,5,6,7;    B) int b[3][5]=0,0,0;
    C) int b[][4]=1,2,3,4,5,6;    D) int b[3][2]=(1,2),(3,4) ,(5,6);
29. 设变量已正确定义,则下列能正确计算f=n!的程序段是(    )。
    A) f=0;
       for(i=1;i<=n;i++)f*=i;
    B) f=1;
       for(i=1;i<n;i++)f*=i;
    C) f=1;
       for(i=n;i>1;i++)f*=i;
    D) f=1;
       for(i=n;i> =2;i--)f*=i;
30. 设有定义:char s[8];int i=O;,以下不能将—行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是      。
        A) gets(s);    B) white((s[i++]=getchar())!='\n');s[i]=\0;
        C) scanf("%s",s);    D) d0scanf("%c",&s[i]);while(s[i++]!='\n';s[i]='\0';
31. 下面程序的输出是      。
         main()
         int x=3,y=6,a=0;
              while(x++!=(y-=1))
                a+=1
                 if(y<x)break;
              
              printf("x=%d,y=%d,=%d\n",x,y,a);
         
        A) x=4,y=4,a=1    B) x=5,y=5,a=1
        C) x=5,y=4,a=3    D) x=5,y=4,a=1
32. 下列二维数组的说明中,不正确的是(    )。
    A) floata[][4]=0,1,8,5,9;    B) inta[3][4];
    C) #define N 5    D) inta[2][9.5];
    float a[N][3];
33. 有以下程序
fun(char p[][10])
  int n=0,i;
for(i=0;i<7;i++)
if(p[i][0]=='T')n++;
return n;
main()
   char str[][10]="Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun";
    printf("%d\n",fun(str));
程序执行后的输出结果是      。
(A) 1
(B) 2
(C) 3
(D) 0
34. 下列程序中函数sort()的功能是对数组a中的数据进行由大到小的排序。
    
#include<stdio.h>
    void sort(inta[],int n)
   
 int i,j,t;
  
 for(i=0;i<n-1;i++)
    for(j=i+1;<n;j++)
  
  if(a[i]<a[j])
   
 t=a[i];a[i]=a[j];a[j]=t;
    
  
  
  
  main()
   
 int a[10]=1,2,3,4,5,6,7,8,9,10,i;
 
   sort(&a[1],7);
  
  for(i=0;i<10;i++)printf("%d,",a[i]);
 
   
 
   程序运行后的输出结果是(    )。
    A) 1,2,3,4,5,6,7,8,9,10,    B) 10,9,8,7,6,5,4,3,2,1,
    C) 1,8,7,6,5,4,3,2,9,10,    D) 1,2,10,9,8,7,6,5,4,3,
35. 设有定义:char p[]='1','2','3',,*q=p;,以下不能计算出一个char型数据所占字节数的表达是      。
(A) sizeof(p)
(B) sizeof(char)
(C) sizeof(*q)
(D) sizeof(p[0])
36. 有以下程序:
    fun(char p[][10])
      int n=0,i;
    for(i=0;i<7;i++)
    if(P[i][0]=='T')n++;
    return n;
    
    main()
    char str[][10]="Mon","Tue","wed","Thu","Fri","Sat","Sun";
    printf("%d\n",fun(str));
    
    程序执行后的输出结果是      。
    A) 1    B) 2    C) 3   D) 0
37. 有下列程序:
    #include<stdio.h>
    int fun(int x,iny y)
     if(x==y)return(x);
      else return((x+y)/2);
    
    main()
     int a=4,b=5,c=6;
      printf("%d\n",fun(2*a,fun(b,c)));
    
    程序运行后的输出结果是(    )。
    A.3    B.6    C.8    D.12
38. 在C语言中,形参的默认存储类型是      。
    A) auto    B) register    C) static    D) extern
39. 在一个C语言源程序文件中所定义的全局变量,其作用域为(    )。
    A.所在文件的全部范围    B.所在程序的全部范围
    C.所在函数的全部范围    D.由具体定义位置和extern说明来决定范围
40. 如果需要打开一个已经存在的非空文件“FILE”并进行修改,正确的语句是(    )。 
    A) fp=fopen("FILE","r");    B) fp=fopen("FILE","a+"); 
    C) fp=fopen("FILE","w+");    D) fp=fopen("FILE","r+");
41. 函数fseek()的正确调用形式是(    )。
    A) fseek(位移量,起始点,文件类型指针);    B) fseek(文件类型指针,位移量,起始点);
    C) fseek(文件类型指针,起始点,位移量);    D) fseek(起始点,位移量,文件类型指针);
二、填空题
42. 在深度为7的满二叉树中,度为2的节点个数为      。
43. 在数据的存储结构中,不仅需要存储各数据元素的信息,还要存放各元素之间      的信息。
44. 以下程序段的输出结果是            。
   int i=9;
   printf("%o\\n",i);
45. 数据字典是各类数据描述的集合,它通常包括5个部分,即数据项、数据结构、数据流、             和处理过程。
46. 在关系A(S, SN, D)和关系B(D, CN, NM)中,A的主关键字是S,B的主关键字是D,则称      是关系A的外码。
47. 以下程序运行后的输出结果是      。 
    main() 
    int a,b,c; 
    a=10;b=20;c=(a/b<1)&&(a%b<1); 
    printf("%d %d %d\n",a,b,c); 
    
48. 已定义char ch='$';int i=1,j;,执行j!=ch&&i++以后,i的值为      。
49. 下列程序段是从键盘输入的字符中统计小写字母的个数,用换行符结束循环。请填空。
    int n=0,c;
    c=getchar();
    while(c!='\n')
      if(      )
    n++;
    
50. 若有如下结构体说明:
       struct STRU  int a,b;charc:double d;
       struct STRU*p1,*p2;  
       请填空,以完成对t数组的定义,t数组的每个元素为该结构体类型。               t[20]
51. 有以下程序:
    #include<stdio.h>
    main()
     int a[3][3]=1,2,3,4,5,6,7,8,9;
      int b[2][0],i;
      for(j=0;j<3;i++)b[i]=a[i][2]+a[2][i];
      for(i=0;i<3;j++)printf("%d",b[i]);
      printf("\n");
    
    程序运行后的输出结果是      。
52. 下列程序将二维数组a的行和列元素互换后存放到另一个二维数组b中。请填空。
    main()
        int a[2][3]=1,2,3,4,5,b[3][2],i,j;
         for(i=0;i<2;i++)
           for(j=0;j<3;j++)
                  ;
         
    
53. 阅读下列程序,则程序的输出结果为      。
    #include "stdio.h"
    struet ty
     int data;
      char c;;
    main( )
     street ty a=30,'x';
      fun(a);
      printf("%d%c",a.data,a.c);
    fun(struct ty b)
     b.data=20;
      b.c='y';
54. 在宏定义#define PI 3.14159中,用宏名PI代替一个      。
55. 执行以下程序的输出结果是      。
    #include<stdio.h>
    main()
     int i,n[4]=1;
      for(i=1;i<=3;i++)
       n=n[i-1]*2+1;printf("%d",n);)
    
56. 以下程序的输出结果是      。
   #include<stdio.h>
   #define M 5
   #define N M+M
   main()
   int k;
   k=N*N*5;printf("%d\\n",k);
   

02-12 15:04