2007年4月计算机二级C语言真题【附答案】
2007 年4 月全国计算机等级考试笔试试卷
二级公共基础知识和 C 语言程序设计
(考试时间 120 分钟,满分100 分)
PDF版(非扫描)下载: 2007年4月计算机二级C语言真题
一、选择题((1)-(10)每小题2 分,(11)-(50)每小题1 分,共60 分)
(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)下列二叉树进行前序遍历的结果为( )。
A)DYBEAFCZX B)YDEBFZXCA
C)ABDYECFXZ D)ABCDEFXYZ
(7)某二叉树中有n 个度为2 的结点,则该二叉树中的叶子结点数为( )。
A)n+1 B)n-1
C)2n D)n/2
(8)在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是( )。
A)并 B)交
C)投影 D)笛卡儿乘积
(9)在E-R 图中,用来表示实体之间联系的图形是( )。
A)矩形 B)椭圆形
C)菱形 D)平行四边形
(10)下列叙述中错误的是( )。
A)在数据库系统中,数据的物理结构必须与逻辑结构一致
B)数据库技术的根本目标是要解决数据的共享问题
C)数据库设计是指在已有数据库管理系统的基础上建立数据库
D)数据库系统需要操作系统的支持
(11)在算法中,对需要执行的每一步操作,必须给出清楚、严格的规定。这属于算法的
( )。
A)正当性 B)可行性
C)确定性 D)有穷性
(12)下列叙述中错误的是( )。
A)计算机不能直接执行用C 语言编写的源程序
B)C 程序经C 编译程序编译后,生成后缀为.obj 的文件是一个二进制文件
C)后缀为.obj 的文件,经连接程序生成后缀为.exe 的文件是一个二进制文件
D)后缀为.obj 和.exe 的二进制文件都可以直接运行
(13)按照C 语言规定的用户标识符命名规则,不能出现在标识符中的是( )。
A)大写字母 B)连接符
C)数字字符 D)下划线
(14)下列叙述中错误的是( )。
A)C 语言是一种结构化程序设计语言
B)结构化程序由顺序、分支、循环3 种基本结构组成
C)使用3 种基本结构构成的程序只能解决简单问题
D)结构化程序设计提倡模块化的设计方法
(15)对于一个正常运行的C 程序,下列叙述中正确的是( )。
A)程序的执行总是从main 函数开始,在main 函数结束
B)程序的执行总是从程序的第一个函数开始,在main 函数结束
C)程序的执行总是从main 函数开始,在程序的最后一个函数中结束
D)程序的执行总是从程序中的第一个函数开始,在程序的最后一个函数中结束
(16)设变量均已正确定义,若要通过scanf("%d%c%d%c",&a1,&c1,&a2,&c2);语句为变量
a1 和a2 赋数值10 和20,为变量c1 和c2 赋字符X 和Y。下列所示的输入形式中正
确的是(注:口代表空格字符)( )。
A)10□X□20□Y<CR>
B)10□X20□Y<CR>
C)10□X<CR>
20Y<CR>
D)10X<CR>
20□Y<CR>
(17)若有代数式nx + ex ,(其中e 仅代表自然对数的底数,不是变量),则下列能够
正确表示该代数式的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)))
(18)设有定义:int k=0;,下列选项的4 个表达式中与其他3 个表达式的值不相同的是
( )。
A)k+ + B)k+ =1
C)+ +k D)k+1
(19)有下列程序,其中%u 表示按无符号整数输出。
main( )
{ unsigned int x=0xFFFF;/* x 的初值为十六进制数 */
printf("%u\n",x);
}
程序运行后的输出结果是( )。
A)-1 B)65535
C)32767 D)0xFFFF
(20)设变量x 和y 均已正确定义并赋值。下列if 语句中,在编译时将产生错误信息的是
( )。
A)if(x+ +); B)if(x>y&&y! =0);
C)if(x>0)x-- D)if(y<0){;}
else y+ +; else x+ +;
(21)下列选项中,当x 为大于l 的奇数时,值为0 的表达式是( )。
A)x%2= =1 B)x/2
C)x%2! =0 D)x%2= =0
(22)下列叙述中正确的是( )。
A)break 语句只能用于switch 语句体中
B)continue 语句的作用是使程序的执行流程跳出包含它的所有循环
C)break 语句只能用在循环体内和switch 语句体内
D)在循环体内使用break 语句和continue 语句的作用相同
(23)有下列程序:
main( )
{ int k=5,n=0;
do
{ switch(k)
{ case 1: case 3:n+ =1;k--;break;
default:n=0;k--;
case 2: case 4;n+ =2;k--;break;
}
printf("%d",n);
}while(k>0 && n<5);
}
程序运行后的输出结果是( )。
A)235 B)0235
C)02356 D)2356
(24)有下列程序:
main( )
{ int i,j;
for(i=1;i<4;i+ +)
{ for(j=i;j<4;j+ +) printf("%d*%d=%d ",i,j,i*j);
printf("\n");
}
}
程序运行后的输出结果是( )。
A)1*1=1 1*2=2 1*3=3 B)1*1=1 1*2=2 1*3=3
2*1=2 2*2=4 2*2=4 2*3=6
3*1=3 3*3=9
C)1*1=1 D)1*1=1
1*2=2 2*2=4 2*1=2 2*2=4
1*3=3 2*3=6 3*3=9 3*1=3 3*2=6 3*3=9
(25)下列合法的字符型常量是( )。
A)'\x13' B)'\081'
C)'65' D)"\n"
(26)在C 语言中,函数返回值的类型最终取决于( )。
A)函数定义时在函数首部所说明的函数类型
B)return 语句中表达式值的类型
C)调用函数时主调函数所传递的实参类型
D)函数定义时形参的类型
(27)已知大写字母A 的ASCII 码是65,小写字母a 的ASCII 码是97。下列不能将变量c
中的大写字母转换为对应小写字母的语句是( )。
A)c=(c-'A')%26+'a' B)c=c+32
C)c=c-'A'+'a' D)c=('A'+C)%26-'a'
(28)有下列函数:
int fun(char*s)
{ char *t=s;
while(*t+ +);
return(t-s);
}
该函数的功能是( )。
A)比较两个字符串的大小 B)计算s 所指字符串占用内存字节的个
数
C)计算s 所指字符串的长度 D)将s 所指字符串复制到字符串t 中
(29)设已有定义:float x;,则下列对指针变量p 进行定义且赋初值的语句中正确的是
( )。
A)float *p=1024; B)int *p=(float)x;
C)float p=&x; D)float *p=&x;
(30)有下列程序:
#include<stdio.h>
main( )
{ int n,*p=NULL;
*p=&n;
printf("Input n:"); scanf("%d",&p); printf("output n:"); printf("%d\n",p);
}
该程序试图通过指针 p 为变量n 读入数据并输出,但程序有多处错误,下列语句正确
的是( )。
A)int n,*p=NULL; B)*p=&n;
C)scanf("%d",&p) D)printf("%d\n",p);
(31)下列程序中函数f 的功能是:当flag 为1 时,进行由小到大排序;当flag 为0 时,进
行由大到小排序。
void f(int b[ ],int n,int flag)
{ int i,j,t;
for(i=0;i<n-1;i+ +)
for(j=i+1;j<n;j+ +)
if(flag? b[i]>b[j]:b[i]<b[j]){t=b[i];b[i]=b[j];b[j]=t;}
}
main( )
{ int a[10]={5,4,3,2,1,6,7,8,9,10},i;
f(&a[2],5,0); f(a,5,1);
for(i=0;i<10;i+ +)printf("%d,",a[i]);
}
程序运行后的输出结果是( )。
A)1,2,3,4,5,6,7,8,9,10, B)3,4,5,6,7,2,1,8,9,10,
C)5,4,3,2,1,6,7,8,9,10, D)10,9,8,7,6,5,4,3,2,1,
(32)有下列程序:
void f(int b[ ])
{ int i;
for(i=2;i<6;i+ +) b[i]*=2;
}
main( )
{ int a[10]={1,2,3,4,5,6,7,8,9,10},i;
f(a);
for(i=0;i<10,i+ +)printf("%d,",a[i]);
}
程序运行后的输出结果是( )。
A)1,2,3,4,5,6,7,8,9,10, B)1,2,6,8,10,12,7,8,9,10,
C)1,2,3,4,10,12,14,16,9,10, D)1,2,6,8,10,12,14,16,9,10,
(33)有下列程序:
typedef struct{intb,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,3 B)2,4
C)1,4 D)1,2
(34)有下列程序:
main( )
{ int a[4][4]={{l,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,j,k,t;
for(i=0;i<4;i+ +)
for(j=0;j<3;j+ +)
for(k=j+1;k<4;k+ +)
if(a[j][i]>a[k][i]){t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;} /*按列排序*/
for(i=0;i<4;i+ +)printf("%d,",a[i][i]);
}
程序运行后的输出结果是( )。
A)1,6,5,7, B)8,7,3,1,
C)4,7,5,2, D)1,6,2,1,
(35)有下列程序:
main( )
{ int a[4][4]={{1,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,k,t;
for(i=0;i<3;i+ +)
for(k=i+l;k<4;k+ +)if(a[i][i]<a[k][k]){t=a[i][i];a[i][i]=a[k][k];a[k][k]=t;}
for(i=0;i<4;i+ +)printf("%d,",a[0][i]);
}
程序运行后的输出结果是( )。
A)6,2,1,1, B)6,4,3,2,
C)1,1,2,6, D)2,3,4,6,
(36)有下列程序:
void f(int *q)
{ int i=0;
for(;i<5; i+ +) (*q)+ +;
}
main( )
{ int a[5] ={1,2,3,4,5}, i;
f(a);
for(i=0;i<5; i+ +) printf("%d,", a[i]);
}
程序运行后的输出结果是( )。
A)2,2,3,4,5, B)6,2,3,4,5,
C)1,2,3,4,5, D) 2,3,4,5,6,
(37)有下列程序:
#include <string.h>
main( )
{ char p[20]={'a', 'b', 'c', 'd'}, q[ ]="abc", r[ ]="abcde";
strcpy(p+strlen(q), r); strcat(p, q);
printf("%d %d\n", sizeof(p), strlen(p));
}
程序运行后的输出结果是( )。
A)20 9 B)9 9
C)20 11 D)11 11
(38)有下列程序:
# include <string.h>
main( )
{ char p[20]={'a','b','c','d'},q[ ]="abc", r[ ]="abcde";
strcat(p, r); strcpy(p+strlen(q), q);
printf("%d\n", strlen(p));
}
程序运行后的输出结果是( )。
A)9 B)6
C)11 D)7
(39)有下列程序:
#include <string.h>
void f(char p[ ][10],int n) /*字符串从小到大排序*/
{ char t[10]; int i,j;
for (i=0;i<n-1; i+ +)
for (j=i+l; j<n; j+ +)
if(strcmp(p[i], p[j])>0) {strcpy(t, p[i]); strcpy(p[i], p[j]); strcpy(p[j], t); }
}
main( )
{ char p[5][10]={"abc", "aabdfg", "abbd", "dcdbe", "cd"};
f(p, 5);
printf("%d\n", strlen(p[0]));
}
程序运行后的输出结果是( )。
A)2 B)4 C)6 D)3
(40)有下列程序:
void f(int n, int *r)
{ int rl=0;
if (n%3= =0) r1=n/3;
else if (n%5= =0) r1=n/5;
else if(--n, &r1);
*r = r1;
}
main( )
{ int m=7, r;
f(m, &r); printf("%d", r);
}
程序运行后的输出结果是( )。
A)2 B)1 C)3 D)0
(41)有下列程序:
main(int argc, char *argv[ ])
{ int n=0, i;
for (i=l; i<argc; i+ +) n=n*10+*argv[i] – '0';
printf("%d\n", n);
}
编译连接后生成可执行文件tt.exe。若运行时输入以下命令行
tt 12 345 678
程序运行后的输出结果是( )。
A)12 B)12345 C)12345678 D)136
(42)有下列程序:
int a=4;
int f(int n)
{ int t=0; static int a=5;
if(n%2) {int a=6; t+ =a+ +; }
else {int a=7; t+ =a+ +;}
return t+a+ +;
}
main( )
{ int s=a,i=0;
for(;i<2;i+ +)s+ =f(i);
printf("%d\n",s);
}
程序运行后的输出结果是( )。
A)24 B)28 C)32 D)36
(43)有一个名为init.txt 的文件,内容如下:
#define HDY(A,B) A/B
#define PRINT(Y) printf("y=%d\n",Y)
有下列程序:
#include "init.txt"
main( )
{ int a=1,b=2,c=3,d=4,k;
k=HDY(a+c,b+d);
PRINT(k);
}
下列针对该程序的叙述正确的是( )。
A)编译出错 B)运行出错
C)运行结果为y=0 D)运行结果为y=6
(44)有下列程序:
main( )
{ char ch[ ]="uvwxyz",*pc;
pc=ch;printf("%c\n",*(pc+5));
}
程序运行后的输出结果是( )。
A)z B)0
C)元素ch[5]的地址 D)字符y 的地址
(45)有下列程序:
struct S{int n;int a[20];};
voidf (struct S *p)
{int i,j,t;
for(i=0;i<p->n-1;i+ +)
for(j=i+1;j<p->n;j+ +)
if(p->a[i]>p->a[j]){t=p->a[i];p->a[i]=p->a[j];p->a[j]=t;}
}
main( )
{ int i; struct S s={10,{2,3,l,6,8,7,5,4,10,9}};
f(&s);
for(i=0;i<s.n;i+ +) printf("%d,",s.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)2,3,1,6,8,7,5,4,10,9, D)10,9,8,7,6,1,2,3,4,5,
(46)有下列程序:
struct S{int n;int a[20];};
void f(int *a,int n)
{ int i;
for(i=0;i<n-1;i+ +) a[i]+ =i;
}
main( )
{ int i; struct S s={10,{2,3,1,6,8,7,5,4,10,9}};
f(s.a,s.n);
for(i=0;i<s.n;i+ +) printf("%d,",s.a[i]);
}
程序运行后的输出结果是( )。
A)2,4,3,9,12,12,11,11,18,9, B)3,4,2,7,9,8,6,5,11,10,
C)2,3,1,6,8,7,5,4,10,9, D)1,2,3,6,8,7,5,4,10,9,
(47)有下列程序段:
typedef struct node{int data; struct node *next;}*NODE;
NODE p;
下列叙述中正确的是( )。
A)p 是指向struct node 结构变量的指针的指针
B)NODE p;语句出错
C)p 是指向struct node 结构变量的指针
D)p 是struct node 结构变量
(48)有下列程序:
main( )
{ unsigned char a=2,b=4,c=5,d;
d=a|b; d&=c; printf("%d\n",d);)
程序运行后的输出结果是( )。
A)3 B)4 C)5 D)6
(49)有下列程序:
#include<stdio.h>
main( )
{ FILE *fp;int k,n,a[6]={1,2,3,4,5,6};
fp=fopen("d2.dat","w");
fprintf(fp,"%d%d%d\n",a[0],a[1],a[2]);
fprintf(fp,"%d%d%d\n",a[3],a[4],a[5]);
fclose(fp);
fp=fopen("d2.dat","r");
fscanf(fp,"%d%d",&k,&n);printf("%d%d\n",k,n);
fclose(fp);
}
程序运行后的输出结果是( )。
A)12 B)14 C)1234 D)123456
(50)有下列程序:
#include<stdio.h>
main( )
{ FILE *fp;
int i,a[6]={l,2,3,4,5,6};
fp=fopen("d3.dat","w+b");
fwrite(a,sizeof(int),6,fp);
/*该语句使读文件的位置指针从文件头向后移动3 个int 型数据*/
fseek(fp,sizeof(int)*3,SEEK_SET);
fread(a,sizeof(int),3,fp);
fclose(fp);
for(i=0;i<6;i+ +)printf("%d,",a[i]);
}
程序运行后的输出结果是( )。
A)4,5,6,4,5,6, B)1,2,3,4,5,6,
C)4,5,6,1,2,3, D)6,5,4,3,2,1,
二、填空题(每空2 分,共40 分)
(1)在深度为7 的满二叉树中,度为2 的结点个数为【1】。
(2)软件测试分为白箱(盒)测试和黑箱(盒)测试。等价类划分法属于【2】测试。
(3)在数据库系统中,实现各种数据管理功能的核心软件称为【3】。
(4)软件生命周期可分为多个阶段,一般分为定义阶段、开发阶段和维护阶段。编码和测
试属于【4】阶段。
(5)在结构化分析使用的数据流图(DFD)中,利用【5】对其中的图形元素进行确切
解释。
(6)执行下列程序后的输出结果是【6】。
main( )
{ int a=10;
a=(3*5,a+4); printf("a=%d\n",a);
}
(7)当执行下列程序时,输入1234567890<CR>,则其中while 循环体将执行【7】次。
#include<stdio.h>
main( )
{ char ch;
while((ch=getchar( ))= ='0')printf("#");
}
(8)下列程序的运行结果是【8】。
int k=0;
void fun(int m)
{m+ =k;k+ =m;printf("m=%dk=%d",m,k+ +);}
main( )
{ int i=4;
fun(i+ +); printf("i=%dk=%d\n",i,k);
}
(9)下列程序的运行结果是【9】。
main( )
{int a=2,b=7,c=5;
switch(a>0)
{ case 1:switch(b<0)
{ case 1:printf( " @ " );break;
case 2:printf( " ! " );break;
}
case 0: switch(c= =5)
{ case 0: printf(" * "); break;
case 1: printf(" # "); break;
case 2: printf(" $ "); break;
}
default: printf("&");
}
printf("\n");
}
(10)下列程序的输出结果是【10】。
#include <string.h>
main( )
{printf("%d\n",strlen("IBM\n012\1\\"));}
(11)已定义char ch=‘$’; int i=1,j;,执行j! =ch&&i+ +以后,i 的值为【11】。
(12)下列程序的输出结果是【12】。
#include <string.h>
main( )
{ char a[ ]={'\1', '\2', '\3', '\4', '\0'};
printf("% d%d\n",sizeof(a),strlen(a));
}
(13)设有定义语句:int a[ ][3]={{0},{1}{2}};,则数组元素a[1][2]的值是【13】。
(14)下列程序的功能是:求出数组x 中各相邻两个元素的和依次存放到a 数组中,然后输
出。请填空。
main( )
{ int x[10],a[9],i;
for(i=0; i<10; i+ +) scanf("%d",&x[i]);
for( 【14】; i<10; i+ + )
a[i-1]=x[i]+ 【15】;.
for(i=0; i<9; i+ +) printf("%d ",a[i]);
printf("");
}
(15)下列程序的功能:利用指针指向3 个整型变量,并通过指针运算找出3 个数中的最大
值,输出到屏幕上。请填空。
main( )
{int x,y,z,max, *px, *py, *pz, *pmax;
scanf("%d%d%d",&x,&y,&z);
px=&x; py=&y; pz=&z; pmax=&max;
【16】;
if(*pmax<*py)*pmax=*py;
if(*pmax<*pz)*pmax=*pz;
printf("max=%d\n",max);
}
(16)下列程序的输出结果是【17】。
int fun(int *x,int n)
{ if (n= =0) return x[0];
else return x[0]+fun(x+1,n-1);
}
main( )
{int a[ ]={1,2,3,4,5,6,7};printf("%d\n",fun(a,3));}
(17)下列程序的输出结果是【18】。
#include <stdlib.h>
main( )
{ char *s1,*s2,m;
s1=s2=(char*)malloc(sizeof(char));
*s1=15; *s2=20; m=*s1+*s2;
printf("%d\n",m);
}
(18)设有说明:
struct DATE{int year;int month;int day;};
请写出一条定义语句,该语句定义d 为上述结构体类型变量,并同时为其成员year、
month、day 依次赋初值2006、10、1: 【19】。
(19)设有定义:FILE *fw;,请将以下打开文件的语句补充完整,以便可以向文本文件
readme.txt 的最后续写内容。
fw=fopen("readme.txt", 【20】);
二级公共基础知识和 C 语言程序设计
(考试时间 120 分钟,满分100 分)
PDF版(非扫描)下载: 2007年4月计算机二级C语言真题
一、选择题((1)-(10)每小题2 分,(11)-(50)每小题1 分,共60 分)
(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)下列二叉树进行前序遍历的结果为( )。
A)DYBEAFCZX B)YDEBFZXCA
C)ABDYECFXZ D)ABCDEFXYZ
(7)某二叉树中有n 个度为2 的结点,则该二叉树中的叶子结点数为( )。
A)n+1 B)n-1
C)2n D)n/2
(8)在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是( )。
A)并 B)交
C)投影 D)笛卡儿乘积
(9)在E-R 图中,用来表示实体之间联系的图形是( )。
A)矩形 B)椭圆形
C)菱形 D)平行四边形
(10)下列叙述中错误的是( )。
A)在数据库系统中,数据的物理结构必须与逻辑结构一致
B)数据库技术的根本目标是要解决数据的共享问题
C)数据库设计是指在已有数据库管理系统的基础上建立数据库
D)数据库系统需要操作系统的支持
(11)在算法中,对需要执行的每一步操作,必须给出清楚、严格的规定。这属于算法的
( )。
A)正当性 B)可行性
C)确定性 D)有穷性
(12)下列叙述中错误的是( )。
A)计算机不能直接执行用C 语言编写的源程序
B)C 程序经C 编译程序编译后,生成后缀为.obj 的文件是一个二进制文件
C)后缀为.obj 的文件,经连接程序生成后缀为.exe 的文件是一个二进制文件
D)后缀为.obj 和.exe 的二进制文件都可以直接运行
(13)按照C 语言规定的用户标识符命名规则,不能出现在标识符中的是( )。
A)大写字母 B)连接符
C)数字字符 D)下划线
(14)下列叙述中错误的是( )。
A)C 语言是一种结构化程序设计语言
B)结构化程序由顺序、分支、循环3 种基本结构组成
C)使用3 种基本结构构成的程序只能解决简单问题
D)结构化程序设计提倡模块化的设计方法
(15)对于一个正常运行的C 程序,下列叙述中正确的是( )。
A)程序的执行总是从main 函数开始,在main 函数结束
B)程序的执行总是从程序的第一个函数开始,在main 函数结束
C)程序的执行总是从main 函数开始,在程序的最后一个函数中结束
D)程序的执行总是从程序中的第一个函数开始,在程序的最后一个函数中结束
(16)设变量均已正确定义,若要通过scanf("%d%c%d%c",&a1,&c1,&a2,&c2);语句为变量
a1 和a2 赋数值10 和20,为变量c1 和c2 赋字符X 和Y。下列所示的输入形式中正
确的是(注:口代表空格字符)( )。
A)10□X□20□Y<CR>
B)10□X20□Y<CR>
C)10□X<CR>
20Y<CR>
D)10X<CR>
20□Y<CR>
(17)若有代数式nx + ex ,(其中e 仅代表自然对数的底数,不是变量),则下列能够
正确表示该代数式的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)))
(18)设有定义:int k=0;,下列选项的4 个表达式中与其他3 个表达式的值不相同的是
( )。
A)k+ + B)k+ =1
C)+ +k D)k+1
(19)有下列程序,其中%u 表示按无符号整数输出。
main( )
{ unsigned int x=0xFFFF;/* x 的初值为十六进制数 */
printf("%u\n",x);
}
程序运行后的输出结果是( )。
A)-1 B)65535
C)32767 D)0xFFFF
(20)设变量x 和y 均已正确定义并赋值。下列if 语句中,在编译时将产生错误信息的是
( )。
A)if(x+ +); B)if(x>y&&y! =0);
C)if(x>0)x-- D)if(y<0){;}
else y+ +; else x+ +;
(21)下列选项中,当x 为大于l 的奇数时,值为0 的表达式是( )。
A)x%2= =1 B)x/2
C)x%2! =0 D)x%2= =0
(22)下列叙述中正确的是( )。
A)break 语句只能用于switch 语句体中
B)continue 语句的作用是使程序的执行流程跳出包含它的所有循环
C)break 语句只能用在循环体内和switch 语句体内
D)在循环体内使用break 语句和continue 语句的作用相同
(23)有下列程序:
main( )
{ int k=5,n=0;
do
{ switch(k)
{ case 1: case 3:n+ =1;k--;break;
default:n=0;k--;
case 2: case 4;n+ =2;k--;break;
}
printf("%d",n);
}while(k>0 && n<5);
}
程序运行后的输出结果是( )。
A)235 B)0235
C)02356 D)2356
(24)有下列程序:
main( )
{ int i,j;
for(i=1;i<4;i+ +)
{ for(j=i;j<4;j+ +) printf("%d*%d=%d ",i,j,i*j);
printf("\n");
}
}
程序运行后的输出结果是( )。
A)1*1=1 1*2=2 1*3=3 B)1*1=1 1*2=2 1*3=3
2*1=2 2*2=4 2*2=4 2*3=6
3*1=3 3*3=9
C)1*1=1 D)1*1=1
1*2=2 2*2=4 2*1=2 2*2=4
1*3=3 2*3=6 3*3=9 3*1=3 3*2=6 3*3=9
(25)下列合法的字符型常量是( )。
A)'\x13' B)'\081'
C)'65' D)"\n"
(26)在C 语言中,函数返回值的类型最终取决于( )。
A)函数定义时在函数首部所说明的函数类型
B)return 语句中表达式值的类型
C)调用函数时主调函数所传递的实参类型
D)函数定义时形参的类型
(27)已知大写字母A 的ASCII 码是65,小写字母a 的ASCII 码是97。下列不能将变量c
中的大写字母转换为对应小写字母的语句是( )。
A)c=(c-'A')%26+'a' B)c=c+32
C)c=c-'A'+'a' D)c=('A'+C)%26-'a'
(28)有下列函数:
int fun(char*s)
{ char *t=s;
while(*t+ +);
return(t-s);
}
该函数的功能是( )。
A)比较两个字符串的大小 B)计算s 所指字符串占用内存字节的个
数
C)计算s 所指字符串的长度 D)将s 所指字符串复制到字符串t 中
(29)设已有定义:float x;,则下列对指针变量p 进行定义且赋初值的语句中正确的是
( )。
A)float *p=1024; B)int *p=(float)x;
C)float p=&x; D)float *p=&x;
(30)有下列程序:
#include<stdio.h>
main( )
{ int n,*p=NULL;
*p=&n;
printf("Input n:"); scanf("%d",&p); printf("output n:"); printf("%d\n",p);
}
该程序试图通过指针 p 为变量n 读入数据并输出,但程序有多处错误,下列语句正确
的是( )。
A)int n,*p=NULL; B)*p=&n;
C)scanf("%d",&p) D)printf("%d\n",p);
(31)下列程序中函数f 的功能是:当flag 为1 时,进行由小到大排序;当flag 为0 时,进
行由大到小排序。
void f(int b[ ],int n,int flag)
{ int i,j,t;
for(i=0;i<n-1;i+ +)
for(j=i+1;j<n;j+ +)
if(flag? b[i]>b[j]:b[i]<b[j]){t=b[i];b[i]=b[j];b[j]=t;}
}
main( )
{ int a[10]={5,4,3,2,1,6,7,8,9,10},i;
f(&a[2],5,0); f(a,5,1);
for(i=0;i<10;i+ +)printf("%d,",a[i]);
}
程序运行后的输出结果是( )。
A)1,2,3,4,5,6,7,8,9,10, B)3,4,5,6,7,2,1,8,9,10,
C)5,4,3,2,1,6,7,8,9,10, D)10,9,8,7,6,5,4,3,2,1,
(32)有下列程序:
void f(int b[ ])
{ int i;
for(i=2;i<6;i+ +) b[i]*=2;
}
main( )
{ int a[10]={1,2,3,4,5,6,7,8,9,10},i;
f(a);
for(i=0;i<10,i+ +)printf("%d,",a[i]);
}
程序运行后的输出结果是( )。
A)1,2,3,4,5,6,7,8,9,10, B)1,2,6,8,10,12,7,8,9,10,
C)1,2,3,4,10,12,14,16,9,10, D)1,2,6,8,10,12,14,16,9,10,
(33)有下列程序:
typedef struct{intb,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,3 B)2,4
C)1,4 D)1,2
(34)有下列程序:
main( )
{ int a[4][4]={{l,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,j,k,t;
for(i=0;i<4;i+ +)
for(j=0;j<3;j+ +)
for(k=j+1;k<4;k+ +)
if(a[j][i]>a[k][i]){t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;} /*按列排序*/
for(i=0;i<4;i+ +)printf("%d,",a[i][i]);
}
程序运行后的输出结果是( )。
A)1,6,5,7, B)8,7,3,1,
C)4,7,5,2, D)1,6,2,1,
(35)有下列程序:
main( )
{ int a[4][4]={{1,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,k,t;
for(i=0;i<3;i+ +)
for(k=i+l;k<4;k+ +)if(a[i][i]<a[k][k]){t=a[i][i];a[i][i]=a[k][k];a[k][k]=t;}
for(i=0;i<4;i+ +)printf("%d,",a[0][i]);
}
程序运行后的输出结果是( )。
A)6,2,1,1, B)6,4,3,2,
C)1,1,2,6, D)2,3,4,6,
(36)有下列程序:
void f(int *q)
{ int i=0;
for(;i<5; i+ +) (*q)+ +;
}
main( )
{ int a[5] ={1,2,3,4,5}, i;
f(a);
for(i=0;i<5; i+ +) printf("%d,", a[i]);
}
程序运行后的输出结果是( )。
A)2,2,3,4,5, B)6,2,3,4,5,
C)1,2,3,4,5, D) 2,3,4,5,6,
(37)有下列程序:
#include <string.h>
main( )
{ char p[20]={'a', 'b', 'c', 'd'}, q[ ]="abc", r[ ]="abcde";
strcpy(p+strlen(q), r); strcat(p, q);
printf("%d %d\n", sizeof(p), strlen(p));
}
程序运行后的输出结果是( )。
A)20 9 B)9 9
C)20 11 D)11 11
(38)有下列程序:
# include <string.h>
main( )
{ char p[20]={'a','b','c','d'},q[ ]="abc", r[ ]="abcde";
strcat(p, r); strcpy(p+strlen(q), q);
printf("%d\n", strlen(p));
}
程序运行后的输出结果是( )。
A)9 B)6
C)11 D)7
(39)有下列程序:
#include <string.h>
void f(char p[ ][10],int n) /*字符串从小到大排序*/
{ char t[10]; int i,j;
for (i=0;i<n-1; i+ +)
for (j=i+l; j<n; j+ +)
if(strcmp(p[i], p[j])>0) {strcpy(t, p[i]); strcpy(p[i], p[j]); strcpy(p[j], t); }
}
main( )
{ char p[5][10]={"abc", "aabdfg", "abbd", "dcdbe", "cd"};
f(p, 5);
printf("%d\n", strlen(p[0]));
}
程序运行后的输出结果是( )。
A)2 B)4 C)6 D)3
(40)有下列程序:
void f(int n, int *r)
{ int rl=0;
if (n%3= =0) r1=n/3;
else if (n%5= =0) r1=n/5;
else if(--n, &r1);
*r = r1;
}
main( )
{ int m=7, r;
f(m, &r); printf("%d", r);
}
程序运行后的输出结果是( )。
A)2 B)1 C)3 D)0
(41)有下列程序:
main(int argc, char *argv[ ])
{ int n=0, i;
for (i=l; i<argc; i+ +) n=n*10+*argv[i] – '0';
printf("%d\n", n);
}
编译连接后生成可执行文件tt.exe。若运行时输入以下命令行
tt 12 345 678
程序运行后的输出结果是( )。
A)12 B)12345 C)12345678 D)136
(42)有下列程序:
int a=4;
int f(int n)
{ int t=0; static int a=5;
if(n%2) {int a=6; t+ =a+ +; }
else {int a=7; t+ =a+ +;}
return t+a+ +;
}
main( )
{ int s=a,i=0;
for(;i<2;i+ +)s+ =f(i);
printf("%d\n",s);
}
程序运行后的输出结果是( )。
A)24 B)28 C)32 D)36
(43)有一个名为init.txt 的文件,内容如下:
#define HDY(A,B) A/B
#define PRINT(Y) printf("y=%d\n",Y)
有下列程序:
#include "init.txt"
main( )
{ int a=1,b=2,c=3,d=4,k;
k=HDY(a+c,b+d);
PRINT(k);
}
下列针对该程序的叙述正确的是( )。
A)编译出错 B)运行出错
C)运行结果为y=0 D)运行结果为y=6
(44)有下列程序:
main( )
{ char ch[ ]="uvwxyz",*pc;
pc=ch;printf("%c\n",*(pc+5));
}
程序运行后的输出结果是( )。
A)z B)0
C)元素ch[5]的地址 D)字符y 的地址
(45)有下列程序:
struct S{int n;int a[20];};
voidf (struct S *p)
{int i,j,t;
for(i=0;i<p->n-1;i+ +)
for(j=i+1;j<p->n;j+ +)
if(p->a[i]>p->a[j]){t=p->a[i];p->a[i]=p->a[j];p->a[j]=t;}
}
main( )
{ int i; struct S s={10,{2,3,l,6,8,7,5,4,10,9}};
f(&s);
for(i=0;i<s.n;i+ +) printf("%d,",s.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)2,3,1,6,8,7,5,4,10,9, D)10,9,8,7,6,1,2,3,4,5,
(46)有下列程序:
struct S{int n;int a[20];};
void f(int *a,int n)
{ int i;
for(i=0;i<n-1;i+ +) a[i]+ =i;
}
main( )
{ int i; struct S s={10,{2,3,1,6,8,7,5,4,10,9}};
f(s.a,s.n);
for(i=0;i<s.n;i+ +) printf("%d,",s.a[i]);
}
程序运行后的输出结果是( )。
A)2,4,3,9,12,12,11,11,18,9, B)3,4,2,7,9,8,6,5,11,10,
C)2,3,1,6,8,7,5,4,10,9, D)1,2,3,6,8,7,5,4,10,9,
(47)有下列程序段:
typedef struct node{int data; struct node *next;}*NODE;
NODE p;
下列叙述中正确的是( )。
A)p 是指向struct node 结构变量的指针的指针
B)NODE p;语句出错
C)p 是指向struct node 结构变量的指针
D)p 是struct node 结构变量
(48)有下列程序:
main( )
{ unsigned char a=2,b=4,c=5,d;
d=a|b; d&=c; printf("%d\n",d);)
程序运行后的输出结果是( )。
A)3 B)4 C)5 D)6
(49)有下列程序:
#include<stdio.h>
main( )
{ FILE *fp;int k,n,a[6]={1,2,3,4,5,6};
fp=fopen("d2.dat","w");
fprintf(fp,"%d%d%d\n",a[0],a[1],a[2]);
fprintf(fp,"%d%d%d\n",a[3],a[4],a[5]);
fclose(fp);
fp=fopen("d2.dat","r");
fscanf(fp,"%d%d",&k,&n);printf("%d%d\n",k,n);
fclose(fp);
}
程序运行后的输出结果是( )。
A)12 B)14 C)1234 D)123456
(50)有下列程序:
#include<stdio.h>
main( )
{ FILE *fp;
int i,a[6]={l,2,3,4,5,6};
fp=fopen("d3.dat","w+b");
fwrite(a,sizeof(int),6,fp);
/*该语句使读文件的位置指针从文件头向后移动3 个int 型数据*/
fseek(fp,sizeof(int)*3,SEEK_SET);
fread(a,sizeof(int),3,fp);
fclose(fp);
for(i=0;i<6;i+ +)printf("%d,",a[i]);
}
程序运行后的输出结果是( )。
A)4,5,6,4,5,6, B)1,2,3,4,5,6,
C)4,5,6,1,2,3, D)6,5,4,3,2,1,
二、填空题(每空2 分,共40 分)
(1)在深度为7 的满二叉树中,度为2 的结点个数为【1】。
(2)软件测试分为白箱(盒)测试和黑箱(盒)测试。等价类划分法属于【2】测试。
(3)在数据库系统中,实现各种数据管理功能的核心软件称为【3】。
(4)软件生命周期可分为多个阶段,一般分为定义阶段、开发阶段和维护阶段。编码和测
试属于【4】阶段。
(5)在结构化分析使用的数据流图(DFD)中,利用【5】对其中的图形元素进行确切
解释。
(6)执行下列程序后的输出结果是【6】。
main( )
{ int a=10;
a=(3*5,a+4); printf("a=%d\n",a);
}
(7)当执行下列程序时,输入1234567890<CR>,则其中while 循环体将执行【7】次。
#include<stdio.h>
main( )
{ char ch;
while((ch=getchar( ))= ='0')printf("#");
}
(8)下列程序的运行结果是【8】。
int k=0;
void fun(int m)
{m+ =k;k+ =m;printf("m=%dk=%d",m,k+ +);}
main( )
{ int i=4;
fun(i+ +); printf("i=%dk=%d\n",i,k);
}
(9)下列程序的运行结果是【9】。
main( )
{int a=2,b=7,c=5;
switch(a>0)
{ case 1:switch(b<0)
{ case 1:printf( " @ " );break;
case 2:printf( " ! " );break;
}
case 0: switch(c= =5)
{ case 0: printf(" * "); break;
case 1: printf(" # "); break;
case 2: printf(" $ "); break;
}
default: printf("&");
}
printf("\n");
}
(10)下列程序的输出结果是【10】。
#include <string.h>
main( )
{printf("%d\n",strlen("IBM\n012\1\\"));}
(11)已定义char ch=‘$’; int i=1,j;,执行j! =ch&&i+ +以后,i 的值为【11】。
(12)下列程序的输出结果是【12】。
#include <string.h>
main( )
{ char a[ ]={'\1', '\2', '\3', '\4', '\0'};
printf("% d%d\n",sizeof(a),strlen(a));
}
(13)设有定义语句:int a[ ][3]={{0},{1}{2}};,则数组元素a[1][2]的值是【13】。
(14)下列程序的功能是:求出数组x 中各相邻两个元素的和依次存放到a 数组中,然后输
出。请填空。
main( )
{ int x[10],a[9],i;
for(i=0; i<10; i+ +) scanf("%d",&x[i]);
for( 【14】; i<10; i+ + )
a[i-1]=x[i]+ 【15】;.
for(i=0; i<9; i+ +) printf("%d ",a[i]);
printf("");
}
(15)下列程序的功能:利用指针指向3 个整型变量,并通过指针运算找出3 个数中的最大
值,输出到屏幕上。请填空。
main( )
{int x,y,z,max, *px, *py, *pz, *pmax;
scanf("%d%d%d",&x,&y,&z);
px=&x; py=&y; pz=&z; pmax=&max;
【16】;
if(*pmax<*py)*pmax=*py;
if(*pmax<*pz)*pmax=*pz;
printf("max=%d\n",max);
}
(16)下列程序的输出结果是【17】。
int fun(int *x,int n)
{ if (n= =0) return x[0];
else return x[0]+fun(x+1,n-1);
}
main( )
{int a[ ]={1,2,3,4,5,6,7};printf("%d\n",fun(a,3));}
(17)下列程序的输出结果是【18】。
#include <stdlib.h>
main( )
{ char *s1,*s2,m;
s1=s2=(char*)malloc(sizeof(char));
*s1=15; *s2=20; m=*s1+*s2;
printf("%d\n",m);
}
(18)设有说明:
struct DATE{int year;int month;int day;};
请写出一条定义语句,该语句定义d 为上述结构体类型变量,并同时为其成员year、
month、day 依次赋初值2006、10、1: 【19】。
(19)设有定义:FILE *fw;,请将以下打开文件的语句补充完整,以便可以向文本文件
readme.txt 的最后续写内容。
fw=fopen("readme.txt", 【20】);