<尚大教育,教育至上,人才为大:sdedu.cc>
- 试题五(共15分)
阅读
K列说明和程序,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
在开发某嵌入式系统时,设计人员根据系统耍求,分别编写了相关程序,其中:
【程序1】是李工编写的一个数据交换子程序。
【程序2】是赵丄编写的一段利用递归方法判别链表表示的两个数据结构是否相等的 程序,若相等则返回值为1,否则返回为0。判别的准则是若两个链表的首指针相等,则 相等;否则进行内部元素比较,元素中的
itemid表示后面联合体皿的有效性,
itemid为 0时,联合体
un里面的
data项有效,否则联合体
mi中的
link项有效。
【程序1】
#include <stdio.h> swap(int x, int y) {
y=t ;
main() {
int a, b;
swap(a,b);
printf(
n%d, %dn",
a, b);
}
【程序2】
typedef struct Item { int itemid;
char data; struct Item *link;
struct Item *nextltem;
} ItemNode;
int Equalltem( ItemNode ItemNode *y)
if (x == y ) return 1;
if ( (1) ) {
if ( (2) ) {
if ( x->itemid = 0 ) {
res = (3) :
【问题1】(6分)执行【程序1】后,打印出来的
a=3,
b=4
;并没有完成数据交换,请指出李工的问题? 并改正程序错误。将答案填写在答题纸中对应的栏目。
【问题2】(5分)
仔细阅读并分析【程序2】中的C语言代码,完成其中(1)〜(5)空白填空,将 答案填入答题纸的对应栏内。
【问题3】(4分)
李工编写某嵌入式软件时,遇到了一些问题,请帮助李工解答
K面2个问题,并将 答案填写在答题纸中对应的栏目。
(1) 李工在编译时,程序没有通过编译,经检杳程序后将文件头的
^include 〈
filename.
h> 改为 #
include ”
filename.!!” 后编译通过,请问 #
include〈
fileiiame.
li〉和 #
include ”
filename.!!’’的区别是什么?
(2) 李工在编写一段
C++程序时,需要调用一段己编译的
C语言函数,为什么耍加
extern ”
C”?
试题五分析
本题考查嵌入式
C/
C++编程知识与应用。
【问题1】
函数
swap采用值传递,虽然将形参
x和
y交换了,但是并不影响到实参,所以执 行【程序1】后,打印出来的
a=3,
b=4;并没有完成数据交换。将值传递改成指针传递就 可以了。
对应的
swap函数应修改如
K:
swap ( int x, int *y)
*y = t;
调用时应修改为
swap(&
a, &
b)
【问题2】
该段
C语言程序是一段利用递归方法判别链表表示的两个数据结构是否相等的程 序,若相等则返回值为1,否则返回为0。判别的准则是若两个链表的首指针相等,则相 等;否则进行内部元素比较,元素中的
itemid表示后面联合体
mi的有效性,
itemid为0 时,联合体
un里面的
data项有效,否则联合体
un中的
link项有效。该程序具体如卜: 如果
x=
y,则返回1,表示断定两个数据实际指向是同一地方,当然相等;
如采
x和
y都小为空则继续,杏则返回0;
如果
x->itemid ==
y->
iteinid,则继续,否则返回0;
如果
x->itemid == 0,则若
x->
un.data =
y->
un.
data,
res = 1,否则
res=0;
如果
x->
itemid不等丁• 0,联合体
un中的
link项有效,递归调用
Equalltein(
x->
un.
lmk,
y->
im.
liiik),继续判断;
如果
res=
l,也就是
x-〉
un.data ==
y-〉
im.
data,则递归调用
Equalltem(
x-〉
nextltem,
y->
nextltem),判断
K一级链表;
如果
res=0,也就是
x->
un.
data不等与
y-〉
im.
data,则即可断定两个数据不相等, 返回为0。
【问题3】分析
本题考杳考生对预处理指令
include的正确理解。对
T #
include <
filename.
h〉来说, 编译器会从丄程指定路径搜索
filename.
h文件;对
include ”
filename.
li1’来说,编译器 会从当前路径和工程指定路径搜索
filename.
h文件。
C++语言支持函数重载,
C语言不支持函数重载,函数被
C++编译后在库中的名字 与
C语言不同。为了
C++程序中能够调用
C程序,就需要
C++提供
C连接交换指定符 号
extern ”
C”来解决名字匹配问题。
参考答案 【问题1】
李工的问题:形参不能作为函数的输出参数使用。
对应的
swap函数修改如
K:
swap ( int *x, int *y)
*x = *y; *y = t;
调用时修改为
swap(&
a, &
b)
【问题2】
- x!=NULL && y!=NULL
- x->iteinid == y->itemid
- x_〉un.data == y->un.data
- Equalltein(x->im.link, y->un.link);
- Equalltein(x->nextltein,y->nextltem);
【问题3】
- 对include<filename.h>,编译器从丄程指定路径搜索filename.h;
对
T#include "
filename.
h”,编译器从当前路径和工程指定路径搜索
filename.
h;
- C++语言支持函数重载,C语言不支持函数重载,函数被C++编译后在库中的 名字与C语言不同。C++提供了 C连接交换指定符号extern ”C”来解决名字匹配问题。
<尚大教育,教育至上,人才为大:sdedu.cc>