全国计算机等级考试历年真题与机考题库:二级C语言
上QQ阅读APP看书,第一时间看更新

2016年9月二级C语言真考题库新增试题精选

2016年9月二级C语言真考题库新增试题(1)

(考试时间120分钟,满分100分)

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

(1)程序流程图中带有箭头的线段表示的是( )。

(A)图元关系

(B)数据流

(C)控制流

(D)调用关系

(2)结构化程序设计的基本原则不包括( )。

(A)多态性

(B)自顶向下

(C)模块化

(D)逐步求精

(3)软件设计中模块划分应遵循的准则是( )。

(A)低内聚低耦合

(B)高内聚低耦合

(C)低内聚高耦合

(D)高内聚高耦合

(4)在软件开发中,需求分析阶段产生的主要文档是( )。

(A)可行性分析报告

(B)软件需求规格说明书

(C)概要设计说明书

(D)集成测试计划

(5)算法的有穷性是指( )。

(A)算法程序的运行时间是有限的

(B)算法程序所处理的数据量是有限的

(C)算法程序的长度是有限的

(D)算法只能被有限的用户使用

(6)对长度为n的线性表排序,在最坏情况下,比较次数不是nn-1)/2的排序方法是( )。

(A)快速排序

(B)冒泡排序

(C)直接插入排序

(D)堆排序

(7)下列关于栈的叙述正确的是( )。

(A)栈按“先进先出”组织数据

(B)栈按“先进后出”组织数据

(C)只能在栈底插入数据

(D)不能删除数据

(8)在数据库设计中,将E-R图转换成关系数据模型的过程属于( )。

(A)需求分析阶段

(B)概念设计阶段

(C)逻辑设计阶段

(D)物理设计阶段

(9)有三个关系R、S和T如下:

由关系R和S通过运算得到关系T,则所使用的运算为( )。

(A)并

(B)自然连接

(C)笛卡儿积

(D)交

(10)设有表示学生选课的三张表,学生表S(学号,姓名,性别,年龄,身份证号),课程表C(课号,课名),选课表SC (学号,课号,成绩),则表SC的关键字(键或码)为( )。

(A)课号,成绩

(B)学号,成绩

(C)学号,课号

(D)学号,姓名,成绩

(11)以下叙述中错误的是( )。

(A)C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令

(B)C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件

(C)用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中

(D)C语言源程序经编译后生成后缀为.obj的目标程序

(12)以下选项中,合法的一组C语言数值常量是( )。

(A)12. 0Xa23 4.5e0

(B)028 .5e-3 -0xf

(C).177 4e1.5 0abc

(D)0x8A 10,000 3.e5

(13)以下选项中不合法的标识符是( )。

(A)&a

(B)FOR

(C)print

(D)_00

(14)若有代数式(其中e仅代表自然对数的底数,不是变量),则以下能够正确表示该代数式的C语言表达式是( )。

(A)sqrt(fabs(pow(n,x)+exp(x)))

(B)sqrt(fabs(pow(n,x)+pow(x,e)))

(C)sqrt(abs(n^x+e^x))

(D)sqrt(fabs(pow(x,n)+exp(x)))

(15)若有定义:double a=22;int i=0,k=18;,则以下不符合C语言规定的赋值语句是( )。

(A)i=(a+k)<=(i+k);

(B)i=a%1 1;

(C)a=a++,i++;

(D)i=!a;

(16)有以下程序:

#include<stdio.h>

main()

