2006年4月计算机二级C语言真题【附答案】
2006 年4 月全国计算机等级考试笔试试卷
二级公共基础知识和C 语言程序设计
(考试时间120 分钟,满分100 分)
PDF版(非扫描)下载: 2006年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)ABCDEF B)DBEAFC
C)ABDECF D)DEBFCA
(7)在深度为7 的满二叉树中,叶子结点的个数为( )。
A)32 B)31
C)64 D)63
(8)“商品”与“顾客”两个实体集之间的联系一般是( )。
A)一对一 B)一对多
C)多对一 D)多对多
(9)在E-R 图中,用来表示实体的图形是( )。
A)矩形 B)椭圆形
C)菱形 D)三角形
(10)数据库DB、数据库系统DBS、数据库管理系统DBMS 之间的关系是( )。
A)DB 包含DBS 和DBMS B)DBMS 包含DB 和DBS
C)DBS 包含DB 和DBMS D)没有任何关系
(11)下列不合法的用户标识符是( )。
A)j2_KEY B)Double
C)4d D)_8_
(12)下列不合法的数值常量是( )。
A)011 B)1e1
C)8.0E0.5 D)0xabcd
(13)下列不合法的字符常量是( )。
A)'\018' B)'\" '
C)'\\' D)'\xcc'
(14)表达式3.6-5/2+1.2+5%2 的值是( )。
A)4.3 B)4.8
C)3.3 D)3.8
(15)下列能正确定义字符串的语句是( )。
A)char str[ ]={'\064'}; B)char str="kx43";
C)char str="; D)char str[ ]="\0";
(16)下列数组定义中错误的是( )。
A)int x[ ][3]={0};
B)int x[2][3]={{l,2},{3,4},{5,6}};
C)int x[ ][3]={{l,2,3},{4,5,6}};
D)int x[2][3]={l,2,3,4,5,6};
(17)若要求从键盘读入含有空格字符的字符串,应使用函数( )。
A)getc( ) B)gets( )
C)getchar( ) D)scanf( )
(18)下列4 个程序中,完全正确的是( )。
A)#include <stdio.h> B)#include <stdio.h>
main( ); main( )
{/*programming*/ {/* / programming / */
printf("programming! \n");} printf("programming!\n");}
C)#include <stdio.h> D)include <stdio.h>
main( ) main( )
{/* / programming*/ */ { /*programming */
printf("programming! \n");} printf("programming! \n");}
(19)若有定义:float x=1.5;int a=1,b=3,c=2;则正确的switch 语句是( )。
A)switch(x) B)switch((int)x);
{ case 1.0:printf("*\ n"); {case 1:printf("*\n");
case 2.0:printf("**\ n");} case 2:printf("**\n");}
C)switch(a+b) D)switch(a+b)
{ case 1:printf("*\n"); { case 1:printf("* \n");
case 2+1:printf("** \n");} case c:printf("** \n");}
(20)若各选项中所用变量已正确定义,fun()函数中通过return 语句返回一个函数值,下列
选项中错误的程序是( )。
A)main( ) B)float fun(int a,int b){……}
{……x =fun(2,10);……} main( )
float fun(int a,int b){……} {……x =fun(i,j);……}
C)float fun(int,int); D)main( )
main( ) {float fun(int I,int j);
{……x =fun(2,10);……} ……x =fun(i,j); ……}
float fun(int a,int b){……} float fun(int a,int b){……}
(21)在下列给出的表达式中,与while(E)中的(E)不等价的表达式是( )。
A)(!E= =0) B)(E>0‖E<0)
C)(E= =0) D)(E! =0)
(22)要求通过while 循环不断读入字符,当读入字母N 时结束循环。若变量已正确定义,
下列正确的程序段是( )。
A)while( (ch=getchar( ))! ='N') printf("%c",ch);
B)while(ch=getchar( )! ='N') printf("%c",ch);
C)while(ch=getchar( )= ='N') printf("%c",ch);
D)while((ch=getchar( ))= ='N') printf("%c",ch);
(23)已定义下列函数:
int fun(int *p)
{ return *p;)
fun 函数返回值是( )。
A)不确定的值 B)一个整数
C)形参p 中存放的值 D)形参p 的地址值
(24)若有说明语句:double *p,a;则能通过scanf 语句正确给输入项读入数据的程序段是
( )。
A)*p =&a; scanf("%1f",p); B)*p =&a; scanf("%f",p);
C)p =&a; scanf("%1f",*p); D)p =&a; scanf("%1f",p);
(25)现有以下结构体说明和变量定义,如图所示,指针p、q、r 分别指向一个链表中连续
的3 个结点。
struct node
{ har data;
truct node *next; }*p,*q,*r;
现要将q 和r 所指结点交换前后位置,同时要保持链表的连续,下列不能完成此操作
的语句是( )。
A)q− >next=r->next;p->next=r;r->next=q;
B)p− >next=r;q->next=r->next;r->next=q;
C)q− >next=r->next;r->next=q;p->next=r;
D)r− >next=q;p->next=r;q->next=r->next;
(26)有下列程序段
struct st
{ int x;int *y;}*pt;
int a[ ]={l,2},b[ ]={3,4};
struct st c[2] = {10,a,20,b};
pt=c;
下列选项中表达式的值为11 的是( )。
A)*pt− >y B)pt− >x
C)+ +pt− >x D)(pt+ +)->x
(27)设fp 为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返回值为
( )。
A)EOF B)非0 值
C)0 D)NULL
(28)设有以下语句
int a=1,b=2,c;
c =a^(b<<2);
执行后,C 的值为( )。
A)6 B)7
C)8 D)9
(29)有下列程序:
#include <stdio.h>
main( )
{ char c1,c2,c3,c4,c5,c6;
scanf("%c%c%c%c",&c1,&c2,&c3,&c4);
c5=getchar( ); c6=getchar( );
putchar(c1);putchar(c2);
printf("%c%c\n",c5,c6);
}
程序运行后,若从键盘输入(从第1 列开始)
123<CR>
45678<CR>
则输出结果是( )。
A)1267 B)1256
C)1278 D)1245
(30)有下列程序:
main( )
{ int y=10;
while(y--);printf("y=%d\n",y);
}
程序执行后的输出结果是( )。
A)y=0 B)y=-1
C)y=1 D)while 构成无限循环
(31)有下列程序:
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)0,1,2,0 B)0,0,0,3
C)1,1,2,0 D)编译有错
(32)有下列程序:
main( )
{ int i,j,x=0;
for(i=0;i<2;i+ +)
{ x+ +;
for(j=0;j<=3;j+ +)
{ if(j%2) continue;
x+ +;
}
x+ +;
}
printf("x=%d\n",x);
}
程序执行后的输出结果是( )。
A)x=4 B)x=8
C)x=6 D)x=12
(33)有下列程序:
int fun1(double a){return a*=a;}
int fun2(double x,double y)
{ double a=0,b=0;
a=fun1(x);b=fun1(y);return(int)(a+b);
}
main( )
{double w;w=fun2(1.1,2.0);……}
程序执行后变量w 中的值是( )。
A)5.21 B)5
C)5.0 D)0.0
(34)有下列程序:
main( )
{ int i,t[ ][3]={9,8,7,6,5,4,3,2,1};
for(i=0;i<3;i+ +) printf("%d",t[2-i][i]);
}
程序执行后的输出结果是( )。
A)7 5 3 B)3 5 7
C)3 6 9 D)7 5 1
(35)有下列程序:
fun(char p[ ][10])
{ int n=0,i;
for(i=0;i<7;i+ +)
if(p[i][0]= = 'T')n+ +;
return n;
}
main( )
{ char str[ ][10]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
printf("%d\n",fun(str));
}
程序执行后的输出结果是( )。
A)1 B)2
C)3 D)0
(36)有下列程序:
main( )
{ int i,s=0,t[ ]={l,2,3,4,5,6,7,8,9};
for(i=0;i<9;i+ =2)s+ =*(t+i);
printf("%d\n",s);
}
程序执行后的输出结果是( )。
A)45 B)20
C)25 D)36
(37)有下列程序:
void fun1(char *p)
{char *q;
q=p;
while(*q! ='\0')
{ (*q)+ +;q+ +;}
}
main( )
{ char a[ ]={"Program"}, *p;
p=&a[3];fun1(p);printf("%s\n",a);
}
程序执行后的输出结果是( )。
A)Prohsbn B)Prphsbn
C)Progsbn D)Program
(38)有下列程序:
void swap(char *x,char *y)
{ char t;
t=*x; *x=*y; *y=t;
}
main( )
{ char *s1="abc",*s2="123";
swap(s1,s2); printf("%s,%s\n",s1,s2);
}
程序执行后的输出结果是( )。
A)123,abc B)abc,123
C)1bc,a23 D)321,cba
(39)有下列程序:
int fun(int n)
{ if(n= =1)return 1;
else
return(n+fun(n-1));
}
main( )
{ int x;
scanf("%d",&x); x=fun(x); printf("%d\n",x);
}
执行程序时,给变量x 输入10,程序的输出结果是( )。
A)55 B)54
C)65 D)45
(40)有下列程序:
int fun(int x[ ],int n)
{ static int sum=0,i;
for(i=0;i<n;i+ +) sum+ =x[i];
return sum;
}
main( )
{ int a[ ]={1,2,3,4,5},b[ ]={6,7,8,9},s=0;
s=fun(a,5)+fun(b,4); printf("%d\n",s);
}
程序执行后的输出结果是( )。
A)45 B)50
C)60 D)55
(41)有下列程序:
main( )
{ union
{ char ch[2];
int d;
}s;
s.d=0x4321;
printf("%x,%x\n",s.ch[0],s.ch[1]);
}
在16 位编译系统上,程序执行后的输出结果是( )。
A)21,43 B)43,21
C)43,00 D)21,00
(42)有下列程序:
main( )
{ char *p[ ]={"3697","2584"};
int i,j;long num=0;
for(i=0;i<2;i+ +)
{ j=0;
while(p[i][j]! = '\0')
{ if((p[i][j]- '0')%2)num=10*num+p[i][j]- '0';
j+ =2;
}
}
printf("%d\n",num);
}
程序执行后的输出结果是( )。
A)35 B)37
C)39 D)3975
(43)执行下列程序后,test.txt 文件的内容是(若文件能正常打开)( )。
#include <stdio.h>
main( )
{ FILE *fp;
char *s1="Fortran",*s2="Basic";
if((fp=fopen("test.txt","wb"))= =NULL)
{printf("Can’t open test.txt file\n");exit(1);}
fwrite(s1,7,1,fp); /*把从地址s1 开始的7 个字符写到fp 所指文件中*/
fseek(fp,0L,SEEK_SET); /*文件位置指针移到文件开头*/
fwrite(s2,5,1,fp);
fclose(fp);
}
A)Basican B)BasicFortran
C)Basic D)FortranBasic
(44)下列叙述中错误的是( )。
A)C 语言源程序经编译后生成后缀为.obj 的目标程序
B)C 程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件
C)用C 语言编写的程序称为源程序,它以ASCII 代码形式存放在一个文本文件中
D)C 语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令
(45)下列叙述中错误的是( )。
A)算法正确的程序最终一定会结束
B)算法正确的程序可以有零个输出
C)算法正确的程序可以有零个输入
D)算法正确的程序对于相同的输入一定有相同的结果
(46)下列叙述中错误的是( )。
A)C 程序必须由一个或一个以上的函数组成
B)函数调用可以作为一个独立的语句存在
C)若函数有返回值,必须通过return 语句返回
D)函数形参的值也可以传回给对应的实参
(47)设有下列定义和语句
char str[20]="Program",*p;
p=str;
则下列叙述中正确的是( )。
A)*p 与str[0]的值相等
B)str 与p 的类型完全相同
C)str 数组长度和p 所指向的字符串长度相等
D)数组str 中存放的内容和指针变量p 中存放的内容相同
(48)下列叙述中错误的是( )。
A)C 程序中的#include 和#define 行均不是C 语句
B)除逗号运算符外,赋值运算符的优先级最低
C)C 程序中,j+ +;是赋值语句
D)C 程序中,+、-、*、/、%号是算术运算符,可用于整型和实型数的运算
(49)下列叙述中正确的是( )。
A)预处理命令行必须位于C 源程序的起始位置
B)在C 语言中,预处理命令行都以"#"开头
C)每个C 程序必须在开头包含预处理命令行:#include<stdio.h>
D)C 语言的预处理不能实现宏定义和条件编译的功能
(50)下列叙述中错误的是( )。
A)可以通过typedef 增加新的类型
B)可以用typedef 将已存在的类型用一个新的名字来代表
C)用typedef 定义新的类型名后,原有类型名仍有效
D)用typedef 可以为各种类型起别名,但不能为变量起别名
二、填空题(每空2 分,共40 分)
(1)对长度为10 的线性表进行冒泡排序,最坏情况下需要比较的次数为 【1】 。
(2)在面向对象方法中, 【2】 描述的是具有相似属性与操作的一组对象。
(3)在关系模型中,把数据看成是二维表,每一个二维表称为一个 【3】 。
(4)程序测试分为静态分析和动态测试。其中 【4】 是指不执行程序,而只是对程序文
本进行检查,通过阅读和讨论,分析和发现程序中的错误。
(5)数据独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,其逻辑结构可
以不变,因此,基于逻辑结构的应用程序不必修改,称为 【5】 。
(6)若变量a,b 已定义为int 类型并赋值21 和55,要求用printf 函数以a=21,b=55 的形
式输出,请写出完整的的输出语句 【6】 。
(7)下列程序用于判断a、b、c 能否构成三角形,若能,输出YES,否则输出NO。当给a、
b、c 输入三角形三条边长时,确定a、b、c 能构成三角形的条件是需同时满足三个条
件:a+b>c,a+c>b,b+c>a。请填空。
main( )
{ float a,b,c;
scanf("%f%f%f",&a,&b,&c);
if( 【7】 )printf("YES\n"); /*a、b、c 能构成三角形*/
else printf("NO\n"); /*a、b、c 不能构成三角形*/
}
(8)下列程序的输出结果是 【8】 。
main( )
{ int a[3][3]={{1,2,9},{3,4,8},{5,6,7}},i,s=0;
for(i=0;i<3;i+ +) s+ =a[i][i]+a[i][3-i-1];
printf("%d\n",s);
}
(9)当运行下列程序时,输入abcd,程序的输出结果是: 【9】 。
insert(char str[ ])
{ int i;
i=strlen(str);
while(i>0)
{str[2*i]=str[i];str[2*i-1]='*';i--;}
printf("%s\n",str);
}
main( )
{ char str[40];
scanf("%s",str); insert(str);
}
(10)下列程序的运行结果是: 【10】 。
fun(int t[ ],int n)
{ int i,m;
if(n= =1)return t[0];
else
if(n>=2){m=fun(t,n-1); return m;}
}
main( )
{ int a[ ]={11,4,6,3,8,2,3,5,9,2};
printf("%d\n",fun(a,10));
}
(11)现有两个C 程序文件T18.c 和myfun.c 同在TC 系统目录(文件夹)下,其中T18.c 文件
如下:
#include <stdio.h>
#include "myfun.c"
main( )
{fun( );printf("\n");}
myfun.c 文件如下:
void fun( )
{ char s[80],c; int n=0;
while((c=getchar( ))! ='\n') s[n+ +]=c;
n--;
while(n>=0) printf("%c",s[n--]);
}
当编译连接通过后,运行程序T18 时,输入Thank!则输出结果是: 【11】 。
(12)下列函数fun 的功能是返回str 所指字符串中以形参c 中字符开头的后续字符串的首
地址,例如:str 所指字符串为:Hello!,c 中的字符为e,则函数返回字符串:ello!
的首地址。若str 所指字符串为空串或不包含c 中的字符,则函数返回NULL。请填
空。
char *fun(char *str,char c)
{ int n=0; char *p=str;
if(p! =NULL)
while(p[n]! =c&&p[n]! = '\0')n+ +;
if(p[n]= = '\0') return NULL;
return( 【12】 );
}
(13)下列程序的功能是:输出100 以内(不含100)能被3 整除且个位数为6 的所有整数,
请填空。
main( )
( int i,j;
for(i=0; 【13】 ;i+ +)
{ j=i*10+6;
if( 【14】 )continue;
printf("%d",j);
}
}
(14)下列isprime 函数的功能是判断形参a 是否为素数,是素数,函数返回1,
否则返回0。请填空
int isprime(int a)
{ int i;
for(i=2;i<=a/2;i+ +)
if(a%i= =0) 【15】 ;
【16】 ;
}
(15)下列程序的功能是输入任意整数给n 后,输出n 行由大写字母A 开始构成的三角形
字符阵列图形。例如,输入整数5 时(注意:n 不得大于10),程序运行结果如下:
A B C D E
F G H I
J K L
M N
O
请填空完成该程序。
main( )
{int i,j,n; char ch='A';
scanf("%d",&n);
if(n<11)
{for(i=1;i<=n;i+ +)
{for(j=1; j<=n-i+1;j+ +)
{ printf("%2c",ch);
【17】 ;
}
【18】 ;
}
}
else printf("n is too large!\n")
printf("\n");
}
(16)下列程序中fun()函数的功能是:构成一个如图所示的带头结点的单向链表,在结点
的数据域中放入了具有两个字符的字符串。Disp()函数的功能是显示输出该单链表中
所有结点中的字符串。请填空完成disp()函数。
#include <stdio.h>
typedef struct node /*链表结点结构*/
{ char sub[3];
struct node *next;
}Node;
Node fun(char s) /*建立链表*/
{ …… }
void disp(Node *h)
{ Node *p;
p=h− >next;
while( 【19】 )
{printf("%s\n",P− >sub); p= 【20】 ; }
}
main( )
{ Node *hd;
hd=fun( ); disp(hd); printf("\n");
}
二级公共基础知识和C 语言程序设计
(考试时间120 分钟,满分100 分)
PDF版(非扫描)下载: 2006年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)ABCDEF B)DBEAFC
C)ABDECF D)DEBFCA
(7)在深度为7 的满二叉树中,叶子结点的个数为( )。
A)32 B)31
C)64 D)63
(8)“商品”与“顾客”两个实体集之间的联系一般是( )。
A)一对一 B)一对多
C)多对一 D)多对多
(9)在E-R 图中,用来表示实体的图形是( )。
A)矩形 B)椭圆形
C)菱形 D)三角形
(10)数据库DB、数据库系统DBS、数据库管理系统DBMS 之间的关系是( )。
A)DB 包含DBS 和DBMS B)DBMS 包含DB 和DBS
C)DBS 包含DB 和DBMS D)没有任何关系
(11)下列不合法的用户标识符是( )。
A)j2_KEY B)Double
C)4d D)_8_
(12)下列不合法的数值常量是( )。
A)011 B)1e1
C)8.0E0.5 D)0xabcd
(13)下列不合法的字符常量是( )。
A)'\018' B)'\" '
C)'\\' D)'\xcc'
(14)表达式3.6-5/2+1.2+5%2 的值是( )。
A)4.3 B)4.8
C)3.3 D)3.8
(15)下列能正确定义字符串的语句是( )。
A)char str[ ]={'\064'}; B)char str="kx43";
C)char str="; D)char str[ ]="\0";
(16)下列数组定义中错误的是( )。
A)int x[ ][3]={0};
B)int x[2][3]={{l,2},{3,4},{5,6}};
C)int x[ ][3]={{l,2,3},{4,5,6}};
D)int x[2][3]={l,2,3,4,5,6};
(17)若要求从键盘读入含有空格字符的字符串,应使用函数( )。
A)getc( ) B)gets( )
C)getchar( ) D)scanf( )
(18)下列4 个程序中,完全正确的是( )。
A)#include <stdio.h> B)#include <stdio.h>
main( ); main( )
{/*programming*/ {/* / programming / */
printf("programming! \n");} printf("programming!\n");}
C)#include <stdio.h> D)include <stdio.h>
main( ) main( )
{/* / programming*/ */ { /*programming */
printf("programming! \n");} printf("programming! \n");}
(19)若有定义:float x=1.5;int a=1,b=3,c=2;则正确的switch 语句是( )。
A)switch(x) B)switch((int)x);
{ case 1.0:printf("*\ n"); {case 1:printf("*\n");
case 2.0:printf("**\ n");} case 2:printf("**\n");}
C)switch(a+b) D)switch(a+b)
{ case 1:printf("*\n"); { case 1:printf("* \n");
case 2+1:printf("** \n");} case c:printf("** \n");}
(20)若各选项中所用变量已正确定义,fun()函数中通过return 语句返回一个函数值,下列
选项中错误的程序是( )。
A)main( ) B)float fun(int a,int b){……}
{……x =fun(2,10);……} main( )
float fun(int a,int b){……} {……x =fun(i,j);……}
C)float fun(int,int); D)main( )
main( ) {float fun(int I,int j);
{……x =fun(2,10);……} ……x =fun(i,j); ……}
float fun(int a,int b){……} float fun(int a,int b){……}
(21)在下列给出的表达式中,与while(E)中的(E)不等价的表达式是( )。
A)(!E= =0) B)(E>0‖E<0)
C)(E= =0) D)(E! =0)
(22)要求通过while 循环不断读入字符,当读入字母N 时结束循环。若变量已正确定义,
下列正确的程序段是( )。
A)while( (ch=getchar( ))! ='N') printf("%c",ch);
B)while(ch=getchar( )! ='N') printf("%c",ch);
C)while(ch=getchar( )= ='N') printf("%c",ch);
D)while((ch=getchar( ))= ='N') printf("%c",ch);
(23)已定义下列函数:
int fun(int *p)
{ return *p;)
fun 函数返回值是( )。
A)不确定的值 B)一个整数
C)形参p 中存放的值 D)形参p 的地址值
(24)若有说明语句:double *p,a;则能通过scanf 语句正确给输入项读入数据的程序段是
( )。
A)*p =&a; scanf("%1f",p); B)*p =&a; scanf("%f",p);
C)p =&a; scanf("%1f",*p); D)p =&a; scanf("%1f",p);
(25)现有以下结构体说明和变量定义,如图所示,指针p、q、r 分别指向一个链表中连续
的3 个结点。
struct node
{ har data;
truct node *next; }*p,*q,*r;
现要将q 和r 所指结点交换前后位置,同时要保持链表的连续,下列不能完成此操作
的语句是( )。
A)q− >next=r->next;p->next=r;r->next=q;
B)p− >next=r;q->next=r->next;r->next=q;
C)q− >next=r->next;r->next=q;p->next=r;
D)r− >next=q;p->next=r;q->next=r->next;
(26)有下列程序段
struct st
{ int x;int *y;}*pt;
int a[ ]={l,2},b[ ]={3,4};
struct st c[2] = {10,a,20,b};
pt=c;
下列选项中表达式的值为11 的是( )。
A)*pt− >y B)pt− >x
C)+ +pt− >x D)(pt+ +)->x
(27)设fp 为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返回值为
( )。
A)EOF B)非0 值
C)0 D)NULL
(28)设有以下语句
int a=1,b=2,c;
c =a^(b<<2);
执行后,C 的值为( )。
A)6 B)7
C)8 D)9
(29)有下列程序:
#include <stdio.h>
main( )
{ char c1,c2,c3,c4,c5,c6;
scanf("%c%c%c%c",&c1,&c2,&c3,&c4);
c5=getchar( ); c6=getchar( );
putchar(c1);putchar(c2);
printf("%c%c\n",c5,c6);
}
程序运行后,若从键盘输入(从第1 列开始)
123<CR>
45678<CR>
则输出结果是( )。
A)1267 B)1256
C)1278 D)1245
(30)有下列程序:
main( )
{ int y=10;
while(y--);printf("y=%d\n",y);
}
程序执行后的输出结果是( )。
A)y=0 B)y=-1
C)y=1 D)while 构成无限循环
(31)有下列程序:
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)0,1,2,0 B)0,0,0,3
C)1,1,2,0 D)编译有错
(32)有下列程序:
main( )
{ int i,j,x=0;
for(i=0;i<2;i+ +)
{ x+ +;
for(j=0;j<=3;j+ +)
{ if(j%2) continue;
x+ +;
}
x+ +;
}
printf("x=%d\n",x);
}
程序执行后的输出结果是( )。
A)x=4 B)x=8
C)x=6 D)x=12
(33)有下列程序:
int fun1(double a){return a*=a;}
int fun2(double x,double y)
{ double a=0,b=0;
a=fun1(x);b=fun1(y);return(int)(a+b);
}
main( )
{double w;w=fun2(1.1,2.0);……}
程序执行后变量w 中的值是( )。
A)5.21 B)5
C)5.0 D)0.0
(34)有下列程序:
main( )
{ int i,t[ ][3]={9,8,7,6,5,4,3,2,1};
for(i=0;i<3;i+ +) printf("%d",t[2-i][i]);
}
程序执行后的输出结果是( )。
A)7 5 3 B)3 5 7
C)3 6 9 D)7 5 1
(35)有下列程序:
fun(char p[ ][10])
{ int n=0,i;
for(i=0;i<7;i+ +)
if(p[i][0]= = 'T')n+ +;
return n;
}
main( )
{ char str[ ][10]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
printf("%d\n",fun(str));
}
程序执行后的输出结果是( )。
A)1 B)2
C)3 D)0
(36)有下列程序:
main( )
{ int i,s=0,t[ ]={l,2,3,4,5,6,7,8,9};
for(i=0;i<9;i+ =2)s+ =*(t+i);
printf("%d\n",s);
}
程序执行后的输出结果是( )。
A)45 B)20
C)25 D)36
(37)有下列程序:
void fun1(char *p)
{char *q;
q=p;
while(*q! ='\0')
{ (*q)+ +;q+ +;}
}
main( )
{ char a[ ]={"Program"}, *p;
p=&a[3];fun1(p);printf("%s\n",a);
}
程序执行后的输出结果是( )。
A)Prohsbn B)Prphsbn
C)Progsbn D)Program
(38)有下列程序:
void swap(char *x,char *y)
{ char t;
t=*x; *x=*y; *y=t;
}
main( )
{ char *s1="abc",*s2="123";
swap(s1,s2); printf("%s,%s\n",s1,s2);
}
程序执行后的输出结果是( )。
A)123,abc B)abc,123
C)1bc,a23 D)321,cba
(39)有下列程序:
int fun(int n)
{ if(n= =1)return 1;
else
return(n+fun(n-1));
}
main( )
{ int x;
scanf("%d",&x); x=fun(x); printf("%d\n",x);
}
执行程序时,给变量x 输入10,程序的输出结果是( )。
A)55 B)54
C)65 D)45
(40)有下列程序:
int fun(int x[ ],int n)
{ static int sum=0,i;
for(i=0;i<n;i+ +) sum+ =x[i];
return sum;
}
main( )
{ int a[ ]={1,2,3,4,5},b[ ]={6,7,8,9},s=0;
s=fun(a,5)+fun(b,4); printf("%d\n",s);
}
程序执行后的输出结果是( )。
A)45 B)50
C)60 D)55
(41)有下列程序:
main( )
{ union
{ char ch[2];
int d;
}s;
s.d=0x4321;
printf("%x,%x\n",s.ch[0],s.ch[1]);
}
在16 位编译系统上,程序执行后的输出结果是( )。
A)21,43 B)43,21
C)43,00 D)21,00
(42)有下列程序:
main( )
{ char *p[ ]={"3697","2584"};
int i,j;long num=0;
for(i=0;i<2;i+ +)
{ j=0;
while(p[i][j]! = '\0')
{ if((p[i][j]- '0')%2)num=10*num+p[i][j]- '0';
j+ =2;
}
}
printf("%d\n",num);
}
程序执行后的输出结果是( )。
A)35 B)37
C)39 D)3975
(43)执行下列程序后,test.txt 文件的内容是(若文件能正常打开)( )。
#include <stdio.h>
main( )
{ FILE *fp;
char *s1="Fortran",*s2="Basic";
if((fp=fopen("test.txt","wb"))= =NULL)
{printf("Can’t open test.txt file\n");exit(1);}
fwrite(s1,7,1,fp); /*把从地址s1 开始的7 个字符写到fp 所指文件中*/
fseek(fp,0L,SEEK_SET); /*文件位置指针移到文件开头*/
fwrite(s2,5,1,fp);
fclose(fp);
}
A)Basican B)BasicFortran
C)Basic D)FortranBasic
(44)下列叙述中错误的是( )。
A)C 语言源程序经编译后生成后缀为.obj 的目标程序
B)C 程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件
C)用C 语言编写的程序称为源程序,它以ASCII 代码形式存放在一个文本文件中
D)C 语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令
(45)下列叙述中错误的是( )。
A)算法正确的程序最终一定会结束
B)算法正确的程序可以有零个输出
C)算法正确的程序可以有零个输入
D)算法正确的程序对于相同的输入一定有相同的结果
(46)下列叙述中错误的是( )。
A)C 程序必须由一个或一个以上的函数组成
B)函数调用可以作为一个独立的语句存在
C)若函数有返回值,必须通过return 语句返回
D)函数形参的值也可以传回给对应的实参
(47)设有下列定义和语句
char str[20]="Program",*p;
p=str;
则下列叙述中正确的是( )。
A)*p 与str[0]的值相等
B)str 与p 的类型完全相同
C)str 数组长度和p 所指向的字符串长度相等
D)数组str 中存放的内容和指针变量p 中存放的内容相同
(48)下列叙述中错误的是( )。
A)C 程序中的#include 和#define 行均不是C 语句
B)除逗号运算符外,赋值运算符的优先级最低
C)C 程序中,j+ +;是赋值语句
D)C 程序中,+、-、*、/、%号是算术运算符,可用于整型和实型数的运算
(49)下列叙述中正确的是( )。
A)预处理命令行必须位于C 源程序的起始位置
B)在C 语言中,预处理命令行都以"#"开头
C)每个C 程序必须在开头包含预处理命令行:#include<stdio.h>
D)C 语言的预处理不能实现宏定义和条件编译的功能
(50)下列叙述中错误的是( )。
A)可以通过typedef 增加新的类型
B)可以用typedef 将已存在的类型用一个新的名字来代表
C)用typedef 定义新的类型名后,原有类型名仍有效
D)用typedef 可以为各种类型起别名,但不能为变量起别名
二、填空题(每空2 分,共40 分)
(1)对长度为10 的线性表进行冒泡排序,最坏情况下需要比较的次数为 【1】 。
(2)在面向对象方法中, 【2】 描述的是具有相似属性与操作的一组对象。
(3)在关系模型中,把数据看成是二维表,每一个二维表称为一个 【3】 。
(4)程序测试分为静态分析和动态测试。其中 【4】 是指不执行程序,而只是对程序文
本进行检查,通过阅读和讨论,分析和发现程序中的错误。
(5)数据独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,其逻辑结构可
以不变,因此,基于逻辑结构的应用程序不必修改,称为 【5】 。
(6)若变量a,b 已定义为int 类型并赋值21 和55,要求用printf 函数以a=21,b=55 的形
式输出,请写出完整的的输出语句 【6】 。
(7)下列程序用于判断a、b、c 能否构成三角形,若能,输出YES,否则输出NO。当给a、
b、c 输入三角形三条边长时,确定a、b、c 能构成三角形的条件是需同时满足三个条
件:a+b>c,a+c>b,b+c>a。请填空。
main( )
{ float a,b,c;
scanf("%f%f%f",&a,&b,&c);
if( 【7】 )printf("YES\n"); /*a、b、c 能构成三角形*/
else printf("NO\n"); /*a、b、c 不能构成三角形*/
}
(8)下列程序的输出结果是 【8】 。
main( )
{ int a[3][3]={{1,2,9},{3,4,8},{5,6,7}},i,s=0;
for(i=0;i<3;i+ +) s+ =a[i][i]+a[i][3-i-1];
printf("%d\n",s);
}
(9)当运行下列程序时,输入abcd,程序的输出结果是: 【9】 。
insert(char str[ ])
{ int i;
i=strlen(str);
while(i>0)
{str[2*i]=str[i];str[2*i-1]='*';i--;}
printf("%s\n",str);
}
main( )
{ char str[40];
scanf("%s",str); insert(str);
}
(10)下列程序的运行结果是: 【10】 。
fun(int t[ ],int n)
{ int i,m;
if(n= =1)return t[0];
else
if(n>=2){m=fun(t,n-1); return m;}
}
main( )
{ int a[ ]={11,4,6,3,8,2,3,5,9,2};
printf("%d\n",fun(a,10));
}
(11)现有两个C 程序文件T18.c 和myfun.c 同在TC 系统目录(文件夹)下,其中T18.c 文件
如下:
#include <stdio.h>
#include "myfun.c"
main( )
{fun( );printf("\n");}
myfun.c 文件如下:
void fun( )
{ char s[80],c; int n=0;
while((c=getchar( ))! ='\n') s[n+ +]=c;
n--;
while(n>=0) printf("%c",s[n--]);
}
当编译连接通过后,运行程序T18 时,输入Thank!则输出结果是: 【11】 。
(12)下列函数fun 的功能是返回str 所指字符串中以形参c 中字符开头的后续字符串的首
地址,例如:str 所指字符串为:Hello!,c 中的字符为e,则函数返回字符串:ello!
的首地址。若str 所指字符串为空串或不包含c 中的字符,则函数返回NULL。请填
空。
char *fun(char *str,char c)
{ int n=0; char *p=str;
if(p! =NULL)
while(p[n]! =c&&p[n]! = '\0')n+ +;
if(p[n]= = '\0') return NULL;
return( 【12】 );
}
(13)下列程序的功能是:输出100 以内(不含100)能被3 整除且个位数为6 的所有整数,
请填空。
main( )
( int i,j;
for(i=0; 【13】 ;i+ +)
{ j=i*10+6;
if( 【14】 )continue;
printf("%d",j);
}
}
(14)下列isprime 函数的功能是判断形参a 是否为素数,是素数,函数返回1,
否则返回0。请填空
int isprime(int a)
{ int i;
for(i=2;i<=a/2;i+ +)
if(a%i= =0) 【15】 ;
【16】 ;
}
(15)下列程序的功能是输入任意整数给n 后,输出n 行由大写字母A 开始构成的三角形
字符阵列图形。例如,输入整数5 时(注意:n 不得大于10),程序运行结果如下:
A B C D E
F G H I
J K L
M N
O
请填空完成该程序。
main( )
{int i,j,n; char ch='A';
scanf("%d",&n);
if(n<11)
{for(i=1;i<=n;i+ +)
{for(j=1; j<=n-i+1;j+ +)
{ printf("%2c",ch);
【17】 ;
}
【18】 ;
}
}
else printf("n is too large!\n")
printf("\n");
}
(16)下列程序中fun()函数的功能是:构成一个如图所示的带头结点的单向链表,在结点
的数据域中放入了具有两个字符的字符串。Disp()函数的功能是显示输出该单链表中
所有结点中的字符串。请填空完成disp()函数。
#include <stdio.h>
typedef struct node /*链表结点结构*/
{ char sub[3];
struct node *next;
}Node;
Node fun(char s) /*建立链表*/
{ …… }
void disp(Node *h)
{ Node *p;
p=h− >next;
while( 【19】 )
{printf("%s\n",P− >sub); p= 【20】 ; }
}
main( )
{ Node *hd;
hd=fun( ); disp(hd); printf("\n");
}