计算机等级考试二级C语言模拟试卷(八)
一、选择题(每小题1分,共40分)
(1)下列链表种,其逻辑结构属于非线性结构的是
A)循环链表 B)双向链表 C)二叉链表 D)带链的栈
(2)设循环队列的存储空间为Q(1:35),初始状态为front=rear=35,现经过一系列入队与退队运算后,front=15,rear=15,则循环队列中的元素个数为
A)0或35 B)15 C)16 D)20
(3)下列关于栈的叙述中,正确的是
A)栈顶元素一定是最先入栈的元素 B)栈操作遵循先进后出的原则
C)栈底元素一定是最后入栈的元素 D)栈操作遵循先进先出的原则
(4)在关系数据库中,用来表示实体间联系的是
A)二维表 B)树状结构 C)属性 D)网状结构
(5)公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员,则实体部门和职员间的联系是
A)1:1联系 B)1:m联系 C)m: 1联系 D)m:n联系
(6)有两个关系R和S 如下:
则由关系R得到关系S的操作是
A)自然连接 B)并 C)选择 D)投影
(7)数据字典(DD)所定义的对象都包含于
A)程序流程图 B)数据流图(DFD图)
C)方框图 D)软件结构图
(8)软件需求规格说明书的作用不包括
A)软件设计的依据
B)软件验收的依据
C)软件可行性研究的依据
D)用户与开发人员对软件要做什么的共同理解
(9)下面属于黑盒测试方法的是
A)逻辑覆盖 B)语句覆盖 C)路径覆盖 D)边界值分析
(10)下面不属于软件设计阶段任务的是
A)制定软件确认测试计划 B)数据库设计
C)软件总体设计 D)算法设计
(11)下列叙述中,正确的是
A)在C语言程序中,main 函数必须放在其他函数的前面
B)每个后缀为.C的C语言源程序都可以单独进行编译
C)在C语言程序中,只有main 函数才可单独进行编译
D)每个后缀为.C的C语言源程序都应该包含一个main函数
(12)C语言中的标识符分为关键字、预定义标识符和用户标识符,以下叙述正确的是
A)预定义标识符(如库函数中的函数名)可用作用户标识符,但失去原有含义
B)用户标识符可以由字母和数字任意顺序组成
C)在标识符中大写字母和小写字母被认为是相同的字符
D)关键字可用作用户标识符,但失去原有含义
(13)下列选项中,表示一个合法的常量是(说明:符号□表示空格)
A)9□9□9 B)0xab C)123E0.2 D)2.7e
(14)C语言主要是借助以下哪个功能来实现程序模块化
A)定义函数 B)定义常量和外部变量
C)三种基本结构语句 D)丰富的数据类型
(15)下列叙述中,错误的是
A)非零的数值型常量有正值和负值的区分
B)常量是在程序运行过程中值不能被改变的量
C)定义符号常量必须用类型名来设定常量的类型
D)用符号名表示的常量叫符号常量
(16)若有定义和语句:int a,b; scanf("%d,%d",&a,&b); 以下选项中的输入数据,不能把值
3 赋给变量a、5 赋给变量b 的是
A)3,5, B)3,5,4 C)3 ,5 D)3,5
(17)C语言中char 类型数据占字节数为
A)1 B)2 C)3 D)4
(18)下列关系表达式中,结果为“假”的是
A)(3+4)>6 B)(3!=4)>2 C)3<=4||3 D)(3<4)==1
(19)若以下选项中的变量全部为整型变量,且已正确定义并赋值,则语法正确的
switch语句是
A)switch (a+9) B)switch a*b
{ case c1:y=a-b; { case 10:x=a+b;
case c2:y=a+b; default :y=a-b;
} }
C)switch(a+b) D)switch (a*b+b*b)
{ case1 : case3: y=a+b;break; { default :break;
case0 : case4: y=a-b; case 3:y=a+b; break;
} case 2:y=a-b; break;
}
(20)有以下程序
# include <stdio.h>
main()
{
int a=-2,b=0;
while(a++&&++b);
printf("%d,%d\n",a,b);
}
程序运行后的输出结果是
A)0,2 B)0,3 C)1,2 D)1,3
(21)设有定义:int x=0,*p;,立即执行以下语句,正确的语句是
A)p=x; B)*p=x; C)p=NULL; D)*p=NULL;
(22)下列叙述中,正确的是
A)可以用关系运算符比较字符串的大小
B)空字符串不占用内存,其内存空间大小是0
C)两个连续的单引号是合法的字符常量
D)两个连续的双引号是合法的字符串常量
(23)有以下程序
#include <stdio.h>
main()
{
char a='H';
a=(a>='A' && a<='Z')?(a-'A'+'a'):a;
printf("%c\n",a);
}
程序运行后的输出结果是
A)A B)a C)H D)h
(24)有以下程序
#include <stdio.h>
int f(int x)
{ return x*x+1;}
int main()
{
int a,b=0;
for(a=0;a<3;a++)
{ b=b+f(a); putchar('A'+b); }
return 0;
}
程序运行后的输出结果是
A)ABE B)BCD C)BCF D)BDI
(25)设有定义:int x[2][3];,则以下关于二维数组x 的叙述错误的是
A)数组x 包含6 个元素
B)x[0]可看作是由3个整型元素组成的一维数组
C)可以用语句x[0]=0;为数组所有元素赋初值0
D)x[0]和x[1]是数组名,分别代表不同的地址常量
(26)设变量p 是指针变量,语句p=NULL;,是给指针变量赋NULL 值,它等价于
A)p=""; B)p='0'; C)p=0; D)p='';
(27)有以下程序
#include <stdio.h>
main()
{ int a[]={10,20,30,40},*p=a,i;
for (i=0;i<=3;i++) { a[i]=*p; p++;}
printf("%d\n",a[2]);
}
程序运行后的输出结果是
A)10 B)20 C)30 D)40
(28)有以下程序
#include <stdio.h>
#define N 3
void fun(int a[][N],int b[])
{
int i,j;
for(i=0;i<N;i++)
{
b[i]=a[i][0];
for(j=1;j<N;j++)
if(b[i]<a[i][j]) b[i]=a[i][j];
}
}
int main()
{
int x[N][N]={1,2,3,4,5,6,7,8,9},y[N],i;
fun(x,y);
for(i=0;i<N;i++) printf("%d,",y[i]);
printf("\n");
return 0;
}
程序运行后的输出结果是
A)1,3,5, B)2,4,8, C)3,5,7, D)3,6,9,
(29)有以下程序
#include <stdio.h>
#include <string.h>
main()
{ char a[10]="abc",b[10]="012",c[10]="xyz";
strcpy(a+1,b+2);
puts(strcat(a,c+1));
}
程序运行后的输出结果是
A)12yz B)a12xyz C)a2yz D)bc2yz
(30)下列选项中,合法的是
A)char str3[]={'d', 'e', 'b', 'u', 'g', '\0'}; B)char str4; str4="hello world";
C)char name[10]; name="china"; D)char str1[5]= "pass",str2[6]; str2=str1;
(31)有以下程序
#include <stdio.h>
int main()
{
char *s="12134";
int k=0,a=0;
while (s[k+1]!='\0')
{
k++;
if(k%2==0){ a=a+(s[k]-'0'+1);continue;}
a=a+(s[k]-'0');
}
printf("k=%d a=%d\n",k,a);
return 0;
}
程序运行后的输出结果是
A)k=3 a=14 B)k=4 a=12 C)k=5 a=15 D)k=6 a=11
(32)有以下程序
#include <stdio.h>
int main()
{
char a[5][10]={"one","two","three","four","five"};
int i,j;
char t;
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
if(a[i][0]>a[j][0])
{ t=a[i][0];a[i][0]=a[j][0];a[j][0]=t;}
puts(a[1]);
return 0;
}
程序运行后的输出结果是
A)fwo B)fix C)two D)owo
(33)有以下程序
#include <stdio.h>
int a=1,b=2;
void fun1(int a, int b)
{ printf("%d%d",a,b); }
void fun2( )
{ a=3; b=4; }
int main()
{
fun1(5,6);
fun2();
printf("%d %d\n",a,b);
return 0;
}
程序运行后的输出结果是
A)1 2 5 6 B)3 4 5 6 C)5 6 1 2 D)5 6 3 4
(34)有以下程序
#include <stdio.h>
void func(int n)
{ static int num=1;
num=num+n;
printf("%d",num);
}
void main()
{ func(3); func(4); printf("\n"); }
程序运行后的输出结果是
A)3 4 B)3 5 C)4 5 D)4 8
(35)有以下程序
#include <stdio.h>
#include <stdlib.h>
void fun(int *p1,int *p2,int *s)
{
s=(int*)malloc(sizeof(int));
*s=*p1+*p2;
free(s);
}
int main()
{
int a=1,b=40,*q=&a;
fun(&a,&b,q);
printf("%d\n",*q);
return 0;
}
程序运行后的输出结果是
A)0 B)1 C)41 D)42
(36)有以下程序
#include <stdio.h>
struct STU { char name[9];char sex;int score[2];};
void fun(struct STU a[])
{
struct STU b={"zhao",'m',85,90};
a[1]=b;
}
int main()
{
struct STU c[2]={{"Qian",'f',95,92},{"Sun",'m',98,99}};
fun(c);
printf("%s,%c,%d,%d,",c[0].name,c[0].sex,c[0].score[0],c[0].score[1]);
printf("%s,%c,%d,%d\n",c[1].name,c[1].sex,c[1].score[0],c[1].score[1]);
return 0;
}
程序运行后的输出结果是
A)Zhao,m,85,90,Sun,m,98,99 B)Zhao,m,85,90, Qian,f,95,92
C)Qian,f,95,92,Sun,m,98,99 D)Qian,f,95,92,Zhao,m,85,90
(37)下列叙述中,错误的是
A)可以用typedef 说明的新类型名来定义变量
B)typedef 说明的新类型名必须使用大写字母,否则会出编译错误
C)用typedef 可以为基本数据类型说明一个新名称
D)用typedef 说明新类型的作用是用一个新的标识符来代表已存在的类型名
(38)下列叙述中,错误的是
A)函数的返回值类型不能是结构体类型,只能是简单类型
B)函数可以返回指向结构体变量的指针
C)可以通过指向结构体变量的指针访问所指结构体变量的任何成员
D)只要类型相同,结构体变量之间可以整体赋值
(39)若有定义语句 int b=2; 则表达式(b<<2)/(3||b)的值是
A)0 B)2 C)4 D)8
(40)有以下程序
#include <stdio.h>
int main()
{
FILE *fp;
int i,a[6]={1,2,3,4,5,6};
fp=fopen("d2.dat","w+");
for(i=0;i<6;i++) fprintf(fp,"%d\n",a[i]);
rewind(fp);
for(i=0;i<6;i++) fscanf(fp,"%d",&a[5-i]);
fclose(fp);
for(i=0;i<6;i++) printf("%d,",a[i]);
return 0;
}
程序运行后的输出结果是
A)1,2,3,3,2,1, B)1,2,3,4,5,6, C)4,5,6,1,2,3, D)6,5,4,3,2,1,
二、程序填空题(18分)
给定程序中,函数fun的功能是:求ss所指字符串数组中长度最长的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。ss所指字符串数组中共有M个字符串,且串长<N。
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!
试题程序:
#include <stdio.h> #include <string.h> #define M 5 #define N 20 /**********found**********/ int fun(char (*ss) ___1___, int *n) { int i, k=0, len=0; for(i=0; i<M; i++) { len=strlen(ss[i]); /**********found**********/ if(i==0) *n=___2___; if(len>*n) { /**********found**********/ ___3___; k=i; } } return(k); } int main() { char ss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"}; int n,k,i; printf("The original strings are :\n"); for(i=0;i<M;i++)puts(ss[i]); k=fun(ss,&n); printf("The length of longest string is : %d\n",n); printf("The longest string is : %s\n",ss[k]); return 0; }
三、程序修改题(18分)
以下给定程序中,函数fun的功能是:判断输入的任何一个正整数n,是否等于某个连续正整数序列之和。若是,则输出所有可能的序列。否则输出“不能分解”。
例如:当输入100时,输出:
100=9+10+11+12+13+14+15+16
100=18+19+20+21+22
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <stdio.h> void fun(int n) { int j,b,c,m,flag=0; for (b=1;b<=n/2;b++) { /******found******/ n=m; c=b; while(m !=0 && m>=c) { m= m-c; c++; } /******found******/ if(m!=0) { printf("%d=", n); for(j=b; j<c-1; j++) printf( "%d+", j ); printf("%d\n",j); flag=1; } } if(flag==0) printf("不能分解\n"); } int main() { int n; printf("请输入一个整数 : "); scanf("%d", &n); fun(n); return 0; }
四、程序设计题(24分)
请编写函数fun,其功能是:计算并输出给定数组(长度为9)中每相邻两个元素的平均值的平方根之和。
例如,若给定数组中的9个元素依次为12.0、34.0、4.0、23.0、34.0、45.0、18.0、3.0、11.0,则输出应为S=35.951014。
注意:部分源程序在文件PROG1.C中。请勿改主动函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include <stdio.h> #include <math.h> double fun(double x[9]) { } int main() { double s,a[9]={12.0,34.0,4.0,23.0,34.0,45.0,18.0,3.0,11.0}; int i; FILE *out; printf("\nThe original data is : "); for(i=0;i<9;i++) printf("%6.1f",a[i]); printf("\n"); s=fun(a); printf("s=%f \n",s); out=fopen("out.dat","w"); fprintf(out,"%f",s); fclose(out); return 0; }
一、选择题 ( 1)~(10) :CABAB CBCDA (11)~(20) :BABAC CABDC (21)~(30) :CDDDC CCDCA (31)~(40) :BADDB DBADD 二、程序填空题 (1)[N] (2) len (3) *n=len 三、程序改错题 (1) m=n; (2) if(m==0) 四、程序设计题 double sum=0.0; int i,j=1; for (i=0;i<9;i++) if (j<=8) { sum+=sqrt((x[i]+x[i+1])/2.0); j++; } return sum;