循环语句
循环就是让一段代码反复执行,达到想要的效果
for 循环语句:
for 是一种比较灵活但有点危险(与其他循环相比)的一种循环
一般用一个变量来引导 for 循环的运行,一般这个变量叫做循环变量 i——>index
for([1];[2];[3])
{
[4];
} //[]里的内容可以无
1234按顺序执行
1、给循环变量赋初值:C99才可以再此处定义循环变量,C89不支持
2、判断循环条件,一般是判断循环变量是否到达了边界,如果条件 2 为真,则跳到 4,如果条件 2 为假,则退出循环
3、改变循环变量,目的是为了防止死循环,一般对循环变量进行自加或者自减
4、如果2为真,则执行此处代码,此处又叫循环体
1 2 4 3 2 4 3 2 4 3 2...
for 循环的多钟写法:
for(;;){} ——> 死循环
int i=0;
for( ; i<10; i++)
{
}
for(int i=0; i<10; )
{
...
i++;
}
while 循环语句:
while(条件) //当条件为真时执行循环体,为假时结束循环
{
//循环体
}
while 循环相当于 for 循环的精简版本 for(;条件;)
for 循环负责解决明确知道循环次数的问题
while 循环负责解决只知道结束条件,而不确定循环次数的问题
例1:
int num = 0,N = 0,sum = 0;
printf("请输入N的值:");
scanf("%d",&N);
while(N--)
{
scanf("%d",&num);
sum += num;
}
printf("sum = %d \n",sum);
例2:
int num = 0,cnt = 0;
printf("请输入整数的值:");
scanf("%d",&num);
while(num)
{
cnt++;
num /= 10;
}
printf("共有%d位位",cnt);
do while 循环
do{
//循环体
}while(条件); //分号不能少
先执行循环体,再判断循环条件是否为真,该循环至少执行一次
适合先干活,再检查的特殊情况(用的地方很少),例如:输入判断密码
问题:解释 for while do-while 有什么区别
for 循环适合在明确知道循环次数的情况下使用
while 循环适合在只知道结束条件的情况下使用
do-while 循环适合在需要先执行一遍再判断是否需要继续执行的情况下使用
循环的嵌套:
循环语句中包含循环语句
外层循环执行一次,内层循环执行n次(n取决于内存循环自身)
for(int i = 0; i < 10 ; i++ )
{
for(int j = 0; j < 10 ; j++ )
{
for(int k = 0; k < 10 ; k++ )
{
printf("*");
}
printf("#\n");
}
printf("----------------------\n");
}
训练1:计算出所有的水仙花数
#include <stdio.h>
#include <math.h>
int main(int argc,const char* argv[])
{
int num;
for(int i = 100; i < 1000 ; i++ )
{
if(i == pow((i%10),3)+pow((i/100),3)+pow((i/10%10),3))
{
printf("%d是水仙花数\n",i);
}
}
}
训练2:输入一个正整数,判断是否是素数
#include <stdio.h>
int main(int argc,const char* argv[])
{
int n = 0,i = 2;
printf("输入非1的正整数:");
scanf("%d",&n);
if(n <= 1)
{
printf("输入非法");
return 0;
}
for(; i <= n-1; i++ )
{
if(0 == (n%i))
{
printf("不是素数");
return 0;
}
}
printf("是素数!");
}
训练3:输入一个正整数,判断是否是回文数 如:123321
#include <stdio.h>
int main(int argc,const char* argv[])
{
long long n = 0,nn = 0,sum = 0;
printf("正整数:");
scanf("%lld",&n);
nn = n;
while(0 != nn)
{
sum = sum*10+(nn % 10);
nn /= 10;
}
if(sum == n)
{
printf("回文!");
}
else
{
printf("非回文");
}
}
训练4:输入一个6位密码,判断是否正确,正确显示"登录成功",错误提示还剩几次机会(最多三次机会)并继续输入,超出次数就显示"账号已锁定"并结束
#include <stdio.h>
int main(int argc,const char* argv[])
{
long psd1 = 292135,psd = 0;
int i = 0;
while(i < 3)
{
printf("请输入密码:\n");
scanf("%ld",&psd);
if(psd1 == psd)
{
printf("登陆成功\n");
break;
}
else if(0 == (3-i-1))
{
printf("帐号已锁定");
return 0;
}
else
{
printf("密码错误,还剩%d次机会 ",3-i-1);
}
i++;
}
}
训练5:输入一个整数,分解显示(正显示)
1234 - 1 2 3 4
#include <stdio.h>
int main(int argc,const char* argv[])
{
long long n = 0,sum = 0;
printf("输入:");
scanf("%lld",&n);
if(n < 0)
{
printf("- ");
n = -n;
}
while(0 != n)
{
sum *= 10;
sum += (n%10);
n /= 10;
}
while(0 != sum)
{
printf("%lld ",sum%10);
sum /= 10;
}
}