1、while循环
结构:
while(循环条件){
循环语句
.......
}
(1)、当满足条件时进入循环,不满足条件则直接跳过循环。
(2)、进入循环后,当条件不满足时,执行完循环体内全部语句后再跳出。
如下是用while写的一个整数分解的代码:
注:第一个while条件为x>9,如果是经常用的x>0就会无休止的进行下去,可以自己在编译器上写一写。
需要先计算输入数据的位数,然后根据十的多少次方,用来相除或取余,得到新数据。
/*整数分解的循环*/
#include<stdio.h>
#include<math.h>
int main(){
int x;
int mask=1;
int y,z,m;
printf("请输入一个整数:");
scanf("%d",&x);
m=x;
while(x>9) {
x/=10;
mask++;
}
x=m;
while(mask>=0){
mask--;
y=pow(10,mask);
z=x/y;
x=x%y;
printf("%d ",z);
}
}
2、do-while循环
do-while循环
结构:
do{
循环语句
......
}while(循环条件);
do-while循环和while循环的区别在于进入循环的先后。
前者先进入循环一次,出来之后再看符不符合循环条件,如果符合继续循环。
#include<stdio.h>
#include<math.h>
int main(){
int x;
int mask=0;
int y,z,m;
printf("请输入一个数据:");
scanf("%d",&x);
m=x;
do{
x/=10;
mask++;
} while(x>0);
x=m;
do{
y=pow(10,mask);
mask--;
z=x/y;
x=x%y;
printf(" %d ",z);
}while(mask>=0);
}
3、for循环
for循环:
结构
for(单次表达式;条件表达式;末尾循环体)
{中间循环体}
其中,表示式皆可以省略,但分号不可省略,因为“;”可以代表一个空语句,省略了之后语句减少,即为语句格式发生变化,则编译器不能识别而无法进行编译。
for循环小括号里第一个“;”号前为一个为不参与循环的单次表达式,其可作为某一变量的初始化赋值语句, 用来给循环控制变量赋初值; 也可用来计算其它与for循环无关但先于循环部分处理的一个表达式。“;”号之间的条件表达式是一个关系表达式,其为循环的正式开端,当条件表达式成立时执行中间循环体。
执行的中间循环体可以为一个语句,也可以为多个语句,当中间循环体只有一个语句时,其大括号{}可以省略,执行完中间循环体后接着执行末尾循环体。
执行末尾循环体后将再次进行条件判断,若条件还成立,则继续重复上述循环,当条件不成立时则跳出当下for循环。
例题:捕鱼和分鱼
ABCDE五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,
于是各自找地方睡觉。日上三竿,A第一个醒来,将鱼分为5份,
把多余的1条鱼扔掉,拿走自己的1份。B第二个醒来,也将鱼分5份,
把多余的1条鱼扔掉,拿走自己的1份。CDE依次醒来,也按同样的方法拿鱼。
问他们合伙至少捕了多少条鱼?
#include<stdio.h>
int main(){
int x,y;
int i;
for(x=1;x>0;x++){
y=x;
for(i=1;i<=5;i++){
if((y-1)%5==0){
y=(y-1)/5*4;
}else
break;
}
if(i==6)
break;
}
printf("Total number of fish catched=%d\n",x);
getchar();
}
解题思路:
总计将鱼五次均分,每次分配的策略是相同的,
即每次扔掉一条鱼,都能被5整除,然后拿走一份,剩下四份,
假定鱼的总数是X,则X-1后可以被五整除,余下的鱼为
4*(x-1)/5.
所以X就是题目的解