当前位置:文档之家› 第06章循环结构程序设计

第06章循环结构程序设计


程序运行情况为: 123asd↙ 123asdThe end
6.3 while语句
1、while 语句的形式:
while (表达式) 循环体;
2 、 while 语句 常称 为“当型”循环语句。
假(零)
表达式
真(非零)
循环体
3、说明:
先判断表达式,后执行语句。 表达式同if语句后的表达式一样,可以是 任何类型的表达式。 while循环结构常用于循环次数不固定,根 据是否满足某个条件决定循环与否的情况。 循环体多于一句时,用一对{ }括起。
注意f1、f2、 f3、x 的类型
for(k=3;k<=30;k++)
{ f3=f1+f2;
printf(" %ld\t ",f3);
f1=f2; f2=f3;
递推
} }
6.8 break语句和continue语句
1.break语句
(1) 语句形式:
break;
(2)作用:
结束break所在的 switch语句。 结束当前循环,跳出break所在的循 环结构。
主要编程方法:循环变量终值法、标记变 量法
循环变量终值法
#include " math.h "
void main()
{int x,k;
在判断范围内无因
scanf(" %d ",&x); 子,程序正常终止
for(k=2;k<=sqrt(x);k++)
if(x%k==0) break;
有因子,程序 非正常终止
#include "stdio.h"
void main()
/*a,b,c代表百位、十位、个位*/
{int x,a,b,c,num=0;
/*num存放满足条件的数的个数,注意num要赋初值*/
for(x=100;x<=999;x++)
{a=x/100;b=x/10%10;c=x%10;
if(a!=b&&a!=c&&b!=c)
for(k=1;k<=100;k++)
s=s*k;
累乘
printf(" s=%f ",s); }
整数连乘结果一定 是整数,而本例中 结果数值相当大, 用long型都无法存 放,因此将存放累 乘结果的变量s定义 为double型。
例6 判断一个数是否为素数?
一个数x在[2,sqrt(x)]范围内没有因子, 我们就称其为素数(质数)
例:分析下列程序段的循环次数
i=1; while (i<=100) putchar(‘*’); i++;
【例1】输入一系列整数,判断其正负号,当
输入0时,结束循环。
#include "stdio.h" void main() { float x; scanf(" %f ",&x);
输入数据,为第 一次判断做准备
while(x!=0)
{ if(x>0) printf(" + "); else printf(" - "); scanf(" %f ",&x); }
判断是否结束 判断正负号
【例2】 统计从键盘输入的一行字符的个数 (以回车键作为输入结束标记)。
#include "stdio.h" void main() {char ch;int num=0; ch=getchar();
2、执行过程 计算表达式1
零 判断表达式2
非零 循环体
表达式3
for的下一条语句
例如:
for(i=1;i<=100;i++) sum=sum+i;
它相当于以下语句: i=1; while (i<=100) { sum=sum+i; i++; }
表达式1; while(表达式2) 表达式3;
3、 说明
{ num++;
printf("%5d",x);
}
}
printf("\nnumber=%d",num);
}
例5-8 裴波那契数列的第1、2项分别为1、1, 以后各项的值均是其前两项之和。求前30项 菲波那契数。
编程方法: “递推法”
所谓递推法就是从初值出发,归纳出新值与旧 值间的关系,直到求出所需值为止。新值的求 出依赖于旧值,不知道旧值,无法推导出新值。 数学上递推公式正是这一类问题。
第六章 循环结构程序设计
循环:就是在给定的条件成立时反复执行某一 程序段,被反复执行的程序段称为循环体。
在C语言中可以用以下语句来实现循环: 1. 用goto语句和if语句构成循环; 2. 用while语句; 3. 用do--while语句; 4. 用for语句。
6.2 goto语句以及用goto语句 构成的循环
if(k>sqrt(x))
排除法:如果有因子, 不再往下判断是否是素 数
printf(" %d is a prime " ,x);
else printf(" %d is not a prime " ,x);
}
标记变量法
#include " math.h "
void main()
{int x,k,f=1;
do-while和while语句相互替换时,要注意 修改循环控制条件 。
6.5 for语句
1、for的形式:
for (初始表达式1;条件表达式2;循环表达式3) {循环体 ;}
表表 循达环达式体式1语23::句用控循:于制环被循循控重环环 制复开执 变执始行 量行的 修前的条 改为语件 表循句, 达环。决 式变定。量循设环置次初始 值数。。
(1)语句形式:
continue;
(2)语句作用:
结束本次循环。
(3)语句执行流程:
continue语句可以结束本次循环,即不再 执行循环体中continue 语句之后的语句,转 入下一次循环条件的判断与执行。
else printf(" %d is not a prime " ,x);
}
例7. 用0--9这十个数字可以组成多少无重复 的三位数?
编程方法: “枚举法” 按问题本身的性质,一一列举出该问题所 有可能的解,并在逐一列举的过程中,检 验每个可能解是否是问题的真正解,若是, 我们采纳这个解,否则抛弃它。对于所列 举的值,既不能遗漏也不能重复。
(5)三个表达式都可省略,如
for ( ; ; ) 相当于 循环体;
while (1) 循环体; 即不设初值,不判
断条件,循环变量
如: sum=0,i=1;
不增值。无终止地 执行循环体。
for(;;)
{ if(i>100) break;
sum=sum+i; i++;
}
学生自学
1、for语句中表达式省略的形式
(1)给累乘器赋初值,一般为1; (2)用循环语句实现累乘; for(循环变量赋初值;循环条件;循环变量改变规律) (3)循环体设计。
累乘器当前值=累乘器原值*循环变量当前值;
参考程序:
void main() { double s=1;
思考
求n!=1 × 2 × 3 × …n
累乘器赋初值
int k;
while(ch!='\n') {num++;
ch=getchar(); }
判断是否输入结束
printf("num=%d\n",num); }
注意
表达式在判断前,必须要有明确 的值。 循环体中一般有改变条件表达式的 语句。 while (表达式)后面没有分号。
6.4 do--while语句
1、 do--while的形式:
典型例题分析
【例4】 求累加和1+2+3+…+1000
属于“累加器”类型问题。
基本方法:
(1)在进入累加前先给累加器赋初值(一般为0); (2)用循环语句实现累加; for(循环变量赋初值;循环条件;循环变量改变规律) (3)循环体语句的设计。
累加器当前值=累加器原值+循环变量当前值 ;
参考程序:
1、语句形式:
goto 语句标号;
例如: goto label; ……
label: …...
语句标号用标识 符表示,它的定 名规则与变量名 相同。
2、语句执行流程:
在程序执行过程中,如果遇到goto语句, 则程序执行流程无条件地转向语句标号后 的语句继续执行。
3、说明
语句标号仅仅对goto 语句有效,对其它语句 不影响。
#include "stdio.h" void main() {char ch; int num=0; ch=getchar(); do {num++;
ch= getchar(); }while(ch!='\n'); printf("num=%d\n",num); }
注意
在if、while语句中,表达式后面都没有分 号,而在do-while语句的表达式后面则必 须加分号。
void main() { long int k,s;
求偶思数考和 2+4+6+…+100
s=0;
累加器赋初值
for(k=1;k<=1000;k++)
相关主题