循环结构:while for break continue
循环:指做重复的事
while循环结构
while(循环条件:返回0或1的表达式){
//循环体
}
循环条件为真,就执行循环体,循环条件为假,跳出循环体。
#include<stdio.h>
int main(){
int i =1; //循环次数
while(i<=20){
//循环体
printf("helloword\n");
i++;
}
return 0;
}
例:1+2+3+4+...+100
#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循环
do{
//循环体
}while(循环条件);
#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先无条件执行一次循环体,再进行循环条件的判断。
#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;
}
练习过程详解:
#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("%d\n",--i);
return 0;
}
for语句
一般形式:
for(初始值;循环条件;循环增(减)量){
//循环体
}
例题:1+2+3+....+100
注意:while和for等价的
如果明确了循环的范围,使用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;)
相关例题:
#include<stdio.h>
int main(){
int b,s,g;
for(int i=100;i<=500;i++){
b=i/100;
s=i%100/100;
g=i%10;//个位 g=i%10
if(i==b*b*b+s*s*s+g*g*g)
printf("%d是水仙花数\n",i);
}
return 0;
}
求斐波那契数列(Fi-bo-na-cci)的前30项。
斐波那契数列指的是这样一个数列: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("%d\n",f1);
printf("%d\n",f2);
for(int i=3;i<=30;i++){
f3=f1+f2;
printf("%d\n",f3);
f1=f2;
f2=f3;
}
return 0;
}
break关键字和continue关键字
break关键字:在循环结构中,遇到break关键字跳出整个循环。
#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("%d\n",i);
}
return 0;
}
continue关键字:在循环结构中,遇到continue关键字跳出本次循环。
#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("%d\n",i); //4.i=4,4<=10(ok)--->4&2==0(ok),i=5
}
return 0;
}
典型例题
1.要求输出100-300之间不能被3整除的数。
#include<stdio.h>
int main(){
for(int i=100;i<=300;i++){
if(i%3!=0)
//if(!%3==0)continue;
printf("%d\n",i);
}
return 0;
}
2.输出以下4*5的矩阵。
#include<stdio.h>
int main(){
int i,j;
for(i=1;i<=4;i++){
for(j=1;j<=5;j++){
printf("%5d",i*j);
}
printf("\n");
}
return 0;
}
双重循环:先满足外条件进入内循环,一直内循环到不满足内条件然后继续循环外条件。
3.输入俩个正整数m和n,求其最大公约数和最小公倍数。
最大公约数:最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。 最小公倍数:两个或多个整数公有的倍数叫做它们的公倍数,其中除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("最大公约数:%d\n",i);break;
}
}
printf("最小公倍数:%d\n",m*n/i);
return 0;
}
4.利用公式求pi的近似值,直到发现某项的绝对值小于10e-6为止。
#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.
#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;
}
#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的数,判断此是否为素数(质数)
素数:质数是指在大于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之间的全部素数。
#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("%d\n",a); /*是,输出素数并给c赋0*/
c=0;
}
}
return 0;
}