回 帖 发 新 帖 刷新版面

主题:[原创]我学习C多重循环的心得(绝对原创)

我学C用的书是清华出版的谭老爷子写的《C程序设计(第二版)》。虽然现在网上有一部分人把他和他的书骂得一钱不值,但是在我看来那些人心态有点.....好拉,个人有个人的观点吧。题外话我就不多说了。我感觉他的书除了在写程序的风格方面不好,没有用Microsoft的匈牙利风格以外,其他的还是很不错的。是编程入门者学习的好书。
   下面我就来谈谈我在学习循环方面的心得:
首先,要有大无畏的精神也就是不要怕循环,可以这样说,循环对初学者来说确实很难理解,但是它是个重点,一定要搞定它,不然对于后面要学的数组,函数等都有困难。
   C语言中的循环语句有4个(一般的书只说有3种),即while,do....while,for,if...goto,
其中if...goto一般是不用的,因为它会破坏结构化程序设计方法,在什么时候用呢?就是在你想要从多重循环中跳到最外层时,还有可以提高程序的运行效率时用,否则,千万不要使用。while和for是当型循环,什么是当型循环呢?就是当条件为真时就循环,一旦条件为假了就停止循环,而do...while是直到型循环,就是直到条件为假了就停止循环,当型循环和直到型循环在一般情况在可以互用,当条件一开始就为假,就不能互用了,因为当型循环可以不执行循环体里的语句,而直到型循环至少要执行一次,这就是它们之间最大的区别。嘿嘿。。
   在C语言的循环语句中,for语句的功能最为强大,可以完全代替while语句,至于for语句的使用格式,请读者看书,我在这里就不再说了。
   请看几个程序,你会在这几个程序中领悟到循环的真谛。。。嘿嘿。。。
   1.打印出所以的"水仙花数"。
     所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
     分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
     程序代码:
main()
{
        int i,j,k,n;
        printf("water flower number is:\n");
        for(n=100;n<1000;n++)
         {
            i=n/100;
            j=(n-i*100)/10;
            k=n%10;
              if(i*i*i+j*j*j+k*k*k==n)
                printf("%d\n",n);
  }
}
   再看看另外一种方法:
   分析:我们可以用一个三重循环来解决这个问题:
   程序代码:
main()
{
        int i,j,k,n;
        printf("water flower number is:\n");
        for(i=1;i<=9;i++)
         for(j=0;j<=9;j++)
          for(k=0;k<=9;k++)
           {if(100*i+10*j+k==i*i*i+j*j*j+k*k*k)
              printf("%d%d%d\n",i,j,k);
           }
}
  两段不同代码都得出了同样一个结果,其实对于同一个编程题有许许多多种解法,就看你怎么做了。嘿嘿。。
    我们再来看一个题:
   公元钱五世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
   分析:用枚举法来做。
   程序代码:
main( )
{
     int cocks,hens,chicks;
      for(cocks=0;cocks<=19;cocks++)
       {
         for(hens=0;hens<=33;hens++)
          {
            chicks=100-cocks-hens;
              if(5*cocks+3*hens+chicks/3==100&&chicks%3==0)
                printf("%d,%d,%d\n",cocks,hens,chicks);

          }

       }
}

要想理解循环其实也很容易,只要你深刻的理解了循环语句,嘿嘿,自己去体会吧,我就不多说了。
  如果觉得好就请回个帖,鼓励一下我,如果不好也请回个帖说说。谢谢。

回复列表 (共18个回复)

11 楼

看了9楼的回答,觉得自己真是孤陋寡闻,居然不知道QB还有这等本事。

12 楼

你们都是高手,可我略看了一下觉得就很好啊

13 楼

我想好好学习一个C语言的编程风格,请问谁有资料,谢谢!

14 楼

推荐楼主看《程序设计实践》。

15 楼

谢谢。。不知能不能加你的QQ,以后有问题向你请教。

16 楼

那个喜欢goto因为goto速度快的,
还拿出一大堆数据比较精确到十几分之一的,
你还是学汇编去吧。
C/C++对你来说只是小菜一碟,
不值得你学。

不过你随手举了个例子就是个循环次数为0的循环,
你想说明什么?

17 楼

各人有各人的看法,对于初学者来到这里就感觉晕了,因为不知道应该选择哪本书为教材。

18 楼

我想好好学习一个C语言的编程风格,请问谁有资料,谢谢!
推荐楼主看《程序设计实践》。

---呵呵,不要看,你还看不懂的,最多就能看懂前面几页
你现在多注意以下怎么才能让别人更清晰地知道你要表达的意思

我来回复

您尚未登录,请登录后再回复。点此登录或注册