6.C语言--循环

让计算机数数:

问123812843267518273618273612675317 是几位数?

怎样让计算机来数数?

思路:

1.让计算机从右边开始数

2.对10做整除

3.不停的对10整除,直到不能整除10

while 循环


初试代码

# include<stdio.h>

int main ()

{

int a,n = 0;

printf("请输入一个数\n");

scanf("%d",&a);

while(a>+0)

{

n++;

a/= 10;

}

printf("你输入的数有%d个数字\n", n);

return 0;

}

对比上面的两个程序,你认为哪个好一点?

do - while 循环

while 是先进行判断,再执行循环体。do-while是先执行循环体,再进行判断。

# include<stdio.h>

int main ()

{

int a,n = 0;

printf("请输入一个数\n");

scanf("%d",&a);

do

{

n++;

a/= 10;

} while(a>0);

printf("你输入的数有%d个数字\n", n);

return 0;

}

for循环

for(初始条件;循环条件;循环每轮的动作)

{

......

}

用for写死循环:

for(;;)

{

......

}

for 的死循环 和 while 写的死循环,编译器的优化是不一样的。for 写的死循环优化 比while 循环要好很多。


for(;条件;) == while (条件)

循环的选用大致可以参考一下建议:

1.循环固定次数,用 for循环

2.如果必须执行一次,用do-while

3.其他情况用while

循环之间基本是可以互换的。

例子:如何用1角、2角、5角的硬币凑出10元以下的金额呢?

# include<stdio.h>

int main ()

{

int x;

int one ,two,five;

scanf("%d",&x);

for (one = 1;one < x*10;one ++){

    for (two = 1;two <x*10/2;two ++){

      for (five = 1;five <x*10/5;five ++){

      if(one + two*2+five *5 == x*10){

      printf("可以用%d个1角加%d个2角加%d个5角得到%d元\n",one,two,five,x);

}


}

        }

}

return 0;

}

如果得到一种结果后就跳出循环该怎么办?

”连锁 break“

# include<stdio.h>

int main ()

{

bool exit = 0;

int x;

int one ,two,five;

scanf("%d",&x);

for (one = 1;one < x*10;one ++){

    for (two = 1;two <x*10/2;two ++){

      for (five = 1;five <x*10/5;five ++){

      if(one + two*2+five *5 == x*10){

      printf("可以用%d个1角加%d个2角加%d个5角得到%d元\n",one,two,five,x);

      exit =1;

      break;

}


}

if (exit)

break;

        }

if (exit)

break;

}

return 0;

}

不常用的goto:用goto来跳出嵌套循环

# include<stdio.h>

int main ()

{

int x;

int one ,two,five;

scanf("%d",&x);

for (one = 1;one < x*10;one ++){

    for (two = 1;two <x*10/2;two ++){

      for (five = 1;five <x*10/5;five ++){

      if(one + two*2+five *5 == x*10){

      printf("可以用%d个1角加%d个2角加%d个5角得到%d元\n",one,two,five,x);

      goto out;

}


}

        }

}

out: return 0;

}

break vs continue

当想要中止当前循环时,用 break,循环停止,执行循环体后面的代码。

continue 是跳过当前循环,执行下一次循环。

辩证看待 goto

可以考虑使用goto的情形:1.从多重循环中直接跳出 ;2. 出错时清除资源; 3.可增加程序的清晰度的情况。

下列关于使用goto语句的原则可以供读者参考。   1) 使用goto语句只能goto到同一函数内,而不能从一个函数里goto到另外一个函数里。   2) 使用goto语句在同一函数内进行goto时,goto的起点应是函数内一段小功能的结束处,goto的目的label处应是函数内另外一段小功能的开始处。   3) 不能从一段复杂的执行状态中的位置goto到另外一个位置,比如,从多重嵌套的循环判断中跳出去就是不允许的。   4)应该避免像两个方向跳转。这样最容易导致"面条代码"。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容