澳门新葡亰平台官网 分支结构程序设计

by admin on 2020年1月30日

三对情侣参加婚礼,三个新郞为A、B、C,三个新娘为X、Y、Z。有人不知道谁和谁结婚,于是询问了六位新人中的三位,但听到的回答是这样的:A说他将和X结婚;X说她的未婚夫是C;C说他将和Z结婚。这人听后知道他们在开玩笑,全是假话。请编程找出谁将和谁结婚。

第四章 分支结构程序设计

Hanoi塔问题——递归方法求解    

*问题分析与算法设计
将A、B、C三人用1,2,3表示,将X和A结婚表示为“X=1”,将Y不与A结婚表示为“Y!=1”。按照题目中的叙述可以写出表达式:
x!=1 A不与X结婚
x!=3 X的未婚夫不是C
z!=3 C不与Z结婚
题意还隐含着X、Y、Z三个新娘不能结为配偶,则有:
x!=y且x!=z且y!=z
穷举以上所有可能的情况,代入上述表达式中进行推理运算,若假设的情况使上述表达式的结果均为真,则假设情况就是正确的结果。

.选择题

澳门新葡亰平台官网 1

*程序说明与注释
#include<stdio.h>
int main()
{
int x,y,z;
for(x=1;x<=3;x++) /*穷举x的全部可能配偶*/
for(y=1;y<=3;y++) /*穷举y的全部可能配偶*/
for(z=1;z<=3;z++) /*穷举z的全部可能配偶*/
if(x!=1&&x!=3&&z!=3&&x!=y&&x!=z&&y!=z) /*判断配偶是否满足题意*/
{
printf(“X will marry to %c.n”,’A’+x-1); /*打印判断结果*/
printf(“Y will marry to %c.n”,’A’+y-1);
printf(“Z will marry to %c.n”,’A’+z-1);
}
}

1、逻辑运算符两侧的的运算对象的数据类型          。

假设有三个分别命名为x、y、z的圆柱形塔座,在塔座x上插有n个半径大小各不相同,以小到大由上而下编号为1,2,····,n,如图所示。现在要求将X轴上的n个圆盘移至塔Z上并仍按原来的顺序叠放,圆盘移动时必须遵循以下规则:

*运行结果
X will marry to B. (X与B结婚)
Y will marry to C. (Y与C结婚)
Z will marry to A. (Z与A结婚)

A、只能是或1                  B、只能是0或非0正数

1.每次只能移动一个圆盘

C、只能是整型或是字符型数据    D、可以是任意类型数据

2.圆盘可以插在X、Y、Z任意一个塔座上

2、下列运算符中优先级最高的是          。

3.任何时刻都不能将一个较大的圆盘压在较小圆盘之上

A、<            
B、+             C、&&         
D、!=

如何实现圆盘的移动呢?这就要用到我们强大的递归思想。设一个变量n用来调用任意一个圆盘,当n=1时,只要将一号圆盘从X上移动到Z上即可;当n>1,需要利用Y做中间塔,若能设法将压在n号盘上的n-1个圆盘从X移至Y上,然后再将n号盘移到Z上,最后将Y上的n-1个圆盘移到Z上即可!而整个过程中对那n-1个圆盘进行的两次整体操作都可以分别作为一个完整的Hanoi问题。

3、能正确表示“当x取值在[1,10]和[200,210]范围内为真,否则为假”的表达式是      。

由此求解的C函数如下:

A、(x>=1)&&(x<=10)&&(x>=200)&&(x<=210)

void move(char a,int n,char c)

B、(x>=1)&&(x<=10)||(x>=200)&&(x<=210)

{

C、(x>=1)||(x<=10)||(x>=200)||(x<=210)

//此函数的操作为:将a塔上编号为n的圆盘移至c塔上

D、(x>=1)&&(x<=10)||(x>=200)||(x<=210)

//此处省略若干字。。。

4、判断char型变量CH是否为大写字母的正确表达式         。

}

A、’A’<=CH<=’Z’               B、(CH>=’A’)&(CH<=’Z’)

void Hanoi(int n,char a,char b,char
c)

C、(CH>=’A’)&&(CH<=’Z’)      D、(‘A’<=CH)AND(‘Z’>=CH)

//将塔座a上的n个圆盘搬到c上,b作为中间塔

5、设x,y和z是int变量,且x=3,y=4,z=5,则下面表达式中值为0的是          。

