c语言_循环结构
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
正确确定循环体 循环控制变量和求解的问题挂钩
例:试找出满足下列条件的所有三位数
(1)其百位数不大于2
(2)将个位与百位对换,得m到a的in(三) 位数是原三位数的两倍多
分析:
m{ ainint (i,)j,k,m,n,s=0;
则nm用变十百十个n若是==三量位位位位m11满0>0重分数数数数0=足0百 家 鸡 百*ijk循别和2*i取取+条k取*钱张翁钱n+1环表个值值件值10买丘一买的示位0*10的j2*百建值百+~~循百数j~+k29三9鸡在钱鸡i环位位问《五,控数数题,问算制、:鸡鸡经公母翁》{} 元一、一ffioonff五值鸡书oorrtff((oorriii,{}{世钱母中((==jrr}jj,miminn((==11kffkk纪三、提(({==00;;,mm====iim<<11;;i11s末,鸡出22jjf>><<==00,(+00;;ns====00jj22,鸡雏了+00<<;%22**;99;**;==iiii++**;;我雏各“++kk199jjnn++++++11p0;;))国三几百++kk))1100r=pi++))00**n=古值何鸡rjj++**+t+i0fnjj))++(kk)代钱?问t"p;;iif%;;(r数一题"i%ndt学。”fd("",:n\"n),n";));;} }
main()
{ int i,sum=0;
循环初值
i=1;
loop: if(i<=100)
{ sum+=i;
循环变量增值
i++;
goto loop;
}
printf("%d",sum);
}
循环条件
循环终值 循环体
循环的概念
在循环条件的范围内反复 执行相同的循环体
,称循环程序设计。
循环结构的特点: 循环体中的语句,在 条件满足的情况下, 可反复执行
int main(void)
{
long num;
long sum = 0l;
int status;
printfΒιβλιοθήκη Baidu"Please enter an integer to be summed. ");
printf("Enter q to quit.\n");
status = scanf("%ld",&num);
#include <stdio.h> main() { int i,sum=0;
for(i=1;i<=100;i++) sum+=i;
printf("%d",sum); }
– for语句的几点说明
• for语句中expr1, expr2 ,expr3 类型任意,都可省略, 但分号;不可省
• 无限循环:for( ; ;)
第6章 循环结构程序设计
• 6.1 goto语句
-无条件转移语句
– 格式:goto 语句标号;
任何合法的标识符: 例如:goto flag1:
goto loop:
– 功能:程序将调转到该标号处并执go行to其s后top的: 语句;
例:用if 和goto语句构成循环,求
#include <stdio.h>
return 0 ;
}
分析:
这个例子改变了while的判断条件,用 status=1代替了status==1。前一个表达式是一个赋 值表达式,它把status赋值为1。而且表达式的值 就是其左侧的值,这样status=1的值也为1。因此 ,实际上这个while循环就等于使用了while(1), 即无限循环。
• 6.3 do while语句构成的循环结构
❖一般形式:
循环变量的初始值; do
循环体语句; while(循环条件表达式)
❖执行流程:
do
循环体
真(非0)
while expr
假(0)
– 实例,用do-while循环语句实现求
#include <stdio.h> main() { int i,sum=0;
例 从a显示到j。
解1:#include<stdio.h> main( ) { int i=0; for(i=0;i<10;i++) putchar(‘a’+i); }
解2:#include<stdio.h> main( ) { int i=0; for(;i<10;i++) putchar(‘a’+i); }
i=1; while ( i<=10 ) { s=s+i; i=i+1;} printf(“please output s=%d\n”,s); }
i=1; N
i<=10 Y
s=s+i; i=i+1;
输出s的值
– 实例,用while循环语句实现求
循环 初值
循环变 量增值
#include <stdio.h> main() { int i,sum=0;
(3) while() { …… do { ……} while( ); ……. }
(4) for( ; ;) { …… do { …… }while(); …… while() { …… } …...
}
外循环 内循环 内循环
main()
{ int i,j,k;
运行结果:
for(i=0;i<2;i++)
• iff相wf=oooew{fifhrr1x=roo当fh语ip;o{((rr1lirl;{}er;e1于((句(i;i((1<=ies;si<可x循e))=+u1usixp=+um1+;m以p环r1+语语m20;;r==03)转;0体i=;0+0s句句;us,换;+语i)um+=)成m句+1+;)+wi;i;<ih;s=ilue1sm结u0m0=构;s=)u语smu句m+i+;i; }}
int n=0; while (n<3)
printf("n is %d\n",n); n++; printf("That's all this prgram does\n"); return 0; }
在使用while时,只有位于判断条件之后的单个语句 (简单语句或复合语句)才是循环的部分。
练习2:观察以下程序运行结果并分析。
C的基本结构程序设计
复习提问: 程序的基本结构:
顺序结构 选择结构 循环结构
C的基本结构程序设计
复习提问:
START
顺序结构的特点: 每一条语句按顺序执行;
每一条语句只执行一遍, 不重复执行; 也没有语句不执行。
命令序列1 命令序列2 命令序列……
END
C的基本结构程序设计
复习提问:
分支结构的特点: 每一条执行了的语句 都只执行一遍。
}
}
例: 求 n!,即计算 1 n
main() {
int i,s,n; s=1; printf("Enter n:"); scanf("%d",&n); for(i=1;i<=n;i++) { s=s*i;} printf("s=%d\n",s); }
练习1:观察以下程序运行结果并分析。
main() {
printf("Please input a number:"); scanf("%d",&n); i=1; while ( i<=n ) { s=s+i; i=i+1;} printf(“please output s=%d\n”,s); }
i=1;
n
N i<=10
Y
s=s+i; i=i+1;
输出s的值
i=1; do { sum=sum+i;
i=i+1; } while(i<=100); printf("%d",sum); }
– do-while同 while语句的重要区别
while
do
假(0) expr
真(非0)
循环体
循环体
真(非0)
while expr
假(0)
循环控制在循环体之前, 只有当while后的表达式为 非0时,才可能执行循环体, 循环体有可能一次都不执 行。
• 6.4 for语句
– 一般形式
for([expr1] ;[ expr2] ;[ expr3]) 循环体语句;
– 执行流程
for
expr1 假(0)
expr2 真(非0)
循环体
expr3
– for语句的一般应用形式
for(循环变量赋初值;循环条件;循环变量增值) {
循环体语句; }
例 用for循环求
while( status = 1)
{
sum += num;
printf("Please enter next integer to be summed. ");
printf("Enter q to quit.\n");
status = scanf("%ld",&num);
}
printf("Those integers sum to %ld.\n",num);
运行结果:abcdefghij
解3:#include<stdio.h解> 4:#include<stdio.h>
main( )
main( )
{ int i=0;
{ int i=0;
for(;i<10;)
for(;i<10;putchar(‘a’+i),i++)
putchar(‘a’+(i++)); ;
int main(void) {
int n=0; while(n++<3);
printf("n is %d\n",n); printf("That's all this program does.\n"); return 0; }
循环在判断条件后的第一个简单或复合语句处就结 束了。
练习3:观察以下程序运行结果并分析。
i=i+1;} printf(“sum=%d\n”,sum); }
源程序: #include<stdio.h> void main( ) { int sum=0,i;
scanf(“%d”,&i); do { sum=sum+i;
i=i+1;} while ( i<=100 ) printf(“sum=%d\n”,sum); }
总是先执行一次循环体, 然后再求表达式的值,因 此,无论表达式的值是0还 是非0,循环体至少执行一 次。
例:while和do while循环比较
源程序: #include<stdio.h> void main( ) { int sum=0,i;
scanf(“%d”,&i); while ( i<=100 ) { sum=sum+i;
NN
条件
条件
Y
Y
命令序列2… 命令命序令列序列1…
不重复执行; 但有语句不执行。
命令序列……
If语句后面的下一 条语句
If语句后面的下一条 语句
第6章 循环结构程序设计
主要内容
循环的概念、循环变量的概念等(重点) while语句 do while语句 for 语句:每一种语句的格式和使用都是重点 循环的嵌套(难点)
6.6 循环的嵌套
一个循环体内包含着另一个完整的循环结构,就称为循环 嵌套。
内嵌的循环中有可以嵌套循环,从而构成多重循环 三种循环可以相互嵌套 下面给出几种合法的嵌套形式:
(1) while( ) { …… while( ) {……} …... }
(2) do { …… do { ……} while( ); …... }while( );
i=1; while(i<=100) { sum=sum+i;
i++; } printf("%d",sum); }
循环条件
循环终值 循环体
While(i<=100) {
i++; sum=sum+i; }
例:求S=1+2+3+……+n 的值
源程序: #include<stdio.h> void main( ) { int i , s ,n;
循环体语句;
循环体语句可以是一条, 也可以是多条, 多条的时候应用复合语句 {}将多条语句括起来。
语句
假(0) 条件
循环变量的调整 语句
真(非0)
循环体语句
避免死循环
例:求S=1+2+3+……+10的值
源程序: #include<stdio.h> void main( ) { int i , s=0 ;
N
条件
Y 命令序列
……
命令序列
break
命令序列
循环后面下一条语句
– goto语句的用途:
• 与if语句一起构成循环结构; • 从循环体中跳到循环体外。
goto语句不 符合结构化 编程的原则, 一般不提倡
采用。
• 6.2 while语句构成的循环结构
❖一般形式:
❖执行流程:
循环变量的初始值; while(循环条件表达式)
for(j=0;j<2;j++)
for(k=0;k<2;k++)
printf("%d,%d,%d\n",i,j,k);
}
循环嵌套的说明
嵌套的循环控制变量不能相同 内循环变化快,外循环变化慢
如:for(i=1;i<=9;i++) { for(j=1;j<=i;j++) printf("%1d*%1d=%2d ",i,j,i*j); printf("\n"); }
例:试找出满足下列条件的所有三位数
(1)其百位数不大于2
(2)将个位与百位对换,得m到a的in(三) 位数是原三位数的两倍多
分析:
m{ ainint (i,)j,k,m,n,s=0;
则nm用变十百十个n若是==三量位位位位m11满0>0重分数数数数0=足0百 家 鸡 百*ijk循别和2*i取取+条k取*钱张翁钱n+1环表个值值件值10买丘一买的示位0*10的j2*百建值百+~~循百数j~+k29三9鸡在钱鸡i环位位问《五,控数数题,问算制、:鸡鸡经公母翁》{} 元一、一ffioonff五值鸡书oorrtff((oorriii,{}{世钱母中((==jrr}jj,miminn((==11kffkk纪三、提(({==00;;,mm====iim<<11;;i11s末,鸡出22jjf>><<==00,(+00;;ns====00jj22,鸡雏了+00<<;%22**;99;**;==iiii++**;;我雏各“++kk199jjnn++++++11p0;;))国三几百++kk))1100r=pi++))00**n=古值何鸡rjj++**+t+i0fnjj))++(kk)代钱?问t"p;;iif%;;(r数一题"i%ndt学。”fd("",:n\"n),n";));;} }
main()
{ int i,sum=0;
循环初值
i=1;
loop: if(i<=100)
{ sum+=i;
循环变量增值
i++;
goto loop;
}
printf("%d",sum);
}
循环条件
循环终值 循环体
循环的概念
在循环条件的范围内反复 执行相同的循环体
,称循环程序设计。
循环结构的特点: 循环体中的语句,在 条件满足的情况下, 可反复执行
int main(void)
{
long num;
long sum = 0l;
int status;
printfΒιβλιοθήκη Baidu"Please enter an integer to be summed. ");
printf("Enter q to quit.\n");
status = scanf("%ld",&num);
#include <stdio.h> main() { int i,sum=0;
for(i=1;i<=100;i++) sum+=i;
printf("%d",sum); }
– for语句的几点说明
• for语句中expr1, expr2 ,expr3 类型任意,都可省略, 但分号;不可省
• 无限循环:for( ; ;)
第6章 循环结构程序设计
• 6.1 goto语句
-无条件转移语句
– 格式:goto 语句标号;
任何合法的标识符: 例如:goto flag1:
goto loop:
– 功能:程序将调转到该标号处并执go行to其s后top的: 语句;
例:用if 和goto语句构成循环,求
#include <stdio.h>
return 0 ;
}
分析:
这个例子改变了while的判断条件,用 status=1代替了status==1。前一个表达式是一个赋 值表达式,它把status赋值为1。而且表达式的值 就是其左侧的值,这样status=1的值也为1。因此 ,实际上这个while循环就等于使用了while(1), 即无限循环。
• 6.3 do while语句构成的循环结构
❖一般形式:
循环变量的初始值; do
循环体语句; while(循环条件表达式)
❖执行流程:
do
循环体
真(非0)
while expr
假(0)
– 实例,用do-while循环语句实现求
#include <stdio.h> main() { int i,sum=0;
例 从a显示到j。
解1:#include<stdio.h> main( ) { int i=0; for(i=0;i<10;i++) putchar(‘a’+i); }
解2:#include<stdio.h> main( ) { int i=0; for(;i<10;i++) putchar(‘a’+i); }
i=1; while ( i<=10 ) { s=s+i; i=i+1;} printf(“please output s=%d\n”,s); }
i=1; N
i<=10 Y
s=s+i; i=i+1;
输出s的值
– 实例,用while循环语句实现求
循环 初值
循环变 量增值
#include <stdio.h> main() { int i,sum=0;
(3) while() { …… do { ……} while( ); ……. }
(4) for( ; ;) { …… do { …… }while(); …… while() { …… } …...
}
外循环 内循环 内循环
main()
{ int i,j,k;
运行结果:
for(i=0;i<2;i++)
• iff相wf=oooew{fifhrr1x=roo当fh语ip;o{((rr1lirl;{}er;e1于((句(i;i((1<=ies;si<可x循e))=+u1usixp=+um1+;m以p环r1+语语m20;;r==03)转;0体i=;0+0s句句;us,换;+语i)um+=)成m句+1+;)+wi;i;<ih;s=ilue1sm结u0m0=构;s=)u语smu句m+i+;i; }}
int n=0; while (n<3)
printf("n is %d\n",n); n++; printf("That's all this prgram does\n"); return 0; }
在使用while时,只有位于判断条件之后的单个语句 (简单语句或复合语句)才是循环的部分。
练习2:观察以下程序运行结果并分析。
C的基本结构程序设计
复习提问: 程序的基本结构:
顺序结构 选择结构 循环结构
C的基本结构程序设计
复习提问:
START
顺序结构的特点: 每一条语句按顺序执行;
每一条语句只执行一遍, 不重复执行; 也没有语句不执行。
命令序列1 命令序列2 命令序列……
END
C的基本结构程序设计
复习提问:
分支结构的特点: 每一条执行了的语句 都只执行一遍。
}
}
例: 求 n!,即计算 1 n
main() {
int i,s,n; s=1; printf("Enter n:"); scanf("%d",&n); for(i=1;i<=n;i++) { s=s*i;} printf("s=%d\n",s); }
练习1:观察以下程序运行结果并分析。
main() {
printf("Please input a number:"); scanf("%d",&n); i=1; while ( i<=n ) { s=s+i; i=i+1;} printf(“please output s=%d\n”,s); }
i=1;
n
N i<=10
Y
s=s+i; i=i+1;
输出s的值
i=1; do { sum=sum+i;
i=i+1; } while(i<=100); printf("%d",sum); }
– do-while同 while语句的重要区别
while
do
假(0) expr
真(非0)
循环体
循环体
真(非0)
while expr
假(0)
循环控制在循环体之前, 只有当while后的表达式为 非0时,才可能执行循环体, 循环体有可能一次都不执 行。
• 6.4 for语句
– 一般形式
for([expr1] ;[ expr2] ;[ expr3]) 循环体语句;
– 执行流程
for
expr1 假(0)
expr2 真(非0)
循环体
expr3
– for语句的一般应用形式
for(循环变量赋初值;循环条件;循环变量增值) {
循环体语句; }
例 用for循环求
while( status = 1)
{
sum += num;
printf("Please enter next integer to be summed. ");
printf("Enter q to quit.\n");
status = scanf("%ld",&num);
}
printf("Those integers sum to %ld.\n",num);
运行结果:abcdefghij
解3:#include<stdio.h解> 4:#include<stdio.h>
main( )
main( )
{ int i=0;
{ int i=0;
for(;i<10;)
for(;i<10;putchar(‘a’+i),i++)
putchar(‘a’+(i++)); ;
int main(void) {
int n=0; while(n++<3);
printf("n is %d\n",n); printf("That's all this program does.\n"); return 0; }
循环在判断条件后的第一个简单或复合语句处就结 束了。
练习3:观察以下程序运行结果并分析。
i=i+1;} printf(“sum=%d\n”,sum); }
源程序: #include<stdio.h> void main( ) { int sum=0,i;
scanf(“%d”,&i); do { sum=sum+i;
i=i+1;} while ( i<=100 ) printf(“sum=%d\n”,sum); }
总是先执行一次循环体, 然后再求表达式的值,因 此,无论表达式的值是0还 是非0,循环体至少执行一 次。
例:while和do while循环比较
源程序: #include<stdio.h> void main( ) { int sum=0,i;
scanf(“%d”,&i); while ( i<=100 ) { sum=sum+i;
NN
条件
条件
Y
Y
命令序列2… 命令命序令列序列1…
不重复执行; 但有语句不执行。
命令序列……
If语句后面的下一 条语句
If语句后面的下一条 语句
第6章 循环结构程序设计
主要内容
循环的概念、循环变量的概念等(重点) while语句 do while语句 for 语句:每一种语句的格式和使用都是重点 循环的嵌套(难点)
6.6 循环的嵌套
一个循环体内包含着另一个完整的循环结构,就称为循环 嵌套。
内嵌的循环中有可以嵌套循环,从而构成多重循环 三种循环可以相互嵌套 下面给出几种合法的嵌套形式:
(1) while( ) { …… while( ) {……} …... }
(2) do { …… do { ……} while( ); …... }while( );
i=1; while(i<=100) { sum=sum+i;
i++; } printf("%d",sum); }
循环条件
循环终值 循环体
While(i<=100) {
i++; sum=sum+i; }
例:求S=1+2+3+……+n 的值
源程序: #include<stdio.h> void main( ) { int i , s ,n;
循环体语句;
循环体语句可以是一条, 也可以是多条, 多条的时候应用复合语句 {}将多条语句括起来。
语句
假(0) 条件
循环变量的调整 语句
真(非0)
循环体语句
避免死循环
例:求S=1+2+3+……+10的值
源程序: #include<stdio.h> void main( ) { int i , s=0 ;
N
条件
Y 命令序列
……
命令序列
break
命令序列
循环后面下一条语句
– goto语句的用途:
• 与if语句一起构成循环结构; • 从循环体中跳到循环体外。
goto语句不 符合结构化 编程的原则, 一般不提倡
采用。
• 6.2 while语句构成的循环结构
❖一般形式:
❖执行流程:
循环变量的初始值; while(循环条件表达式)
for(j=0;j<2;j++)
for(k=0;k<2;k++)
printf("%d,%d,%d\n",i,j,k);
}
循环嵌套的说明
嵌套的循环控制变量不能相同 内循环变化快,外循环变化慢
如:for(i=1;i<=9;i++) { for(j=1;j<=i;j++) printf("%1d*%1d=%2d ",i,j,i*j); printf("\n"); }