C语言中if,while, do-while和for循环用法
if 循环
if(条件成立){
…;
}
else
{
条件不成立;
}
一个基本的if语句由一个关键字if开头,跟上在括号里的一个表示条件的逻辑表达式,然后是一对大括号“{}”之间的若干条语句。如果表示条件的逻辑表达式的结果不是零,那么就执行后面跟着的这对大括号中的语句,否则就跳过这些语句不执行,而继续下面的语句。
if语句这一行结束的时候并没有表示语句结束的“;”,而后面的赋值语句写在if的下一行,并且缩进了,在这一行结束的时候有一个表示语句结束的“;”。这表明这条赋值语句是if语句的一部分,if语句拥有和控制这条赋值语句,决定它是否要被执行。
while循环:
while(条件满足){
…//循环
}
eg:判断一个数是几位?
#include<stdio.h>
int main()
{
int count=1;
int a;
scanf("%d",&a);
while(a/10){
count++;
a=a/10;// a/=10;
}
printf("%d\n",count);
return 0;
}
或者如下
#include<stdio.h>
int main()
{
int count=0;
int a;
scanf("%d",&a);
while(a){ //a>0
count++;
a=a/10;// a/=10;
}
printf("%d\n",count);
return 0;
}
do-while 循环:
在进入循环的时候不做检查,而是在执行完一轮循环体的代码之后,再来检查循环的条件是否满足,如果满足则继续下一轮循环,不满足则结束循环
do
{
<循环体语句>
}while(<循环条件>);
eg:判断一个数是几位?
#include<stdio.h>
int main()
{
int a;
int count=0;
scanf("%d",&a);
do {
count++;
a/=10;
}
while(a) ;
printf("%d\n",count);
return 0;
}
for 循环:
for(count=10;count>0;count–)
就读成:对于一开始的count=10,当count>0时,重复做循环体,每一轮循环在做完循环体内语句后,使得count–。
求n!
#include<stdio.h>
int main()
{
int n;
int sum=1;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
sum=sum*(i+1);
}
printf("%d\n",sum);
return 0;
}
#include<stdio.h>
int main()
{
int n;
int sum=1;
int i=1;
scanf("%d",&n);
do {
sum=sum*i;
i++;
}
while(i<=n) ;
printf("%d\n",sum);
return 0;
}
#include<stdio.h>
int main()
{
int n;
int sum=1;
int i=1;
scanf("%d",&n);
while(i<=n)
{
sum=sum*i;
i++;
}
printf("%d\n",sum);
return 0;
}
for(i=0;i<n;i++)
则循环的次数是n,而循环结束以后,i的值是n。循环的控制变量i,是选择从0开始还是从I开始,是判断i<n还是判断i<=n,对循环的次数,循环结束后变量的值都有影响。for中每一个表达式都是可以省略的
for(;判断;)=while(判断)
for==while
for(int i=0;i<=n;i++)
{
fact*=i;
}
等价于======
int i=1;
while(i<=n){
fact*=i;
i++;
}
如何选择 循环:
如果有固定的次数,用for
如果必须执行一次,用do-whlie
其他情况用while
break:跳出循环
continue:跳出循环
goto: 从嵌套的循环中跳出,goto out
eg:判断一个数是不是质数
#include<stdio.h>
int main()
{
int n;
int isprime=1;
scanf("%d",&n);
for(int i=2;i<n;i++)
{
if(n%i==0)
isprime=0;
break;
}
if(isprime==0)
printf("不是质数");
else
printf("是质数");
return 0;
}
eg:输出n以内的素数
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
for(int j=2;j<=n;j++)
{
int isprime=1;
for(int i=2;i<j;i++)
{
if(j%i==0)
isprime=0;
break;
}
if(isprime==1)
{
printf("%d ",j);
}
}
return 0;
}
//如何用1角,2角和5角的硬币凑出10元以下的金额呢
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<n*10;i++)
{
for(int j=1;j<n*10/2;j++)
{
for(int k=1;k<n*10/5;k++)
{
if(i+j*2+k*5==n*10)
printf("可以用%d个一角和%d个2角和%d个5角得到%d元钱\n",i,j,k,n);
}
}
}
return 0;
}
goto从嵌套循环中跳出
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<n*10;i++)
{
for(int j=1;j<n*10/2;j++)
{
for(int k=1;k<n*10/5;k++)
{
if(i+j*2+k*5==n*10)
printf("可以用%d个一角和%d个2角和%d个5角得到%d元钱\n",
i,j,k,n);
goto out;
}
}
}
out:
return 0;
}