{

A、’x’&&’y’                             B、x<=y

if(n==1)move(x,1,z);

C、x||y+z&&y-z                         D、!(x<y)&&!(z||1)

else

6、已知x=43,ch=’A’,y=0;则表达式(x>=y&&ch<’B’&&!y)的值是          。

{

A、0                    B、语法错                   C、1      
`             D、“假”

Hanoi(n-1,x,z,y);

7、执行以下语句后a,b的值分别为         。

move(x,n,z);

int a,b,c;

Hanoi(n-1,y,x,z);

a=b=c=1;

}

++a||++b&&++c;

}

A、2,2              
B、1,1        C、2,1       
D、1,2

可以看出,整个程序都不需要用到实际用于存放Hanoi塔的存储空间(因为算法与客观存在的数据无关嘛),所以move函数可以写成:printf(“将%i号盘从%c塔移到%c塔”,n,a,c);

8、已知int
x=10,y=20,z=30;以下语句执行后x,y,z的值分别是          。

if(x>y)

z=x;x=y;y=z;

A、x=10,y=20,z=30                             B、x=20,y=30,z=30

C、x=20,y=30,z=10                             D、x=20,y=30,z=20

9、当a=1,b=3,c=5,d=4时。执行完下面一段程序后x 的值是         。

if(a<b)

if(c<d)x=1;

else

if(a<c)

if(b<d) x=2;

else x=3;

else x=6;

else x=7;

A、1                    B、2                     C、3                     D、6

10、以下程序的运行结果是          。

main()

{int k=4,a=3,b=2,c=1;

printf(“n%dn”,k<a?k:c<b?c:a);

A、4                    B、3                     C、2                     D、1

11、执行以下程序后,变量a,b,c的值分别为            。

int x=10,y=9;

int a,b,c;

a=(–x==y++)?–x:++y;

b=x++;

c=y;

A、a=9,b=9,c=9                                B、a=8,b=8,c=10

C、a=9,b=10,c=9                               D、a
=1,b=11,c=10

12、关系运算符中优先级最低的运算符是           。

A、“>=”和“<=”    B、“>”和“<”  

C、“==”和“!=”    D、“<=”和“<”

13、逻辑运算符中,运算优先级按从高到低依次为           。

A、&&,!,||        B、||,&&,!

C、&&,||,!        D、 !,&&,||

14、对C程序在作逻辑运算时判断操作数真、假的表述,下列哪一个是正确的          。

A、0为假非0为真   B、只有1为真  

C、-1为假1为真    D、0为真非0为假

15、表达式
x==0&&y!=0||x!=0&&y=0等价于(  
)。

A、x*y==0&&x+y!=0
  B、x*y==0&&(x+y==0)

C、x==0||y==0
      D、x*y=0||x+y=0

16、表达式!x||a==b等价于(  
)。

A、!((x||a)==b)    
B、!(x||y)==b 

C、!(x||(a==b))  
  D、(!x)||(a==b)

17、下列各语句序列中,能够且仅输出整型变量a、b中最大值的是         。

A、if(a>b)
printf(“%dn”,a);
printf(“%dn”,b);

B、printf(“%dn”,b);
if(a>b) printf(“%dn”,a);

C、if(a>b)
printf(“%dn”,a);
else printf(“%dn”,b);

D、if(a<b)
printf(“%dn”,a);
printf(“%dn”,b);

18、下列各语句序列中,能够将变量u、s中最大值赋值到变量t中的是          。

A、if(u>s)t=u;
t=s;                  B、t=s;
if(u>s)t=u;

C、if(u>s)t=s; else
t=u;             D、t=u;
if(u>s)t=s;

19、下列语句应将小写字母转换为大写字母,其中正确的是          。

A、if(ch>=’a’&ch<=’z’)
ch=ch-32;      B、if(ch>=’a’&&ch<=’z’)ch=ch-32;

C、ch=(ch>=’a’&&ch<=’z’)?ch-32:”;     D、ch=(ch>’a’&&ch<‘z’)?ch-32:ch;

20、若要求在if后一对圆括号中表示a不等于0的关系,则正确表示这一关系的表达式为        。

A、a<>0         B、!a       
C、a=0              D、a

21、两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是         。

     main( )

     { int x;

       scanf(“%d”,&x);

       if(x + + 〉
5)printf(“%d”,x);

       else printf(“%dn”,x – -);     }

A、7和5     
  B、6和3     C、7和4    
D、6和4

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图