C语言笔试一些细节问题,c语言笔试题答案

《c语言笔试题答案》由会员分享,可在线阅读,更多相关《c语言笔试题答案(10页珍藏版)》请在人人文库网上搜索。

1、一、填空题 (每个空 4分,共 28 分)1) struct tagABCchar name10 ;char sex;long sno ;float score 4;*pAbc;( 四字节对齐 )pAbc=NULL ;那么,执行 pAbc+=2 ;之后 pAbc 的值为( 64 )2) 如下代码,最终 value 的值是( 8 )int *p1,*p2;int value;p仁(int*)O x 400;p2=(int*)O x 408;value = p2-p1;3)如下代码,printf 的结果为( 2 )#include#includevoid main(void) char acNew。

2、 20= “ 00 ”;printf( “ %dn” ,strlen(acNew);4) 有如下程序段,运行该程序的输出结果是( 33 )main ()int y=3,x=3,z=1; printf(“ %d%dn”,(+x,y+),z+2);n 的值为( 2 )5) 设有:int a=1, b=2, c=3, d=4, m=2, n=2;执行(m=ab)&(n=cd)后,6) struct tagAAAUnsigned char ucId:1;Unsigned char ucPara0:2;Unsigned char ucState:6 ; Unsigned char ucTail:4;Un。

3、signed 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和 *p3等价C: p 是指向一维数组中任何一个元素的指针D: p 是指向含有 3 个整型元素的一维数组的指针2) 以下关于单元测试的描述,哪些是对的?(D )A :黑盒测试针对软件的功能,不考虑功能的实现细节;B :白盒。

4、测试针对源代码的测试,从程序功能的具体实现上找错;C :路径覆盖是黑盒测试的一种方法,编写测试用例使程序的每条语句都能走到;D :条件覆盖是百盒测试的一种方法 , 编写测试用例使程序的每个判断的各种情况都能到3) 以下可以用于任务间通信的有(ABCD)A :共享内存B:信号量C :消息队列和管道D : socket 调用4) 有关结构,以下哪些描述是对的?( BC )A:为了测试方便,尽量把一个结构的功能设计得多一些B:不同结构间的关系不要过于复杂C:结构中的各元素应代表同一事务的不同侧面,而不应把描述没有关系或关系很弱的不同事务的元素放到同一结构中D:结构中元素的布局与排列顺序可以随意设计5。

5、) 关于强制类型转化,下面说法正确的是(ABCD)A: 当目的结构的空间大于源结构的空间时,要重点关注内存访问超过源结构范围的情形,可能越界;B: 当目的结构的空间小于源结构的空间时, 要重点关注对目的结构赋值不能完全覆盖源结构范围的情 形,可能遗漏;C :结构体之间的强制类型转换时,其成员字段的数据类型的差异也是要格外小心的;D :与结构体之间的强制类型转换相比,基本数据结构的强制类型转换更容易出现上面描述的情况, 使用的时候,一定要慎之又慎;6) 正确的使用 assert ,软件系统不会对人为原因造成的错误进行处理。它有利于(A BCD )A :缺陷及早暴露,加快定位进程;B :明确表示函。

6、数接口或算法逻辑的校验关系,增强软件代码的可读性;C :去除不必要的容错处理,简化代码处理流程,降低软件处理复杂度;D :强化编程接口之间的契约,增强软件的可维护性;7) 对于循环体的执行效率,下述说法正确的是( ABCD)A :循环体内工作量最小化B :在多重循环中,应将最忙的循环放在最内层C :尽量减少循环的嵌套层次D :避免在循环体内做无谓的判断语句,将循环语句置于判读语句的代码块之中8) 设数组 a5=10,20,30,40,50 ;已知指针 p 指向 a1 ;则表达式 *+p 的值是( A )A 20B 21C . 30D . 319)有以下程序段,执行后,mul的值为(B )int。

