第3章循环结构程序设计

合集下载

第3章 结构化程序设计

第3章  结构化程序设计

循环体
是 P2 否
图3.7直到型循环结构示意图 直到型循环结构示意图
3.3 表述算法
• 通常用自然语言、计算机语言(代码)、伪代码[1]、传统流程图、 通常用自然语言、计算机语言(代码)、伪代码 、传统流程图、 )、伪代码 N-S流程图、PAD图等不同的方法来描述算法。 流程图、 图等不同的方法来描述算法。 流程图 图等不同的方法来描述算法 • 在例 中,采用了自然语言来表示算法。自然语言就是人们日常使 在例3.1中 采用了自然语言来表示算法。 用的语言,可以是汉语、英语,或其他语言。 用的语言,可以是汉语、英语,或其他语言。用自然语言表示算法通 俗易懂,但文字冗长,容易出现歧义性。自然语言表示的含义往往不 俗易懂,但文字冗长,容易出现歧义性。 太严格,要根据上下文才能判断其正确含义。此外, 太严格,要根据上下文才能判断其正确含义。此外,用自然语言来描 述包含分支和循环的算法,很不方便。因此, 述包含分支和循环的算法,很不方便。因此,除了那些很简单的问题 以外,一般不用自然语言描述算法。 以外,一般不用自然语言描述算法。 • [1] 伪代码是介于自然语言与计算机语言之间的文字符号。一般借助 伪代码是介于自然语言与计算机语言之间的文字符号。 一种高级语言的控制结构,而中间的操作用自然语言描述。 一种高级语言的控制结构,而中间的操作用自然语言描述。
P1 是 循环体

• 图3.6当型循环结构示意图 当型循环结构示意图
(2)直到型循环的执行过程为: )直到型循环的执行过程为: • 先执行循环体一次,然后判断控制循环的条件。 先执行循环体一次,然后判断控制循环的条件。 • 条件 成立,则继续上述循环体,直到条件不成立时,结束循环。 条件P2成立,则继续上述循环体,直到条件不成立时,结束循环。 成立

Java程序设计教程第3章3.3 循环结构(一)

Java程序设计教程第3章3.3 循环结构(一)

循环条件
System.out.println("上午阅读教材!"); System.out.println("下午上机编程!\n"); System.out.print("合格了吗?(y/n):"); answer = input.next(); } System.out.println("完成学习任务!");
System.out.println(“第4遍写:好好学习,天S天y向ste上m!.o"u);t.println("第" +i+ "遍写: 好好学习,天天向上!");
……
i ++;
System.out.println(“第9999遍写:好好学} 习,天天向上!");
System.out.println(“第10000遍写:好好学习,天天向上!");
while (循环条件){ 循环操作
}
while循环先判断,再执行 不适合描述此故事
do { 循环操作
}while ( 循环条件 );
25/38
语法
先执行一遍循环操作
什么是do-while循环
do {
循环操作

} while ( 循环条件 );
分号不可少
符合条件,循环继续执行;否则,循环退出
循环操作
决定写一万遍“好好学习,天天向上!” ,怎么办?
3/38
为什么需要循环2-2
没有使用循环结构 使用while循环
System.out.println("第1遍写:好好学习i,nt天i 天= 1向; 上!");

循环结构程序设计练习题 内含答案

循环结构程序设计练习题  内含答案

第三单元循环结构练习题选择题:1、有以下程序执行后的输出结果是( D )。

main( ){ int i,s=0;for(i=1;i<10;i+=2) s+=i+1;printf("%d\n",s);}A.自然数1~9的累加和 B.自然数1~10的累加和C.自然数1~9中的奇数之和 D.自然数1~10中的偶数之和2、以下关于for语句的说法不正确的是( A )。

A. for循环只能用于循环次数已经确定的情况B. for循环是先判断表达式,后执行循环体语句C. for循环中,可以用break跳出循环体D. for循环体语句中,可以保含多条语句,但要用花括号括起来3、若i和k都是int类型变量,有以下for语句for(i=0,k=-1;k=1;k++) printf("*****\n");下面关于语句执行情况的叙述中正确的是( d )。

A.循环体执行两次B.循环体执行一次C.循环体一次也不执行D.构成无限循环4、以下程序程序的执行后的输出结果是( c )。

main(){int i,t[][3]={9,8,7,6,5,4,3,2,1};for(i=0;i<3;i++) printf(“%d”,t[2-i][i]);}A.7 5 3B. 3 5 7C.3 6 9D.7 5 15、以下程序运行后的输出结果是( A )。

void fun(char*s){ while(*s){ if(*s%2==0) printf(“%c”,*s); s++;}}main(){ char a[]={“good”};fun(a);printf(“\n”);}注意:字母a的ASCⅡ码值为97A.dB.goC.godD.good6、已知 int t=0; while(t=1){...} 则以下叙述正确的是( B )。

A)循环控制表达式的值为0B)循环控制表达式的值为1C)循环控制表达式不合法D)以上说法都不对7、设有以下程序段 Bint x=0,s=0;while(!x!=0)s+=++x;printf("%d",s); 则A)运行程序段后输出0B)运行程序段后输出1C)程序段中的控制表达式是非法的D)程序段执行无限次8、设i,j,k均为int型变量,则执行完下面的for语句后,k的值为( C )。

