循环结构:while for break continue
循环:指做重复的事
while循环结构
代码语言:javascript复制while(循环条件:返回0或1的表达式){
//循环体
}
代码语言:javascript复制循环条件为真,就执行循环体,循环条件为假,跳出循环体。
#include<stdio.h>
int main(){
int i =1; //循环次数
while(i<=20){
//循环体
printf("hellowordn");
i ;
}
return 0;
}
例:1 2 3 4 ... 100
代码语言:javascript复制#include<stdio.h>
int main(){
int sum=0; //空瓶子
int i=1;
while(i<=100){
sum=sum i;
i ;
}
printf("%d",sum);
return 0;
}
注意:循环体中如果只有一句话或一个整体,{}可以省略。
do...while循环
代码语言:javascript复制do{
//循环体
}while(循环条件);
代码语言:javascript复制#include<stdio.h>
int main(){
int sum=;
int i=;
do{
sum=sumi;
i ;
}while(i<=100);
printf("%d",sum);
return 0;
}
注意:while和do...while是等价的。
while和do...while的区别:
while语句是先进性循环条件的判断,再执行循环体。
do...while先无条件执行一次循环体,再进行循环条件的判断。
代码语言:javascript复制#include<stdio.h>
int main(){
int i=1;
int a=10;
while(i<1){//1<1---->0
a=20;
i ;
}
printf("a=%d",a);
return 0;
}
练习过程详解:
代码语言:javascript复制#include<stdio.h>
int main(){
int s=0,i=1;
while(s<=10){ //1.S=0,i=1,0<=10(ok)--->s=1,i=2;
s=s i*i; //2.s=1,i=2,1<=10(ok)--->s=5,i=3;
i ; //3.s=5,i=3,5<=10(ok)--->s=14,i=4;
} //4.s=14,i=4,14<=10(false)break;
printf("%dn",--i);
return 0;
}
for语句
一般形式:
代码语言:javascript复制for(初始值;循环条件;循环增(减)量){
//循环体
}
例题:1 2 3 .... 100
注意:while和for等价的
代码语言:javascript复制如果明确了循环的范围,使用for语句。 如果循环范围不明确,使用while语句。
#include<stdio.h>
int main(){
int sum;
int i;
for(sum=0,i=1;i<=100; i)
{
sum=sum i;//sum =i
}
printf("%d",sum);
return 0;
}
for循环的几种形式:
1.初值表达式可以为空,但;不能省略。
for(;i<=100; i)
2.条件语句可以为空,如果条件语句为空,此循环会无限的执行下去(死循环)。
for(;; i)
3.循环增量也可以省略,如果省略,程序有可能会无限执行下去。
for(;i<=100;)
4.初值,循环条件,循环增量可以同时省略。
for(;;)
相当于while(1){}
5.初值表达式可以是多个表达式。
for(sum=0,i=1,;i<=100)
6.在C99中,初值表达式可以定义变量,C89不可以。
for(int i=1;i<=100;)
相关例题:
代码语言:javascript复制#include<stdio.h>
int main(){
int b,s,g;
for(int i=100;i<=500;i ){
b=i/100;
s=i0/100;
g=i;//个位 g=i
if(i==b*b*b s*s*s g*g*g)
printf("%d是水仙花数n",i);
}
return 0;
}
求斐波那契数列(Fi-bo-na-cci)的前30项。
代码语言:javascript复制斐波那契数列指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……这个数列从第3项开始,每一项都等于前两项之和。 在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1) F(n - 2)(n ≥ 2,n ∈ N*)
#include<stdio.h>
int main(){
int f1=1;
int f2=1;
int f3,f4;
printf("%dn",f1);
printf("%dn",f2);
for(int i=3;i<=30;i ){
f3=f1 f2;
printf("%dn",f3);
f1=f2;
f2=f3;
}
return 0;
}
break关键字和continue关键字
break关键字:在循环结构中,遇到break关键字跳出整个循环。
代码语言:javascript复制#include<stdio.h>
int main(){ //1.i=1,1<=10(ok)--->1%3==0(F),1,i=2
for(int i=1;i<=10;i ){ //2.i=2,2<=10(ok)--->2%3==0(F),2,i=3
if(i%3==0)break; //3.i=3,3<=10(ok)--->3%3==0(ok)
printf("%dn",i);
}
return 0;
}
continue关键字:在循环结构中,遇到continue关键字跳出本次循环。
代码语言:javascript复制#include<stdio.h>
int main(){ //1.i=1,1<=10(ok)--->1%2==0(F),1,i=2
for(int i=1;i<=10;i ){ //2.i=2,2<=10(ok)--->2%2==0(ok),i=3
if(i%2==0)continue; //3.i=3,3<=10(ok)--->3%2==0(F),3,i=4
printf("%dn",i); //4.i=4,4<=10(ok)--->4&2==0(ok),i=5
}
return 0;
}
典型例题
1.要求输出100-300之间不能被3整除的数。
代码语言:javascript复制#include<stdio.h>
int main(){
for(int i=100;i<=300;i ){
if(i%3!=0)
//if(!%3==0)continue;
printf("%dn",i);
}
return 0;
}
2.输出以下4*5的矩阵。
代码语言:javascript复制#include<stdio.h>
int main(){
int i,j;
for(i=1;i<=4;i ){
for(j=1;j<=5;j ){
printf("]",i*j);
}
printf("n");
}
return 0;
}
双重循环:先满足外条件进入内循环,一直内循环到不满足内条件然后继续循环外条件。
3.输入俩个正整数m和n,求其最大公约数和最小公倍数。
代码语言:javascript复制最大公约数:最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。 最小公倍数:两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。 最小公倍数=m*n/最大公约数
#include<stdio.h>
int main(){
unsigned int m,n;
scanf("%d%d",&m,&n);
int min;
if(m>n)min=n;
else min=m;
int i;
for(i=min;i>0;i ){
if(m%i==0&&n%i==0){
printf("最大公约数:%dn",i);break;
}
}
printf("最小公倍数:%dn",m*n/i);
return 0;
}
4.利用公式求pi的近似值,直到发现某项的绝对值小于10e-6为止。
代码语言:javascript复制#include<stdio.h>
#include<math.h>
int main(){
double sum=0;//pi/4
double a=1;//分子
double b=1;//分母
double term=a/b;//分数的每一项
while(fabs(term)>=1e-8) { //fans-->绝对值
sum =sum term;a=-a;
b=b 2;term=a/b;
}
sum =4*sum;
printf("%.12f",sum);
return 0;
}
5.
代码语言:javascript复制#include<stdio.h>
int main(){
float a1=2;float b1=1;
float a2=3;float b2=2;
float f1,f2;
float sum=(a1/b1) (a2/b2);
for(int i=3;i<=20;i ){
f1=a1 a2;f2=b1 b2;
sum=sum (f1/f2);
a1=a2;a2=f1;
b1=b2;b2=f2;
}
printf("%f",sum);
return 0;
}
代码语言:javascript复制#include<stdio.h>
int main(){
double a=2,b=1,c;
double sum=0;
for(int i=1;i<=20;i ){
sum = sum a/b;
c=a;
a=a b;
b=c;
}
printf("%f",sum);
return 0;
}
6.输入一个大于3的数,判断此是否为素数(质数)
代码语言:javascript复制素数:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
#include<stdio.h>
int main(){
int n,i;
scanf("%d",&n);
for(i=2;i<=(n-1);i ){
if(n%i==0)break;
}
if(n==i)printf("Yes!");
else printf("No!");
return 0;
}
7.求100-300之间的全部素数。
代码语言:javascript复制#include<stdio.h> /*函数头:输入输出头文件*/
int main(){
int a,b,c=0; /*定义变量的数据类型为整型并为c赋值*/
for(a=100;a<=300;a ) /*用循环使a的值增加*/
{
for(b=2;b<a;b ) /*用循环使a分别除以2到它本身的数*/
{
if(a%b==0) /*判断a是否是素数*/
break; /*否,跳出内循环*/
else
if(b==a-1) /*是,判断a是否不能被2到它本身减1整除*/
c=1; /*是,给c赋1*/
}
if(c==1) /*判断c是否等于1*/
{
printf("%dn",a); /*是,输出素数并给c赋0*/
c=0;
}
}
return 0;
}