主题:[原创]我学习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);
}
}
}
要想理解循环其实也很容易,只要你深刻的理解了循环语句,嘿嘿,自己去体会吧,我就不多说了。
如果觉得好就请回个帖,鼓励一下我,如果不好也请回个帖说说。谢谢。
下面我就来谈谈我在学习循环方面的心得:
首先,要有大无畏的精神也就是不要怕循环,可以这样说,循环对初学者来说确实很难理解,但是它是个重点,一定要搞定它,不然对于后面要学的数组,函数等都有困难。
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);
}
}
}
要想理解循环其实也很容易,只要你深刻的理解了循环语句,嘿嘿,自己去体会吧,我就不多说了。
如果觉得好就请回个帖,鼓励一下我,如果不好也请回个帖说说。谢谢。