7、 a =1,3,5,7,9;int mul, *data, x;mul=1;data=&a1;for (x=0; x#in elude n ameB . &C . stud .&n ameD .fopen语句中使用的文件操作方式指示符号为( D )17)想对一个文本文件的尾部追加写入,应当在A . wB . rC . wbD . a三、指出下列程序的错误(每题4分,共20分)请指岀其中的错误:(4 分)1).如下程序用于输岀 Welcome?Home void?Test(void) ?char?pcArray12;?strcpy(pcArray,Welcome?Home);?printf(%s。

8、!,?pcArray); ?return; 答案:数组越界。2). 如下程序用于把 blue 字符串返回,请指出其中的错误: ( char?*GetBLUE(void)?char*?pcColor?; ?char*?pcNewColor;?pcColor?=?blue; ?pcNewColor?=?(char*)malloc(strlen(pColor); ?if(NULL?=?pcNewColor)? ?return?NULL;? ?strcpy(pcNewColor,?pcColor); ?return?pcNewColor; 答案:申请内存空间不足,字符串结尾还有 0 。3) . 下面程。

9、序期望输出 str?=?hello?world ,请指出其中的错误: char?*?GetStr(char?*p)?p?=?hello?world; ?return?p; void?main() ?char?*str?=?NULL; ?if(NULL?!=?GetStr(str)? ?printf(rn?str?=?%s,str);?return; 答案:无法返回字符串,参数使用错误。4) . 请指出下面程序错误的地方: (4 分) #define?BUFFER_SIZE?256 void?Test(void) ?char?*str?=?NULL; ?str?=?(char?*)malloc(。

10、BUFFER_SIZE); ?if(NULL?=?str)?4 分)4 分)?return;?strcpy(str,?hello); free(str);if(NULL?!=?str)?strcpy(str,?world);?printf(str);?return; 答案:引用了已经释放的内存。5) . 请指出下面程序的错误: (4 分) void?GetMemory(char?*ppcChar,?int?iLength) ?if(NULL?=?ppcChar)?return;?*ppcChar?=?(char?*)malloc(iLength);?return;void?Test(void)。

11、 ?char?*szStr?=?NULL;?GetMemory(&szStr,?100); ?if(NULL?!=?szStr)? ?strcpy(szStr,?hello); ?printf(szStr);?return; 答案:没有释放内存。四、简答题(每题 4 分,共 8 分)1 )写宏定义MAX求出两个数中的较大者。(4分) 答案: #defined MAX (A,B) (A)= (B)?(A):(B) )2) 画出同下面多叉树等价的二叉树,并作说明。 (4分)答案如下:(采用树的孩子兄弟法将树转换成二叉树)五、编程题(共10分)1)给一个单链表,删除某一节点(要求:先找到是否有这个节。

12、点,然后再删除,要能 保证程序运行正确)(10分)参考解法如下:in clude#in clude typedef?struct? linkqueuel in t?data;struct?li nkqueuel?* next;lin kqueue1,li nklist;?li nklist?*creat(void)? 建立链表?li nklist?*head;?in t? n=1,le n;?li nklist?*p1,*p2;?cout le n;?head=p1=p2=(li nklist?*)malloc(sizeof(li nklist);?cout p1-data;?head- ne。

13、xt=NULL;?while( n+v=le n-1)?p1= (li nklist?*)malloc(sizeof(li nklist);?cin p1-data;?p2- next=p1;?p2=p1;?p2- next=NULL;?return?(head);?void?outli nk(li nklist?*head)?li nklist?*p;?p=head;?while(p)?coutdatan ext;?int? bia nli(li nklist?*head, i nt?Number)遍历链表,返回1说明有要删除的元素,反之lin klist?*p;p=head;while(p。

14、- next!=NULL)if( p-data= Number)return 1 ;retur n?0;lin klist?*delete node(li nklist?*head,i nt?deleteNumber)?li nklist?*Poi nter,?*Back;Back =?head;Poin ter? = Back -n ext;?while(Poi nter-data!= deleteNumber)?Poi nte 叶+;Back= Back- n ext;?if(Poi nter-data?=?deleteNumber)?pr in tf(删除首节点! n);?head?=?。

15、Poi nter -n ext;?free(?Poi nter?);?break;?else?Back- next?=?Poi nter- next;?free(Poi nter);?break;?retur n?head;void?mai n()lin klist?*head;in t?del,isexit;head=creat(); /创建一个链表 outli nk(head); / 输岀一个链表 coutendl del;isexit= bia nli(head,del); /遍历删除的节点是否存在 if(isexit) /如果存在则删除节点head=delete no de(head,del);outl in k(head);elseCout?你删除的节点不存在endl。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值