计算机二级C语言循环结构.docx
《计算机二级C语言循环结构.docx》由会员分享,可在线阅读,更多相关《计算机二级C语言循环结构.docx(12页珍藏版)》请在冰豆网上搜索。
计算机二级C语言循环结构
第五章循环结构
引言:
循环结构用于在给定条件成立时,反复执行某个语句组,反复执行的语句组称为循环体。
循环体可以是复合语句,也可是单一的语句或空语句。
1.while语句
(1)一般形式:
while(表达式)
循环体
intk=0;
while(k<10)
{printf(“*”);
k++;
}
printf(“end”);
while是关键字;
while后圆括号中的表达式可以是c语言中任意合法的表达式,但它不可以为空。
它用来判断是否执行循环体;
循环体在语法上认为是一条语句,若有多条则应用复合语句。
(2)执行过程:
表达式为真进入循环,表达式为假退出循环。
intk=0;
while(k<10)
{printf(“*”);
k++;
}
printf(“end”);
0<10*1
1<10*2
……..
9<10*10
10<10假
end
(3)表达式为循环控制条件。
结束循环:
改变条件表达式的值,使其最终为假
条件恒真,强行退出
intk=0;
while(k<10)
{printf(“*”);
k++;
}
printf(“end”);
intk=0,n=0;
while(k<10)
{printf(“*”);
n++;
if(n>=10)break;
}
printf(“end”);
0<10*1jia
0<10*2jia
………
0<10*9jia
0<10*10break
end
(4)程序举例:
累加思想:
编写程序,求12+22+..+n2
直到累加和大于或等于10000为止。
1
2
3
….
i++i*i
用∏/4=1-
+
-
+…..公式求∏的近似值,直到最后一项的绝对值小于10-6为止。
11/1
1/31/(1+2)
1/51/(3+2)
fm=fm+2
t=1/fm
s=1s=-s
#include
#include
main()
{doublesum=0,fm=1,pi,t=1;
ints=1;
while(fabs(t)>=1e-6)
{sum=sum+t*s;
fm=fm+2;
t=1.0/fm;
s=-s;
}
pi=4*sum;
printf(“%f\n”,pi);
}
1>=1e-60+1*131.0/3-1
1/3>=1e-61+1/3*-151.0/51
1/5>=1e-6….+1/571.0/7-1
…….
迭代思想:
用迭代法求方程x=cosx的根,要求误差小于10-6.
2.do—while语句
(1)一般形式:
do
循环体
while(表达式);
printf(“end”);
intk=0;
do
{printf(“*”);
k++;
}while(k<10);
printf(“end”);
注:
do---while联合使用;
do---while整体作为一条语句,故后面的分号不可少;
while后圆括号中的表达式为c语言中一个任意合法的表达式,它决定了是否执行循环体;
循环体语法上认为是一条语句,若有多条则应用复合语句。
(2)执行过程:
先执行后判断
intk=0;
do
{printf(“*”);
k++;
}while(k<10);
printf(“end”);
*11<10
*22<10
*33<10
……..
*99<10
*1010<10jia
end
(3)程序举例:
数列递推思想:
计算数列,直到某项大于1000为止,并输出该项的值。
f0=0,f1=1,f2=1,f3=2,f4=3,…..fn=fn-2+fn-1.
3.for语句
(1)一般形式:
for(表1;表2;表3)
循环体
intk;
for(k=0;k<10;k++)
printf(“*”);
printf(“end”);
注:
for是关键字;
圆括号中通常为3个表达式,之间用分号隔开;(表达式1给变量赋初值,表达式2为循环条件,由它的值真假决定是否执行循环体;表达式3用于循环一次后对某些变量的值进行改变。
三个表达式可省略1个或多个,表达式1和3还可是一个逗号表达式;
循环体语法上为一条语句。
(2)执行过程:
for(表1;表2;表3)
循环体
for(k=0;k<10;k++)
printf(“*”);
printf(“end”);
k=00<10*1
1<10*2
2<10*3
……..
9<10*10
10<10jia
end
intk=0;
while(k<10)
{printf("*");
k++;
}
printf("end");
intk=0;
do
{printf("*");
k++;
}
while(k<10);
printf("end");
for(k=0;k<10;k++)
printf(“*”);
printf(“end”);
(3)一般形式的变形及其注意的地方
3个表达式可省略1个或多个,但分号不可省。
表1和表3还可是逗号表达式
intk=0;
for(;;)
{printf(“*”);k++;
if(k>=10)break;
}
printf(“end”);
*1ifjia
*2ifjia
……
*10ifzhenbeak
end
intk;
for(k=0;k<10;printf(“*”),k++);
printf(“end”);
k=00<10kong*1
1<10kong*2
……
9<10kong*10
10<10jia
end
循环体可是空语句或复合语句
intsum=0,i;
for(i=1;i<=10;sum=sum+i,i++);
intsum=0,i;
for(i=1;i<=10;i++)
{sum=sum+i;
printf(“*”);
}
(4)程序举例:
编写程序,求1+2+..+100
sum=sum+i;
i++;
编写程序,求1-3+5-7+…..-99+101
sum=sum+i*s
i=i+2
编写程序,求xn25
编写程序,求x!
5!
编写程序,输入一个数判断其是否为素数。
#include
main()
{intx,i,flag=0;
scanf("%d",&x);
for(i=2;iif(x%i==0){flag=1;break;}
if(flag==0)printf("素数");
elseprintf("非素数");
}
main()
{intx,i;
for(i=2;iif(x%i==0)
{printf("非素数");break;}
if(i>=x)printf("素数");
}
4.循环嵌套
概念:
在一个循环体内又完整的包含了另外一个循环。
for(i=1;i<=5;i++)
for(j=1;j<=3;j++)
printf(“*”);
printf(“end”);
i=11<=51<=3*
2<=3*
3<=3*
4<=3jia
2<=51<=3*
2<=3*
3<=3*
4<=3jia
3<=5……
4<=5
5<=5
6<=6jia
执行过程:
当内层的循环结束后才可以到外层的下一次循环。
举例:
编写程序输出如下图形
*
***
*****
行for(i=1;i<=3;i++)
每一行空格for(k=1;k<=3-I;k++)
printf(““);
星号for(j=1;j<=i;j++)
printf(*”);
#include
main()
{inti,j;
for(i=1;i<=3;i++)
{for(j=1;j<=i;j++)
printf(“*”);
printf(“\n”);
}
}
编写程序找出2~~100以内所有素数。
外层:
范围for(i=2;i<=100;i++)
里层:
for(j=2;j
…………
#include
main()
{inti,j,flag,n=0;
for(i=2;i<=100;i++)
{flag=0;
for(j=2;j
if(i%j==0){flag=1;break;}
if(flag==0){printf(“%d”,i);n++;}
if(n%5==0)printf(“\n”);
}
}
2345
5.break语句和continue语句
for(…..)
{for(..){语句;break;}
break;
语句;
}
break跳出它所在的循环体或switch语句体
continue结束本次循环中尚未执行的语句
#include
main()
{intk=0,s=0,i;
for(i=1;i<=5;i++)
{s=s+i;
if(s>5)
{printf(“**%d%d%d\n”,i,s,k);
continue;
}
k=k+s;
printf(“%d%d%d\n”,i,s,k);
}
}
i=11<=5s==1
jia
k==1
111
2<=5s==3
Jia
K=4
234
3<=5s==6
***364continue
4<=5s==10
***4104continue
5<=5s==15
***5154continue