二级C语言笔试8

(总分90,考试时间90分钟)
一、选择题
1. 下列叙述中正确的是(    )。
A. 一个逻辑数据结构只能有一种存储结构
B. 逻辑结构属于线性结构,存储结构属于非线性结构
C. 一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率
D. 一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率
2. 以下语句定义正确的是(    )。
A. int a[1][4]=1,2,3,4,5;
B. float a[3][1]=1,2,3;
C. long a[2][3]=1,1,2,1,2,3,0,0;
D. double a[][3]=0;
3. 以下程序的输出结果是(    )。 
    #include<stdio.h> 
    main() 
    int a=1,b=3; 
    if((++a<0)&&!(b--<=0)) 
    printf("%d,%d\n",a,b); 
    else 
    printf("%d,%d\n",b,
A. ; 
    A)         4. 若有以下定义(设int类型变量占2个字节) 
    int i=8,j=9: 
    则以下语句: 
    printf("i=%%d,j=%%%d\n",i,j); 
    输出的结果是(    )。
A. i=8,j=9         B. i=%d,j=%8
C. i=%d,j=%d         D. 8,9
5. 有以下程序: 
    #include<stdio.h> 
    main() 
    int i=0,a=0; 
    while(i<20) 
    for(;;) 
    if((i%5)==0)break; 
    else i--; 
     
    i+=13,a+=i; 
     
    pfintf("%d\n",
A. ; 
   &nbs         6. 在软件开发中,需求分析阶段产生的主要文档是(    )。
A. 数据字典         B. 详细设计说明书
C. 数据流图说明书         D. 软件需求规格说明书
7. 若运行时给变量x输入12,则以下程序的运行结果是(    )。 
    main() 
    int x,y; 
    scanf("%d",&x); 
    y=x>12?x+10:x-12; 
    printf("%d\n",y); 
    
A. 0         B. 22
C. 12         D. 10
8. 运行下面程序时,从键盘输入字母A,则输出结果是(    )。 
    #include<stdio.h> 
    main() 
    char ch; 
    ch=getchar(); 
    switch(ch) 
    case'A':printf("AAAA\n"); 
    case'B':printf("BBBB\n"); 
    default:printf("CCCC\n"); 
     
    
A. AAAA
B. AAAA 
    BBBB
C. AAAA 
    BBBB 
    CCCC
D. AAAA 
    CCCC
9. 下述程序的输出结果是(    )。 
    #include<stdio.h> 
    void main() 
    int a[5]=1,2,3,4,5; 
    int*p=a,**q=&p; 
    printf("%d",*(p++)); 
    printf("%d",**q); 
    
A. 22         B. 11
C. 34         D. 12
10. 对于一个正常运行的C程序,下列叙述中正确的是(    )。
A. 程序的执行总是从main函数开始,在main函数结束
B. 程序的执行总是从程序的第一个函数开始,在main函数结束
C. 程序的执行总是从main函数开始,在程序的最后一个函数中结束
D. 程序的执行总是从程序中的第一个函数开始,在程序的最后一个函数中结束
11. 以下叙述正确的是(    )。
A. 只能在循环体内和switch语句体内使用break语句
B. contiune语句的作用是结束整个循环的执行
C. 在循环体内使用break语句或continue语句的作用相同
D. 从多层循环嵌套中退出时,只能使用goto语句
12. 以下有关宏替换的叙述不正确的是(    )。
A. 双引号中出现的宏名不替换         B. 使用宏定义可以嵌套
C. 宏定义仪仪是符号替换         D. 宏名必须用大写字母表示
13. 若二维数组a有m列,则在a[i][j]前的元素个数为(    )。
A. j*m+i         B. i*m+j
C. j*m+i+1         D. i*m+j+1
14. 设一棵满二叉树共有15个结点,则在该满二叉树中的叶子结点数为(    )。
A. 7         B. 8
C. 9         D. 10
15. 有关return语句说法不正确的是(    )。
A. 系统默认的返回值类型为整型,故当函数的返回值为int型时,在函数定义时,返回值的类型说明可以省略
B. 当函数有返回值时,凡是允许表达式出现的地方,都可以调用该函数
C. 当函数没有返回值时,函数的返回值类型可以说明为void型,它表示“无类型”或“空类型”
D. 函数的返回值类型必须与return语句中的表达式值的类型一致,但C语言也允许不同;这时,系统以函数定义时的返回值类型说明为准,并自动地将return语句中表达式的值转换为函数的返回值类型
16. 下述程序的输出结果是(    )。 
    #include<stdio.h> 
    void main() 
    char a=1,b=2; 
    char c=a^b<<2; 
    printf("\n%d",c); 
    
A. 9         B. 10
C. 12         D. 2
17. 算法的空间复杂度是指(    )。
A. 算法程序的长度         B. 算法程序中的指令条数
C. 算法程序所占的存储空间         D. 算法执行过程中所需要的存储空间
18. 若输入“abcdef”、“abdef”,以下程序的输出结果为(    )。 
    #include<stdio.h> 
    #lnclude<string.h> 
    main() 
    int n; 
    char s1[20],s2[20],p1,*p2; 
    scanf("%s",s1); 
    scanf("%s",s2); 
    P1=s1; 
    p2=s2; 
    n=strcmp(p1,p2); 
    printf("%d\n",n);
A. -1         B. 0
C. "abcdef"         D. "abdef"
19. 若变量都已正确说明,则以下程序段输出结果为(    )。 
    #include<stdio.h> 
    main() 
    char a='a'; 
    int b=2; 
    printf(a>b?”***a=%d":"###b=%d",a,b); 
    
A. ***a=3         B. ###b=3
C. ***a=3##b=5         D. 全部错误
20. 下列叙述中错误的是(    )。
A. 在C语言中,对二进制文件的访问速度比文本文件快
B. 在C语言中,随机文件以二进制代码形式存储数据
C. 语句FILE fp;定义了一个名为fp的文件指针
D. C语言中的文本文件以ASCII码形式存储数据
21. 若执行下述程序时,若从键盘输入6和8,结果为(    )。 
    main() 
    int a,b,s; 
    scanf("%d%dt",&a,&b); 
    s=a: 
    if(s=b) 
    s*=s; 
    printf("%d",s); 
    
A. 36         B. 64
C. 48         D. 以上都不对
22. 设有定义:char*c;,以下选项中能够使字符型指针c正确指向一个字符串的是(    )。
A. charstr[]="string";c=str;
B. scanf("%s",c);
C. c=getchar();
D. char str[]="string";strcpy("C,str")
23. 下列叙述中,正确的是(    )。
A. 软件交付使用后还需要进行维护
B. 软件一旦交付使用就不需要再进行维护
C. 软件交付使用后其生命周期就结束
D. 软件维护是指修复程序中被破坏的指令
24. 设a和b均为int型变量,且a=6,b=11,则能使值为3的表达式是(    )。
A. b%(a%4)         B. b%(a-a%5)
C. b%a-a%5         D. (b%a)-(a%4)
25. 有以下程序: 
    #include<stdio.h> 
    main() 
    int x; 
    scanf ("%d",&x); 
    if(x<=0);else 
    if(x!=5)printf("%d\n",x); 
     
    程序运行时,输入的值在哪个范围才会有输出结果(    )。
A. 不等于5的整数         B. 大于0且不等5的整数
C. 大于0或等于5的整数         D. 小于5的整数
26. 以下不合法的用户标识符是(    )。
A. 804zhang         B. _hh
C. yy614         D. If
27. 已知char a;int b;float e;double d;则表达式a-b+c-d结果为(    )型。
A. double         B. float
C. int         D. char
28. 下列选项中,不属于数据库管理的是(    )。
A. 数据库的建立         B. 数据库的调整
C. 数据库的监控         D. 数据库的校对
29. 有以下程序: 
    #include<stdio.h> 
    #include<string.h> 
    struct A 
    int a;char b[10];double c;; 
    void f(struct A*t); 
    main() 
    struct A a=1001,"ZhangDa",1098.0; 
    f(&
A. ;printf("%d,%s,%6.1f\n",a.a,a.b,a.c); 
     
    void f(st
30. 在下列选项中,没有构成死循环的程序段是(    )。
A. int i=100; 
    for(;;) 
    i=i%10+1; 
    if(i>10)break; 
B. while(1);
C. int k=0; 
    do++k;while(k<=10);
D. int s=12; 
    while(s); 
    --s;
31. 假设有语句sizeof(double),则它是(    )。
A. 一个整型表达式         B. 一个双精度浮点型表达式
C. 一种函数调用         D. 一种函数定义
32. 在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是(    )。
A. 并         B. 交
C. 投影         D. 除
33. 下列程序的运行结果是(    )。 
    #include<stdio.h> 
    void fun(int*s,int*p) 
    static int t=3; 
    *p=s[t]; 
    t--; 
     
    void main() 
    int a[]=2,3,4,5,k,x; 
    for(k=0;k<4;k++) 
    fun(a,&x); 
    printf("%d,",x); 
     
    
A. 5,4,3,2,         B. 2,3,4,5,
C. 2,2,2,2,         D. 5,5,5,5,
34. 设R是一个2元关系,有3个元组,S是一个3元关系,有3个元组。如T=R×S,则T的元组的个数为(    )。
A. 6         B. 8
C. 9         D. 12
35. 已知一个文件中存放若干工人档案记录,其数据结构如下: 
    struct a 
    char number[100]; 
    int age; 
    float p[6]; 
    ; 
    定义一个数组:struct a number[10]; 
    假定文件已正确打开,不能正确地从文件中读入10名工人数据到数组b中的是(    )。
A. fread(b,sizeof(structa),10,fp);
B. for(i=0;i<10;i++) 
    fread(b[i],sizeof(structa),1,fp);
C. for(i=0;i<10;i++)
    fread(b+i,sizeof(structa),1,fp);
D. for(i=0;i<5;i+=2) 
    fread(b+i,sezeof(structa),2,fp);
36. 以下选项中与if(a==1)a++;else a=b;语句功能不同的语句是(    )。
A. switch(a) 
    ease 0:a=b;break; 
    default:a++; 
B. switch(a==1) 
    case 0:a++: 
    default:a=b; 
C. switch(a) 
    default:a=b;break; 
    case 1:a++; 
D. a=(a==1)?(a++):b
37. 若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是(    )。
A. 函数调用可以作为独立的语句存在         B. 函数调用可以作为一个函数的实参
C. 函数调用可以出现在表达式中         D. 函数调用可以作为一个函数的形参
38. 数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和(    )。
A. 编码设计         B. 测试阶段
C. 运行阶段         D. 物理设计
39. 下列关于类、对象、属性和方法的叙述中,错误的是(    )。
A. 类是对一类具有相同的属性和方法对象的描述
B. 属性用于描述对象的状态
C. 方法用于表示对象的行为
D. 基于同一个类产生的两个对象不可以分别设置自己的属性值
40. 字符串"\\"ABCDEF\"\\”的长度是(    )。
A. 11         B. 10
C. 5         D. 3
二、填空题
1. 在算法正确的前提下,评价一个算法的两个标准是空间复杂度和      。
2. 二叉树的遍历可以分为三种:前序遍历、      遍历和后序遍历。
3. 软件危机出现于20时纪60年代末,为了解决软件危机,人们提出了      的原理来设计软件,这就是软件工程诞生的基础。
4.       是指用户的应用程序与数据库的逻辑结构是相互独立的,也就是说,数据的逻辑结构改变了,用户程序也可以不变。
5. 程序测试分为静态测试和动态测试。其中      是指不执行程序,而只是对程序文本进行检查,通过阅读和讨论,分析和发现程序中的错误。
6. 若a是int型变量,则表达式(a=2*3,a*2),a+6的值为      。
7. 若有定义:int a=6,b=8,c=14;接着顺序执行下列语句后,变量c中的值是      。 
    c=(b-=(a-5)); 
    a=(c%3)+(a=8);
8. 下面程序的功能是:输出100以内能被3整除且个位数为9的所有整数,清填空。 
    main() 
    int i,j; 
    for(i=0;      ;i++) 
      j=i*10+9; 
    if(j%3!=0)continue; 
    printf("%d",j); 
     
    
9. 以下程序的运行结果是      。 
    #define S(x)x*x 
    main() 
    int k=1; 
    while(k<=4) 
    printf("%d,",S(k)); 
    k++;
10. 以下程序调用函数swap将指针s和t所指单元(a和b)中的内容交换,请填空。 
    main() 
    int a=10,b=20,*s,*t; 
    s=&a;t=&b; 
           
    printf("%d%d",a,b); 
     
    swap(int*ss,int*tt) 
    int te; 
    te=*ss; 
    *ss=*tt; 
    *tt=te; 
    
11. 下面程序输出的结果是      。 
    int m=17; 
    int fun(int x,int y) 
    int m=3; 
    return(x*y-m); 
     
    main() 
    int a=5,b=7; 
    printf("%d\n”,fun(a,b)/m); 
    
12. 以下程序的输出结果是      。 
    #define PR(ar)printf("ar=%d”,ar) 
    main() 
    int j,a[]=1,8,3,7,6,13,17,15,*p=a+5; 
    for(j=3;j;j--) 
    switch(j) 
    case 1: 
    case 2:PR(*p++);break; 
    case 3:PR(*(--p)); 
     
    
13. 以下程序的运行结果是      。 
    #define A 4 
    #define B(x)A*x/2 
    main() 
    float c,a=8.0; 
    c=B(a); 
    printf("%f\n",c); 
    
14. 有以下程序: 
    #include<stdio.h> 
    #include<string.h> 
    main() 
    char a[]='a','b','c','d','e','f','h','\0';int i,j; 
    i=sizeof(a);j=strlen(a); 
    printf("%d,%d",i,j); 
     
    程序运行后的输出结果是      。
15. 本程序用冒泡法对数组a[]的元素从大到小排序,请在程序空白处填空。 
    void bubble(int a[],int n) 
    int i,j,max,temp; 
    max=n-1; 
    doj=0; 
    for(i=0;i<max;i++) 
    if(a[i]<a[i+1]) 
    temp=a[i];a[i]=a[i+1];a[i+1]=temp; 
    j=i; 
     
    max=j; 
    while(      ); 
 

你可能感兴趣的:(算法)