c语⾔笔精彩试题(问题详解)
笔试题
⼀、填空题(每个空4分,共28分)
1)struct tagABC
{
char name[10];
char sex;
long sno;
float score[4];
}*pAbc;(四字节对齐)
pAbc=NULL;
那么,执⾏pAbc+=2;之后pAbc的值为(64 )
2)如下代码,最终value的值是(8)
int *p1,*p2;
int value;
p1=(int*)0×400;
p2=(int*)0×408;
value = p2-p1;
3)如下代码,printf的结果为(2)
#include〈stdio.h〉
#include〈string.h〉
void main(void)
{
char acNew[20]= “\\0\0”;
printf(“%d\n”,strlen(acNew));
}
4) 有如下程序段,运⾏该程序的输出结果是(33)
main ()
{
int y=3,x=3,z=1;
printf(“%d%d\n”,(++x,y++),z+2);
}
5)设有:int a=1,b=2,c=3,d=4,m=2,n=2;执⾏(m=a>b)&&(n=c>d)后,n的值为(2)6)struct tagAAA {
Unsigned char ucId:1;
Unsigned char ucPara0:2;
Unsigned char ucState:6;
Unsigned char ucTail:4;
Unsigned char ucAvail;
Unsigned char unTail2:4;
Unsigned long ulData;
}AAA_S
问:AAA_S在字节对齐分别为1,4情况下,占⽤的空间⼤⼩分别是多少?( 9)(12 )
⼆、选择题(每题2分,共34分)
1)若有说明int(*p)[3];以下叙述正确的是( D )
A:p是指针数组
B:(*p)[3]和*p[3]等价
C:p是指向⼀维数组中任何⼀个元素的指针
D:p是指向含有3个整型元素的⼀维数组的指针
2)以下关于单元测试的描述,哪些是对的?(D)
A:⿊盒测试针对软件的功能,不考虑功能的实现细节;
B:⽩盒测试针对源代码的测试,从程序功能的具体实现上错;
C:路径覆盖是⿊盒测试的⼀种⽅法,编写测试⽤例使程序的每条语句都能⾛到;
D:条件覆盖是百盒测试的⼀种⽅法, 编写测试⽤例使程序的每个判断的各种情况都能到3)以下可以⽤于任务间通信的有(ABCD)
A:共享内存 B:信号量
C:消息队列和管道 D:socket调⽤
4)有关结构,以下哪些描述是对的?(BC)
A:为了测试⽅便,尽量把⼀个结构的功能设计得多⼀些
B:不同结构间的关系不要过于复杂
C:结构中的各元素应代表同⼀事务的不同侧⾯,⽽不应把描述没有关系或关系很弱的不同事务的元素放到同⼀结构中D:结构中元素的布局与排列顺序可以随意设计
5)关于强制类型转化,下⾯说法正确的是(ABCD)
A:当⽬的结构的空间⼤于源结构的空间时,要重点关注内存访问超过源结构范围的情形,可能越界;
B:当⽬的结构的空间⼩于源结构的空间时,要重点关注对⽬的结构赋值不能完全覆盖源结构范围的情形,可能遗漏;
C:结构体之间的强制类型转换时,其成员字段的数据类型的差异也是要格外⼩⼼的; D:与结构体之间的强制类型转换相⽐,基本数据结构的强制类型转换更容易出现上⾯描述的情况,使⽤的时候,⼀定要慎之⼜慎;
6)正确的使⽤assert,软件系统不会对⼈为原因造成的错误进⾏处理。它有利于(A BCD) A:缺陷及早暴露,加快定位进程;
B:明确表⽰函数接⼝或算法逻辑的校验关系,增强软件代码的可读性;
C:去除不必要的容错处理,简化代码处理流程,降低软件处理复杂度;
D:强化编程接⼝之间的契约,增强软件的可维护性;
7)对于循环体的执⾏效率,下述说法正确的是(ABCD )
A:循环体内⼯作量最⼩化
B:在多重循环中,应将最忙的循环放在最内层
C:尽量减少循环的嵌套层次
D:避免在循环体内做⽆谓的判断语句,将循环语句置于判读语句的代码块之中8)设数组a[5]={10,20,30,40,50};已知指针p指向a[1];则表达式*++p的值是(A)A.20
B.21
C.30
D.31
9)有以下程序段, 执⾏后,mul的值为(B)
int a[ ]={1,3,5,7,9};
int mul, *data, x;
mul=1;
data=&a[1];
for(x=0; x<3; x++) mul *= *(data+x);
A.15
B.105
C.315
D.945
10)有以下程序段,执⾏后的结果为(D)
int list[ ]={6,7,8,9,10};
int * p;p=list;
*(p+2)=10;
printf(”%d, %d\n”,*p,*(p+2));
A.8, 10
B.6, 8
C.7, 9
D.6, 10
11)以下语句不能正确赋值的是(A)
A.char s1[10]; s1=”China”;
B.char s2[ ]={ ’C’,’h’,’i’,’n’,’a’}; C.char s3[20]=”China”;
D.char *s=”China”;
12)C语⾔中,定义PI为⼀个符号常量,正确的是(A)
A.#define PI 3.14
B.define PI 3.14
C.#include PI 3.14
D.include PI 3.14
13)有以下程序,该程序输出的结果为(B)
#define N 3
#define M N+2
#define NUM 2*M+1
main()
{
int i;
i=NUM;
printf(”%d\n”,i);
}
A.11 、
B.9
C.7
D.5
14)有以下程序,程序运⾏后的输出结果是(D )
#include
#include
main()
{ char *p=“abcde\0fghjik\0”;
printf(“%d\n” , strlen(p)); }
A.12
B.15
C.6
D.5
15)为了⽐较两个字符串s1和s2是否相等,应当使⽤( C )A.if(s1=s2)
B.if(s1==s2)
C.if(strcmp(s1, s2)==0)
D.if(strcmp(&s1, &s2)==0)
16)设有如下结构定义:
struct student
{ int num;
char name[20];
char sex;
int age;
char addr[30];
} stud;
若⽤printf(“%s\n”,…)访问该结构中name值的正确⽅法是(D )
A.stud->name
B.&www.doczj/doc/5f89e01250d380eb6294dd88d0d233d4b14e3fb5.html C.stud.&name
c语言字符常量有哪些D.www.doczj/doc/5f89e01250d380eb6294dd88d0d233d4b14e3fb5.html 17)想对⼀个⽂本⽂件的尾部追加写⼊,应当在fopen语句中使⽤的⽂件操作⽅式指⽰符号为( D )
A.w
B.r
C.wb
D.a
三、指出下列程序的错误(每题4分,共20分)
1).如下程序⽤于输出"Welcome Home"。请指出其中的错误:(4分)
void Test(void)
{
char pcArray[12];
strcpy(pcArray,"Welcome Home");
printf("%s!", pcArray);
return;
}
答案:数组越界。
2).如下程序⽤于把"blue"字符串返回,请指出其中的错误:(4分)
char *GetBLUE(void)
{
char* pcColor ;
char* pcNewColor;
pcColor = "blue";
pcNewColor = (char*)malloc(strlen(pColor));
if(NULL == pcNewColor)
{
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论