C语言 第五章-循环结构程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

执行过程如图所示。其中i为外循环的控制变 量,j为内循环的控制变量。
i =0 当 i <=10
j=0 当 j<=10
printf(“%d ”, i*j ) j++ i++
例4 编程打印“九九乘法表”。
分析:九九乘法表 1×1=1 1×2=2 1×3=3 … 2×1=2 2×2=4 2×3=6 … 3×1=3 3×2=6 3×3=9 … …… 9×1=9 9×2=18 9×3=27 …
i ++ ; } while ( i <= 100 ) ; printf ( " %d " , sum ) ; }
结果相同
同样是下列程序,但如果while后面的表达式结果一开始就是 假时,两种循环结果会不一样。
main ( ) /*程序1*/
{ int i , sum = 0 ; i = 101 ;
所以程序需要设计成二重循环。由于题目只 要求找到一组解,所以在循环过程中只要找到一组 满足条件的x, y, z就可以跳出循环。
跳出循环的方法可以采用break语句,但是, 因为是二重循环,所以要考虑使用break是否方便。
程序 百钱买百鸡问题。 void main ( ) { int x , y , z ;
打印第2行 ( i = 2 ) for (j=1;j<=9;j++) printf(“%5d”,i*j) ; printf ( “ \n ” ) ; /*换行打印*/
…… 打印第9行 ( i = 9 )
for (j=1;j<=9;j++) printf(“%5d”,i*j) ; printf ( “ \n ” ) ; /*换行打印*/
}
注意:在多重循环中,break只能退出其所在 的循环,即:退出其所在的内层循环,对外层循环 不起作用。
若要从内层循环直接退出外层循环,可以使 用goto语句。
例7 百钱买百鸡问题。公鸡5元一只,母鸡3 元一只,小鸡1元三只。100元要买100只鸡,且需 包括公鸡、母鸡和小鸡。求公鸡、母鸡和小鸡各买 多少只?(找到一组解即可)
后续语句
程序的结构和流程图
sum=0,i=1
假 i<=100
真 sum=sum+i
i++
printf(“%d”,sum)
另外,也可以参考书上的用while语句等价表示。
3.说明:
(1) for语句的3个表达式都可为逗号表达式。尤其是表达式1 常用逗号表达式给多个变量赋初值。 例如: for ( sum = 0 , i = 1 ; i <= 100 ; i ++ )
第五章
循环结构程序设计
第5章 循环语句程序设计
5.2、while语句(p115) 5.3、do-while语句(p115) 5.4、for语句(p118) 5.5、break和contiune语句 5.6、典型举例说明
5.2 while语句
1. while的语句格式:
while (条件)
语句
2. 当条件为真(非0)时重复执 行内嵌语句(循环体);当条件为 假(0)时,跳过内嵌语句,执行 整个while的后续语句。
例如: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 )
for语句、while语句和do-while语句在循环 嵌套时互相嵌套的情况。
例如,下面这条语句是二重循环: for ( i =1 ; i <= 10 ; i ++ )
for ( j = 1 ; j <= 10 ; j ++ ) printf ( “ %d ” , i * j );
其中,第一个for是外循环、第二个for是内循环。 其实,内循环包含在外循环的循环体中,是外循 环的循环体中的一个语句或复合语句。
{ sum = sum + i; i ++ ; }
printf ( “ %d ” , sum ) ; }
5.3 do-while语句
1. do – while 的语句格式: do 语句 while (条件);
2.功能:
while循环准备
循环语句 真
条件P 假
例 比较下面两个程序的区别,分别写出它们的执行结果。
执行后a的值为10, b的值为1。
(4) for语句一般形式中的表达式1,2,3都可以省略, 但其后的分号不能省略。但注意若表达式2省略,代表条件 永远为真(死循环)。
例如:
sum = 0 ; i = 1 ;
for ( ;i <= 100 ; i ++ ) sum = sum + i ;
例如: for ( sum = 0 , i = 1 ; ; i ++ )
main ( ) /*程序1*/ { int i , sum = 0 ; i = 1 ;
while ( i <= 100 ) { sum = sum + i ;
i ++ ; } printf ( " %d " , sum ) ; } main ( ) /*程序2*/ { int i , sum = 0 ; i = 1 ; do { sum = sum + i ;
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 ( x = 1 ; x < 20 ; x ++ ) for ( y = 1 ; y < 33 ; y ++ ) { z = 100 – x – y ; /*计算小鸡个数*/ if ( z ! = 0 && 5 * x + 3 * y + z / 3.0 = = 100 ) goto end ; }
sum = sum + i ; 例如:
for ( sum = 0 , i = 1 ; i <= 100 ; ) { sum = sum + i ;
i ++ ; }
5.5 循环的嵌套
一个循环体内又包含另一个完整的循环结构称 为循环嵌套。
多重循环的嵌套次数可以是任意的,可以根据 嵌套的层数分别叫做二重循环、三重循环等。
程序段如下:
int i, j ;
for (i=1; i<=9; i++) { for (j=1; j<=9; j++)
printf ( “ \n ” ) ; }
……
printf (“%5d”,i*j) ;
i=1
N i<=9 Y
j=1
j<=9 N Y
打印输出 i*j的值
输出换行
j++
i++
程序流程图表示
sum = sum + i ; 上面for语句中表达式1:sum = 0 , i = 1为逗号表达式,负责 为sum和i赋初值。
注意:上述程序也可以写成: sum = 0 ; for ( i = 1 ; i <= 100 ; i ++ ) sum = sum +(如 i <= 100 )或 逻辑表达式(如:a > 0 && b > 0 ),但也可以是 数值表达式或字符表达式,只要其值为非0,就执行 循环体。
讨论:假设要买的公鸡、母鸡和小鸡个数分别标 识为x , y , z ,将它们定义为整型变量。由题目的 条件可以列出下面的方程组:
x + y + z = 100
5 x + 3 y + z / 3.0 = 100
这个方程组可能存在多个解。所以需要用穷举法 解方程。
很明显x的最大值不会超过20, y的最大值不会超 过33 ( 还可以根据数论知识将x和y的取值范围缩小), z可以根据x、 y计算得出。
do { sum = sum + i ;
i ++ ; }
while ( i <= 100 ) ;
输出结果为:sum=101
printf ( " %d " , sum ) ; }
5 .4
for语句
1. for的语句格式:
for (表达式1;表达式2;表达式3)
语句 2. for语句的执行过程。
(1)先求解表达式1(表达式1通常是为循环变量赋初值)。 (2)再求解表达式2(循环的控制条件)。若为非0,则执行第(3)步;若为 0,则结束循环,转到第(5)步。 (3)执行内嵌语句(循环体)后,求解表达式3(通常对表达式2中的循环控 制变量进行修正,以便在若干次循环之后能够使表达式2的值为0, 结束循环)。 (4)转回上面第(2)步,继续执行。 (5)执行for语句的下面一个语句(后续语句)。
end : printf ( "公鸡=%d, 母鸡=%d, 小鸡=%d \n " , x, y , z );
}
程序 百钱买百鸡问题。 main ( ) { int x , y , z ;
for ( x = 1 ; x < 20 ; x ++ ) for ( y = 1 ; y < 33 ; y ++ ) { z = 100 – x – y ; /*计算小鸡个数*/ if ( z ! = 0 && 5 * x + 3 * y + z / 3.0 = = 100 ) break ; }
for语句的执行过程流程图表示
表达式1
假 表达式2
真 语句
表达式3
后续语句
例,下面程序段计算1 + 2 + … + 100并输出,它的执行过 程如图所示。
for ( sum = 0 , i = 1; i <= 100 ; i ++ )
表达式1
表达式2
sum = sum + i ;
表达式3
循环体语句 printf ( “ %d ” , sum ) ;
例如:
for ( num = 1 , i = 1 ; num % 2 ; i ++ )
scanf ( “ %d ” , & num ) ;
其中:表达式2为算术表达式num % 2 。当num为 奇数时循环执行scanf ( “ %d ” , & num )。
(3) for语句一般形式中的“语句”部分就是循环 体,它可以是一个单语句,也可以是一个复合语句。 如果不加{ },系统只将for后面的一个单语句作为 循环体。
while ( i <= 100 )
{ sum = sum + i ; i ++ ; }
printf ( " %d " , sum ) ; } main ( ) /*程序2*/
输出结果为:sum=0 结果不相同
(表达式的值第一次为真时, 两值相同,否则不同)
{ int i , sum = 0 ; i = 101 ;
end : printf ( "公鸡=%d, 母鸡=%d, 小鸡=%d \n " , x , y , z );
执行过程的N-S图所示。其中i为外循环的控 制变量,j为内循环的控制变量。
i =1 当 i <=9
j=1 当 j<=9
printf(“%d ”, i*j ) j++ i++
5.7 改变循环执行状态
break语句与continue 语句
5.7.1 break语句 1. break的语句格式:
break; 2.功能:从switch结构或包含它的最内层循环结 构中跳出。该语句只能用于switch 语句和三种循 环语句(for、while、do-while)的循环体中。
程序 计算 r = 1 到 r = 10 时的圆面积,直到面积大于 100为止。
# define pi 3.14 main ( ) { int r; float area ;
for ( r = 1 ; r <= 10 ; r ++ ) { area = pi * r * r ; /*计算面积area */ if ( area > 100 ) break; printf ( “ %f ” , area ) ; } printf ( “ ok ” ) ;
相关文档
最新文档