c语言程序设计第五版习题答案解析 下载本文

完美WORD格式

第二类:将1个盘子从一个针上移到另一个针上。

下面编写程序,分别用两个函数实现以上两类操作,用hanoi函数实现第一类操作,用move函数实现上述第二类操作。hanoi(n,one,two,three)表示将n个盘子从“one”针移动到“three”针,借助“twe”针,move(getone,putone)表示一个盘子从“getone”针移动到“putone”针。getone和putone也是代表A、B、C针之一,根据每次不同情况分别去A、B、C代入。

程序如下:

void move(char getone, char putone) {

printf(\}

void hanoi(int n, char one, char two, char three )

/*将n个盘子从one借助two,移到three*/ {

if ( n==1) move(one,three);

else { hanoi(n-1, one, three,two); move(one, three);

hanoi( n-1, two, one, three); } }

main( ) { int m;

printf(\ scanf(\

printf(\ hanoi(m, 'A', 'B', 'C'); }

程序运行结果如下:

Input the number of diskes: 3 The step to move 3 diskes: A----?C A----?B C----?B A----?C B----?A B----?C A----?C

第8章 结构体与共用体

一.简答题

专业整理 知识分享

完美WORD格式

1.结构体类型与以前的标准数据类型有什么区别? 【解答】 (1)结构体类型是一种构造出来的数据类型。它具体代表多少成员还需要由用户定义。基本类型不需要用户定义而可以直接使用,而结构体类型必须先定义类型再使用。

(2)结构体类型是复合数据类型,可简单,也可复杂,而简单数据类型则比较单纯。 (3)用简单类型定义的变量一般都可直接参与多种运算,而结构体变量则往往只能对其成员进行多种运算,对整个结构体变量适用的运算很少。

2.结构体类型与共用体类型有什么异同? 【解答】

(1)结构体和共同体都是构造数据类型,使用它们都可存储多种类型的数据,可以方便地组织不同类型的数据。

(2)结构体占用的空间是所有成员所占用空间的和,而共用体则是最大成员所占据的空间。结构体重在组织多种类型的数据,从而构造一个复杂的数据类型,而共用体重在强调内存的共享与重复使用。

3.枚举类型适用于什么场合?

【解答】枚举类型用于程序中某个项目的所有可能选项是固定的,单一的表达场合时。 4.动态存储分配有什么作用?

【解答】使用动态存储分配内存空间,可以让程序适应用户对内存变化的需要,及事先不能确定内存用量的场合。它以小的牺牲(定义的指针也占用空间)换来了内存使用效率的提高。

5.类型定义有什么意义?

【解答】所谓类型定义,并不是定义了一种新类型,而是为了书写方便或使程序易于阅读,由程序员规定的一种已有类型的新名称而已。

二.运行程序写结果

1.以下程序的执行结果是 。 #include struct studinf{ char*name; float grad; }*p; main() {

struct studinf a; p=&a; p->grad=95.5;

p->name=(char*)malloc(20); strcpy(p->name, \

printf(\}

【分析与提示】本题旨在检查读者通过指针访问结构体变量的能力。同时,练习指向运算符的用法、动态分配的使用,及结构体中指针成员的使用方法。

【解答】wang pi 95.500000

2.以下程序的执行结果是 。 #include typedef struct month

专业整理 知识分享

完美WORD格式

{ char month[12]; int days; } DATE; DATE monthtab[]={\31, \28, \31, \30, \31, \30, \\\\\

main() {

int i;

for(i=0;i<12;i++)

printf(\}

【分析与提示】本题意在练习比较复杂的类型定义的用法,所以,重点放在定义形式上。 【解答】运行结果如下: January 31 February 28 March 31 April 30 May 31 June 30 July 31 August 31 September 30 October 31 November 30 December 31

3.以下程序的执行结果是 。 #include struct test {char x,y; };

union exec {int a; char b,c;

struct test d; long e;}; main() {

union exec var;

printf(\printf(\var.a=2345;

printf(\printf(\

专业整理 知识分享

完美WORD格式

printf(\printf(\

printf(\printf(\printf(\}

【分析与提示】本题设计的目的是考查读者对结构体和共用体混合使用的认识与理解。通过运行程序,查看结果,并比较源程序进行分析,可加强读者对结构体和共用体的认识。提醒读者注意:2345存储在计算机内是2进制数,表示成16进制是0x929。存储时先存储的是低字节0x29,然后是高字节0x9。

【解答】某次运行的结果如下: Size of union exec = 4 bytes. Size of variable var = 4 bytes. Address of var.a is FFD6, 0x929. Address of var.b is FFD6, 0x29. Address of var.c is FFD6, 0x29. Address of var.d is FFD6, 0x929. Address of var.d.x is FFD6, 0x29. Address of var.d.y is FFD7, 0x9. Address of var.e is FFD6, 0x929. 4.以下程序的执行结果是 。 #include

enum prov{Beijing, Tianjin, Shanghai, Chongqing, Liaoning=5, Heilongjiang, Jilin, Shandong=10, Hebei, Henan}addr;

main() {

enum prov addr;

printf(\printf(\ngjiang);

printf(\an);

addr=Shanghai; addr++;

printf(\}

【提示】本题意在熟练读者对枚举类型的认识与使用:如何定义一个枚举类型;如何定义枚举变量;如何在程序中赋值、运算等。特别要指出的是,最后一行的输出只是一个代表本枚举变量的一个整数,而不少初学者往往误认为的是一个字符串(Chongqing)。

【解答】

Beijing=0, Tianjin=1, Shanghai=2, Chongqing=3, Liaoning=5, Heilongjiang=6, Jilin=7, Shandong=10, Hebei=11, Henan=12

Address is 3. 三. 编程题

专业整理 知识分享

完美WORD格式

1.编写一程序,定义一个点的坐标。然后定义两个点,求这两个点间的距离。 【提示】本题属于结构体的简单应用。主要练习如何使用结构体变量的成员参与运算等问题。

参考代码:

#include #include struct point {int x,y; }; main() {

struct point p1,p2; /*定义两个点*/ float dist;

printf(\输入第一个点*/ scanf(\

printf(\

printf(\输入第二个点*/ scanf(\

printf(\

dist=sqrt( (p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y) );/*计算两点距离*/

printf(\}

2.请编写程序:将下表数据赋给结构体数组,并按照年龄从小到大顺序将它们输出到屏幕上。

姓名 zhangsan lisi wangwu 年龄 38 22 24 年薪 28000 22000 27000

【分析与提示】本题旨在练习结构体数组的定义、初始化及应用。对结构体数组中的内容进行排序有多种办法,鉴于本题数据较少,参考程序中使用了最原始的排序方法。

参考代码:

#include struct emp {

char name[20]; int age;

long yearsal; }; main() {

struct emp data[3]={{\

{\

专业整理 知识分享