试题五(共15分)阅读下列说明和程序 回答问题1至问题3 将解答填入答题纸的对应栏内。【说明】在开发

计算机 程序,联合体 已帮助 人

试题五(共15分)

阅读下列说明和程序,回答问题1至问题3,将解答填入答题纸的对应栏内。

【说明】

在开发某嵌入式系统时,设计人员根据系统要求,分别编写了相关程序,其中:

【程序1】是李工编写的一个数据交换子程序。

【程序2】是赵工编写的一段利用递归方法判别链表表示的两个数据结构是否相等的程序,若相等则返回值为1,否则返回为0。判别的准则是若两个链表的首指针相等,则相等;否则进行内部元素比较,元素中的itemid表示后面联合体un的有效性,itemid为0时,联合体un里面的data项有效,否则联合体un中的link项有效。

【程序1】

#include <stdio.h>

swap(int x,int y){

int t:

t= x;

x=y;

y=t;

}

main() {

int a,b;

a=3;

b=4;

swap(a,b);

printf(”%d, %d ",a,b);

}

【程序2】

typedef struct Item {

int itemid;

union {

char data;

struct Item *link;

}un;

struct Item *nextItem;

} ItemNode;

int EqualItem(ItemNode*x,ItemNode*y){

int res;

if(x==y) retun1;

if(1){

if (2){

If(x->itemid==0){

res= (3) ;

}

else{

res= (4) ;

}

if (res){

retun (5) ;

}

}

}

Return0;

}

【问题1】(6分)

执行【程序1】后,打印出来的a=3,b=4;并没有完成数据交换,请指出李工的问题?并改正程序错误。将答案填写在答题纸中对应的栏目。

【问题2】(5分)

仔细阅读并分析【程序2】中的C语言代码,完成其中(1)~(5)空白填空,将

答案填入答题纸的对应栏内。

【问题3】(4分)

李工编写某嵌入式软件时,遇到了一些问题,请帮助李工解答下面2个问题,并将答案填写在答题纸中对应的栏目。

(1)李工在编译时,程序没有通过编译,经检查程序后将文件头的#include<filename.h>改为#include“filename.h”后编译通过,请问#include <filename.h>和#include“filename.h”的区别是什么?

(2)李工在编写一段C++程序时,需要调用一段已编译的C语言函数,为什么要加exten“C”?

热搜:党小组人数一般多少人15名党员用分党小组吗

答案解析

难度★★☆ 搜索
  • 参考答案:【问题1】李工的问题;形参不能作为函数的输出参数使用。对应的swap函数修改如下: 【问题2】(1) x! =NULL&& y!= NULL (2) x->itemid == y-> itemid(3) x->un.data == y-> un.data(4) EqualItem(x->un.link, y-> un. link);(5) EqualItem(x->nextItem, y-> nextItem);【问题3】(1)对于#include<filename.h>,编译器从工程指定路径搜索fiename.h; 对于# include “filename.h”,编译器从当前路径和工程指定路径搜索索fiename.h;(2)c++语言支持函数重载,C语言不支持函数重载,函数被C++编译后在库中的名字与C语言不同。C++提供了C连接交换指定符号extem“C”来解决名字匹配问题。