C语言while、do while、for循环的基本用法和两种算法(递推,穷举)

您所在的位置:网站首页 while的基本意思 C语言while、do while、for循环的基本用法和两种算法(递推,穷举)

C语言while、do while、for循环的基本用法和两种算法(递推,穷举)

2024-01-22 23:29| 来源: 网络整理| 查看: 265

C语言循环控制语句基本用法

循环语句使用的基本思想:

对于事先循环次数已知的称为计数控制的循环,一般使用for循环;对于事先循环次数不知的称为条件控制的循环,一般使用while或者do while循环语句;对于一个循环语句包括另外一个循环语句的称为嵌套循环;

一、while语句

一般形式: 赋初始值;赋初始值;赋初始值; while(循环控制表达式) { 循环体语句; }流程图: while

循环控制表达式是在执行循环体语句前判断的:

while语句的执行过程

循环控制表达式是在执行循环体语句前判断的; 如果表达式的值一开始就为0,则语句一次也不会被执行; a.计算循环控制表达式的值; b.如果循环控制表达式的值为真,则执行循环体语句,并返回步骤; c.如果循环控制表达式的值为假,则跳过循环,接着执行后面的语句;

例1、输出1-100之间所有的奇数;

#include void main() { int i=1;//记得赋初始值; while(i printf("%5d",i); } i++; } } 死循环(例举一种情况) #include void main() { int i=1; while(i printf("%5d",i); } i++; } }

二、do…while语句

一般形式 do { 循环体语句; } while(循环控制表达式);

while();后面有一个分号

流程图 do...while

先执行循环体语句,再进行表达式判断;

do…while语句的执行过程:

a.计算循环体语句; b.计算循环控制表达式的值; c.如果循环控制表达式的值为真,并返回步骤; d.如果循环控制表达式的值为假,则跳过循环,接着执行后面的语句; 由于是先执行,后判断表达式的真假,所以循环体中的语句至少被执行一次;

while 与 do…while的区别: (1)#include (2)#include void main() void main() { { int i=11; int i=11; while(i printf("i = %d\n",i); printf("i = %d\n",i); i++; i++; } } while(i scanf("%d",&person); if(person>machine) { printf("这个数大了!\n"); } else if(person printf("你猜对了!\n"); } i++; } while(person!=machine); printf("您一共猜了%d次\n",i); }

rand()函数生成的是0–32767之间的整数;使用时需要包括头文件 stdlib.h; rand()%b ==> [ 0, b-1 ] 之间; rand()%b+a ==> [ a,a+b-1 ]之间;

三、for语句

一般形式: for(初始化表达式;循环控制表达式;循环变量增量) { 循环语句; }

for语句中的表达式分隔符分号,有且只有两个,不可以省略;

也可以表示为其他形式:

初始化表达式 初始化表达式 for( ;循环控制表达式;循环变量增量) for( ;循环控制表达式; ) { { 循环语句; 循环语句; 循环变量增量; } } 当循环控制表达式省略时,则表示循环条件永真,不做处理的话,可能会导致死循环;

流程图: for

for语句的执行过程: a. 由初始化表达式开始; b.执行循环控制表达式,若其值为真(非0),则执行循环内语句,然后执行循环变量增量语句; c.若其值为假(0),则结束循环,执行循环外语句;

例3:(算法一:穷举法) 韩信点兵问题 韩信有一队兵,他想知道有多少人,便让士兵排队报数:按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10。编程求韩信至少有多少兵?

穷举法:从1开始,直到上述条件成立i,i则为所求的值;

解法一:

#include void main() { int i; for(i=1; ;i++) { if(i%5==1 && i%6==5 && i%7==4 && i%11==10) { printf("%d\n",i); break; } } }

利用无限循环找出第一个满足条件的值,然后跳出循环;

解法二:(对于循环次数未知的条件控制循环,一般使用while或者do while语句)

#include void main() { int i = 0; do { i++; } while(!(i%5==1 && i%6==5 && i%7==4 && i%11==10)); printf("%d\n",i); }

算法二:递推法:下一项的值是在前一项的前提下推算出来的。 求Fibonacci数列前40个数。这个数列有如下特点:第1,2两个数为1,1。从第3个数开始,该数是其前面两个数之和。

#include void main() { int i, p=1,q=1; for(i=1;i int i,sum; i=1;sum=0; round: if(i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3