13_for语句和用for语句构成的循环结构
第4章 循环结构(C++版)ppt课件
第一节 for语句
三、语句格式举例
(1)将控制变量从1变到100,增量为1 for(i=1;i<=100;++i)
(2)将控制变量从100变到1,增量为-1 for(i=100;i>=1;--i)
(3)控制变量从7变到77,增量为7 for(i=7;i<=77;i+=7)
(4)控制变量从20变到2,增量为-2 for(int i=20;i>=2;i-=2)
【上机练习】
•8.满足条件的数【1.5编程基础之循环控制08】 • 将正整数m和n之间(包括m和n)能被17整除的数累加,其中0<m<n<1000。 •输入: • 一行,包含两个整数m和n,其间,以一个空格间隔。 •输出: • 输出一行,包行一个整数,表示累加的结果。 •样例输入: • 50 85 •样例输出: • 204
for (int i=2; i<=100 ; i+=2) cout << i << " "; return 0; }
例4.2 利用for循环,计算输出1+2+…+100的和 #include <iostream> using namespace std; int main () {
int sum=0; for (int i=1; i<=100 ; ++i)
第一节 for语句
• 二、语句执行过程 • for语句的执行过程可由以下4步来描述。 • (1)执行“控制变量初始化语句”,使控制变量获得一个初
值。 • (2)判断控制变量是否满足“条件表达式”,若满足条件则
执行一遍循环体,否则结束整个for语句,继续执行for循 环下面的句子。 • (3)根据增量表达式,计算出控制变量所得到的新值 • (4)自动转到第(2)步。
循环结构(for循环)
选择结构复习:单分支:行:If 条件 Then 语句块:If 条件 Then语句End If双分支行:If 条件 Then 语句1 Else 语句2块:If 条件 Then语句1Else语句2End If多分支ElseIf语句If条件1then语句1ElseIf条件2then语句2ElseIf条件3then语句3Else语句End IfSelect Case语句Select Case表达式Case 表达式1语句lCase 表达式2语句2……Case 表达式n语句nCase Else语句n+1End Select循环结构程序设计一循环结构控制语句程序设计三种基本结构结构:顺序结构流程图 选择结构流程图 循环结构流程图选择结构:(如图) If 条件表达式 Then 语句End IfFor 循环结构:(如图)For I = 1 To 10 Step 1 语句Next I循环是指对同一个程序段重复执行若干次,直到指定的条件不满足为止,这段被重复执行的语句序列被称为循环体,由若干个语句构成。
循环结构主要有三种形式:For ...Next 循环 While …Wend 循环 Do …Loop 循环。
二 For 循环(最常用的一种格式) 1、For 循环语句的格式:For 循环变量=初值 To 终值 Step 步长 循环体 Next 循环变量例如: For I = 1 To 10 Step 1 Print “ 你好 ” Next I说明:(1)循环变量:为一个数值型变量。
用来控制循环过程。
(2)初值:循环变量的初始值,一般为数值型常量、变量。
(3)终值:循环变量的终止值,一般为数值型常量、变量。
(4)步长:循环变量的增量。
其值为正,初值应小于终值(递增循环);若为负,初值应大于终值(递减循环)。
但步长不能是0。
会造成死循环。
如果步长是1,Step 1可省略不写。
(5)循环体:在For语句和Next语句之间的语句序列,可以是一个或者多个语句。
循环结构for语句
通过计数来控制重复语句的运行次数。
for循环
for语句 循环体(需要重复执行的子程序)
(计数循环)for语句
递增型for循环
for 控制变量:=初值 to 终值 do 循增型for循环
for 控制变量:=初值 to 终值 do 循环体语句
递增型for循环
讨论:设每次读入的数为x,和sum,平均值ave,它们都 是实数类型。
一级算法: 1.初始化sum为0; 2.for i:=1 to 20 do
begin 3.读入x 4.将x加到sum上
end 5.计算ave 6.输出sum和ave
例二:读入20个数,输出它们的和以及平均值
二级求精: 1.初始化sum为0; 2.for i:=1 to 20 do
for 控制变量:=初值 downto 终值 do 循环体语句
例一:
编程计算1+2+3+……+100=? 递增型for循环
Program he(input,output); var i,sum:integer; begin
sum:=0; for i:=1 to 100 do
sum:=sum+i; writeln(sum); end.
例一: 编程计算1+2+3+……+100=? 递增型for循环
Program he(input,output); var i,sum:integer; begin
sum:=0; for i:=100 downto 1 do
sum:=sum+i; writeln(sum); end.
例二:读入20个数,输出它们的和以及平均值
循环结构-1.for语句
9
使用for语句的注意事项:
3. do后面如果有分号,说明循环体是空
do 后面有分号,所以循环体 是空 执行完for语句后,再执行1 次k:=k+1
var i,k:integer; begin for i:=1 to 10 do; k:=k+1; end.
能否用writeln?
24
阶乘
n的阶乘:1~n 的累乘 即 n! =1*2*3*…*n 规定 : 0!=1 1!=1 n!= n* (n-1)! ∵ n!= n* (n-1) * (n-2) * … * 3 * 2 * 1 (n-1) ! ∴ n!= n * (n-1) !
25
累乘器
10.求1*2*3*…*n 的积. 即求n! readln(n);
s:=s+1;
18
累加器
4.求1+2+3+…+100的和.
s:=0;
{变量s存储 累加和}
for i:=1 to 100 do s:=s+i; write(s);
19
编程练习
5.求1+2+3+…+n的和。(n<10000) 【输入】一个整数n(n<10000) 【输出】输出1+2+3+...+n的和。 【输入样例】100 【输出样例】 5050
【分析】设i为循环控制变量,偶数个数放在s中,利用循环变量i的值从1变 化到30的规律,逐一寻找偶数的个数,找到偶数就s:=s+1.
Var I,s:integer; begin for i:=1 to 30 do if i mod 2=0 then s:=s+1; writeln(s); end.
《面向对象程序设计JAVA语言程序设计》期末考试试题及部分答案4
《面向对象程序设计JA V A语言程序设计》期末考试试题及部分答案1一、单选题:(每题1分)下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项的标记写在题干后的括号内。
1.下列语句序列执行后,k 的值是( B )。
int m=3, n=6, k=0;while( (m++) < ( -- n) ) ++k;A) 0 B) 1 C) 2 D) 32.设i、j 为int型变量名,a 为int型数组名,以下选项中,正确的赋值语句是( B )。
A) i = i + 2 B) a[0] = 7;C) i++ - --j; D) a(0) = 66;3.Java语言的类间的继承关系是( B )。
A) 多重的B) 单重的C) 线程的D) 不能继承4.设有定义int i = 6 ;,则执行以下语句后,i 的值为( C )。
i += i - 1;A) 10 B) 121 C) 11 D) 1005.下列选项中,用于在定义子类时声明父类名的关键字是( C )。
A)interface B) package C) extends D) class6.若已定义byte[ ] x= {11,22,33,-66} ;其中0≤k≤3,则对x数组元素错误的引用是( C )。
A) x[5-3] B) x[k] C) x[k+5] D) x[0]7.下列语句序列执行后,ch1 的值是( B )。
char ch1='A',ch2='W';if(ch1 + 2 < ch2 ) ++ch1;A) ‘A' B) ‘B' C) ‘C' D) B8.下列语句序列执行后,i 的值是( D )。
int i=8, j=16;if( i-1 > j ) i--; else j--;A) 15 B) 16 C) 7 D) 89.下列语句序列执行后,k 的值是( C )。
Python语言程序设计第五章循环结构程序设计
14
第5章
循环结构程序设计
5.2 for语句 结构
1. for语句一般形式: for 目标变量 in 序列对象: 循环体语句 说明:
for语句的首行定义了目标变量和遍历的序 列对象,后面是需要重复执行的语句块。语 句块中的语句要向右缩进,且缩进量要一致。
15
第5章
循环结构程序设计
注意:
(1)for语句是通过遍历任意序列的元素来建立 循环的。 (2)for 语句也支持一个可选的else块,一般格 式如下: for 目标变量 in序列对象: 语句块 else: 语句
5
第5章
循环结构程序设计
在while语句中使用else子句
while exp: 循环体 else: 语句
Python可以在循环语句中使用else子句,即构 成了while.......else循环结构。
6
第5章
循环结构程序设计
例 :求
100
n 1
n
开始 sum,n=0,1 n<=100
1)问题分析:
29
第5章
循环结构程序设计
5.4 循环控制语句
有时候我们需要在循环体中提前跳 出循环,或者在某种条件满足时,不执行 循环体中的某些语句而立即从头开始新的 一轮循环,这时就要用到循环控制语句 break、continue和pass语句。
30
第5章
循环结构程序设计
(1) break语句
一般格式 break 功能
371printdddijk40728python语言程序设计第5章循环结构程序设计第5章循环结构程序设计循环结构程序设计51while语句当型循环52for语句结构53循环的嵌套54循环控制语句55循环结构程序举例2第5章循环结构程序设计循环结构的基本类型exptaf
c#试题 (复习)
选择题:(2X15=30 分,非单选题)非单选题)一、选择题:1、C#语言源代码文件的后缀名为:DA、.C#B、.CCC、.CSPD、.CS2、C#中导入某一个命名空间的关键字是:AA、usingB、useC、importD、include3、方法中的值参数是_____A_的参数。
A、按值传递B、按引用传递C、按地址传递D、不传递任何值4、以下标识符中,错误的是:CA、_b39B、x345C、6_321D、nAverage5、结构化程序设计的3 种结构是:DA、顺序结构、if 结构、for 结构B、if 结构、if…else 结构、else if 结构C、while 结构、do…while 结构、foreach 结构D、顺序结构、分支结构、循环结构6、while 语句循环结构和do…while 语句循环区别的区别在于:DA、while 语句的执行效率较高B、do…while 语句编写程序较复杂C、无论条件是否成立,while 语句都要执行一次循环体D、do…while 循环是先执行循环体,后判断条件表达式是否成立,而while 语句是先判断条件表达式,再决定是否执行循环体7、下面有关break、continue 和goto 语句描述正确的是:DA、break 语句和continue 语句都是用于中止当前整个循环的B、使用break 语句可以一次跳出多重循环C、使用goto 语句可以方便地跳出多重循环,因而编程时应尽可能多地使用goto 语句D、goto 语句必须和标识符配合使用,break 和continue 语句则不然8、下面是几条定义初始化一维数组的语句,指出其中正确的:CA、int arr1[]={6,5,1,2,3};B、int[] arr2=new int[];C、int[] arr3=new int[] {6,5,1,2,3};D、int[] arr4;arr4={6,5,1,2,3};9、下面有关枚举成员赋值说法正确的是:BA、在定义枚举类型时,至少要为其中的一个枚举成员赋一个常量值B、在定义枚举类型时,直接为某个枚举成员赋值,则其他枚举成员依次取值C、在把一个枚举成员的值赋给另一个枚举成员时,可以不考虑它们在代码中出现的顺序D、在定义的一个枚举类型中,任何两个枚举成员都不能具有相同的常量值10、下面有关静态方法的描述中,错误的是:ABDA、静态方法属于类,不属于实例B、静态方法可以直接用类名调用C、静态方法中,可以访问非静态的局部变量D、静态方法中,可以访问静态的变量11、在类的外部可以被访问的成员是:AA、public 成员B、private 成员C、protected 成员D、protected internal 成员12、下面有关析构函数的说法中,不正确的是:CA、析构函数中不能包含return 语句B、一个类中只能有一个析构函数C、用户可以定义有参析构函数D、析构函数在对象被撤销时,被自动调用13、控件不可用的属性是以下哪一个BA、AllowDropB、EnabledC、BoundsD、Visible14、用于设置时间的控件是以下哪一个?AA、TimerB、ComboBoxC、DateTimeD、DateTimePicker15、以下哪一个命名空间是在进行Sql Server 数据库访问时必须加载的? BA、System.Data.OdbcB、System.Data.SqlClientC、System.Data.OleDbD、System.Data.SqlTypes1、C#中可以把任何类型的值赋给的object 类型变量,当值类型赋给object 类型变量时,系统要进行___装箱__操作;而将object 类型变量赋给一个值类型变量,系统要进行___拆箱_ 操作,并且要求必须加__强制__类型转换。
For循环结构
for循环结构
for语句属于控制结构中的循环结构。
是控制结构中非常重要的一种结构。
当程序中需要按照一定条件重复执行一些语句时使用循环结构。
例如实现1加到100的和的程序,需要重复计算相加功能,这样的程序就适合用循环结构来实现。
而for常用于设计已知循环次数的程序。
for 循环的语法:
程序进行循环后首先执行语句1为循环变量赋初值,然后执行语句2是否符合循环条件,如果符合,执行循环体中的代码块并执行语句3,否则退出循环。
示例:
for…in
for…in循环结构又称为遍历循环结构。
常用于数据集合的循环比如数组。
此结构不需要指定循环次数,会自动从第一个元素循环遍历到最后一个元素。
例如:
建议练习:
使用for循环实现1加到100的和,并输出结果。
使用for…in循环实现数组遍历。
未来教育·(2016年版)全国计算机等级考试教程:二级C语言程序设计
C
2.6 赋值表达式
2 程序设计的初步知识
01
2.7.1 自加、 自减运算符
02
2.7.2 逗号运 算符
2.7 自加、自减和逗号运算 符
04 3 顺序结构
3.1 赋值 语句
3.2 数据 输出
3.3 数据 输入
课后习题
3 顺序结构
3.2.1 printf()函数的一般调用形式 3.2.2 printf()函数的输出格式说明 3.3.1 scanf()函数的一般调用形式 3.3.2 scanf()函数的输入格式说明
07 6 字符型数据
6.1.1 字符 型常量
6.1.2 转义 字符
6.1.3 字符 串常量
6 字符型数据
6.3.1 调用 printf和
scanf函数输 出和输入字符 6.3.2 调用
putchar和 getchar函数 输出和输入字
符
6.1 字符 常量
6.2 字符 变量
6.3 字符的 输入和输出
8.5 函数之间地址值的 传递
8.2 指针变量的定义和 指针变量的类型
8.4 对指针变量的操作
课后习题
8.3.1 给指针变量赋地址
8指针
8.3 给指针变量赋值
8.3.2 给指针变量赋“空” 值
01
8.4.1 通过指 针来引用一个存
储单元
02
8.4.2 移动指 针
03
8.4.3 移动比 较
8指针
8.4 对指针变量的操作
12 C语言 中用户标 识符的作 用域和存 储类
12.3 全局变量及其作用域和 生存期
01 12.3.1 全局变量的作用域和生 存期
02 12.3.2 在同一编译单位内用 extern说明符扩展全局变量的作 用域
C语言判断题
C语言判断题1.每一个C语言程序都必须有一个main函数。
答案: 正确2.C语言程序的三种基本结构是顺序结构、选择结构和递归结构。
答案: 错误,C语言程序的三种基本结构是顺序结构、选择结构和循环结构。
3.在程序设计中,经常用选择(又称分支)、循环和函数3种控制结构。
答案: 错误,程序设计中经常用选择(又称分支)、循环和函数3种控制结构。
4.用C语言编写的源程序必须经过编译连接后生成可执行程序,才能运行。
答案: 正确5.C程序主函数中的一个变量可以被定义为两个或多个不同的类型。
答案: 错误,C程序主函数中的一个变量只能被定义为一种类型。
6.在C源程序中,/*与*/之间的注释信息也被编译,但对程序运行结果不发生影响。
答案: 错误,/*与*/之间的注释信息在编译时会被忽略,不会被编译。
7.C程序是由函数构成的,每一个函数完成相对独立的功能。
答案: 正确8.一个C语言程序中,有且只能有一个main函数。
答案: 正确9.C程序总是从程序的第一条语句开始执行。
答案: 错误,C程序总是从main函数开始执行。
10.C语言标识符由字母、数字和下划线组成,其中第一个字符必须是字母。
答案: 错误,C语言标识符由字母、数字和下划线组成,其中第一个字符可以是字母或下划线。
11.C语言规定:在一个源程序中,main函数的位置必须在最开始。
答案: 错误,C语言规定:在一个源程序中,main函数可以出现在任意位置。
12.C语言程序的基本单位是语句。
答案: 错误,C语言程序的基本单位是函数。
13.对于C程序中的逻辑错误,编译器是可以发现的。
答案: 错误,编译器只能检查语法错误,不能检查逻辑错误。
14.一系列计算机指令的有序组合就构成了程序。
答案: 正确15.C程序由函数所组成。
答案: 正确16.在C程序中,每行只能写一条语句。
答案: 错误,在C程序中,一行可以写多条语句,但是每条语句必须以分号结束。
17.C程序中能直接让机器执行的文件是编辑后的.c源文件。
FOR嵌套循环ppt课件
13
f1--第一个数 f2--第二个数 f3--第三个数 f1=1; f2=1; f3=f1+f2;
以后只要改变f1,f2的值,即可求出下一个数. f1=f2;f2=f3; f3=f1+f2;
递推
for 语句
14
参考程序:
void main() {long f1=1, f2=1, f3; int k;
循环嵌套结构
1
例1 显示右侧图形
main() { int i;
for(i=1;i<=5;i++) printf("* "); getch();
}
*****
2
例2 显示右侧图形
main() { int i,j;
for(i=1;i<=4;i++) {for(j=1;j<=5;j++) printf("* "); printf("\n"); }
{int num=123,x,n;
printf("hint:0<number<1000\n"); /*给出数据范围的提示信息*/
for(n=1;n<=10;n++)
{printf("guess:");
scanf("%d",&x);
if(x==num) {printf("Win!\n");break;}
5
例5 显示右侧图形
main() { int i,j;
for(i=1;i<=4;i++) {for(j=1;j<=i;j++) printf("%d ",j); printf("\n\n"); }
C语言循环结构
例5.1编写程序,求1+2+3+···+100的值 5.1编写程序,求1+2+3+···+100的值 main( ) { int i,sum; i=1; sum=0; while (i<=100) { sum=sum +i; i++;} printf(“ printf(“ sum=%d \n” ,sum); }
15
5-2有以下程序 main() { int i, s=0; for (i=0;i<10;i+=2) s+=i+1; printf (“%d\n”,s); (“%d\ } 程序执行后的结果是 A.自然数1-9的累加和 A.自然数1 B.自然数1-10和的累加 B.自然数1 10和的累加 C.自然数1-9中奇数之和 C.自然数1 D.自然数1-10中偶数之和 D.自然数1 10中偶数之和
16
5-3要求以下程序的功能是计算: s=1+1/2+1/3+···+1/10。 s=1+1/2+1/3+···+1/10。 main() { int n; float s; s=1.0; for (n=10; n>1; n--) n--) s=s+1/n; printf(“%6.4f\ printf(“%6.4f\n”,s); } 程序运行后出现结果错误,导致错误结果的程序 行是 A. s=1.0; B. for (n=10; n>1; n--) n--) C. s=s+1/n; D. printf(“%6.4f\n”,s); pr循环结构的嵌套 在一个循环体内又完整地包含了另一个循环, 称为循环嵌套。前面介绍的三种类型的循环都可 以互相嵌套,循环的嵌套可以多层,但每一层循 环在逻辑上必须是完整的。 例5.5使用双层for循环打印下面的图形 5.5使用双层for循环打印下面的图形 **** **** ****
大学C语言期末考试题库试题及答案汇总-填空 复习题
大学C语言期末考试题库试题及答案汇总-填空复习题1.以下程序的输出结果是______。
main(){ int a=0;a+=(a=8);printf("%d\n",a);}答案:16知识点:赋值表达式2.若有定义:int a=10,b=9,c=8;接着顺序执行下列语句后,变量b中的值是______。
c=(a-=(b-5));c=(a % 11)+(b=3);答案:3知识点:赋值表达式3.以下程序运行后的了输出结果是______。
main(){ int a=1,b=2,c=3;if(c=a) printf("%d\n",c);else printf("%d\n",b);}答案:1知识点:赋值表达式4.若有语句int i=-19, j=i%4;printf("%d\n",j);则输出结果是______。
答案:-3知识点:算术表达式7.设y 是int型变量,请写出判断y为奇数的关系表达式______。
答案:y%2知识点:算术表达式12.下面程序的输出是______。
main(){ int x=2;while(x--);printf("%d\n", x);}答案:-1知识点:自加、自减运算符和逗号运算符19.以下程序的输出结果是______。
void fun(){ static int a=0;a+=2; printf("%d",a);}main(){ int cc;for(cc=1;cc<4;cc++) fun();printf("\n")}答案:246知识点:函数的调用21.若有以下程序int f(int x,int y){ return(y-x)*x; }main(){ int a=3,b=4,c=5,d;d=f(f(3,4),f(3,5));printf("%d\n",d);}执行后输出结果是______。
计算机等级考试 循环结构
Main()
{
Float n,t,pi; /*存放分母,每次累加不是一个整数,而是实数,因此要用float定义*/
Int s;
T=1.0;n=1.0;pi=0;
S=1;
While(fabs(t)>=1e-4)
{
Pi=pi+t;
N=n+2;
S=-s;
T=s/n;
}
Pi=4*pi;
6)表达式1和表达式3可以是一个简单的表达式,也可以是一个逗号表达式,表达式1和表达式3可以是与循环无关的任意表达式。
i=1,sum=0;
for(p=0;i<=100;p=p+i)
{sum+=i;i++}
7)表达式可以是关系、逻辑、数值、字符表达式。
关系:for(i=1;i<=100;i++)
逻辑:for(i=3,j=4;i&&j;i--,j--)
1)while和do-while语句在循环体之前赋值。
For在表达式(也相当于在循环体前赋初值)
2)while和do-while使循环趋于结束的语句位于循环体内,而for循环位于表达式3(也可位于循环体内)
3、共同点:
1)三个循环体解决同一个问题时,条件相同。
2)三个循环都必须有使循环趋于结束的语句,否则为死循环。
printf(“n!=%lf\n”,s);
}
四、三种循环结构的区别和特点。
1、while和do-while的区别
1)while当型循环:先判断,后执行
do-while直到型循环:先执行,后判断
2)while最少执行次数0
JAVA语言程序设计考试试题及参考答案
JAVA语言程序设计考试试题及参考答案一、单选题:(每题1分)下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项的标记写在题干后的括号内。
1.下列语句序列执行后,k 的值是( B )。
int m=3, n=6, k=0;while( (m++) < ( -- n) ) ++k;A) 0 B) 1 C) 2 D) 32.设 i、j 为int型变量名,a 为int型数组名,以下选项中,正确的赋值语句是( B )。
A) i = i + 2 B) a[0] = 7;C) i++ - --j; D) a(0) = 66;3.Java语言的类间的继承关系是( B )。
A) 多重的 B) 单重的 C) 线程的 D) 不能继承4.设有定义 int i = 6 ;,则执行以下语句后,i 的值为( C )。
i += i - 1;A) 10 B) 121 C) 11 D) 1005.下列选项中,用于在定义子类时声明父类名的关键字是( C )。
A)interface B) package C) extends D) class6.若已定义 byte[ ] x= {11,22,33,-66} ;其中0≤k≤3,则对x数组元素错误的引用是( C )。
A) x[5-3] B) x[k] C) x[k+5] D) x[0]7.下列语句序列执行后,ch1 的值是( B )。
char ch1='A',ch2='W';if(ch1 + 2 < ch2 ) ++ch1;A) 'A' B) 'B' C) 'C' D) B8.下列语句序列执行后,i 的值是( D )。
int i=8, j=16;if( i-1 > j ) i--; else j--;A) 15 B) 16 C) 7 D) 89.下列语句序列执行后,k 的值是( C )。
C语言程序设计教程(第4版)_第5章_循环结构
5.1 for语句
程序流程图: 程序:example5_2.c 思考: ①该算法的缺点; ②设计更好的算法。 ③假如输入的数可以为任意整数, 如果a≤b,计算 i ; 如果a>b,则计算 i 。 请设计算法并编写程序验证。
i b ia ia i b
5.1 for语句
例3:编写程序,从键盘输入m和n的值,用符号“*”在屏幕 上打印出如下所示具有m行n列的矩形图案。 ******* ******* ******* ******* ******* ******* ******* ******* 分析: ①图案有规律,共有m行,每行有n个*号。 ②可采用循环嵌套的方式: 第1层(外层)控制行数,用i来表示,输出m行“*” ; 第2层(内层)控制列数,用j来表示,输出n列“*” 。
100
5.1 for语句
for语句所具有的特性。 1.<初始表达式>可以省略,但须保留分号(;),同时在for之 前必须给循环控制变量赋值,形式为: <初始表达式>; for(;<条件表达式>;<循环表达式>) <循环体语句> 2.<条件表达式>一般不可省略,否则为无限循环。 例如: for(i=1;; i++) sum =sum+i; 相当于条件总为真,程序会一直不停地执行直到“数据溢出”。
5.2 while语句
例7:编写程序,统计从键盘输入的字 符个数(回车换行符也是一个字符) ,当遇到结束标志时程序结束。 分析:关键是循环计数。
开始 count=0
(ch=getchar())!=EOF
F
设置一个累加器count(初值为0),
每次从键盘输入一个字符,只要该字 符的值不等于结束标志,累加器的值 就增1:count=count+1; 算法流程图如图所示。 程序: example5_7.c
第4章 循环结构(C++版)_第四节 循环嵌套(新)02
第四节 循环嵌套
同时也可以采用一个for循环来求解,表面上看好像优于三重循环,实际上却比 上面的程序效率低,请同学们自己分析。 程序如下:
#include<iostream> #include<iomanip> using namespace std; int main() { int a,b,c; for (int m=100; m<=999; ++m) { a=m/100; b=(m%100)/10; c=m%10; if (a*a*a+b*b*b+c*c*c==m) cout<<setw(6)<<m; } return 0; }
【说明】 这里用了一个三层循环的程序解决问题。当x取得一个数值时, for的y循环体都要执行遍y的所有取值;当y取得一个数值时,for的z 循环体都要执行遍z的所有取值;对于z的每一个取值,if语句都要执 行一次。
不难算法,在程序的执行过程中,作为最内层循环体的if语句, 将被执行:(1+100/5)*(1+100/3)*(1+3*100)=214914次。而观察程序 的运行结果,问题的解远远小于这个数字,只有4组解。如何减少循 环次数呢?
第四节 循环嵌套
例4.15 求100-999中的水仙花数。若三位数ABC,ABC=A3+B3+C3,则称ABC为水 仙花数。 例如153,13+53+33=1+125+27=153,则153是水仙花数。 【分析】 根据题意,采用三重循环来求解。由于循环次数一定,用for循环最为 简单。程序如下: #include<iostream> #include<iomanip> //调用setw函数需注明使用该库 using namespace std; int main() { for (int a=1; a<=9; ++a) for (int b=0; b<=9; ++b) for (int c=0; c<=9; ++c) { if ( a*a*a+b*b*b+c*c*c==a*100+b*10+c ) cout<<setw(6)<<a*100+b*10+c; //setw函数控制输出场宽 } return 0; } 运行结果: 153 370 371 407
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(3)如果省略表达式3,即: for(表达式1;表达式2;) 循环语句; 此时,也将产生一个无穷循环。因此,程序设计者应另外设法保证循环 能正常结束,可以将循环变量的修改部分(即表达式3)放在循环语句 中控制。例如: for(i=1;i<=100;) { sum+=i; i++; } 上述for语句中没有表达式3,而是将表达式3(i++)放在循环语句中, 作用相同,都能使用循环正常结束。注意表达式2后面的分号不能省略。 (4)也可以同时省略表达式1和表达式3,即: for(;表达式2;) 循环语句; 也即省略了循环的初值和循环变量的修改部分,此时完全等价于while 语句。
(5)同时省略表达式1、表达式2和表达式3,即: for(;;) 循环语句; 相当于赋循环变量的初值,循环控制条件始终为真,不修 改循环变量,故循环将无终止地进行下去。 (6)在for语句中,表达式1和表达式3不仅可以使用简单表 达式,也可以使用逗号表达式,即包含一个以上的简单表 达式,中间用逗号间隔。在逗号表达式内按自左至右求解, 整个表达式的值为其中最右边的表达式的值。例如: for(i=1;i<=100;i++,sum=sum+i) 相当于 for(i=1;i<=100;i++) sum=sum+i; (7)在for语句中,表达式一般为关系表达式或逻辑表达式, 但也可以是其他表达式(如字符表达式、数值表达式)。
可以看出,此例的结果前两例是完全相同的。显 然,用for语句简单、方便。 ※重点提示:for语句中的表达式可以部分或全部 省略,但两个分号不能省略,且三个表达式均省略 时,循环将会无限制执行,而形成死循环。因此, 编写程序时,在for后面的一对圆括号内,应只含有 能对循环进行控制的表达式,其它的操作尽量放在 循环体内完成。
本次课要点:
5.3 for语句和用for语句构成的循环结构
ห้องสมุดไป่ตู้
5.3 for语句和用for语句构成的循环结构 5.3.1 for语句构成的循环结构 for语句的一般形式为: for(表达式1;表达式2;表达式3) 循环语句; 以下是几点说明: 1.表达式1一般为赋值表达式,用于进入循环之前 给循环变量赋初值。 2.表达式2一般为关系表达式或逻辑表达式,用于 执行循环的条件判定,它与while、do while循环 中的表达式作用完全相同。 3.表达式3一般为赋值表达式或自增、自减表达式, 用于修改循环变量的值。
5.3.2 for循环执行过程
for语句的执行过程是: ① 先计算表达式1的值。 ② 再计算表达式2的值,若其值为真,则 执行循环体一次;否则跳转第⑤步。 ③ 然后计算表达式3的值。 ④ 转回上面第②步。 ⑤ 结束循环,执行for语句下面一个语句。
图5.2 for语句的执行流程图
※重点提示:在整个for语句 中,表达式1只计算一次, 表达式2和表达式3则可能 计算多次。循环体可能多 次执行,也可能一次都不 执行。
for循环结构是几乎所有高级语言都提供的循 环控制结构。但C语言中的for语句使用最为 灵活,它不仅可以用于循环次数已经确定 的情况,而且可以用于循环次数不确定而 只给出循环结束条件的情况,因而它完全 可以代替while语句和do while语句。
※重点提示:表达式1、表达式2、表达式3都 必须为for语句规定的合法的表达式。
5.3.3 有关for语句的说明 (1)for语句的一般形式中的“表达式1”可以省略,即: for(;表达式2;表达式3) 循环语句; 但注意省略表达式1时,其后的分号不能省略。此时,应在 for语句之前给循环变量赋初值。 (2)如果省略表达式2,即: for(表达式1;;表达式3) 循环语句; 则表示表达式2的值始终为真,循环将无终止地进行下去。 例如: for(i=1;;i++) printf("%d",i); 将无限循环输出1,2,3,4,5,6,……
(8)for语句的循环语句可以是空语句。空语句用来实现延 时,即在程序执行中等待一定的时间。如下为延时程序的 例子: for(i=1;i<=1000;i++); 注意以上语句最后的分号不能省略,它代表一个空语句。 例如:用for循环结构来计算1+2+3+…+100。 main() { int i,sum=0; for(i=1;i<=100;i++) sum+=i; printf("%d\n",sum); } 程序运行结果为: 5050