C笔试试题.docx
《C笔试试题.docx》由会员分享,可在线阅读,更多相关《C笔试试题.docx(19页珍藏版)》请在冰豆网上搜索。
![C笔试试题.docx](https://file1.bdocx.com/fileroot1/2023-6/8/051abf07-2ec6-456e-b15a-7762024b73da/051abf07-2ec6-456e-b15a-7762024b73da1.gif)
C笔试试题
一、选择题(
(1)~(1O)每题2分,(11)~(50)每题1分,共60分)
下列各题A)、B)、c)、D)四个选项中,只有一个选项是正确的,请将正确选项
写在答题卡相应位置上,答在试卷上不得分。
1)下列选项中不属于结构化程序设计方法的是D
A)自顶向下 B)逐步求精 C)模块化 D)可复用
2)两个或两个以上模块之间关联的紧密程度称为A
A)耦合度 B)内聚度 C)复杂度 D)数据传输特性
3)下列叙述中正确的是D
A)软件测试应该由程序开发者来完成 B)程序经调试后一般不需要再测试
C)软件维护只包括对程序代码的维护 D)以上三种说法都不对
4)按照“后进先出”原则组织数据的数据结构是B
A)队列 B)栈 C)双向链表 D)二叉树
6)下列叙述中正确的是A
A)线性链表是线性表的链式存储结构 B)栈与队列是非线性结构
C)双向链表是非线性结构D)只有根结点的二叉树是线性结构
(6)对如下二叉树
A
/ \
B C
/\ /
D E F
进行后序遍历的结果为D
A)ABCDEF B)DBEAFC C)ABDECF D)DEBFCA
(7)在深度为7的满二叉树中,叶子结点的个数为C
A)32 B)31 C)64 D)63
(8)“商品”与“顾客”两个实体集之间的联系一般是D
A)一对一 B)一对多 C)多对一 D)多对多
(9)在E-R图中,用来表示实体的图形是A
A)矩形 B)椭圆形 C)菱形 D)三角形
(10)数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是C
A)DB包含DBS和DBMS B)DBMS包含DB和DBS
C)DBS包含DB和DBMS D)没有任何关系
(11)以下不合法的用户标识符是C
A)j2_KEY B)Double C)4d D) _8_
(12)以下不合法的数值常量是C
A)011 B)1e1 C)8.0E0.5 D)0xabcd
(13)以下不合法的字符常量是A
A)'\018' B)'\"' C)'\\' D)'\xcc'
14>表达式3.6-5/2+1.2+5%2的值是D
A)4.3 B)4.8 C)3.3 D)3.8
(15)以下正确定义字符串的语句是D
A)charstr[5]={'a',’b’,’c’}; B)charstr="\x43";
C)charstr=''; D)charStr[]="\0";
(16)以下数组定义中错误的是B
A)intx[][3]={O}; B)intx[2][3]={{1,2},{3,4},{5,6}};
C)intx[][3]={{1,2,3},{4,5,6}}; D)intx[2][3]={1,2,3,4,5,6};
(17)若要求从键盘读入含有空格字符的字符串,应使用函数B
A)getc() B)gets() C)getchar() D)scanf()
(18)以下四个程序中,完全正确的是B
A)#include B) #include
main(); main()
{/*programming*/ {/*/programming/*/
printf("programming!
\n");} printf("programming!
\n");}
C)#include D) include
main() main()
{/*/*progmmmfug*/*/ {/*programming*/
printf("programming!
\n");} printf("programming!
\n");}
19)若有定义:
float x=1.5; int a=1,b=3,c=2;则正确的switch语句是C
A)switch(x) B)switch((int)x);
{case1.0:
printf("*\n"); {casel:
printf("*\n");
case2.0:
printf("**\n");} case2:
printf("**\n");}
C)switch(a+b) D)switch(a+b)
{case1:
printf("*\n"); {case1:
printf("*\n");
case2+1:
printf("**\n");} casec:
printf("**\n");}
20)若各选项中所用变量已正确定义,函数fun中通过return语句返回一个函数值,以下选项中错误的程序是A
A)main() B)floatfun(inta,intb){......}
{......x=fun(2,10);......} main()
floatfun(inta,intb){......} {……x=fun(i,j);……}
C)floatfun(int,int); D)main()
main() {floatfun(inti,intj);
{...x=fun(2,10);...} ...x=fun(i,j);...}
floatfun(inta,intb){...} floatfun(inta,intb){…}
(21)在以下给出的表达式中,与while(E)中的(E)不等价的表达式是C
A)(!
E==0) B)(E>0||E<0) C)(E==O) D)(E!
=O)
(22)要求通过while循环不断读入字符,当读入字母N时结束循环。
若变量已正确定义,
以下正确的程序段是A
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)已定义以下函数
intfun(int *p)
{
return *p; }
fun函数返回值是B
A)不确定的值 B)一个整数 C)形参p中存放的值 D)形参p的地址值
(24)若有说明语句:
double *p,a;则能通过scanf语句正确给输入项读入数据的程序是D
A)*p=&a;scanf("%lf",p); B)*p=&a;scanf("%f",p);
C)p=&a; scanf("%lf",*p); D)p=&a;scanf("%lf",p);
(25)现有以下结构体说明和变量定义.如图所示,指针p、q、r分别指向一个链表中连续的三个结点。
structnode
{char data;
structnode *next;
}*p,*q,*r;
datanext datanext datanext
↑p ↑q ↑r
现要将q和r所指结点交换前后位置,同时要保持链表的连续,以下不能完成此操作
的语句是D
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)有以下程序段
structst
{intx; int*y;}*pt;
inta[]={1,2},b[]={3,4};
structstc[2]={10,a,20,b};
pt=c;
以下选项中表达式的值为11的是C
A)*pt->y B)pt->x C)++pt->x D)(pt++)->x
(27)设fP为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fP)的返回值为D
A)EOF B)非0值 C)O D)NULL
(28)设有以下语句
int a=1,b=2,c;
c=a^(b<<2);
执行后,c的值为D
A)6 B)7 C)8 D)9
(29)有以下程序
#include
main()
{charc1,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<回车>
45678<回车>
则输出结果是D
A)1267 B)1256 C)1278 D)1245
(30)有以下程序
main()
{inty=lO;
while(y--);printf("y=%d\n",y);
}
程序执行后的输出结果是B
A)y=0 B)y=-1 C)y=1 D)while构成无限循环
(31)有以下程序
main()
{inta=0,b=O,c=0,d=0;
if(a=1)b=l;c=2;
else d=3;
printf("%d,%d,%d,%d\n",a,b,c,d);
}
程序输出D
A)0,1,2,0 B)0,0,0,3 C)1,1,2,0 D)编译有错
(32)有以下程序
main()
{inti,j,x=O;
for(i=0;i<2;i++)
{x++;
for(j=0;j<=3;j++)
{if(j%2)continue;
x++;
}
x++;
}
printf("x=%d\n",x);
}
程序执行后的输出结果是B
A)x=4 B)x=8 C)x=6 D)x=12
(33)有以下程序
intfunl(doublea){returna*=a;}
intfun2(doublex,doubley)
{doublea=0,b=0;
a=funl(x);b=fun1(y);return(int)(a+b);
}
main()
{doublew;w=fun2(1.1,2.O);......}
程序执行后变量w中的值足A
A)5.21 B)5 C)5.0 D)0.0
(34)有以下程序
main()
{inti,t[][3]={9,8,7,
6,5,4,
3,2,1};
for(i=0;i<3;i++)printf("%d",t[2-i][i]);
}
程序执行后的输出结果是B
A)753 B)357 C)369 D)751
(35)有以下程序
fun(charp[][10])
{intn=0,i;
for(i=O;i<7;i++)
if(p[i][0]=='T')n++;
return n;
}
main()
{charstr[][10]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
printf("%d\n",fun(str));
}
程序执行后的输出结果是B
A)1 B)2 C)3 D)0
(36)有以下程序
main()
{inti,s=0,t[]={1,2,3,4,5,6,7,8,9};
for(i=0;i<9;i+=2)s+=*(t+i);
printf("%d\n",s);
}
程序执行后的输出结果是C
A)45 B)20 C)25 D)36
(37)有以下程序
voidfunl(char*p)
{char*q;
q=p;
while(*q!
='\0')
{(*q)++;q++; }
}
main()
{chara[]={"Program"},*p;
p=&a[3];funl(p);printf("%s\n",a);
}
程序执行后的输出结果是A
A)Prohsbn B)Prphsbn C)Progsbn D)Program
38)有以下程序
voidswap(char*x,char*y)
{chart;
t=*x;*x=*y;*y=t;
}
main()
{char*s1="abc",*s2="123";
swap(s1,s2);printf("%s,%s\n",s1,s2);
}
程序执行后的输山结果是C
A)123,abc B)abc,123 C)1bc,a23 D)321,cba
(39)有以下程序
intfun(intn)
{if(n==1)return1;
else
return(n+fun(n-1));
}
main()
{intx;
scanf("%d",&x); x=fun(x); printf("%d\n",x);
}
执行程序时,给变量x输入10,程序的输出结果是A
A)55 B)54 C)65 D)45
(40)有以下程序
intfun(intx[],intn)
{staticintsum=0,i;
for(i=O;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);
}
程序执行后的输出结果是C
A)45 B)50 C)60 D)55
(41)有以下程序
main()
{union
{charch[2];
intd;
}s;
s.d=Ox4321;
printf("%x,%x\n",s.ch[0],s.ch[l]);
}
在16位编译系统上,程序执行后的输出结果是A
A)21,43 B)43,21 C)43,00 D)21,00
(42)有以下程序
main()
{char*p[]={"3697","2584"};
inti,j; longnum=0;
for(i=0;i<2;i++)
{j=0;
while(p[j]!
='\0')
{if((p[j]-'0')%2)num=1O*num+p[j]-'0';
j+=2;
}
}
printf("%d\n",num);
}
程序执行后的输出结果是C
A)35 B)37 C)39 O)3975
(43)执行以下程序后,test.txt文件的内容是(若文件能正常打开)
#include
main()
{FILE *fp;
char*s1="Fortran",*s2="Basic";
if((fp=fopen("test.txt","wb"))==NULL)
{printf("Can'topentest.txtfile\n");exit
(1);}
fwrite(sl,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)设有以下定义和语句
charstr[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
D)c语言的预处理不能实现宏定义和条件编译的功能
<50)以下叙述中错误的是
A)可以通过typedef增加新的类型
B)可以用typedef将已存在的类型用一个新的名字来代表
C)用typedef定义新的类型名后,原有类型名仍有效
D)用typedef可以为各种类型起别名,但不能为变量起别名
二、填空题(每空2分,共40分)
请将每一个空的正确答案写在答题卡[1]至[20]序号的横线上,答在试卷上不得分
(1)对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为__45____·
(2)在面向对象方法中,__类___描述的是具有相似属性与操作的一组对象。
(3)在关系模型中,把数据看成是二维表,每一个二维表称为一个___关系____。
(4)程序测试分为静态分析和动态测试。
其中__静态分析___是指不执行程序,而只是对程序文本进行检查,通过阅读和讨论,分析和发现程序中的错误。
(5)数据独立性分为逻辑独立性与物理独立性。
当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改,称为__物理独立性____·
(6)若变量a,b已定义为int类型并赋值21和55,要求用printf函数以a=21,b=55的形式输出,请写出完整的输出语句__printf("a=%d,b=%d",a,b)_;___。
(7)以下程序用于判断a、b、c能否构成三角形,若能,输出YES,否则输出NO。
当
a、b、c输入三角形三条边长时,确定a、b、c能构成三角形的条件是需同时满足三个
条件:
a+b>c,a+c>b,b+c>a。
请填空.
main()
{floata,b,c;
scanf("%f%f%f"),&a,&b,&c);
if(_a+b>c&&a+c>b&&b+c>a__)printf("YES\n"); /*a、b、c能构成三角形*/
else printf("NO\n"); /*a、b、c不能构成三角形*/
}
(8)以下程序的输出结果是____30___·
main()
{int a[3][3]={1,2,9},{3,4,8},{5,6,7}},i,s=0;
for(i=O;i<3;i++) s+=a[i][i]+a[i][3-i-1];
printf("%d\n",s);
}
(9)当运行以下程序时,输入abcd,程序的输出结果是:
__a*b*c*d__。
insert(charstr[])
{inti;
i=strlen(str);