问答题 试题五(共15分) 阅读下列说明和程序,回答问题1至问题3,将解答填入答题纸的对应栏内。 [说明] 在开发某嵌入式系统时,设计人员根据系统要求,分别编写了相关程序,其中: [程序1]是李工编写的一个数据交换子程序。 [程序2]是赵工编写的一段利用递归方法判别链表表示的两个数据结构是否相等的程序,若相等则返回值为1,否则返回为0。判别的准则是若两个链表的首指针相等,则相等:否则进行内部元素比较,元素中的itemid表示后面联合体un的有效性,itemid为0时,联合体un里面的data项有效,否则联合体un中的link项有效。
问答题 [问题1](6分) 执行[程序1]后,打印出来的a=3,b=4;并没有完成数据交换,请指出李工的问题?并改正程序错误。将答案填写在答题纸中对应的栏目。
【正确答案】 李工的问题:形参不能作为函数的输出参数使用。 对应的swap函数修改如下:
【答案解析】 函数swap采用值传递,虽然将形参x和y交换了,但是并不影响到实参,所以执行[程序1]后,打印出来的a=3,b=4;并没有完成数据交换。将值传递改成指针传递就可以了。 对应的swap函数应修改如下:
问答题 [问题2](5分) 仔细阅读并分析[程序2]中的C语言代码,完成其中(1)~(5)空白填空,将答案填入答题纸的对应栏内。
【正确答案】
【答案解析】
问答题 [问题3](4分) 李工编写某嵌入式软件时,遇到了一些问题,请帮助李工解答下面2个问题,并将答案填写在答题纸中对应的栏目。 (1)李工在编译时,程序没有通过编译,经检查程序后将文件头的 # include 改为 # include"filename.h"后编译通过,请问 # include 和 # include"filename.h"的区别是什么? (2)李工在编写一段C++程序时,需要调用一段已编译的C语言函数,为什么要加extem"C"?
【正确答案】
【答案解析】