一、while 语句二、do-while 语句三、for 语句四、goto和if语句.
合集下载
C语言 第五章-循环结构程序设计
1×9=9 2×9=18 3×9=27
9×9=81
假设行号用i标识,列号用j标识,则第i行 第j列的值正好就是i与j的乘积。i与j定义为整 型变量。
程序若按下面的步骤执行,则可以打印出“九九乘法表”。 打印第1行 ( i = 1 )
for (j=1;j<=9;j++) printf (“%5d”,i*j) ; printf ( “ \n ” ) ; /*换行打印*/
例如:for ( i = 1 ; i <= 10 ; i ++)
{ a=a+1;
b=b+1;
}
例如: a=0;b=0; for ( i = 1 ; i <= 10 ; i ++ ) { a=a+1; b=b+1; }
执行后a的值为10, b的值为10。而程序段 a=0;b=0; for ( i = 1 ; i <= 10 ; i ++) a=a+1; b=b+1;
循环准备
假 条件P
真 循环语句
程序 用while 语句实现求1 + 2 + … + n 。 main ( ) { int i , sum , n ;
scanf ( “ %d ” , & n ) ; /* 键盘输入n */ i = 1 ; sum = 0 ; /*初始化i = 1, sum = 0 */ while ( i <= n )
第6章-循环
在表达式2中先从终端接收一个字符赋给c,然后判断 此赋值表达式的值是否不等于′\n′(换行符),如果 不等于′\n′,就执行循环体。 注意:此for语句的循环体为空语句,把本来要在循环 体内处理的内容放在表达式3中,作用是一样的。可见 for语句功能强,可以在表达式中完成本来应在循环体 内完成的操作。
6.4 用for 语句实现循环
说明: (2) 如果表达式2省略,即不判断循环条件,循环无终 止地进行下去。也就是认为表达式2始终为真。 例如:for(i=1; ;i++) sum=sum+i; 表达式1是一个赋值表达式,表达式2空缺。它相当于:
i=1; while(1) {
sum=sum+1; i++; }
6.6 几种循环的比较
(4)while循环、do-while循环和for循环,可以 用break语句跳出循环,用continue语句结束本 次循环(break语句和continue语句见下节)。而 对用goto语句和if语句构成的循环,不能用 break语句和continue语句进行控制。
6.7 break语句和continue语句
100
n
n 1
例6.3 求1到100的和
运行结果:5050
#include <stdio.h>
void main()
{
6.4 用for 语句实现循环
说明: (2) 如果表达式2省略,即不判断循环条件,循环无终 止地进行下去。也就是认为表达式2始终为真。 例如:for(i=1; ;i++) sum=sum+i; 表达式1是一个赋值表达式,表达式2空缺。它相当于:
i=1; while(1) {
sum=sum+1; i++; }
6.6 几种循环的比较
(4)while循环、do-while循环和for循环,可以 用break语句跳出循环,用continue语句结束本 次循环(break语句和continue语句见下节)。而 对用goto语句和if语句构成的循环,不能用 break语句和continue语句进行控制。
6.7 break语句和continue语句
100
n
n 1
例6.3 求1到100的和
运行结果:5050
#include <stdio.h>
void main()
{
循环结构
{ if (n%7!=0) continue;
printf("%d ",n);
}
}
编程小结
如何按要求输出几项后换行; 在程序设计中,常引入标志变量(或称开 关变量)来表征某个量“是”或“不是”; 课后习题6.1如何求最大公约数和最小公 倍数的算法:辗转相除法; 课后习题6.2,针对“输入一行字 符,……”的题目处理判断条件 while((c=getchar())!=„\n‟)
按问题本身的性质,一一列举出该问题所有可能的解,并 在逐一列举的过程中,检验每个可能解是否是问题的真正 解,若是,我们采纳这个解,否则抛弃它。对于所列举的 值,既不能遗漏也不能重复。
“递推法”
从初值出发,归纳出新值与旧值间的关系,直到求出所需 值为止。新值的求出依赖于旧值,不知道旧值,无法推导 出新值。数学上递推公式正是这一类问题。
x=8
main() {int a, b; for(a=1,b=1; a<=10; a++)
{if(b>=10) break;
if(b%3==1)
{b+=3; continue;}
} printf("%d\n",a); }
4
例:输出100以内能被7整除的数。
main() { int n;
for(n=7;n<=100;n++)
printf("%d ",n);
}
}
编程小结
如何按要求输出几项后换行; 在程序设计中,常引入标志变量(或称开 关变量)来表征某个量“是”或“不是”; 课后习题6.1如何求最大公约数和最小公 倍数的算法:辗转相除法; 课后习题6.2,针对“输入一行字 符,……”的题目处理判断条件 while((c=getchar())!=„\n‟)
按问题本身的性质,一一列举出该问题所有可能的解,并 在逐一列举的过程中,检验每个可能解是否是问题的真正 解,若是,我们采纳这个解,否则抛弃它。对于所列举的 值,既不能遗漏也不能重复。
“递推法”
从初值出发,归纳出新值与旧值间的关系,直到求出所需 值为止。新值的求出依赖于旧值,不知道旧值,无法推导 出新值。数学上递推公式正是这一类问题。
x=8
main() {int a, b; for(a=1,b=1; a<=10; a++)
{if(b>=10) break;
if(b%3==1)
{b+=3; continue;}
} printf("%d\n",a); }
4
例:输出100以内能被7整除的数。
main() { int n;
for(n=7;n<=100;n++)
C++9种控制语句
9种控制语句:
goto语句:无条件转向;
if语句:判断语句;
while循环语句;
do-while语句:先执行循环体,然后判断循环条件是否成立. 之后继续循环;
for语句:循环,可替代while语句; 只是用法不同;
break语句跳出本层的循环;(只调处包含此语句的循环)
continue语句:继续(一般放到循环语句里,不在执行它下面的语句,直接跳到判断语句例:for语句,就直接跳到第二个分号处,while语句,就直接跳到while()的括号里;
switch语句:多相选择;
return语句:返回;
32个关键字:
auto :声明自动变量一般不使用
double :声明双精度变量或函数
int: 声明整型变量或函数
struct:声明结构体变量或函数
break:跳出当前循环
else :条件语句否定分支(与if 连用)
long :声明长整型变量或函数
switch :用于开关语句
case:开关语句分支
enum :声明枚举类型
register:声明积存器变量
typedef:用以给数据类型取别名(当然还有其他作用)
char :声明字符型变量或函数
extern:声明变量是在其他文件正声明(也可以看做是引用变量)
return :子程序返回语句(可以带参数,也看不带参数)
union:声明联合数据类型
const :声明只读变量
float:声明浮点型变量或函数
short :声明短整型变量或函数
unsigned:声明无符号类型变量或函数
continue:结束当前循环,开始下一轮循环
for:一种循环语句(可意会不可言传)
[工学]第05章 循环结构程序设计 (2)
26
s=1/99+2/98+…+1=1.000000
2019/2/17
27
5.4 break、continue、goto语句
这一类语句的功能是改变程序的结构,使 程序从其所在的位置转向另一处。 这类语句是非结构化语句
2019/2/17
非结构化语句之break
它的作用是把流程转向所在结构之后。 在switch 分支结构中,使用break语句可以使流程跳出switch 分支结构。 同样的,在循环结构中,使用break语句 使流程跳出当前的循环层,转向执行该循环结构后面 的语句。
2019/2/17
求表达式1
表达式2 真 语句
假
求表达式3
for语句的 下一语句
例: 求 1+2+…+99
#include(stdio.h) main() {int i,s=0; / *s清0 */ for(i=1;i<100;i++) s=s+i; printf(“s=%d”,i;)
} i=0 i<100 s=s+i i++
2019/2/17
例 while和do~while比较
11
#include <stdio.h> main() { int i,sum=0; scanf("%d",&i); do { sum+=i; i++; }while(i<=10); printf("%d",sum); }
11_while、do while语句
功能: 功能:无条件转移语句 说明: 说明: 不能用整数作标号 只能出现在goto所在函数内 且唯一 所在函数内,且唯一 只能出现在 所在函数内 只能加在可执行语句前面 限制使用goto语句 限制使用 语句
循环初值
循环变量增值
#include <stdio.h> main() { int i,sum=0; i=1; loop: if(i<=100) { sum+=i; i++; goto loop; } printf("%d",sum); }
1. goto语句和 语句构成循环 语句和if语句构成循环 语句和 2.while语句 语句 3.do…while语句 语句 4.for语句 语句
循环结构要素:
循环条件 循环体 循环控制变量(赋初值、 循环控制变量(赋初值、循环条件中正确 使用、循环控制变量增值) 使用、循环控制变量增值)
一、 goto语句和 语句构成循环 语句和if语句构成循环 语句和
while语句 语句 do while语句 语句
主要内容: 主要内容:
语句和if语句 一、goto语句和 语句 语句和 二、while语句 语句 三、do while语句 语句
重点和难点: while和 while语句使用方法 while和do while语句使用方法
C语言构成循环的语句: 语言构成循环的语句:
循环初值
循环变量增值
#include <stdio.h> main() { int i,sum=0; i=1; loop: if(i<=100) { sum+=i; i++; goto loop; } printf("%d",sum); }
1. goto语句和 语句构成循环 语句和if语句构成循环 语句和 2.while语句 语句 3.do…while语句 语句 4.for语句 语句
循环结构要素:
循环条件 循环体 循环控制变量(赋初值、 循环控制变量(赋初值、循环条件中正确 使用、循环控制变量增值) 使用、循环控制变量增值)
一、 goto语句和 语句构成循环 语句和if语句构成循环 语句和
while语句 语句 do while语句 语句
主要内容: 主要内容:
语句和if语句 一、goto语句和 语句 语句和 二、while语句 语句 三、do while语句 语句
重点和难点: while和 while语句使用方法 while和do while语句使用方法
C语言构成循环的语句: 语言构成循环的语句:
《C语言程序设计课件》第四章-循环语句
【例4-3】求整数1~100的累加和,使用do while 语句实现。
/*程序4-3*/ #include <stdio.h> int main() {
int i=1, sum=0; /*定义并初始化变量*/ do {
sum += i; /*累加*/ i++; } while(i<=100); /*循环条件:i<=100*/ printf("sum=%d\n",sum); return 0; }
12345
digits=0
12345/10=1234 digits++ 1
1234/10=123 digits++ 2
123/10=12
digits++ 3
12/10=1
digits++ 4
1/10=0
digits++ 5
#include <stdio.h>
int main(void) {
int digits = 0, n;
“表达式2”,循环条件(i<=100)。
for ( i=1 ; i<=100 ; i++) sum = sum + i;
“表达式3”,修改循环条件(i++)。 “表达式1”,循环初始条件(i=1)。
一、while 语句二、do-while 语句三、for 语句四、goto和if语句.
表达式 0 (假)
执行过程:
执行内嵌语句A,在判断表达式(条件)若为真,则 继续执行内嵌语句A,再判断表达式(条件)· · · ,直到表 达式的值为假时,执行do-while后面的语句。
与while语句的不同:
do-while语句至少执行循环体一次,但while语句当 条件为假时不执行循环体语句。
求和表达式: 初值: 循环次数 i :
S=S+i S=0 1~100
流程图:
定义 变 量 s , i
程序: main ( ) { int s, i;
s=0, i=1;
s = 0,i = 1;
N
i≤ 100
while ( i < = 100 )
Y
s+=i;
{ s+=i;
i++; }
循环条件控制语句
i++;
表达式
非0 (真)
语句A
例6.1 求 1 + 2 + · · · · · ·+ 100
分析: 求和的过程为:
1) S=1 2) S=1+2 3) S=1+2+3 · · · · · · 100) S=1+2+ · · · +100 S0 = 0 S1 = S0 + 1 S2 = S1 + 2 S3 = S2 + 3 · · · · · · S100 = S99+100
循环结构
执行过程:
⑴ 求出表达式1的值, (若表达式1是逗号表达 式,则依次计算);
⑵ 对“表达式2”进行判断, 为假退出循环,否则转⑶;
⑶执行循环体中语句;
⑷执行“表达式3”,(若 表达式3是逗号表达式, 则依次计算)。 ⑸ 转向⑵。
例:将上面计算10!的程序用 for语句写出:
main() { int i; long sum; for(i=1,sum=1; i<=10; i++) sum=sum*i; printf(“10!=%ld\n”,sum); } main() { 空语句 int i; long sum; for(i=1,sum=1; i<=10; sum=sum*i, i++) ; printf(“10!=%ld\n”,sum); }
说明:
⑴ for 循环的三个表达式起着不同的作用,
根据需要可以省略。
表达式1:用于进入循环体之前给某些变量赋初值。 若省略,可在for语句前给变量赋初值。 main() { int i=1; long sum=1; for( ; i<=10; i++) sum=sum*i; printf(“10!=%ld\n”,sum); }
什么叫循环嵌套?
一个循环的循环体中套有另一个循环 叫循环嵌套。这种嵌套过程可以一直重复 下去。 一个循环外面包围一层循环称为二重循环。
[计算机软件及应用]计算机基础2C语言第6章循环结构
char c; c=getchar( ); while((getchar())!='?')
putchar(++c); }
jhiu
2021/8/26
9
#include <stdio.h> void main() {
输入:2473<CR>(<CR>代表回车符), 程序的输出结果是
int c;
while((c=getchar())!='\n')
2.在循环变量已赋初值时,可省去表达式1。如省去表达 式2或表达式3则将造成无限循环,这时应在循环体内 设法结束循环。
mainБайду номын сангаас)
{int a=0,n; printf("\n input n: "); scanf("%d",&n); for(;n>0;) { a++;n--; printf("%d ",a*2);
循环结构
课程介绍内容: 一、循环语句 1. do-while语句 2. while语句 3. for语句 二、循环嵌套 三、break;continue;goto语句
2021/8/26
1
循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,反复执行
某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序 段称为循环体。 C语言提供了多种循环语句,可以组成各种不同形式的循环结 构
putchar(++c); }
jhiu
2021/8/26
9
#include <stdio.h> void main() {
输入:2473<CR>(<CR>代表回车符), 程序的输出结果是
int c;
while((c=getchar())!='\n')
2.在循环变量已赋初值时,可省去表达式1。如省去表达 式2或表达式3则将造成无限循环,这时应在循环体内 设法结束循环。
mainБайду номын сангаас)
{int a=0,n; printf("\n input n: "); scanf("%d",&n); for(;n>0;) { a++;n--; printf("%d ",a*2);
循环结构
课程介绍内容: 一、循环语句 1. do-while语句 2. while语句 3. for语句 二、循环嵌套 三、break;continue;goto语句
2021/8/26
1
循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,反复执行
某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序 段称为循环体。 C语言提供了多种循环语句,可以组成各种不同形式的循环结 构
C语言第5章循环结构程序设计1
#include <stdio.h> main() {int i=1,j=0; i表示1~1000之间的数 do j指满足条件数的个数 {
if (i%3==2&&i%5==3&&i%7==2) { printf(″%4d″,i); j=j+1; if(j%5==0) printf(″\n″);} i=i+1; }while(i<1000); } 注意: 1、do-while语句的循环体语句至少要被执行 一次,因为它是进入循环后再判别表达式。 而while语句却是首先判别表达式,如果表达 式值为0,则一次循环也不执行。
如: i ,
i2
100
sum=1+2+3+…+100;
3. 流程图: 将上述例子用while语句写出
表达式
0
=0
while (i<=100)
{ sum+ =i;
i++; }
语句
下一语句
注: while后面的语句一般为复合语句, 即:加{ }
语句中应有使表达式=0的语句。
否则会出现无限循环–––"死"循环。 如: 又如: while (i<=100)
2、循环控制变量必须在循环体内有所改变,才 能使while和do-while语句的循环控制条件表达 式的值不断改变,直至循环结束。否则会造 成死循环。例如: i=1; while(i<=100) putchar(′*′); i++; 这个循环永远不会结束,因为“i++;”语句 不属于循环体中的语句,循环控制变量i没有 在循环体内被改变。 程序应该作如下改变:
c语言循环语句PPT课件
运行结果: 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=100
6-7
6.1 While 语句
例3: 统计从键盘输入一行字符的个数。
#include<stdio.h>
void main( )
{ int n=0;
此表达式的意义是什么?
printf("input a string:\n");
while ( getchar()!='\n‘ )
n++;
printf("%d",n);
}
6-8
6.1 While 语句
关于 while 循环语句的说明 while 循环先判断表达式,后执行循环体; 循环体有可能一次也不执行; 循环体若包含多条语句,应该用{ }括起来; 循环体应包含使循环趋向结束的语句; 退出while循环的情况是: 条件表达式不成立(为零) 循环体内遇 break , goto 无限循环(死循环)必须避免: while(1) 循环体 ;
i =1
N i≤ 100
Y sum=sum+i i=i+1
void main( ) {
int i,sum=0; i=1; while(i<=100)
C语言三种循环语句
for(i=0;i<2;i++) { for(j=0;j<3;j++) { for(k=0;k<3;k++) { if(k==2) break; printf(%d %d %d\n,i,j,k); } if(k==2) break; } if(k==2) break; } } 输出结果为: ijk 000 001 所以在同时跳出多层循环时,应该使用 goto 语句。记住, 所有的 goto 语句其实都是可以用 break,continue 代替的。
12 (三)、goto 语句 goto 语句是一种无条件转移语句,与 BASIC 中的 goto 语句 相似。goto 语句的使用格式为: goto 标号; 其中标号是 Turbo C 2.0 中一个有效的标识符,这个标识符 加上一个:一起出现在函数内某处,执行 goto 语句后,程序 将跳转到该标号处并执行其后的语句。标号既然是一个标识 符,也就要满足标识符的命名规则。另外标号必须与 goto 语句同处于一个函数中,但可以不在一个循环层中。通常 goto 语句与 if 条件语句连用,当满足某一条件时,程序跳 到标号处运行。goto 语句通常不用,主要因为它将使程序层 次不清,且不易读,但在多层嵌套退出时,用 goto 语句则 比较合理。 main() { int sn=0,i; for(i=1;i<=100;i++) { if(i==51) goto loop; /*如果 i 等于 51,则跳出循环*/ sn+=i; /*1+2+……+50*/ }
c5第五章 循环结构
2
5.1 while语句
1、while 语句 常称为“当型”循环语句。
表达式 非零 循环体 零
3
2 、while 语句的形式: while (表达式)
循环体;
特点:先判断表达式,后执行语句。 说明: –循环体有可能一次也不执行 –循环体可为任意类型语句 –下列情况,退出while循环 • 条件表达式不成立(为零) • 循环体内遇break,return,goto –无限循环:
printf("%d*%d=%d\n",i,i,i*i);
i++; }
} (total.c;totalb.c;total5w.c;fib.c; calc3.c)
5.2 do--while语句
1、do--while语句 常称为“直到型”循
环语句。
循环体
非0
表达式 0
7
2、do--while的形式: do #include <stdio.h>
26
1357 9 13579 1357 135 7 135 135 13 13
3
bit bit
1
main() { long int num; int count = 0; printf(“Please enter an integer:\n”); scanf(“%ld”,&num); do { printf(“%d”,num%10); num = num /10; Please enter an integer: count + +; 3829 } while (num !=0 ); 9283 4 digits. printf(“ %d digits.”, count); }
C语言:循环
第六章
判断与循环(P141)
计算机运算速度快,最适宜于重复性的工作。
1
真
假 2
循环程序组成部分:
1.设置循环初值,即循环开始前的值; 2.将需要反复执行的部分设置为循环体; 3.设置测试条件(即循环的条件,满足条件时循 环); 4.循环体每执行一次后,改变某些变量的值使循 环趋于结束(否则将成无限循环)
flag表示是否为素 数,1(是) 0(否)
k=m-1; k=m/2; k=sqrt(m);
break;
34
实现2:
#include <math.h> void main( ) { int m,k,i; scanf(“%d”,&m); k= sqrt(m); for (i=2;i<=k;i++) { if (m % i == 0) break; } if ( i>k ) printf(“yes!”); else printf(“no!”); }
6
求解过程:
1. 声明一个变量sum,初值为0。 2. 设置变量n表示每次加的值, 初值为1。 3. 将n加入sum。 4. n的值增加1。 5. 当n<=100成立时,重复执行 步骤3)和步骤4);当n>100时, 执行步骤6)。 6. 输出sum的值。
开始 sum=0 n=1 将n加入sum
判断与循环(P141)
计算机运算速度快,最适宜于重复性的工作。
1
真
假 2
循环程序组成部分:
1.设置循环初值,即循环开始前的值; 2.将需要反复执行的部分设置为循环体; 3.设置测试条件(即循环的条件,满足条件时循 环); 4.循环体每执行一次后,改变某些变量的值使循 环趋于结束(否则将成无限循环)
flag表示是否为素 数,1(是) 0(否)
k=m-1; k=m/2; k=sqrt(m);
break;
34
实现2:
#include <math.h> void main( ) { int m,k,i; scanf(“%d”,&m); k= sqrt(m); for (i=2;i<=k;i++) { if (m % i == 0) break; } if ( i>k ) printf(“yes!”); else printf(“no!”); }
6
求解过程:
1. 声明一个变量sum,初值为0。 2. 设置变量n表示每次加的值, 初值为1。 3. 将n加入sum。 4. n的值增加1。 5. 当n<=100成立时,重复执行 步骤3)和步骤4);当n>100时, 执行步骤6)。 6. 输出sum的值。
开始 sum=0 n=1 将n加入sum
双重循环
2
循环控制
1,while 语句 while (表达式) 表达式)
循环体; 循环体;
表达式 非零 循环体 零
3
例 (ch5_01.c)求1+2+3+4+5++100. ch5_01.c) 1+2+3+4+5++100.
#include <stdio.h> main() 循环条件 { int i,sum=0; 循环初值 i=1; while(i<=100) { sum=sum+i; 循环终值 循环变量增值 i++; } printf("%d",sum); }
22
分析: 分析: 行的控制 i:1~9 '*'的个数j与当前行的关系: '*'的个数 与当前行的关系: 的个数j j=2*ij=2*i-1 '*'前面的空格k与行的关系: '*'前面的空格 与行的关系: 前面的空格k 开始时,第一行有8 开始时,第一行有8个空格 每多一行,少一个空格k=9k=9 每多一行,少一个空格k=9-i while (i<=9) { for (k=1;k<=9-i;k++) (k=1;k<=9输出空格; 输出空格; for (j=1;j<=2*i-1;j++) (j=1;j<=2*i输出* 输出*; }
循环控制
1,while 语句 while (表达式) 表达式)
循环体; 循环体;
表达式 非零 循环体 零
3
例 (ch5_01.c)求1+2+3+4+5++100. ch5_01.c) 1+2+3+4+5++100.
#include <stdio.h> main() 循环条件 { int i,sum=0; 循环初值 i=1; while(i<=100) { sum=sum+i; 循环终值 循环变量增值 i++; } printf("%d",sum); }
22
分析: 分析: 行的控制 i:1~9 '*'的个数j与当前行的关系: '*'的个数 与当前行的关系: 的个数j j=2*ij=2*i-1 '*'前面的空格k与行的关系: '*'前面的空格 与行的关系: 前面的空格k 开始时,第一行有8 开始时,第一行有8个空格 每多一行,少一个空格k=9k=9 每多一行,少一个空格k=9-i while (i<=9) { for (k=1;k<=9-i;k++) (k=1;k<=9输出空格; 输出空格; for (j=1;j<=2*i-1;j++) (j=1;j<=2*i输出* 输出*; }
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
求和表达式:Leabharlann Baidu初值: 循环次数 i :
S=S+i S=0 1~100
流程图:
定义 变 量 s , i
程序: main ( ) { int s, i;
s=0, i=1;
s = 0,i = 1;
N
i≤ 100
while ( i < = 100 )
Y
s+=i;
{ s+=i;
i++; }
循环条件控制语句
i++;
表达式 0 (假)
执行过程:
执行内嵌语句A,在判断表达式(条件)若为真,则 继续执行内嵌语句A,再判断表达式(条件)· · · ,直到表 达式的值为假时,执行do-while后面的语句。
与while语句的不同:
do-while语句至少执行循环体一次,但while语句当 条件为假时不执行循环体语句。
6.4 for 语句
for 语句格式:
for ( [ 表达式 1] ;表达式2 ;[ 表达式3])
语 句;
各部分的作用:
表达式1 :循环变量赋初值。 表达式2 :判断循环条件,若省略,则认为循环条件恒为"真"。
表达式3 :修改循环变量的值。
语句 :循环体
流程图:
表达式1
表达式2 真 语句
假
表达式3
6.1 概述
一、while 语句 二、do-while 语句 三、for 语句 四、goto和if语句
6.2 goto语句以及用goto语句构成循环
goto语句格式: goto 语句标号 ;
· · · · · ·
标号:语句 ; 作用: 1)与 if 语句构成循环结构。 2)从循环体中强制退出。
说明: 1)goto语句为无条件转向语句。 goto语句可 以从循环体内跳出循环,尤其在多层循环中, 使用goto语句可以跳到任意一层循环体内。
while语句的说明:
(1) while语句属当型循环,即先 判断条件(表达式),再执行循环体。
0 (假)
(2) 表达式为一条件,用于控制循 环是否可继续执行,故称控制表达式。 (3) 语句A为内嵌式语句,是循环结 构的循环体。它可以是单语句也可以 是复合语句,且该语句中必须包含有 对循环条件进行修改的语句。
2)标号的命名规则同变量名。
3)goto语句不符合结构化程序设计原则,一 般不主张使用。
6.2 while 语句
while 语句格式:
while (< 表达式 >) 语句A; 流程图:
表达式 0 (假)
非 0 (真) 语句 A
若表达式(条 件)的值为真,则 执行内嵌语句A, 再判断表达式(条 件)· · · ,当表达式 的值为假时,执行 while后面的语句。
则while语句的循环体语句为:
s+=i; 循环变量i的值没有改变,循 环不能终止,陷入死循环
i=1;
while ( i < = 100 ) s+=i; i++;
6.4 do-while 语句
do-while 语句格式: do < 语句A ;>
while ( < 条件 > ); 流程图:
语句 A
非 0 (真)
如:for (i=1; ;i++) sum=sum+i;
它相当于:i=1;
while (1)
该循环是死循环
{sum=sum+i;
i++;}
如:for (i=1; i<100; 如:for (
; i<100;
)
{sum=sum+i; i++;}
)
在循环体内修改循环变 量,循环可以正常终止
{sum=sum+i; i++;} 相当于: while (i<100)
求阶乘表达式: 初值: 循环次数 i :
S=S×i S=1 1~n
流程图:
定 义 符号 常量 N
程序:
#define N 10
定义 变 量 n, i, s
main ( )
{ int n , i;
N
s=1; i=1
i≤ N
long int s=1; for ( i=1; i<=N; i++ ) s *= i;
例:while与do-while区别
#include <stdio.h> main( ) {int i=65; #include <stdio.h> main( ) {int i=65;
while(i<‘A’)
{putchar(i); }
无输出
do{putchar(i);
i++; } }
输出A
i++;}while(i<‘A’);
Y s *= i
i++
printf("s=%ld\n", s);
}
输 出 s
例6.6:求 水仙花数,即这个数等于它的百位、十 位和个位数的立方和。 3 3 3 如153是一个水仙花数,因为153=1 5 3 分别用三种循环语句编写该程序。
{sum=sum+i;
(1)在循环语句前给循环变 量赋初值 (2)循环体内修改循环变量
i++;}
例6.5:求 n!
分析: 求阶乘的过程为:
1) S=1 2) S=1×2 3) S=1×2×3 · · · · · · n) S=1×2× · · · ×n S0 = 1 S1 = S0 × 1 S2 = S1 × 2 S3 = S2 × 3 · · · · · · Sn = Sn-1×100
循环条件改变语句
printf("s=%ld\n", s);
输 出s
}
注意:
如果循环体中包含一个以上的语句,应该用花括弧 括起来,以复合语句的形式出现。如果不加花括弧,则 while语句的范围只到while后的第一个分号处。 在循环体中应该有使循环趋向结束的语句,否则会 导致死循环。 如上例中的语句改写 成如下形式:
表达式
非0 (真)
语句A
例6.1 求 1 + 2 + · · · · · ·+ 100
分析: 求和的过程为:
1) S=1 2) S=1+2 3) S=1+2+3 · · · · · · 100) S=1+2+ · · · +100 S0 = 0 S1 = S0 + 1 S2 = S1 + 2 S3 = S2 + 3 · · · · · · S100 = S99+100
For循环的 下一语句
说明:
for语句的一般形式中的“表达式1”可以省略。 此时应该在for语句之前给循环变量赋初值。 如果表达式2省略,即不判断循环条件(认为表达 式始终为真),循环会无终止的运行下去。
表达式3省略时,应另外设置条件保证循环能正常 结束。如在循环体内修改循环变量。
表达式1和表达式3可以是简单的表达式,也可以 是一个逗号表达式;它可以与循环变量有关,也可以与 循环变量无关。