C语言_第3章

C语言_第3章
第3章 顺序结构程序设计
简单程序的流程一般分为顺序结构、选择结构和循环结 构。其中顺序结构是最基本的控制结构,其包含的语句 是按照书写的顺序执行,且每条语句都将被执行。
程序流程如图3.1所示, #include<stdio.h> 语句按书写顺序执行。 main( ) 先执行A,再执行B。 {int a=10,x=5,y=6;
三、复合语句
用一对花括号,把若干条语句括起来,
就形成了一条复合语句。形式如下:
{[内部数据描述语句]
其中定义的变量是
语句1; …… 语句n;}
复合语句结束的 “}”之后,不需
局部变量,仅在复 合语句中有效。
要再加分号。
花括号中的语句,可以是简单语句、空语句、复合 语句、流程控制语句,所有这些语句括在一起,在 语法上看成是一条语句,执行时顺序执行花括号中 的每条语句。复合语句多用于流程控制语句中。
printf(“\n%d,%d”,a+i,i++);}
四、格式输入函数 格式输入函数一般形式 scanf(“格式控制字符串”,地址列表); 功能:按指定的格式从键盘上把数据输入到指定的 变量之中 。 在scanf语句的格式控制字符串中,有两类字符: 普通字符:必须按原样输入,不能省略; 格式说明部分:由%引导的格式字符串组成。
scanf语句格式说明部分的一般格式为: %[*][width][F|N][h|L]type type是必须的,表示输入后转换的数据类型。
d(D) o(O) x(X) i(I) u(U)
c s f,e,g F,E,G n
%
十进制整数 八进制整数 十六进制整数 自动根据数头分辨十、八、十六进制 无符号十进制整数 单个字符 字符串 实数

第3章 循环程序设计

