第十讲 switch()

         昨天留下的问题不知道大家思考得怎么样,不管大家思考得怎么样,我想大家心中已经有了答案,不过我还是要说说,这个问题最适合探讨for()和if()的用法了,这个问题的解决方案就是用for来遍历,用if来判断,是或非,在一遍遍的循环比较中最终得出答案,下面我们来看看这个实现清单:
—————————————–
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int A,B,C,D,E;


    for(A=1;

A<6;

A++)
   {
        for(B=1;

B<6;

B++)
       {
             if(A!=B)
             {
                 for(C=1;

C<6;

C++)
                {
                     if(C!=B &

&

C!=A)
                    {
                         for(D=1;

D<6;

D++)
                         {
                              if(D!=C&

&

D!=B&

&

D!=A)
                             {
                                  for(E=1;

E<6;

E++)
                                 {
                                      if(E!=D&

&

E!=C&

&

E!=B&

&

E!=A)
                                       {
                                            if((C!=1)&

&

(D-E==2)&

&

(E!=2)&

&

(A!=1)&

&

(A!=5)&

&

(B-C==1))
                                             {
                                                printf(“A:%d”,A);


                                                printf(“B:%d”,B);


                                                printf(“C:%d”,C);


                                                printf(“D:%d”,D);


                                                printf(“E:%d”,E);


                                             
}

                                      
}

                                  
}

                              
}

                          
}

                     
}

                  }
             
}

        
}

    
}

     system(“PAUSE”);


    

return 0;


}
——————————————-
这循环虽然嵌套得有些复杂,但是不难看懂,这个循环简单,就是遍历一遍名次后再做比较然后继续下一个,直到最终比对出答案,现在我们来看看运行结果:
第十讲 switch()
是不是很有意思?其实很多有趣问题我们都可以通过简单的代码来轻松实现,不过,这些问题留待大家去探索,现在我们先来说说switch函数吧,还记得昨天我们讲的if()语言说的那个菜单问题吗?现在我们不妨来个更简单明了的现实:
—————————————-
#include <stdio.h>#include <stdlib.h>int main()
{
char ch;


   
int n;

printf(“回复D或者d查看目录:n”);

while(scanf(“%c”,&

ch))
{
switch(ch)
{
case ‘D’:
case ‘d’:
printf(“第一讲 Hello World.tn”);

printf(“第二讲 printf()(1).tn”);

printf(“第三讲 printf()(2).tn”);

printf(“…………tn”);

printf(“回复相应的数字查看相应章节.tn”);

goto d;

default:
printf(“无效字符,请重新输入:n”);

}
}
d:    while(scanf(“%d”,&

n))
{
switch (n)
{
case 1:
printf(“第一讲 Hello World.tn”);

break;

case 2:
printf(“第二讲 printf().tn”);

break;

case 3:
printf(“第三讲 printf()(2).tn”);

break;

default:
printf(“敬请期待……n”);

break;

}
}
system(“PAUSE”);

return 0;

}
———————————————
这个实现中,我们用了2个while和两个switch来制作这个菜单,第一个while嵌套switch用来查看目录,相信细心的同学应该知道这个目录就是我们这个公众课的目录,第二个while嵌套switch用来查看目录,但由于现在我们主要是讲这个switch的用法,所以我们就只是简单的把章节名拿出来show一下就好,等到以后我们就可以输入相应的章节序号可以直接打开章节文本和内容或者直接从网络上获取。
大家可能看到一个奇怪的“d:”标志,这里顺便也就给大家说一下goto语句,goto是一个让人讨厌又让人喜欢的语句,讨厌之处是本身容易出错,但是好处就是可以直接从一个深度循环里面直接跳转出来,由于while循环有个共性,只要你给的条件满足他就会一直循环下去,俗称死循环,像我们上面的这种写法就更容难退出了,这是我们所不希望看到的,因为如果这样的话我们就会被这个while给套牢了,我们想要的是当我们进入目录之后就可以进入查看章节的章程,当然如果我们没有进入目录自然会有重新尝试的机会,所以,我们应该在正确进入目录后直接跳出目录然后进行查看章节的环节,所以我们在打印完章节后我们使用goto语句直接退出循环,进入下一个环节,goto在这里就起到了关键作用,goto后面的d是一个标识符,标明要跳转d标记的地方,想要标记某个位置就直接在该行代码前加上该标识符和冒号即可,当程序运行到goto语句时直接跳转到标记处。
说完goto,现在还有个陌生的东西要给大家说,这同时也是今天的重点,switch语句,大家是不是都看到了,在两个循环里面,switch似乎都是和case一起使用,所以我们可以简单的总结一下switch的用法:
————————————
switch(what)//判断what是什么
{
 case  what =what1://当what是what1的时候
         do something;
         break;
 case   what = other what://是其他情况的时候
         do something;
         break;
case  ……:
       ……
default://表示自己不希望what = 的值
      break;
————————————
从上面我们总结出来的用法中,大家似乎又接触到了一个新东西:break;既然今天连碰到goto和break,我们不妨再把另一个关键字拿出来一起说了吧,这个关键字当然说的是continue,这三个关键字都有跳转的意思,我们现在来看看三个关键字的区别,以便大家不要用错了:
break 命令可以与三种循环形式中的任何一种以及 switch 语句一起使用。它导致程序控制跳过包含它的循环或 switch 语句的剩余部分,继续执行紧跟在循环或 switch 后的下一条命令。
continue 命令可以与三种循环形式中的任何一种一起使用,但不能和 switch 语句一起使用。它导致程序控制跳过循环中的剩余语句。对于 while 或 for 循环,开始下一个循环周期。对于 do while 循环(明天再说这个循环),对退出条件进行判断,如果必要,开始一个循环周期。
goto 语句导致程序控制跳转到由指定标签定位的语句。冒号用来将被标记的语句同它的标签相分隔。标签名遵循变量的命名规则。被标记的语句可以出现在 goto 之前或之后。
现在陌生的东西我们都弄清楚了,我们就来看下这个程序的效果吧:
第十讲 switch()
今天 就说到这里了,大家可以尝试一下其他的吧,现在还是老规矩,留个问题大家思考一下吧:
—————————————
        一个同学很喜欢数学,有人问他年龄时他却说:“ 我的年龄平方是三位数,立方是四位数,四次方是六位数,三次方和四次方正好占遍了0,1,2,3,4,5,6,7,8,9这10个数字。”现在大家能够猜到这位同学年龄吗?
—————————————–

发表评论