C语言循环控制null循环控制循环控制1 while语句
2 do--while 语句
3 for语句
4 break、continue和Goto语句
5 循环的嵌套
6 几种循环的比较
7 程序举例null循环:就是在给定的条件成立时反复执行某一程序段,被反复执行的程序段称为循环体
C语言实现循环的语句:
while 语句
do ~ while 语句
for 语句
用break continue goto 语句1 while语句 while 语句 常称为“当型”循环语句。一般形式:while(表达式)
循环体语句;执行流...
null循环控制循环控制1 while语句
2 do--while 语句
3 for语句
4 break、continue和Goto语句
5 循环的嵌套
6 几种循环的比较
7 程序举例null循环:就是在给定的条件成立时反复执行某一程序段,被反复执行的程序段称为循环体
C语言实现循环的语句:
while 语句
do ~ while 语句
for 语句
用break continue goto 语句1 while语句 while 语句 常称为“当型”循环语句。一般形式:while(
达式)
循环体语句;执行流程:
1 while语句null特点:先判断表达式,后执行循环体
说明:
循环体如果包含一个以上的语句,应该用花括号括起来,以复合语句形式出现。
循环体有可能一次也不执行
循环体可为任意类型语句
下列情况,退出while循环
条件表达式不成立(为零)
循环体内遇break,return,goto
无限循环: while(1)
循环体;null例 用while循环求 #include
void main()
{ int i,sum=0;
i=1;
while(i<=100)
{ sum=sum+i;
i++;
}
printf("%d",sum);
}sum=0+1
sum=1+2=3
sum=3+3=6
sum=6+4
……
sum=4950+100=5050null例 显示1~10的平方#include
void main()
{ int i=1;
while(i<=10)
{ printf("%d*%d=%d\n",i,i,i*i);
i++;
}
}运行结果:
1*1=1
2*2=4
3*3=9
4*4=16
5*5=25
6*6=36
7*7=49
8*8=64
9*9=81
10*10=1002 do--while 语句 do--while语句 常称为“直到型”循环语句一般形式:do
循环体语句;
while(表达式);执行流程:2 do--while 语句null特点:先执行循环体,后判断表达式
说明:
至少执行一次循环体
do~while可转化成while结构While循环null例 用do~while循环求 #include
void main()
{ int i,sum=0;
i=1;
do
{ sum+=i;
i++;
}while(i<=100);
printf("%d",sum);
}
nullwhile和do~while比较
在一般情况下,用while语句和用do--while语句处理同一问题时,若二者的循环体部分是一样的,它们的结果也一样。
但在 while后面的表达式一开始就为假(0值)时,两种循环的结果是不同的:
do--while语句执行循环一次;
而 while语句一次循环也不执行。#include
void main()
{ int i,sum=0;
scanf("%d",&i);
do
{ sum+=i;
i++;
}while(i<=10);
printf("%d",sum);
}#include
void main()
{ int i,sum=0;
scanf("%d",&i);
while(i<=10)
{ sum+=i;
i++;
}
printf("%d",sum);
}
3 for语句C语言中最灵活、最复杂的循环语句;
它不但可以用于循环次数确定的情况,
还可以用于循环次数不确定的情况;
它可实现while和do--while语句的所有功能3 for语句null一般形式:for([expr1] ;[ expr2] ;[ expr3])
循环体语句执行流程: for 语 句nullfor语句一般应用形式:for(循环变量赋初值;循环条件;循环变量增值)
{
循环体
}#include
void main()
{ int i,sum=0;
for(i=1;i<=100;i++)
sum+=i;
printf("%d",sum);
}相当于:
i=1;
while (i<=100)
{ sum=sum+i;
i++; }null说明:
for语句中expr1, expr2 ,expr3 类型任意,可省略一个、二个甚至全部,但省掉表达式时,括号中的两个分号不能省略
如果expr2省略,即不判断循环条件,认为表达式始终为真,循环将无终止地进行下去
无限循环一般用for(;;)这种形式
for语句可以转换成while结构expr1;
while(expr2)
{
循环体语句;
expr3;
}null例:#include
void main( )
{ int i=0;
for(i=0;i<10;i++)
putchar(‘a’+i);
}运行结果:abcdefghij#include
void main( )
{ int i=0;
for(;i<10;i++)
putchar(‘a’+i);
}#include
void main( )
{ int i=0;
for(;i<10;)
putchar(‘a’+(i++));
}for语句表达式的省略null#include
void main()
{ int i,j,k;
for(i=0,j=100;i<=j;i++,j--)
{ k=i+j;
printf("%d+%d=%d\n",i,j,k);
}
}for语句中的逗号表达式for语句中,循环体不需要任何操作时用空语句#include
void main( )
{ int i=0;
for(;i<10;putchar(‘a’+i),i++)
;
}4 break、continue和goto语句4 break、continue和goto语句break语句
功能:在循环语句和开关(switch)语句中使用,终止并跳出循环体或开关体
说明:
break只能终止并跳出最近一层的结构
break常常与if语句(循环结构)和switch语句一起使用
不要用于循环和switch语句之外的任何其它地方nullnullnullbreak举例:输出圆面积,面积大于100时停止#include
#define PI 3.14159
void main()
{
int r;
float area;
for(r=1;r<=10;r++)
{ area=PI*r*r;
if(area>100)
break;
printf("r=%d,area=%.2f\n",r,area);
}
}nullbreak举例:小写字母转换成大写字母,直至输入非小写字母字符#include
void main()
{
char c;
while(1)
{ c=getchar(); getchar():
if(c>='a' && c<='z')
putchar(c-'a'+'A');
else
break;
}
}getchar()要按Enter键才能响应
过滤Enter键getchar() 按回车才响应并回显
getch() 不按回车就响应,不回显
此处可用一getch()代替nullbreak举例:
对键盘输入的正数累加,当输入的数据为负数时,程序结束#include
void main()
{ int x; long sum=0;
for(;;)
{ scanf("%d",&x);
if(x>=0) sum+=x;
else break;
}
printf("sum=%ld",sum);
}nullcontinue语句
功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次循环条件的判断
仅用于循环语句中null #include
void main()
{ int n;
for (n=100;n<=200;n++)
{ if (n%3= =0)
continue;
printf(“%d”,n);
}
} 分析:n从100循环到200,判断当n不能被3 整除时,输出n;而当n不能被3 整除时执行continue语句,结束本次循环,转而开始一个新数的判断例 把100~200之间不能被3整除的数输出。null例 求输入的十个整数中正数的个数及其平均值#include
void main()
{ int i,num=0,a;
float sum=0;
for(i=0;i<10;i++)
{ scanf("%d",&a);
if(a<=0) continue;
num++; sum+=a;
}
printf("%d plus integer's sum :%6.0f\n",num,sum);
printf("Mean value:%6.2f\n",sum/num);
}nullgoto语句及用goto构成循环goto语句一般格式: goto 标号;
….…..
标号:语句; 功能:无条件转移语句,一般用于以下两种场合
与 if 语句一起构成循环结构;
退出多重循环(不同于break语句和continue语句)说明:
语句标号用标识符表示,须符合标识符的命名
goto语句会引起程序流程的跳转,无限制的使用会破坏结构化程序的逻辑结构,降低程序的可读性,限制使用goto语句null#include
void main()
{ int i,sum=0;
i=1;
loop: if(i<=100)
{ sum+=i;
i++;
goto loop;
}
printf("%d",sum);
}例 用if 和goto语句构成循环,求null例 从键盘输入一组数据,以0结束输入,求数据和#include
void main()
{ int number,sum=0;
read_loop: scanf("%d",&number);
if(!number) goto print_sum;
sum+=number;
goto read_loop;
print_sum: printf("The total sum is %d\n",sum);
}材料5 循环的嵌套5 循环的嵌套循环体中又包含循环称为循环的嵌套。
内嵌的循环中又可以嵌套循环,就构成循环的多重嵌套,也称为多重循环。
三种循环可互相嵌套,层数不限
外层循环可包含两个以上内循环,但不能相互交叉while()
{
……
while()
{
……
}
…...
}do
{
……
do
{
……
}while( );
…...
}while( );while()
{
……
do
{
……
}while( );
…….
}for( ; ;)
{
……
do
{
……
}while();
……
while()
{
……
}
…...
}null例 编程输出下面的数字金字塔(1到9 ).
1
121
12321
.…..
12345678987654321分析问题,找出规律:
每一行中的最大数字即为该行的行号且居中
每一行中数字从1递增到该行行号后再递减到1null外层循环从1循环到9共输出9行,用行号作循环变量i
内层循环循环的次数与行号i有关,需要用多个循环来实现
(1) 在每行前面输出9- i个空格
(2) 输出1到i
(3) 输出i -1到1#include
void main()
{
int i,j,k,m;
for (i=1;i<=9;i++)
{ for (j=1;j<=9-i;j++)
putchar(' ');
for (j=1;j<=i;j++)
printf("%d", j);
for (j=i-1;j>=1;j--)
printf("%d", j);
printf("\n");
}
}用程序实现:1
121
12321
.…..
123456789876543216 几种循环的比较四种循环都可以用来处理同一问题,一般情况下它们可以互相代替。不提倡用goto 型循环。
关于循环的控制……
while (表达式)
语句……
do 语句
while (表达式);……
for (表达式1;表达式2;表达式3)
语句6 几种循环的比较null循环体的执行while、do-while、for循环可以用break语句跳出循环,continue结束本次循环,但由goto和if语句组成的循环不能7 程序举例求n!
算法:通过分析问题,找出解决问题的方法和步骤 n!=1*2*···*n
设置变量:x放连乘的结果,i放每次连乘的数,i的值的变化规律为i++,n的值从键盘输入
变量类型:考虑到当n较大时,连乘的值会很大,这里我们可以把x定义为double型,其余定义为int型
变量初值:连乘的变量一般设为1,累加变量的可设为0,或者把它们设为第一个值。
循环变量:初值,终值,变化规律例:连乘问题7 程序设计举例null#include
void main()
{ int n,i;
double x;
printf(“Please input n:”);
scanf(“%d”,&n); /*输入n*/
for (i=1,x=1;i<=n;i++)
x= x*i; /*求1到n的连乘*/
printf(“%d!=%.0f\n”,n,x);
}执行上述程序:
Please input n: 10
10!=3628800null例:判断一个正整数是否为素数。 分析:素数有2,3,5,7.... 指除了1和它本身之外,不能被其它整数整除的自然数(1不是素数)。
所以判断数m是否是素数,可以用2到m-1之间的整数逐个去除m。这样需要进行m-2次运算。实际上数学已证明,判断的范围可缩小到2~#include
#include
void main()
{ int m,i,k;
scanf("%d",&m);
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0) break;
if(i>k)
printf("%d is a prime number\n",m);
else
printf("%d is not a prime number\n",m);
}m=1??循环终止条件
1 i>k,m不能被所有的i整除
2 i<=k, m能被一个i整除null例:求100~200之间的全部素数#include
void main()
{ int m,i,k,n=0;
for (m=100;m<=200;m++) /*scanf("%d",&m);*/
{
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0) break;
if(i>=k+1) {n++;printf(n%10==0?"%5d\n“:”%5d”,m);}
/*printf("%d is a prime number\n",m);
else
printf("%d is not a prime number\n",m);*/
}
}增加变量n累计素数的个数数据不再由键盘输入
输出语句改变null#include
#include
void main()
{ int f=1;
float t=1, pi=0, v=1;
while(fabs(t)>=1e-6)
{ pi=pi+t;
v+=2;
f=-f;
t=f/v;
}
pi=pi*4;
printf("pi=%10.6f\n",pi);
}分析:累加问题 关键是找前后项之间的关系以及它们与循环次数的关系
本题前后项关系从分子和分母两部分分别看,分子是正反关系,分母是加2关系
定义变量: pi放累加结果 t累加中间变量 v表示分母,f 分子,则t= f/v例:累加问题null例 梯形法求数值积分null例 求Fibonacci数列的前40个数,这个数列的特点用下面公式表示:null#include
void main()
{ long int f1,f2;
int i;
f1=1;
f2=1;
for(i=1;i<=20;i++)
{
printf("%12ld %12ld ",f1,f2);
if(i%2==0) printf("\n");
f1=f1+f2;
f2=f2+f1;
}
}注意:
用f1、f2分别表示前两项,因为数据可能超出普通整型的表示范围,所以设置变量的类型为长整型
长整型的输出用格式控制符%ld此语句的作用是控制每行输出的数据的个数null例 译密码例如 Hello,world!
译成密码:Lipps,asvph!编码规律:字母变成其后的第四个字母,即A变E,a变成e......Z变成D,非字母符号不变。null#include
void main()
{ char c;
while((c=getchar())!='\n')
{if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
{
c=c+4;
if(c>'Z'&&c<='Z'+4||c>'z')
c=c-26;
}
printf("%c",c);
}
}对字母进行译码
W和w以后的字母要特别处理ASCII码见P364null 求用0~9这十个数字可以组成多少个无重复数字的三位数#include
void main()
{int x,a,b,c,n=0;
for(x=100;x<=999;x++)
{a=x/100;b=x/10%10;c=x%10;
if(a!=b&&a!=c&&b!=c)
{n++;
printf("%5d",x);
}
}
printf("\nnumber=%d",n)
}分析:用穷举法
列出所有可能性,然后逐一判断,找到真正的解
本题中列出所有的三位数100~999,逐个对三位数的数字进行判断nullsum累加变量
n取1,2,3,4.......20,n=n+1
f分子,v分母, t临时变量
t=f,f=v ,v=t+v
sum=sum+f/v课堂练习:null课堂练习:sum累加变量,x
n循环变量,取2,4,6........,n=n+2
t当前项,f分子,v分母,t=f/v
f=-f*x*x v=v*(n-1)*n t=f/v
sum=sum+tnull#include
# include
void main()
{ int i,j,n,m;
printf("Please enter n:");
scanf("%d",&n);
m=n/2+1;
for(i=1;i<=n;i++)
{ for (j=1;j<=fabs(i-m);j++)
printf(" ");
for(j=1;j<=n-2*fabs(i-m);j++)
printf("*");
printf("\n");
}
}
本文档为【C语言循环控制】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。