{ int s,t,A=10;double B=6;

s=sizeof(A);t=sizeof(B);

printf("%d,%d\n",s,t);

在VC 6.0平台上编译运行,程序运行后的输出结果是( )。

(A)10,6

(B)4,4

(C)2,4

(D)4,8

(17)有以下程序:

#include<stdio.h>

main()

{ char a,b,c,d;

scanf("%c%c",&a,&b);

c=getchar();d=getchar();

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

当执行程序时,按下列方式输入数据(从第1列开始,<CR>代表回车,注意:回车也是一个字符)

12<CR>

34<CR>

则输出结果是( )。

(A)12

34

(B)12

(C)1234

(D)12

3

(18)以下关于逻辑运算符两侧运算对象的叙述中正确的是( )。

(A)可以是任意合法的表达式

(B)只能是整数0或非0整数

(C)可以是结构体类型的数据

(D)只能是整数0或1

(19)有以下程序:

#include<stdio.h>

main()

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

if(a=1)b=1;c=2;

else d=3;

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

程序运行后的输出结果是( )。

(A)1,1,2,0

(B)0,0,0,3

(C)编译有错

(D)0,1,2,0

(20)有以下程序:

#include<stdio.h>

main()

{ int x=1,y=0,a=0,b=0;

switch (x)

{ case 1:

switch(y)

{ case 0:a++;break;

case 1:b++;break;

case 2:a++;b++;break;

case 3:a++;b++;

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

程序运行后的输出结果是( )。

(A)a=2,b=2

(B)a=2,b=1

(C)a=1,b=1

(D)a=1,b=0

(21)以下程序段中的变量已正确定义:

for(i=0;i<4;i++,i++)

for(k=1;k<3;k++);printf("*");

程序段的输出结果是( )。

(A)**

(B)****

(C)*

(D)********

(22)有以下程序段:

#include<stdio.h>

int i,n;

for(i=0;i<8;i++)

{ n=rand()%5;

switch (n)

{ case 1:

case 3:printf("%d\n",n);break;

case 2:

case 4:printf("%d\n",n);continue;

case 0:exit(0);

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

以下关于程序段执行情况的叙述,正确的是( )。

(A)for循环语句固定执行8次

(B)当产生的随机数n为4时结束循环操作

(C)当产生的随机数n为1和2时不做任何操作

(D)当产生的随机数n为0时结束程序运行

(23)有以下程序:

#include<stdio.h>

int f(int x);

main()

{int n=1,m;

m=f(f(f(n)));printf("%d\n",m);

int f(int x)

{return x*2;}

程序运行后的输出结果是( )。

(A)8

(B)2

(C)4

(D)1

(24)以下叙述中错误的是( )。

(A)可以给指针变量赋一个整数作为地址值

(B)函数可以返回地址值

(C)改变函数形参的值,不会改变对应实参的值

(D)当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL

(25)设已有定义:float x;,则以下对指针变量p进行定义且赋初值的语句中正确的是( )。

(A)int *p=(float)x;

(B)float *p=&x;

(C)float p=&x;

(D)float *p=1024;

(26)以下数组定义中错误的是( )。

(A)int x[2][3]={1,2,3,4,5,6};

(B)int x[][3]={0};

(C)int x[][3]={{1,2,3},{4,5,6}};

(D)int x[2][3]={{1,2},{3,4},{5,6}};

(27)有以下程序:

#include<stdio.h>

void fun(int a[],int n)

{ int i,t;

for(i=0;i<n/2;i++){t=a[i];a[i]=a[n-1 -i];a[n-1 -i]=t;}

main()

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

fun(k,5);

for(i=2;i<8;i++)printf("%d",k[i]);

printf("\n");

程序运行后的输出结果是( )。

(A)321678

(B)876543

(C)1098765

(D)345678

(28)有以下程序:

#include<stdio.h>

#define N 4

void fun(int a[][N],int b[])

{ int i;

for(i=0;i<N;i++)b[i]=a[i][i]-a[i][N-1 -i];

main()

{ int x[N][N]={{1,2,3,4},{5,6,7,8},{9,10,1 1,12},{13,14,15,16}},y[N],i;

fun (x,y);

for(i=0;i<N;i++)printf("%d,",y[i]);printf("\n");

程序运行后的输出结果是( )。

(A)-3,-1,1,3,

(B)-12,-3,0,0,

(C)0,1,2,3,

(D)-3,-3,-3,-3,

(29)设有定义:char s[81];int i=0;,以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是( )。

(A)gets(s);

(B)while((s[i++]=getchar())!=′\n′);s[i]=′\0′;

(C)scanf("%s",s);

(D)do{scanf("%c",&s[i]);}while(s[i++]!=′\n′);s[i]=′\0′;

(30)设有定义:char p[]={′1 ′,′2 ′,′3 ′},*q =p;,以下不能计算出一个 char型数据所占字节数的表达式是( )。

(A)sizeof(p)

(B)sizeof(char)

(C)sizeof(*q)

(D)sizeof(p[0])

(31)有以下程序:

#include<stdio.h>

#include<string.h>

main()

{ char str[][20]={"One*World","One*Dream!"},*p=str[1];

printf("%d,",strlen(p));printf("%s\n",p);

程序运行后的输出结果是( )。

(A)10,One*Dream!

(B)9,One*Dream!

(C)9,One*World

(D)10,One*World

(32)有以下程序:

#include<stdio.h>

main()

{ char s[]="012xy\08s34f4w2";

int i,n=0;

for(i=0;s[i]!=0;i++)

if(s[i]>='0'&&s[i]<='9')n++;

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

程序运行后的输出结果是( )。

(A)0

(B)3

(C)7

(D)8

(33)有以下程序:

#include<stdio.h>

fun(int x,int y)

{static int m=0,i=2;

i+=m+1;m=i+x+y;return m;

main()

{int j=1,m=1,k;

k=fun(j,m);printf("%d,",k);

k=fun(j,m);printf("%d\n",k);

程序执行后的输出结果是( )。

(A)5,11

(B)5,5

(C)11,11

(D)11,5

(34)在C语言中,只有在使用时才占用内存单元的变量,其存储类型是( )。

(A)auto和static

(B)extern和register

(C)auto和register

(D)static和register

(35)下面结构体的定义语句中,错误的是( )。

(A)struct ord {int x;int y;int z;}struct ord a;

(B)struct ord {int x;int y;int z;};struct ord a;

(C)struct ord {int x;int y;int z;}a;

(D)struct {int x;int y;int z;}a;

(36)有以下程序:

#include<stdio.h>

typedef struct {int b,p;}A;

void f(A c)/* 注意:c是结构变量名 */

{int j;

c.b+=1;c.p+=2;

main()

{int i;

A a={1,2};

f(a);

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

程序运行后的输出结果是( )。

(A)2,4

(B)1,2

(C)1,4

(D)2,3

(37)以下叙述中正确的是( )。

(A)在C语言中,预处理命令行都以“#”开头

(B)预处理命令行必须位于C源程序的起始位置

(C)#include<stdio.h>必须放在C程序的开头

(D)C语言的预处理不能实现宏定义和条件编译的功能

(38)有以下程序:

#include<stdio.h>

#include<stdlib.h>

int fun(int n)

{ int *p;

p=(int*)malloc(sizeof(int));

*p=n;return *p;

main()

{ int a;

a =fun(10);printf("%d\n",a+fun(10));

程序运行后的输出结果是( )。

(A)0

(B)10

(C)20

(D)出错

(39)有以下程序:

#include<stdio.h>

main()

{ unsigned char a=8,c;

c=a>>3;

printf("%d\n",c);

程序运行后的输出结果是( )。

(A)16

(B)1

(C)32

(D)0

(40)读取二进制文件的函数调用形式为:fread(buffer,size,count,fp);,其中buffer代表的是( )。

(A)一个内存块的字节数

(B)一个整型变量,代表待读取的数据的字节数

(C)一个文件指针,指向待读取的文件

(D)一个内存块的首地址,代表读入数据存放的地址

二、程序填空题

下列给定程序中,函数fun的功能是:将形参n中个位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新数,作为函数值返回。

例如,输入一个整数27638496,函数返回值为64862。

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

注意:部分源程序在文件BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

#include<stdio.h>

unsigned long fun(unsigned long n)

{ unsigned long x=0;int t;

while(n)

{t=n%10;

/**********found**********/

if(t%2==【1】

/**********found**********/

x=【2】+t;

/**********found**********/

n=【3】

return x;

main()

{ unsigned long n=-1;

while(n>99999999||n<0)

{printf("Please input(0<n<100000000):");scanf("%ld",&n);}

printf("\nThe result is:%ld\n",fun(n));

三、程序修改题

下列给定程序中函数fun的功能是:将长整型数中各位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。

例如,当s中的数为87653142时,t中的数为7531。

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

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

#include<stdio.h>

void fun(long s,long *t)

{int d;

long sl=1;

/************found************/

t =0;

while(s >0)

{d=s%10;

/************found************/

if(d%2==0)

{ *t=d*sl+*t;

sl*=10;

s/=10;

main()

{ long s,t;

printf("\nPlease enter s:");scanf("%ld",&s);

fun(s,&t);

printf("The result is:%ld\n",t);

四、程序设计题(共24分)

编写函数fun,其功能是:实现两个字符串的连接(不要使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串的后面。

例如,分别输入下面两个字符串:

FirstString-

SecondString

程序运行后的输出结果是:

FirstString--SecondString

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

#include<stdio.h>

void fun(char p1[],char p2[])

main()

{ char s1[80],s2[40];void NONO();

printf("Enter s1 and s2:\n");

scanf("%s%s",s1,s2);

printf("s1 =%s\n",s1);

printf("s2=%s\n",s2);

printf("Invoke fun(s1,s2):\n");

fun(s1,s2);

printf("After invoking:\n");

printf("%s\n",s1);

NONO();

void NONO()

{/* 本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/

int i ;

FILE *rf,*wf;

char s1[80],s2[40];

rf=fopen("in.dat","r");

wf=fopen("out.dat","w");

for(i=0 ;i<10 ;i++){

fscanf(rf,"%s",s1);

fscanf(rf,"%s",s2);

fun(s1,s2);

fprintf(wf,"%s\n",s1);

fclose(rf);

fclose(wf);