2014年9月二级C语言真考题库新增试题(1)
(考试时间120分钟,满分100分)
一、选择题(每小题1分,共40分)
(1)面向对象方法中,实现对象的数据和操作结合于统一体中的是( )。
(A)结合
(B)封装
(C)隐藏
(D)抽象
(2)在进行逻辑设计时,将E-R图中实体之间联系转换为关系数据库的( )。
(A)关系
(B)元组
(C)属性
(D)属性的值域
(3)线性表的链式存储结构与顺序存储结构相比,链式存储结构的优点有( )。
(A)节省存储空间
(B)插入与删除运算效率高
(C)便于查找
(D)排序时减少元素的比较次数
(4)深度为7的完全二叉树中共有125个节点,则该完全二叉树中的叶子节点数为( )。
(A)62
(B)63
(C)64
(D)65
(5)下列叙述中正确的是( )。
(A)所谓有序表是指在顺序存储空间内连续存放的元素序列
(B)有序表只能顺序存储在连续的存储空间内
(C)有序表可以用链接存储方式存储在不连续的存储空间内
(D)任何存储方式的有序表均能采用二分法进行查找
(6)设二叉树如下:
则后序序列为( )。
(A)ABDEGCFH
(B)DBGEAFHC
(C)DGEBHFCA
(D)ABCDEFGH
(7)计算机软件包括( )。
(A)算法和数据
(B)程序和数据
(C)程序和文档
(D)程序、数据及相关文档
(8)下面描述中不属于软件需求分析阶段任务的是( )。
(A)撰写软件需求规格说明书
(B)软件的总体结构设计
(C)软件的需求分析
(D)软件的需求评审
(9)当数据库中数据总体逻辑结构发生变化,而应用程序不受影响,称为数据的( )。
(A)逻辑独立性
(B)物理独立性
(C)应用独立性
(D)空间独立性
(10)有三个关系R、S和T如下:
则由关系R和S得到关系T的操作是( )。
(A)并
(B)投影
(C)交
(D)选择
(11)以下叙述正确的是( )。
(A)C编译程序把文件后缀为.c的源程序文件编译成文件后缀为.obj的二进制文件
(B)C编译程序把文件后缀为.c的源程序文件编译成文件后缀为.exe的可执行文件
(C)C编译程序把文件后缀为.obj的二进制文件编译成文件后缀为.exe的可执行文件
(D)链接程序把文件后缀为.c的源程序文件链接成文件后缀为.exe的可执行文件
(12)以下叙述正确的是( )。
(A)循环结构、选择结构、顺序结构都是结构化程序的基本结构
(B)计算机可以直接执行C语言程序,不需要做任何转换
(C)过于复杂的算法不能使用N-S流程图描述
(D)只有不超过20步操作步骤的算法才是简单算法
(13)有如下程序:
#include <stdio.h> main( ) { int x = 072; printf("X=%d\n", x+1); }
程序运行后的输出结果是( )。
(A)X=115
(B)X=73
(C)X=59
(D)X=72
(14)下面叙述正确的是( )。
(A)任何复杂任务都可以分解成简单子任务
(B)C语言程序的所有函数只能处于同一个源文件
(C)包含全部三种基本结构的程序才是结构化程序
(D)C语言程序可以定义多个不同内容的main()函数
(15)以下叙述正确的是( )。
(A)C程序总是以main()作为程序执行的起始行
(B)main()函数若不带参数,其后面的一对圆括号可省略
(C)函数体内的定义语句和可执行语句允许任意穿插出现
(D)C语言中的语句之间必须用分号作为分隔符
(16)有以下程序:
#include <stdio.h> main( ) { char c; for(; (c=getchar()) != ′#′; ) putchar(++c); }
执行时如输入为:abcdefg##<回车>,则输出结果是( )。
(A)abcdefg
(B)bcdefgh$
(C)bcdefgh$$
(D)bcdefgh
(17)有以下程序:
#include <stdio.h> main( ) { int a=1, b=0; for(; a<5; a++) { if (a%2 == 0) break; continue; b += a; } printf("%d \n", b); }
程序运行后的输出结果是( )。
(A)0
(B)1
(C)10
(D)4
(18)有以下程序:
#include <stdio.h> main( ) { int x = 0x13; if (x = 0x12) printf("True"); printf("False\n"); }
程序运行后的输出结果是( )。
(A)True
(B)TrueFalse
(C)False
(D)TrueFalseTrue
(19)为了避免在嵌套的if-else语句中产生二义性,C语言规定与else子句配对是( )。
(A)与其在同一行上的if子句
(B)在其之后最近的不带else的if子句
(C)与其缩排位置相同的if子句
(D)在其之前最近的不带else的同层if子句
(20)有以下程序:
include <stdio.h> main( ) { int i,a; for (i=0; i<=10; i++) a=i; printf("%d,%d\n", i, a); }
程序的运行结果是( )。
(A)11,10
(B)10,10
(C)10,11
(D)11,11
(21)有以下程序:
#include <stdio.h> void fun(int a[ ], int n) { int i=0; for (i=0; i<n; i++) { if (i % 2 == 0) a[i] += n; else a[i] -= n; } } main( ) { int c[5] = {5,4,3,2,1}, i; fun(c, 5); for (i=0;i<5; i++) printf("%d,", c[i]); printf("\n"); }
程序运行后的输出结果是( )。
(A)10,-1,8,-3,6,
(B)5,4,3,2,1,
(C)10,2,8,4,6,
(D)5,-1,3,-3,1,
(22)有以下程序:
#include <stdio.h> #define N 4 void fun(int a[][N]) { int i; for(i=0; i<N; i++) a[0][i] = a[N-1][N-1-i]; } main( ) { int x[N][N]={ {1, 2, 3, 4}, {5, 6, 7, 8}, {9,10,11,12}, {13,14,15,16}}, i; fun(x); for (i=0; i<N; i++) printf("%d,", x[i][i]); printf("\n"); }
程序运行后的输出结果是( )。
(A)16,6,11,16,
(B)1,6,11,16,
(C)4,7,10,13,
(D)17,17,17,17,
(23)有如下程序:
#include <stdio.h> int convert(int* data) { return (*data) ++; } main( ) { int data =56; convert(&data); printf("%d,", data); data = convert(&data); printf("%d,\n", data); }
程序运行后的输出结果是( )。
(A)56,57,
(B)57,58,
(C)57,57,
(D)55,57,
(24)设有如下程序段:
int a[1] = {0}; int b[] = {9}; char c[3] = {"A", "B"}; char d = "12";
以下叙述正确的是( )。
(A)a, b的定义合法,c, d的定义不合法
(B)a,b,c,d的定义都是合法的
(C)a,b,c的定义是合法的,d的定义不合法
(D)只有a的定义是合法的
(25)设有定义:int x=2,*p=&x;float y=3.0; char z=′c′;,则立即进行以下运算有安全隐患的是( )。
(A)p++;
(B)x++;
(C)y++;
(D)z++;
(26)有以下程序:
#include <stdio.h> double fun(double a) { double x; x = a - (int)a; return x; } main( ) { double a = 3.1415; printf("%f\n", fun(a)); }
程序的运行结果是( )。
(A)3.000000
(B)3.141500
(C)0.141500
(D)0.000000
(27)有以下程序:
#include <stdio.h> #include <string.h> char *a = "you"; char *b = "Welcome you to Beijing!"; main( ) { char *p; p = b; while (*p != *a) p++; p += strlen(a) + 1; printf("%s\n", p); }
程序运行后的输出结果是( )。
(A)Beijing!
(B)you to Beijing!
(C)Welcome you to Beijing!
(D)to Beijing!
(28)有如下程序:
#include <stdio.h> #include <string.h> main( ) { printf("%d\n", strlen("0\t\nA011\1")); }
程序运行后的输出结果是( )。
(A)8
(B)9
(C)7
(D)10
(29)有如下程序:
#include <stdio.h> int sum(int data) { static int init = 1; return init += data; } main( ) { int i; for (i=1; i<=1; i++) printf("%d,", sum(i)); printf("\n"); }
程序运行后的输出结果是( )。
(A)2,
(B)2,3,
(C)3,
(D)1,
(30)有以下程序:
#include <stdio.h> main( ) { char s1[] = "programe", s2[] = "Language"; char *p1 = s1, *p2 = s2; int k; for (k=0; k<8; k++) if (*(p1+k) == *(p2+k)) printf("%s\n",(p1+k)); }
程序的运行结果是( )。
(A)grame ame e
(B)g a e
(C)programe
(D)无输出字符
(31)以下针对全局变量的叙述错误的是( )。
(A)全局变量的作用域是从定义位置开始至源文件结束
(B)全局变量是在函数外部任意位置上定义的变量
(C)用extern说明符可以限制全局变量的作用域
(D)全局变量的生存期贯穿于整个程序的运行期间
(32)有以下程序:
#include <stdio.h> #include <string.h> typedef struct stu { char name[10]; char gender; int score; } STU; void f(STU *c) { strcpy(c->name, "Qian"); c->gender = ′f′; c->score = 350; } main( ) { STU a = {"Zhao", ′m′, 290}, b; b = a; f(&b); printf("%s,%c,%d,", a.name, a.gender, a.score); printf("%s,%c,%d\n", b.name, b.gender, b.score); }
程序运行后的输出结果是( )。
(A)Zhao,m,290,Qian,f,350
(B)Zhao,m,290,Qian,m,290
(C)Zhao,m,290,Zhao,m,290
(D)Zhao,m,290,Qian,m,350
(33)下面关于编译预处理的命令行,正确的是( )。
(A)#define PAI 3.14
(B)#Define Eps 0.00001
(C)##DEFINE FALSE 0
(D)#define int INT
(34)有以下程序:
#include <stdio.h> #define D(x) 2*x+3 main( ) { int i = 1, j = 2; printf("%d\n", D(i+j)); }
程序运行后的输出结果是( )。
(A)7
(B)6
(C)9
(D)2
(35)有以下程序:
#include <stdio.h> #include <string.h> struct S { char name[10]; }; void change(struct S *data, int value) { strcpy(data->name, "#"); value = 6; } main( ) { struct S input; int num = 3; strcpy(input.name, "OK"); change(&input, num); printf("%s,%d\n", input.name, num); }
程序运行后的输出结果是( )。
(A)OK,6
(B)#,6
(C)OK,3
(D)#,3
(36)有如下定义:
struct st { char name[12]; int age; char sex; } std[10],*p=std;
以下语句错误的是( )。
(A)scanf("%d",p->age);
(B)scanf("%s",std[0].name);
(C)scanf("%d",&std[1].age);
(D)scanf("%c",&(p->sex));
(37)有以下程序:
#include <stdio.h> #include <stdlib.h> void fun(int **s, int x[2][3]) { **s=*(x[1]+1); } main() { int a[2][3] = {1,2,3,4,5,6}, *p; p = (int*)malloc(sizeof(int)); fun(&p,a); printf("%d\n",*p); }
程序的运行结果是( )。
(A)6
(B)2
(C)5
(D)3
(38)有如下定义:
struct st { int a; float b; } x[10]; FILE *fp;
若文件已正确打开,且数组x的10个元素均已赋值,以下将数组元素写到文件中的语句错误的是( )。
(A)for(i=0; i<10; i++)
fwrite(x,sizeof(struct st),1,fp);
(B)fwrite(x,10*sizeof(struct st),1,fp);
(C)fwrite(x,sizeof(struct st),10,fp);
(D)for(i=0; i<10 ;i++)
fwrite(&x[i],sizeof(struct st),1,fp);
(39)有以下程序:
#include <stdio.h> int disp(char* str) { while (*str) putchar(*str++); putchar(′#′); return *str; } main() { printf("%d\n", disp("C##123")); }
程序运行后的输出结果是( )。
(A)C##123#0
(B)C##1230
(C)C##0
(D)C##123#\0
(40)有以下程序:
#include <stdio.h> main( ) { int x[3][3] = {{2},{4},{6}}, i, *q = &x[0][0]; for(i=0; i<2; i++) { if (i == 0) x[i][i+1] = *q+1; else ++q; printf("%d ",*q); } printf("\n"); }
程序的运行结果是( )。
(A)23
(B)26
(C)33
(D)36
二、程序填空题
给定程序中,函数fun的功能是:调用随机函数产生20个互不相同的整数放在形参a所指数组中(此数组在主函数中已置0)。
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
注意:部分源程序在文件BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include <stdlib.h> #include <stdio.h> #define N 20 void fun( int *a) { int i, x, n=0; x=rand()%20; /**********found**********/ while (n<【1】) { for(i=0; i<n; i++ ) /**********found**********/ if( x==a[i]) 【2】; /**********found**********/ if( i==【3】) { a[n]=x; n++; } x=rand()%20; } } main() { int x[N]={0} ,i; fun( x ); printf("The result : \n"); for( i=0; i<N; i++) { printf("%4d",x[i]); if((i+1)%5==0)printf("\n"); } printf("\n\n"); }
三、程序修改题
下列给定程序是建立一个带头节点的单向链表,并用随机函数为各节点赋值。函数fun的功能是将单向链表节点(不包括头节点)数据域为偶数的值累加起来,并且作为函数值返回。
请改正函数fun中的错误,使它能得出正确的结果。
注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include <stdio.h> #include <conio.h> #include <stdlib.h> typedef struct aa { int data; struct aa *next; } NODE; int fun (NODE *h) {int sum=0; NODE *p; p=h->next; /*************found**************/ while(p->next) { if(p->data%2==0) sum+=p->data; /*************found**************/ p=h->next; } return sum; } NODE *creatlink(int n) { NODE *h,*p,*s; int i; h=p=(NODE*)malloc(sizeof(NODE)); for(i=1;i<n;i++) { s=(NODE*)malloc(sizeof(NODE)); s->data=rand()%16; s->next=p->next; p->next=s; p=p->next; } p->next=NULL; return h; } outlink(NODE *h) { NODE *p; p=h->next; printf("\n\n The LIST :\n\n HEAD"); while(p) { printf("->%d",p->data); p=p->next;} printf("\n"); } void main() {NODE *head; int sum; system("CLS"); head=creatlink(10); outlink(head); sum=fun(head); printf("\nSUM=%d",sum); }
四、程序设计题
请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置的字母转换为大写(若该位置上不是字母,则不转换)。
例如,若输入“abc4Efg”,则应输出“aBc4EFg”。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include<conio.h> #include<stdio.h> #include<string.h> #include<stdlib.h> void fun(char *ss) { } void main() { FILE *wf; char tt[81],s[81]="abc4Efg"; system("CLS"); printf("\nPlease enter an string within 80 characters:\n"); gets(tt); printf("\n\nAfter changing, the string\n %s",tt); fun(tt); printf("\nbecomes\n %s\n",tt); /******************************/ wf=fopen("out.dat","w"); fun(s); fprintf (wf,"%s",s); fclose(wf); /*****************************/ }