阅读以下说明,回答问题1至问题3,将答案填入答题纸对应栏内。 【说明】 在某嵌入式处理器上,编写以下两段程序(编译选项中,存储采用4字节对齐方式)。 程序段1: struct student1{ char name[10]

admin2015-05-21  23

问题     阅读以下说明,回答问题1至问题3,将答案填入答题纸对应栏内。
【说明】
    在某嵌入式处理器上,编写以下两段程序(编译选项中,存储采用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
    void move(int n,char a,char c)
    {
    static int Step=l;
    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);
}
    e⊥se 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:Disk 2 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)若11=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
转载请注明原文地址:https://kaotiyun.com/show/7hWZ777K
0

随机试题
最新回复(0)