第3章 循环程序设计
分析:先求出531除以10的余数,得到1;将531除以10得到53; 再求53对10的余数,得到3,将53除以10,得到5。这样将1,3,5 全部分解出来。
执行步骤:设被除数m,余数n (1) n=m%10; (2) m=m/10; (3) 当m不为0时 ,重复(1) 直到m=0为止。 所有得到的n便为分解得到的数字,循环的条件为m!=0。
while循环的流程图如下图所示。
例3.1 应用while循环求1+2+….+100的和。
分析:定义变量s、i,变量s存放加法的和,变量i为计数器,设置s=0, i从1开始,每循环一次,执行s=s+i,然后i++,反复执行100次,流程 图如下图所示。当循环结束,输出结果。
代码如下:
///////////////////////////////////////////// ///////// 文件名 3-1.cpp ////////////////// /////////////////////////////////////////////
分析:循环变量i从a开始,在计算求和时,采用循环的方法,把i加到 sum,i++后,再把i加到sum,一直加到b,然后循环结束。程序设计 中首先把存放结果的变量sum置零,循环变量i初值为a,把i加到sum 中,每循环一次,i增1,其流程图如下图所示。
文件名 3-5.h
文件名 3-5.cpp
例3.6 用for语句来处理定积分的问题,定义用于定积分 的类intf,此类可以应用任何函数求定积分,只需要改写 double f(double x)函数即可。类中有两个私有数据double left,right;分别表示积分的下上限,积分函数sum中用for语 句,把一系列微梯形相加,最后得到积分值。本程序可以更改 函数f,求出任何函数的积分。

项目04 循环结构程序设计

项目04 循环结构程序设计

while语句和do„while语句。本章是程序设计的重点内容,
重点培养读者的逻辑思维能力和程序编写基本能力。要求读 者能理解循环结构的工作过程,并且能用循环语句解决
项目四
循环结构程序设计
实际问题,提高编程能力。
【学习目标】
(1) 掌握for语句、while语句和do„while语句的使用。 (2) 掌握break语句和continue语句的使用。 (3) 能够利用循环语句解决实际问题。
所有商品的总价格;收银员每扫描一次,也就是把该商品的
价格输入给x,然后把x的值转移加入到s盒子里,重复操作, 直到收银员按回车键,在这里用“0”代表回车;最后输出s 盒子中的值,就可得到所有商品的总价格。
第一部分
任 务 学 习
【解决方案】
#include<stdio.h> void main() { float x,s=0;
注:从上面的说明可以看出,C语言的for语句功能强大,
使用灵活,可以把循环体和一些与循环控制无关的操作也都 作为表达式出现,程序短小简洁。但是,如果过分使用
(3) 循环。这样的语句一直重复写到h满足题目要求为
止。 程序代码如下:
第一部分
任 务 学 习
#include<stdio.h> void main() { double h=0.1; int n=0; /*n用来累计对折次数*/ while(h<=8848180) { h=h*2;
n=n+1;
} printf("对折次数为:%d,此时厚度:%.2f\n",n-1,h/2);
第一部分
一、while语句 二、for语句
任 务 学 习

C语言 第三章 循环结构

C语言 第三章 循环结构

这种循环称为嵌套循环(或多重循环),大循环 中嵌套了小循环。其中大循环(外层循环)重复 了100次,每次累加一项item,而每次累加的 item由小循环(内层循环)计算得到,内层循环 重复i次,每次连乘一项。
P68ex4-6.cpp
23
11. 嵌套循环
在累加求和的外层for语句的循环体语句中,每次计算 i!之前,都重新置item的初值为1,以保证每次计算阶 乘都从1开始连乘。 如果把程序中的嵌套循环写成下列形式: item=1; for(i=1;i<=100;i++){ for(j=1;j<=i;j++) item=item*j; sum=sum+item; } 由于将item=1放在外层循环之前,除了计算1!时item从1 开始连乘,计算其他阶乘值都是用原item值乘以新的 阶乘值。如i=1时,item=1;i=2时,item=item*1*2; i=3时,item=item*1*2*3=1!*2!*(1*2*3),而非3!, 依次类推,i=100时,item=1!*2!*3!*……100!,最 24 后得出的累加和是1!+1!*2!+……+1!*2!*3!…*100!
见文件ch3ex3.cpp
12
5. do-while语句
for语句和while语句都是在循环前先判断条件, 只有条件满足才会进入循环,如果一开始条件 就不满足,则循环一次都不执行。 do-while语句与上述两种循环语句略有不同, 它先执行循环体,后判断循环条件。所以无论 循环条件的值如何,至少会执行一次循环体。 其一般形式为。
2. 3.
4.
从键盘输入一批学生的成绩(以负数为结束标志), 计算平均分,并统计不及格成绩的个数。H

