null第六章第六章 主要内容 主要内容6.1 概述
6.2 goto语句以及用goto语句构成循环
6.3 用while语句实现循环
6.4 用do-while语句实现循环
6.5 用for 语句实现循环
6.6 循环的嵌套
6.7 几种循环的比较
6.8 break语句continue和语句
6.9 程 序 举 例 6.1 概述 6.1 概述什么是循环?
为什么要使用循环?问题2:求学生平均成绩 分数相加后除以课数
在许多问题中需要用到循环控制。循环结构是结构化程序设计的基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。 6.2 goto语句以及用goto语句构成循环 6.2 goto语句以及用goto语句构成循环 goto语句——无条件转向语句
goto 语句标号;
语句标号用标识符表示,它的定名规则与变量名相同,即由字母、数字和下划线组成,其第一个字符必须为字母或下划线。
例如:goto label_1; 合法;
goto 123; 不合法. 6.2 goto语句以及用goto语句构成循环 6.2 goto语句以及用goto语句构成循环 结构化程序设计方法主张限制使用goto语句,因为滥用goto语句将使程序流程无规律、可读性差。
一般来说,可以有两种用途:
(1) 与if语句一起构成循环结构;
(2) 从循环体中跳转到循环体外。
但是这种用法不符合结构化原则,一般不宜采用,只有在不得已时(例如能大大提高效率)才使用。 6.3 用while语句实现循环 6.3 用while语句实现循环while语句用来实现“当型”循环结构。
一般形式:
while (表达式) 语句
当表达式为非0值时,执行while语句中的内嵌语句。其特点是:先判断表达式,后执行语句。 6.3 用while语句实现循环 6.3 用while语句实现循环注意:
循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。
在循环体中应有使循环趋向于结束的语句。如果无此语句,则i的值始终不改变,循环永不结束。null用while语句求
#include void main ( )
{
int i,sum=0;
i=1;
while(i<=100)
{
sum=sum+i;
i++;
}
printf("%d\n",sum);
} 6.4 用do-while语句实现循环 6.4 用do-while语句实现循环 do-while语句的特点:先执行循环体,然后判断循环条件是否成立。
一般形式: do
循环体语句
while (表达式);执行过程:先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非零(“真”) 时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。
null用while语句求
#include
void main ( )
{
int i,sum=0;
i=1;
do
{
sum=sum+i;
i++;
}
while(i<=100);
printf("%d\n",sum);
} 6.4 用do-while语句实现循环 6.4 用do-while语句实现循环while语句和用do-while语句的比较:
在一般情况下,用while语句和用do-while语
句处理同一问题时,若二者的循环体部分是一
样的,它们的结果也一样。但是如果while后面
的表达式一开始就为假(0值)时,两种循环的结
果是不同的。
null#include
void main ( )
{int sum=0,i;
scanf(“%d”,&i);
while(i<=10)
{sum=sum+i;
i++;
}
printf(“sum=%d”,sum);
}#include
void main ( )
{int sum=0,i;
scanf(“%d”,&i);
do
{sum=sum+i;
i++;
}
while(i<=10);
printf(“sum=%d”,sum);
} 6.5 用for 语句实现循环 6.5 用for 语句实现循环
C语言中的for语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。
一般形式:
for(表达式1;表达式2;表达式3) 语句
6.5 用for 语句实现循环 6.5 用for 语句实现循环
for语句的执行过程:
(1) 先求解表达式1。
(2) 求解表达式2,若其值为真(值为非0),则执
行for语句中指定的内嵌语句,然后执行下
面第(3)步。若为假(值为0),则结束循环,
转到第(5)步。
(3) 求解表达式3。
(4) 转回上面第(2)步骤继续执行。
(5) 循环结束,执行for语句下面的一个语句
6.5 用for 语句实现循环 6.5 用for 语句实现循环
注意: C语言中的for语句比其他语言(如BASIC,PASCAL)中的FOR语句功能强得多。可以把循环体和一些与循环控制无关的操作也作为表达式1或表达式3出现,这样程序可以短小简洁。但过分地利用这一特点会使for语句显得杂,可读性降低,最好不要把与循环控制无关的内容放到for语句中。 6.6 循环的嵌套 6.6 循环的嵌套
一个循环体内又包含另一个完整的循环结构 称为循环的嵌套。内嵌的循环中还可以嵌套 循环,这就是多层循环。
三种循环(while循环、do-while循环和for循 环)可以互相嵌套。 6.6 循环的嵌套 6.6 循环的嵌套
下面几种都是合法的形式:
(1) while( ) (2) do (3) for(;;)
{… {… {
while( ) do for(;;)
{…} {… } {… }
} while( ); }
} while( );
6.6 循环的嵌套 6.6 循环的嵌套
(4) while( ) (5) for(;;) (6) do
{… {… {…
do{…} while( ) for(;;){ }
while( ) { } …
{…} … }
} } while( )
6.7 几种循环的比较 6.7 几种循环的比较
(1)四种循环都可以用来处理同一问题,一般情况下它们可以互相代替。但一般不提倡用goto型循环。
(2)在while循环和do-while循环中,只在while后面的括号内指定循环条件,因此为了使循环能正常结束,应在循环体中包含使循环趋于结束的语句(如i++,或i=i+1等)。 6.7 几种循环的比较 6.7 几种循环的比较
for循环可以在表达式3中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式3中。因此for语句的功能更强,凡用while循环能完成的,用for循环都能实现。
(3)用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成。而for语句可以在表达式1中实现循环变量的初始化。 6.7 几种循环的比较 6.7 几种循环的比较
(4)while循环、do-while循环和for循环,可以用break语句跳出循环,用continue语句结束本次循环(break语句和continue语句见下节)。而对用goto语句和if语句构成的循环,不能用break语句和continue语句进行控制。
6.8 break语句和continue语句 6.8 break语句和continue语句 6.8.1 break语句
break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句
一般形式:
break;
注意:break语句不能用于循环语句和switch语句之外的任何其他语句中。 6.8 break语句和continue语句 6.8 break语句和continue语句 例: float pi=3.14159;
for(r=1;r<=10;r++)
{ area=pi*r*r;
if(area>100) break;
printf(″r=%f,area=%f\n″,r,area);
} 程序的作用是计算r=1到r=10时的圆面积,直到面积area大于100为止。从上面的for循环可以看到:当area>100时,执行break语句,提前结束循环,即不再继续执行其余的几次循环。 6.8 break语句和continue语句 6.8 break语句和continue语句 6.8.2 continue语句
作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定.
一般形式:
continue;
6.8 break语句和continue语句 6.8 break语句和continue语句
continue语句和break语句的区别
continue语句只结束本次循环,而不是终止整个循环的执行。
while(表达式1) for
{ …
if(表达式2) continue;
…
}0 6.8 break语句和continue语句 6.8 break语句和continue语句 continue和break的区别
break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。 while(表达式1) for
{ …
if(表达式2) break;
…
} 6.9 程序举例 6.9 程序举例 例6.6用π/4≈1-1/3+1/5-1/7+…公式求π的近似值,直到某一项的绝对值小于为止。
N-S图表示算法 6.9 程序举例 6.9 程序举例 例6.7 求Fibonacci数列前40个数。这个数列有如下特点:第1,2两个数为1,1。从第3个数开始,该数是其前面两个数之和。即:
F(1)=1 (n=1)
F(2)=1 (n=2)
F(n)=F(n-1)+F(n-2) (n≥3)
算法如图所示: 6.9 程序举例 6.9 程序举例 例6.8 判断m是否素数。
算法思想:让m被2到除,如果m能被2~之中任何一个整数整除,则提前结束循环,此时i必然小于或等于k(即);如果m不能被2~k(即)之间的任一整数整除,则在完成最后一次循环后,i还要加1,因此i=k+1,然后才终止循环。在循环之后判别i的值是否大于或等于k+1,若是,则表明未曾被2~k之间任一整数整除过,因此输出“是素数”。 null 6.9 程序举例 6.9 程序举例 例6.10 译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。
思路:可以按以下规律将电文变成密码:
将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D。
null