问题 问答题

试题五 阅读以下说明,回答下列问题。 [说明] 在某嵌入式处理器上,编写以下两段程序(编译选项中,存储采用4字节对齐方式)。 程序段1: struct student1{ char name[10]; long sno; char sex; float score[4]; } *p1, a1, b1; 程序段2: union student2{ char name[10]; long sno; char sex; float score[4]; } *p2, a2, b2; 汉诺塔问题说明:有n个盘子在A处,盘子从小到大,最上面的盘子最小,程序要把这n个盘子从A处搬到C处,可以在B处暂存,但任何时候都不能出现大的盘子压在小的盘子上面的情况。 下列是一段求解汉诺塔问题的C语言程序。 #include <stdio.h> void move(int n, char a, char c) { static int Step=1; printf("Step %2d: Disk %d %c---> %c\n",Step,n,a,c); Step++; } void Hanoi(int n, char a, char b, char c) { if (n>1) { Hanoi(n-1, a, c, b); move(n, a, c); Hanoi(n-1, b, a, c) ; } else move(n, a, c); } void main() { Hanoi(3,’A’, ’B’, ’C’); }

仔细阅读求解汉诺塔问题的C语言程序,完成其中(1)~(4)空白填空。

运行结果为:

Step 1:Disk 1 A--->C

Step 2: ____(1)____

Step 3:Disk 1 C--->B

Step 4: ____(2)____

Step 5: ____(3)____

Step 6:Disk2 B--->C

Step 7: ____(4)____

答案

参考答案:

(1)Disk 2 A--->B (2)Disk 3 A--->C (3)Disk 1 B--->A (4)Disk 1 A--->C

解析:

汉诺塔问题是指有n个盘子在A处,盘子从大到小,最上面的盘子最小,现在要把这n个盘子从A出搬到C处,可以在B处暂存,但任何时候不能出现大的盘子压在小的盘子上面的情况。算法如下: (1)若n=1,则可以将盘子直接从A处搬到C处; (2)假设n-1时,指导如何解; (3)则n时,根据(2)的假设,可以先把前n-1个盘子从A处通过C处搬到B处,就可以把第n个盘子直接从A处搬到C处,再把前n-1个盘子从B处通过A处搬到C处,则完成了全部盘子搬动。 因此,运行结果为: Step 1:Disk 1 A--->C Step 2:Disk 2 A--->B Step 3:Disk 1 C--->B Step 4:Disk 3 A--->C Step 5:Disk 1 B--->A Step 6:Disk 2 B--->C Step 7:Disk 1 A--->C

单项选择题 A3/A4型题
判断题