null第六章
第六章
null§6.1 概述 前面已介绍了顺序结构,选择结构,本章介绍循环结构。如: sum=1+2+3+…+100;实际问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
: 一组重复执行的语句。则用循环结构解决。nullC语言用四种形式循环2. while 语句3. do …while 语句4. for语句1.if语句与goto语句null§6.2 while语句1. 形式: while (
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
达式)语句2. 执行过程: 先判断表达式的值。若0.则执行其后面的语句,否则while执行完毕。专门的当型循环语句––while语句null3.
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
图:null 语句中应有使表达式=0的语句。
否则会出现无限循环–––"死"循环。注: while后面的语句一般为复合语句, 即:加{ }null§6.3 do …while语句 一种专门的“ 直到型” 循环语句。2. 执行过程: 先执行语句,再判表达式的值,若0,再执行语句,否则结束循环3. 流程:1. 形式: do语句while(表达式);null void main ( )
{ int i, sum=0;
i=1;
do
{sum=sum+i;
i++;
}
while (i<=100);
printf("%d",sum);
}程序如下:null while语句与do…while语句的区别: 当第一次执行时,若表达式=0时,则while语句与do while有所不同,do while 执行一次后面的语句,而while不执行。书上P69页例题。null§6.4 for语句1. 形式 首先计算表达式1,接着执行表达式2,若表达式2的值0,则执行语句,接着计算表达式3,再判断表达式2的值.依此重复下去,直到表达式2的值=0(假)。2.执行过程for(表达式1; 表达式2; 表达式3)
语句null3. 流程:计算表达式1求表达式2值语句计算表达式3结束for语句=0(假)0(真)null用for语句写出上述例子for用while代替的流程
表达式1;
while(表达式2)
{ 语句
表达式3;
}for ( i=1; i<=100; i++) sum+=i;for语句完全可以用while代替,但for直观、简单、方便null4. for语句的几种特例例: 任意输入两个整数a, b,求void main ( )
{ int i, j, a, b, sum;
printf ("please input two number!\n")
scanf ("a=%d, b=%d", &a, &b);
i=a; j=b; 可以省略表达式1, 但须保留分号;这时在for之前就得赋值给循环变量。nullif (a>b) {i=b; j=a;}
for (; i<=j; i++) sum=sum+i;
printf (" \n sum=%d", sum);
} null 表达式2一般不可省略,否则为无限循环相当于: while (1)
{ sum=sum+i;
i++;
}例: for (i=1; ; i++) sum=sum+i;相当于条件永真、永不为0,若用while表示null 表达式3亦可省略,但在循环体中须有语句修改循环变量;以使表达式2在某一时刻为0而正常结束循环。例: for (sum=0,i=1;i<=100;)
{ sum=sum+i;
i++;
}null 若同时省略表达式1,表达式3,则相当于while(表达式2)语句。相当于 while (i<=100)
{sum+=i;
i++;
}例: for (; i<=100;) {sum+=i; i++;}null 三个表达式均省略 即for(;;)语句则相当于while(1)语句.表达式1、表达式3可以是逗号表达式, 可以对其它变量赋值。如 for (sum=0, i=1; i<=100; i++, i++)
sum=0;
for (i=1; i<=100; i=i+2)null 表达式2可以是关系表达式,也可以是数值表达式或字符表达式。只要值0.即执行循环体.例: for (i=0; (c=getchar( ))!='\n'; i+=c);null§6.5 循环的嵌套 与其它语言一样,当循环体中又包含了另一个完整的循环语句时–––嵌套。C有三种循环语句,均可以相互嵌套:
while ( )
{…
while ( )
…{
}
}nullfor (; ;)
{…
while ( ) { }
do
{ } while ( );
…
}null均为正确的嵌套,while ( )
{ …
while ( )
{
}…
}for (; ; )
{ for (; ; )
{…
}
} 但要注意语句的包含关系。null§6.6 几种循环的比较1. 对于同一问题, 四种循环可相互替代。但不提倡用goto.2. for循环功能强于while, do…while.但若不是明显地给出循环变量初终值(或修改条件),则应用while 或do …while.以增强程序的结构化和可读性。null3. 要防止无限循环––死循环。4. 循环过程中,为了结束本次循环或跳出整个循环。分别要用到continue和break语句。null§6.7 break语句和contiune语句 问题: 计算圆的面积r2, 半径取1, 2, …10,当面积>100时结束。for(r=1; r<=10; r++) { area=pirr;
if (area>100)
break;
}
printf ("%f", area);6.7.1 break语句null 从结构化程序要求出发,用break,退出循环,进入for语句的下一条语句。 注: break只能用于循环语句和switch语句。null6.7.2 continuce语句 void main( )
{ int n;
for (n=100; n<200; n++)
if (n%3!=0) printf("%d", n);
}问题: 编写程序,打印100~200中不能被3整除的数。null换一种方式:
void main ( )
{ int n;
for (n=100; n<=200; n++)
{if (n%3= =0) continue;
printf ("%d", n);
}
}continue语句起了结束本次循环的作用。null§6.8 程序举例例1: 求Fibonacci数例: 1, 1, 2, 3, 5, 8, …前40个数。规律: F1=1, F2=1
Fn=Fn – 1 + Fn – 2 (n>2)null程序要点: 每输出4个数时换行。 f1=f1+f2;
f2=f1+f2; 交替的结果正好为一序列null程序如下: void main ( )
{ long int f1, f2;
int i;
f1=1; f2=1;
for (i=1; i<=20; i++)
{ printf(%12ld %12ld ", f1, f2);null if (i%2= =0) printf("\n ");
f1=f1+f2;
f2=f2+f1;
}
}图5.13null运行结果为:1
5
34
233
1597
10946
75025
514229
3524578
241578171
8
55
377
2584
17711
1211393
832040
5702887
390881692
13
89
610
4181
28657
196418
1346269
9227465
632459863
21
144
987
6765
46368
317811
2178309
14930352
102334155null 判一个数m是否为素数的方法: 每打印10个数,换一次行。当用2, 3, …的整数去除它时均不能除尽, 则为素数。程序如下:例2. 求100~200的素数.null#include
#include
void main ( )
{ int m, k, i, n=0;
for (m=101; m<=200; m=m+2)
{ if ( n%10= =0) printf("\n");
k=sqrt(m);
for (i=2; i<=k;i++)
if (m%i= =0) break;
if (i>=k+1) {printf("%d ",m); n=n+1;}
}
}null 101 103 107 109 113 127 131 137 139 149
151 157 163 167 173 179 181 191 193 197
199运行结果如下: