第06章 循环结构程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
loop: if (i<=100) { sum =sum+ i; i++; goto loop; }
printf(“sum=%d\n”, sum); } (1)标号的命名必须遵循标示符命名规则。 (2)必须结构化程序设计方法,主张限制使用goto语句。
6.3 while语句构成的循环
while语句----实现“当型”循环结构
printf(“the num is %d\n”, i); } }
6.9 应用举例
[例6.7] 求Fibonacci数列的前40个数。该数列的生成方法 为:F1=1,F2=1,Fn=Fn-1+Fn-2(n>=3),即从第3个数开始, 每个数等于前2个数之和。
main( ) {
long int f1=1,f2=1; int i; for( i=1; i<=20; i++ ) {
(2)continue:强行结束本次循环;转向下一次循环。 3.break和continue语句对循环控制的影响如图6-4所示。 4.说明 (1)break能用于循环语句和switch语句中,continue只 能用于循环语句中。
(2)循环嵌套时,break和continue只影响包含它们的 最内层循环,与外层循环无关。
次数角度来考虑)
(2) 在循环体中应用使循环趋于结束的语句。
6.5 for语句构成的循环
C语言中 for语句使用最为灵活,不仅可用于循环次 数已经确定的情况,也可用于循环次数虽不确定但给出 了循环结束条件的情况。
(1)一般格式
for(循环变量赋初值;循环条件;循环变量增值)
{ 循环体语句组;
循环变量赋初值
}
(2)执行过程如右图所示。
sum = sum+i; /*实现累加*/
i++;
/*循环控制变量i增1*/
}
printf(“sum=%d\n”,sum);
}
程序运行情况如下:
sum=5050
注意
(1)循环体包括多个语句时,应该用花括弧括起来。
(2)在循环体中应用使循环趋于结束的语句。
6.4 do-while语句构成的循环
while语句----实现“直到型”循环结构 (1)一般格式
循环条件 0 非0
循环体语句
循环变量增值
[例6.4] 用for语句实现1~100的累加和。 main()
{ int i, sum=0; /*将累加器sum初始化为0*/ for(i=1; i<=100; i++)
{ sum=sum+ i; /*实现累加*/
}
printf("sum=%d\n",sum); } 程序运行情况如下:
do
{ sum = sum+i; /*累加*/
i++;
}while(i<=100);
/*循环继续条件:i<=100*/
printf(“sum=%d\n”,sum);
}
(1)do-while语句比较适用于处理:不论条件是否成 立,先执行1次循环体语句组的情况(注意与while语句的 细微区别)。
譬如:对例6.2和6.3中的i初始值改为101,运行结果 有何区别?
算法设计要点:
(1)显然,只要设计出判断某数n是否是素数的算 法,外面再套一个for循环即可。
(2)判断某数n是否是素数的算法:根据素数的定 义,用2~(n-1)之间的每一个数去整除n,如果都不能 被整除,则表示该数是一个素数。
判断一个数是否能被另一个数整除,可通过判断它 们整除的余数是否为0来实现。
if(counter%10= =0) //每输出10个数换一行
printf(“\n”);
if( j >= i )
/*整数i是素数:输出,计数器加1*/
{ printf(“%6d”,i);
counter++;
}
}
}
思考题:外循环控制变量i的初值从101开始、增量为2的作法有
什么好处?为提高运行速度,如何优化内循环?(提示:从减少计算
(2)for语句和while语句允许嵌套,do-while语句 也不例外。
见P113
6.8 break语句与continue语句
为了使循环控制更加灵活,C语言提供了break语句和 continue语句。
1.一般格式: break; continue;
2.功能 (1)break:强行结束整个循环,转向执行循环结构的 下一条语句。
printf(“%12ld %12ld”, f1, f2); if(i%2==0) printf(“\n”); /*输出2次(4个数), f1 = f1+f2; f2 =f2+ f1; /*计算下2个数*/ } }
[例6.8] 输出100~200之间的全部素数。所谓素 数n是指,除1和n之外,不能被2~(n-1)之间的任何 整数整除。
例如,for(sum=0;i<=100;i++) sum += i;
for(sum=0,i=1;i<=100;i++) sum += i;
3)“循环继续条件”部分是一个逻辑量,除一般的关 系(或逻辑)表达式外,也允许是数值(或字符)表达式。
5.循环嵌套
(1)循环语句的循环体内,又包含另一个完整的循 环结构,称为循环的嵌套。循环嵌套的概念,对所有高 级语言都是一样的。
在C语言中,可用以下语句实现循环: (1)用goto语句 (2)用while语句。 (3)用do-while语句。 (4)用for语句。
6.2 goto语句构成的循环
goto功能为:使系统转向标号所在的语句行执行。 goto语句的一般格式: goto 语句标号; 【例6.1】用goto语句求1~100的累计和。 main() { int i=1, sum=0;
(1)将n的初值置为1; (2)每执行1次“sum += n”后,n增1; (3)当n增到101时,停止计算。此时,sum的值就是1~100的累 计和。 根据已有的知识,单独实现每一步都不难。但是,由于需要经常 使用这种重复计算结构(称为循环结构),C语言提供了3条循环语句 来实现,以简化、并规范循环结构程序设计。
sum=5050 阐述如何把for循环转化为while循环
(3)说明
1)“变量赋初值”、“循环继续条件”和“循环变 量增值”部分均可缺省,甚至全部缺省,但其间的分号不能 省略。阐述三种缺省情况。
2)“循环变量赋初值”表达式,既可以是给循环变 量赋初值的赋值表达式,也可以是与此无关的其它表达式 (如逗号表达式)。
第6章 循环结构程序设计
6.1 循环语句概述 6.2 goto语句构成的循环 6.3 while语句构成的循环 6.4 do-while语句构成的循环 6.5 for语句构成的循环 6.8 break语句与continue语句 6.9 应用举例
6.1 循环语句概述
例如:求1~100的累计和。
首先设置一个累计器sum,其初值为0,利用sum += n来计算(n 依次取1、2、……、100),只要解决以下3个问题即可:
(3)两者区别:continue语句只结束本次循环,而不 终止整个循环的执行。而break语句则是结束整个循环过 程,不再判断执行循环的条件是否成立。
[例6.5] break和continue语句的比较。 main() {
int i; for(i=1;i<=5; i++) {
if(i==3) continue; //改成break结果会如何?
do
{ 循环体语句组;
}while(循环继续条件); /*本行的分号不能缺省*/
(2)执行过程如图右所示。 (3)特点:先执行循环体,
再判断循环条件。
循环体语句
非0
表达式
0
[案例6.3] 用do-while语句求解1~100的累计和。 main() { int i=1, sum=0; //初始化循环控制变量i和累计器
(1)一般格式 while(表达式) {
循环体语句组;
} (2)执行过程如图右图所示。
表பைடு நூலகம்式
0
(3)特点:先判断继续循 环的条件,后执行循环体。
非0 循环体语句
[例6.2] 用while语句求1~100的累计和。
main()
{
int i=1,sum=0; //初始化循环控制变量i和累计器sum
while( i<=100 ) {
参考源程序如下:
main()
{ int i=101, j, counter=0;
for( ; i<=200; i+=2) //外循环为内循环提供一个整数i
{
for(j=2; j<=i-1; j++) //内循环:判断整数i是否是素数
if(i%j= =0)
/*i不是素数*/
break;
//强行结束内循环,执行下面的if语句
printf(“sum=%d\n”, sum); } (1)标号的命名必须遵循标示符命名规则。 (2)必须结构化程序设计方法,主张限制使用goto语句。
6.3 while语句构成的循环
while语句----实现“当型”循环结构
printf(“the num is %d\n”, i); } }
6.9 应用举例
[例6.7] 求Fibonacci数列的前40个数。该数列的生成方法 为:F1=1,F2=1,Fn=Fn-1+Fn-2(n>=3),即从第3个数开始, 每个数等于前2个数之和。
main( ) {
long int f1=1,f2=1; int i; for( i=1; i<=20; i++ ) {
(2)continue:强行结束本次循环;转向下一次循环。 3.break和continue语句对循环控制的影响如图6-4所示。 4.说明 (1)break能用于循环语句和switch语句中,continue只 能用于循环语句中。
(2)循环嵌套时,break和continue只影响包含它们的 最内层循环,与外层循环无关。
次数角度来考虑)
(2) 在循环体中应用使循环趋于结束的语句。
6.5 for语句构成的循环
C语言中 for语句使用最为灵活,不仅可用于循环次 数已经确定的情况,也可用于循环次数虽不确定但给出 了循环结束条件的情况。
(1)一般格式
for(循环变量赋初值;循环条件;循环变量增值)
{ 循环体语句组;
循环变量赋初值
}
(2)执行过程如右图所示。
sum = sum+i; /*实现累加*/
i++;
/*循环控制变量i增1*/
}
printf(“sum=%d\n”,sum);
}
程序运行情况如下:
sum=5050
注意
(1)循环体包括多个语句时,应该用花括弧括起来。
(2)在循环体中应用使循环趋于结束的语句。
6.4 do-while语句构成的循环
while语句----实现“直到型”循环结构 (1)一般格式
循环条件 0 非0
循环体语句
循环变量增值
[例6.4] 用for语句实现1~100的累加和。 main()
{ int i, sum=0; /*将累加器sum初始化为0*/ for(i=1; i<=100; i++)
{ sum=sum+ i; /*实现累加*/
}
printf("sum=%d\n",sum); } 程序运行情况如下:
do
{ sum = sum+i; /*累加*/
i++;
}while(i<=100);
/*循环继续条件:i<=100*/
printf(“sum=%d\n”,sum);
}
(1)do-while语句比较适用于处理:不论条件是否成 立,先执行1次循环体语句组的情况(注意与while语句的 细微区别)。
譬如:对例6.2和6.3中的i初始值改为101,运行结果 有何区别?
算法设计要点:
(1)显然,只要设计出判断某数n是否是素数的算 法,外面再套一个for循环即可。
(2)判断某数n是否是素数的算法:根据素数的定 义,用2~(n-1)之间的每一个数去整除n,如果都不能 被整除,则表示该数是一个素数。
判断一个数是否能被另一个数整除,可通过判断它 们整除的余数是否为0来实现。
if(counter%10= =0) //每输出10个数换一行
printf(“\n”);
if( j >= i )
/*整数i是素数:输出,计数器加1*/
{ printf(“%6d”,i);
counter++;
}
}
}
思考题:外循环控制变量i的初值从101开始、增量为2的作法有
什么好处?为提高运行速度,如何优化内循环?(提示:从减少计算
(2)for语句和while语句允许嵌套,do-while语句 也不例外。
见P113
6.8 break语句与continue语句
为了使循环控制更加灵活,C语言提供了break语句和 continue语句。
1.一般格式: break; continue;
2.功能 (1)break:强行结束整个循环,转向执行循环结构的 下一条语句。
printf(“%12ld %12ld”, f1, f2); if(i%2==0) printf(“\n”); /*输出2次(4个数), f1 = f1+f2; f2 =f2+ f1; /*计算下2个数*/ } }
[例6.8] 输出100~200之间的全部素数。所谓素 数n是指,除1和n之外,不能被2~(n-1)之间的任何 整数整除。
例如,for(sum=0;i<=100;i++) sum += i;
for(sum=0,i=1;i<=100;i++) sum += i;
3)“循环继续条件”部分是一个逻辑量,除一般的关 系(或逻辑)表达式外,也允许是数值(或字符)表达式。
5.循环嵌套
(1)循环语句的循环体内,又包含另一个完整的循 环结构,称为循环的嵌套。循环嵌套的概念,对所有高 级语言都是一样的。
在C语言中,可用以下语句实现循环: (1)用goto语句 (2)用while语句。 (3)用do-while语句。 (4)用for语句。
6.2 goto语句构成的循环
goto功能为:使系统转向标号所在的语句行执行。 goto语句的一般格式: goto 语句标号; 【例6.1】用goto语句求1~100的累计和。 main() { int i=1, sum=0;
(1)将n的初值置为1; (2)每执行1次“sum += n”后,n增1; (3)当n增到101时,停止计算。此时,sum的值就是1~100的累 计和。 根据已有的知识,单独实现每一步都不难。但是,由于需要经常 使用这种重复计算结构(称为循环结构),C语言提供了3条循环语句 来实现,以简化、并规范循环结构程序设计。
sum=5050 阐述如何把for循环转化为while循环
(3)说明
1)“变量赋初值”、“循环继续条件”和“循环变 量增值”部分均可缺省,甚至全部缺省,但其间的分号不能 省略。阐述三种缺省情况。
2)“循环变量赋初值”表达式,既可以是给循环变 量赋初值的赋值表达式,也可以是与此无关的其它表达式 (如逗号表达式)。
第6章 循环结构程序设计
6.1 循环语句概述 6.2 goto语句构成的循环 6.3 while语句构成的循环 6.4 do-while语句构成的循环 6.5 for语句构成的循环 6.8 break语句与continue语句 6.9 应用举例
6.1 循环语句概述
例如:求1~100的累计和。
首先设置一个累计器sum,其初值为0,利用sum += n来计算(n 依次取1、2、……、100),只要解决以下3个问题即可:
(3)两者区别:continue语句只结束本次循环,而不 终止整个循环的执行。而break语句则是结束整个循环过 程,不再判断执行循环的条件是否成立。
[例6.5] break和continue语句的比较。 main() {
int i; for(i=1;i<=5; i++) {
if(i==3) continue; //改成break结果会如何?
do
{ 循环体语句组;
}while(循环继续条件); /*本行的分号不能缺省*/
(2)执行过程如图右所示。 (3)特点:先执行循环体,
再判断循环条件。
循环体语句
非0
表达式
0
[案例6.3] 用do-while语句求解1~100的累计和。 main() { int i=1, sum=0; //初始化循环控制变量i和累计器
(1)一般格式 while(表达式) {
循环体语句组;
} (2)执行过程如图右图所示。
表பைடு நூலகம்式
0
(3)特点:先判断继续循 环的条件,后执行循环体。
非0 循环体语句
[例6.2] 用while语句求1~100的累计和。
main()
{
int i=1,sum=0; //初始化循环控制变量i和累计器sum
while( i<=100 ) {
参考源程序如下:
main()
{ int i=101, j, counter=0;
for( ; i<=200; i+=2) //外循环为内循环提供一个整数i
{
for(j=2; j<=i-1; j++) //内循环:判断整数i是否是素数
if(i%j= =0)
/*i不是素数*/
break;
//强行结束内循环,执行下面的if语句