高级程序语言设计第3章

高级程序语言设计第3章
#include <stdio.h>

#include "stdio.h" 1.格式输入输出(printf函数,scanf函数) (1)scanf函数 scanf函数用于输入指定类型的多个数据,函数的一般形式为:
scanf(“格式控制字符串”,地址列表);
一定要注意,地址列表中直接给变量名将会出错,因为这是非
返回本章目录
第3章 高级语言程序设计概述
l 指定数据所占字符数(宽度)
scanf("%3d%2d",&a,&b); 输入:12345678↙ 系统将把123赋值给a,把45赋值给b,而678则被丢掉。 l scanf函数中没有精度控制 scanf("%3.2f",&a); 将是非法的,即使输入12345↙,也不会将变量a赋值 为123.45; l 跳过某输入数据 scanf("%d %*d %d",&a,&b); 输入:11 22 33↙
{
char c1='H',c2='E',c3='L',c4='O'; /*定义字符变量并赋值*/
putchar(c1);
/*输出字符变量的值*/
putchar(c2);putchar(c3);putchar(c3);putchar(c4);
putchar('\t');
/*输出Tab制表键*/
putchar(87);
/*输出字符W,87是其ASCII编码值
*/ putchar('!'); putchar('\n');
/*输出字符*/ /*输出回车换行符*/
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第3章循环结构程序设计第1节For循环程序实例【问题描述】计算一副扑克牌的点数,其中牌A为1点,牌J、Q、K分别为11、12、13点,大、小王不算点。

【问题分析】根据题意,要计算一副扑克牌的点数,可以先求出一种花色牌的点数和,再乘以4即可。

进一步分析,求一种花色牌的点数和,即是求1~13的连续自然数之和。

我们用S表示所求数的和,用T表示加数,这样可以让T从1变化到13,每次让T不断加入到S中,就可以求出S的值,最后乘以4即可。

【算法设计】◆自然语言①置初值,即S=0,T=1;②使S=S+T,所求出的和仍放入S中;③使T增加1,即T=T+1;④如果T小于等于13,转第二步,否则转第五步;⑤输出计算结果。

◆程序流程图和结构化流程(N-S)图【程序设计】[程序清单]program ex3_1;vars,t:integer;begins:=0;{S置初值为0}for t:=1to13do{For循环语句}s:=s+t;writeln(‘total:’,s*4);end.[运行示例]total:364【知识拓展】1.在程序处理过程中,经常需要对某一条或一组语句重复执行多次,以最终完成某项任务,这就是循环。

对于重复次数已知,而不依赖循环中语句的结果,常用计数循环(for /to/do语句)。

2.for循环语句格式:格式一:for控制变量:=初值to终值do循环体语句;格式二:for控制变量:=初值downto终值do循环体语句;其中for、to、downto、do为保留字,do后面的语句称为循环体。

其中循环控制变量可以是整型、字符或布尔型,但不能为实型。

一般地,可以是顺序类型数据。

初值、终值表达式通常要与控制变量的类型相同。

在for语句中如果使用的是to,称为递增型计数循环语句,如果使用的是downto,称为递减型计数循环语句。

3.For语句的执行过程:①先将初值表达式的值计算出来并赋给循环控制变量。

②判断循环控制变量的值是否已“超过”终值(对于递增型循环来说,“超过”是指“大于”;对递减型循环来说,“超过”是指“小于”)。

如已超过,则跳到步骤⑥。

③如果未超过终值,则执行do后面的语句(称为循环体)。

④循环变量递增(或递减)。

⑤返回执行步骤②。

⑥循环结束,执行for循环下面的一个语句4.使用For语句的的注意事项:①循环控制变量必须为顺序类型。

例如,可以是整型、字符型、布尔型,不能为实型,如:for i=3.5to8.5do write(i)是错误的。

②循环控制变量的值递增或递减的规律是:若是递增型循环,则按Succ函数规律变化;若是递减型循环,则按Pred函数规律变化。

例如:for k:=’a’to’z’do write(k)将按顺序打印出26个小写英文字母“abcd…z”。

③循环体可以是一条基本语句,也可以是一条复合语句。

例如:for j:=1to n dobeginreadln(x);wreteln(x+1)end;循环语句的范围直到end才结束。

④循环控制变量不得在循环体内再被赋值。

例如:for x;=1to10dobeginx:=2*z+1;end;是错误的。

⑤循环控制变量的初值和终值一经确定,循环次数就确定不变了。

循环的次数可用如下公式计算:0若初值〉终值递增型循环的循环次数=Ord(终值)-Ord(初值)+1若初值≤终值0若初值〈终值递减型循环的循环次数=Ord(初值)-(终值)+1若初值≥终值【同步练习】1.宰相的麦子:相传古印度宰相达依尔,是国际象棋的发明者。

有一次,国王因为他的贡献要奖励他,问他想要什么。

达依尔说:“只要在国际象棋棋盘上(共64格)摆上这么些麦子就行了:第一格一粒,第二格两粒,……,后面一格的麦子总是前一格麦子数的两倍,摆满整个棋盘,我就感恩不尽了。

”国王一想,这还不容易。

于是令人扛来一袋麦子,可很快用完了,又扛来一袋,很快用完了……国王很奇怪,请你帮国王计算一下,要多少麦子。

(1立方米的麦子约为1.42×108粒)问题分析:对于编程类问题的描述,要特别注意正确、全面地理解题意,要学会从描述性语言中抽象出具体的数据,并建立数学模型。

在本题中根据“国际象棋棋盘上共有64格,第一格一粒,第二格两粒,……,后面一格的麦子总是前一格麦子数的两倍”的题意,我们可以建立数学模型:第一格为20,第二格为21,第三格为22,……第64格为263,设64格中应放麦子数为S,则可用下面的公式表示:S=20+21+22+23+……+2631立方米的麦子约为1.42×108粒,那么S粒麦子的体积T为:T=S/(1.42×108)立方米。

这样我们将问题转化为一般数学模型,再根据数学模型写出算法设计,再写出具体程序就水道渠成。

[程序清单]program p3_1_2(input,output);varn,s,t:integerbegins:=0;for n:=0to63dos:=s+2^n;t:=s/(1.42*10^8)writeln(‘s=’,s,)writeln(‘t=’,t);end.[运行示例]S=1.84467441E+19T=1.29906648E+112.阅读下面的程序,说明该程序的作用。

[程序清单]program p3_1_3(input,output);var a,b,c:integer{此处integer表示整型数据}begingwriteln(´请任意输入一个数:´);readln(b);for c:=1to5dobeginread(a);if a>b then b:=a;end;writeln(‘最后的值是:‘´,b:5);end.[运行示例]请任意输入一个数:6↙4↙7↙13↙8↙11↙最后的值是:13第2节当循环程序实例【问题描述】农场主的预算报告放暑假学校组织夏令营来到一个农场,农场主热情的接待了他们。

在参观时,同学们发现在农场的左上角圈出了一块地方,这儿阳光充足,通风也不错,但却什么也没有,觉得很奇怪。

农场主告诉大家因为农场四周由许多小朋友因没钱交学费而缀学,所以决定引进品种不错的雌雄一对小白兔,在这饲养。

小白兔需经过一个月才能长大,长大后每个月都生雌雄一对小白兔。

想等小白兔繁殖到1000对的时候,在分发给周围贫困的人,希望能帮助他们重新进入课堂。

现正在写一份预算报告,其中预计所需时间却却没算出来。

同学们现在就让我们来帮助这位好心的农场主算出时间。

【问题分析】这问题从表面来看好象没有什么规律,不妨设计一张表格来推算一下。

月份123456……兔子数(对)12481632……因为第一个月小白兔没长大,所以兔子数是1对。

到了第二个月小白兔长大了,生了一对小白兔,兔子数是2对。

第三个月小白兔也长大了,大白兔是2对,它们都生了一对小白兔,兔子数是4对……。

依此类推,发现除了第一个月,其它都是:前一个月的兔子数×2=本月兔子数。

我们发现这又是一个循环,直到兔子数为1000对的时候结束。

可是用for语句显然不行,因为我们不知道循环的次数。

下面我们用当型循环(while/do 语句)来编写程序。

农场主的预算可以描述如下:月份:=1;兔子数:=1;{预定义第一个月的兔子数是1对}while兔子数<1000do{当兔子数小于1000对时进入循环}begin月份:=月份+1;兔子数:=兔子数*2;end;【程序设计】[程序清单]program p4-1(input,output);varmonth,rabbit:integer;beginmonth:=1;rabbit:=1;while rabbit<1000dobeginmonth:=month+1;rabbit:=rabit*2;end;writeln(‘The months is:’,month);end.【知识拓展】1.while循环语句当型循环(while语句)是这样描述循环的:当指定条件成立时,重复执行指定的语句。

格式:while布尔表达式do语句;例如:k:=10;WHILE k>0DOBEGINWriteln(k);k:=k-1END;其中(1)WHIlE和DO是PASCAL保留关键字,是WHILE循环语句的组成部分。

(2)保留关键字DO后面的“语法”只能是一条语句,称为“循环体”;如果循环体中需要包含多个语句则应该如上例所示,采用一条复合语句。

2.WHILE循环的执行功能当执行到WHILE语句时(1)求出布尔表达式的值(2)若布尔表达式的值为真,则执行循环体内的语句;若为“假”,执行步骤4(3)重复步骤1和2(4)循环结束,执行循环后面的语句。

3【同步练习】1.周末小明遇到一个有趣的题目:找出四位整数abcd中满足下述关系的数:(ab+cd)(ab+cd)=abcd请你帮小明编写一个程序,找出满足条件的所有的数。

问题分析:这道题属于搜索问题,因为是四位整数,不难看出范围是从1000~9999,所求的数究竟在哪里,无法确定,只有在这个范围内从小到大一个一个进行搜索,对每一个数看它的高两位数与低两位数和的平方是否与该数相等。

ab和cd两个数可以在abcd中将高两位与低两位分离开来。

我们可以这样考虑,将abcd整除100,可得到高两位ab。

如:abcd=1234,1234div100=12。

有了ab,也就可用下面的式子把低两位cd分离出来:abcd-ab×100=abcd-ab00=cd如:1234-12×100=1234-1200=34同学们仔细想想,在求解的过程中,条件都是一样的,只是abcd这个数不同。

实际上是在反复做同一个步骤。

下面我们用当型循环来解这道题。

[程序清单]Program xuhuan(input,output);Var i,m,n,k:integer;BeginI:=1000;{给I赋值,即abcd假设一个数;}While I<=9999do{判断I(即abcd)的值是否超出范围,;如果超过则不执行循环Begin体中的语句,结束循环;}M:=I div100;{分离出ab和cd两个数,如果符合条件,就写出来;}N:=I-m*100;K:=(m+n)*(m+n);If k=I thenWriteln(‘符合条件的四位整数是:’,I);I:=I+1{I的值加1;}End;End.[运行示例]符合条件的四位整数是:2025符合条件的四位整数是:3025符合条件的四位整数是:98012.从n个数中挑选出最大的数。

问题分析:本题可以借助于古代比武的“打擂台”来比喻:先有任意一人站在擂台上,然后第二个人上来与它比武,胜者留在台上,如此反复进行下去,直到第n个人比完为止(要注意:一共比n-1次),这样最后留在台上的人肯定是最强者。

相关文档
最新文档