《第5章 判断与循环.ppt》由会员分享,可在线阅读,更多相关《第5章 判断与循环.ppt(55页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 北京理工大学计算机学院北京理工大学计算机学院2022/12/181第第 5 5 章章 判断与循环判断与循环一般复杂问题的程序设计方法一般复杂问题的程序设计方法张克军张克军 北京理工大学计算机学院北京理工大学计算机学院2022/12/182目录目录1 条件描述与选择结构程序设计 2 重复操作问题与循环语句 3 典型例题解析 4 本章小节第第5 5章章 判断与循环判断与循环 北京理工大学计算机学院北京理工大学计算机学院2022/12/183思考题思考题给定圆的半径,计算圆的面积;给定圆的半径,计算圆的面积;输入三个边值,计算三角形的面积;输入三个边值,计算三角形的面积;输入三个系数,计算二次方程
2、的实根。输入三个系数,计算二次方程的实根。思考:上述每一个问题是否都有条件限制?要思考:上述每一个问题是否都有条件限制?要求什么求什么条件条件?如何描述条件?如何描述条件?如何使用条件?如何使用条件?北京理工大学计算机学院北京理工大学计算机学院2022/12/184思考题续思考题续 计算计算1到到100相加之和;相加之和;计算多项式计算多项式1-2+3-4+5-+99-100 的值;的值;输入某班输入某班50名学生名学生C语言考试的成绩,求平均分。语言考试的成绩,求平均分。思考:上述每一个问题是否又有条件限制?要思考:上述每一个问题是否又有条件限制?要求什么求什么条件条件?如何描述条件?如何描
3、述条件?如何使用条件?如何使用条件?顺序结构可以实现吗?不能实顺序结构可以实现吗?不能实现又如何编写程序?现又如何编写程序?北京理工大学计算机学院北京理工大学计算机学院2022/12/1855.1.1 5.1.1 程序中限定条件的表示程序中限定条件的表示 关系运算和逻辑运算经常作为条件语句和关系运算和逻辑运算经常作为条件语句和循环语句中的条件,其结果为一循环语句中的条件,其结果为一逻辑值逻辑值。半径大于半径大于0如何用如何用C语言描述语言描述 三个边值大于三个边值大于0 0并且任意两边之和并且任意两边之和大于第三边;大于第三边;二次项系数不为二次项系数不为0 0并且要求并且要求b2-4ac0b
4、2-4ac0 关系运算是一种比较运算,将两个值(表达关系运算是一种比较运算,将两个值(表达式)进行比较,判断比较的结果是否符合给定的式)进行比较,判断比较的结果是否符合给定的条件条件:符合结果为符合结果为1;否则结果为;否则结果为0。关系运算关系运算 逻辑运算逻辑运算 北京理工大学计算机学院北京理工大学计算机学院2022/12/186大于大于 ,大于等于大于等于=,小于,小于 ,不等不等!=小于等于小于等于bc1.1.关系运算符和关系表达式关系运算符和关系表达式1 1)关系运算)关系运算(2)关系表达式的结果是一个逻辑值,根据关系是否满)关系表达式的结果是一个逻辑值,根据关系是否满足,分别取值
5、。足,分别取值。(1 1)关系运算符与运算分量构成关系表达式)关系运算符与运算分量构成关系表达式)关系运算符与运算分量构成关系表达式)关系运算符与运算分量构成关系表达式int i=1,j=7,a;a=i+(j%4!=0)a的值?的值?结果:结果:a=2(3 3)使用关系表达)使用关系表达)使用关系表达)使用关系表达式注意事项式注意事项式注意事项式注意事项(A)数学上,判断数学上,判断x是否在区间是否在区间 a,b 时,时,习惯上写成习惯上写成a=x=b,但在,但在C 中,必须写成中,必须写成 a=x&x0的值为逻辑的值为逻辑 12 2)关系表达式)关系表达式满足为真,取满足为真,取1否则为假,
6、取否则为假,取0例如:例如:1.0/3.0*3.0=1.0的逻辑值为的逻辑值为0(C)当判断两个浮点数是否相等时,由于存储上当判断两个浮点数是否相等时,由于存储上的误差,可能会有错误的结果,例如:数学上恒的误差,可能会有错误的结果,例如:数学上恒等式:等式:1.0/3.0 *3.0=1.0 但在但在C语言语言中:中:(D)在数学中,在数学中,5278 无效,但无效,但C中是允许的中是允许的(E)关系表达式的结果可以当成整型数,例如:关系表达式的结果可以当成整型数,例如:int a=3,b=5,c=7,d;求:求:d=a c逻辑逻辑117逻辑逻辑0d的值的值为为0使用关系表达式注意事项使用关系表
7、达式注意事项 北京理工大学计算机学院北京理工大学计算机学院2022/12/189特别思考!特别思考!pC语言是如何判别一个表达式是关系式还是其他表语言是如何判别一个表达式是关系式还是其他表达式?达式?p如果一个表达式结果为如果一个表达式结果为0,可以认为是,可以认为是“假假”吗?吗?p如果一个表达式结果为如果一个表达式结果为1或非或非0,可以认为,可以认为“真真”吗吗?p是否只能用关系式描述判断条件?是否只能用关系式描述判断条件?任何类型的合法表达式都可以看作判断条件任何类型的合法表达式都可以看作判断条件 对其它类型的表达式,若表达式运算结果对其它类型的表达式,若表达式运算结果“非零非零”就就
8、认为认为“真真”,结果为,结果为“零零”认为认为“假假”。给条件表达带来灵给条件表达带来灵活性,提高程序编活性,提高程序编写效率写效率 举例,写出描述举例,写出描述“变量变量numnum不是偶数不是偶数”的表达式的表达式关系式:关系式:num%2!=0num%2!=0算术式:算术式:num%2num%2二者完全等价!二者完全等价!北京理工大学计算机学院北京理工大学计算机学院2022/12/1810(1)有三个)有三个&(与与):两边为两边为1,结果为,结果为1 (或或):两边有一个为两边有一个为1,结果为,结果为1 !(非非):非非1为为0,非,非0为为1 !1=0,!0=1(2)优先级:!的
9、优先级高于)优先级:!的优先级高于&和和 逻辑运算与其他运算相比:逻辑运算与其他运算相比:非非!的优先级最高,的优先级最高,与与&和或和或 的优先级低于其他。的优先级低于其他。(3)结合性:与和或是从左向右,非是从右向左)结合性:与和或是从左向右,非是从右向左2.逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式1 1)逻辑运算符)逻辑运算符 北京理工大学计算机学院北京理工大学计算机学院2022/12/1811逻辑运算符的逻辑运算符的真值表,逻辑值真值表,逻辑值用用1和和0表示表示 a b a&b a b !a 0 0 0 0 1 0 1 0 1 1 1 0 0 1 0 1 1 1 1 0 北京理工
10、大学计算机学院北京理工大学计算机学院2022/12/1812B、逻辑运算逻辑运算“0”“假假”“1”“真真”逻辑变量有两种状态:逻辑变量有两种状态:研究事物的逻辑关系时,用研究事物的逻辑关系时,用逻辑变量逻辑变量代表各个事件。代表各个事件。逻辑运算符连接逻辑变量,构逻辑运算符连接逻辑变量,构成成逻辑表达式逻辑表达式,结果为逻辑值。,结果为逻辑值。开为开为 1关为关为 0A、逻辑变量、逻辑变量 北京理工大学计算机学院北京理工大学计算机学院2022/12/1813两个条件中只要有一两个条件中只要有一个成立,结果就成立个成立,结果就成立锁打开:锁打开:1锁关闭:锁关闭:0有钥匙:有钥匙:1无钥匙:无
11、钥匙:0 1 0 0 1 A +1 1 0 0 B 1 1 0 1 C A BA B两把钥匙两把钥匙C C逻辑或逻辑或真值表:真值表:A B C0 0 00 1 11 0 11 1 1 逻辑或逻辑或|(加,加,+,V)或者或者 北京理工大学计算机学院北京理工大学计算机学院2022/12/1814 1 0 0 1 1 1 0 0 1 0 0 0开关合:开关合:1开关开:开关开:0灯灯 亮:亮:1灯灯 灭:灭:0两个条件都个成立两个条件都个成立结果才成立结果才成立两个开关两个开关A、B控制一盏灯控制一盏灯CABC逻辑与真值表逻辑与真值表:A B C0 0 00 1 01 0 01 1 1 逻辑与逻
12、辑与&(乘,乘,)并且并且 北京理工大学计算机学院北京理工大学计算机学院2022/12/1815(2)表达式的值为逻辑的表达式的值为逻辑的1和和0,表示真与假,表示真与假任何非零实任何非零实数均可作为数均可作为逻辑上的逻辑上的1 1例:例:a=5,b=7,c=4,d=3x=(a+b)(c+d)&(da)先先做算术运算,再做做算术运算,再做关系判断,将最后结关系判断,将最后结果赋给果赋给x(1)用用逻辑运算符将关系运算表达式逻辑运算符将关系运算表达式或逻辑量连接起来构成逻辑表达式或逻辑量连接起来构成逻辑表达式5 2 7 8从左向右运算从左向右运算 (52)逻辑值为逻辑值为1(17)逻辑值为逻辑值
13、为0(08)逻辑值为逻辑值为0整个表达式的值为整个表达式的值为 0 02 2)逻辑表达式)逻辑表达式结果:结果:x=(12)(7)&(0)=1&0=0求逻辑表达式的值求逻辑表达式的值 1)14&47 2)17 3)!(2 3)!(25)5)!(4=6)&(3=7)如何表示闰年如何表示闰年3)逻辑运算举例)逻辑运算举例 逻辑表达式逻辑表达式 结果结果 1)14&47 1&1=1 2)17 1&0=0 3)!(2 3)!(25)!0=1 5)!(4=6)&(3b)&(n=cd)之后之后 :m=?n=?由于由于 ab的值为的值为 0,m=0不再判断不再判断(n=cd)的值,因此,的值,因此,n 维持
14、原有的值维持原有的值m=0n=14)逻辑运算的特点)逻辑运算的特点短路行为短路行为 北京理工大学计算机学院北京理工大学计算机学院2022/12/1819用用C语言描述:语言描述:1)a小于小于b或小于或小于c2)a和和b都大于都大于c3)a和和b中有一个大于中有一个大于c4)a是非正奇数是非正奇数5)a是是偶偶数数6)a不能被不能被b整除整除7)a是是正正奇奇数,且数,且b是是负偶数负偶数逻辑运算举例逻辑运算举例用用C语言描述:语言描述:1)ab|ac&bc3)ac|b c4)!(a0&a%2!=0)5)a%2=06)a%b!=07)(a0&a%2!=0)&(bb)?a:b;当当 a=9,b=
15、5时时,x=9条件运算要求有三个运算分量,并且不论条件是条件运算要求有三个运算分量,并且不论条件是否成立,都必须是为同一个变量赋值。否成立,都必须是为同一个变量赋值。3.条件运算符与条件表达式条件运算符与条件表达式2 2)条件表达式)条件表达式 (1)格式格式:(表达式表达式1)?(表达式表达式2):(表达式表达式3);(3)条件运算符的优先级:高于赋值,低于其他)条件运算符的优先级:高于赋值,低于其他(4)结合性:从右向左)结合性:从右向左z=(ab)?a:(ad)?c:d;(5)数据类型可以不同:)数据类型可以不同:xy?a:b执行执行:int x=10,y=9;int a,b,c;a=(
16、-x=y+)?-x:+y;b=x+;c=y;后后a,b,c?a,b,cA)9,9,9B)8,8,10C)8,10,9D)1,11,10X为为9y为为10X为为83)条件运算的特点)条件运算的特点 北京理工大学计算机学院北京理工大学计算机学院2022/12/1822若若w,x,y,z,m均为均为int型变量,则执行下面语句后型变量,则执行下面语句后的的m值为:值为:w=1;x=2;y=3;z=4;m=(wx)?w:x;m=(my)?m:y;m=(mz)?m:z;A)1 B)2 C)3 D)4若若w=1,x=2,y=3,z=4,则表达式则表达式wx?w:y10?x+100:x-10);printf
17、(“%d,”,w+|z+);printf(“%d,”,!wz);printf(“%d,”,w&z);A)0,1,1,1 B)1,1,1,1 C)0,1,0,1 D)0,1,0,0算术运算算术运算关系运算关系运算逻辑运算逻辑运算条件运算条件运算综合举例综合举例 北京理工大学计算机学院北京理工大学计算机学院2022/12/1824编程应用举例编程应用举例【例例5-3】输入一个字符,判断是否是大写字母,若是输入一个字符,判断是否是大写字母,若是则转换成小写字母,不是不转换,要求输出最后得则转换成小写字母,不是不转换,要求输出最后得到的字符。请用条件表达式解决。到的字符。请用条件表达式解决。问题分析:
18、分如下问题分析:分如下4步解决问题。步解决问题。输入字符;输入字符;判断是否是大写字母;判断是否是大写字母;是则转换成小写字母,不是不转换;是则转换成小写字母,不是不转换;最后输出字符。最后输出字符。编写程序:编写程序:/*/*大写字母转换小写字母大写字母转换小写字母*/#include#include int main()int main()char ch;char ch;scanf(scanf(“%c%c”,&ch);,&ch);ch=(ch=(ch=ch=A A&ch=&ch=Z Z)?(ch+32):ch)?(ch+32):ch;printf(printf(“%cn%cn”,ch);,
19、ch);return 0;return 0;北京理工大学计算机学院北京理工大学计算机学院2022/12/18255.1.3 5.1.3 程序中问题条件的处理程序中问题条件的处理程序中问题条件的处理程序中问题条件的处理if-else if-else 语句语句语句语句 1 1单分支判断执行语句单分支判断执行语句(1)语句格式 ifif(条件表达式)语句(条件表达式)语句(2)功能 先计算条件表达式的值,然后进行真假逻辑判断。若“条件表达式”成立(结果为真),执行后面的语句。语句执行完后或者条件不成立时,都顺序执行下条语句。YesNo条件条件?语句语句 条件?成立 不成立语句 北京理工大学计算机学院
20、北京理工大学计算机学院2022/12/1826应用举例应用举例【例例5-4】编写程序,输入一个字符,若是字母,则编写程序,输入一个字符,若是字母,则输出输出Yes!。顺序步骤顺序步骤:先输入,后判断,再输出。流程图描述流程图描述:字母?是 不是输出Yes!声明变量并输入字符 程序编写程序编写:#include int main()return 0;char ch;ch=getchar();if(ch=if(ch=a a&ch=&ch=|ch=A A&ch=ch=Z Z)printf(printf(“Yes!Yes!”););北京理工大学计算机学院北京理工大学计算机学院2022/12/1827应
21、用举例应用举例【例例5-5】结合第结合第4章例章例4-2,输,输入三个一般整数,找出最大值入三个一般整数,找出最大值并输出。并输出。顺序步骤顺序步骤:先输入,后判断,再输出。流程图描述流程图描述:程序编写程序编写:#include int main()return 0;int a,b,c,max;scanf(“%d,%d,%d”,&a,&b,&c);max=a;if(bmax)max=b;if(cmax)max=c;printf(“max=%dn”,max);声明变量并输入a,b,camax bmax?Yes Nobmax cmax?Yes Nocmax输出max值 北京理工大学计算机学院北京
22、理工大学计算机学院2022/12/1828应用举例应用举例【例例5-6】编写程序,给定一个整型自变量编写程序,给定一个整型自变量x,计算并输,计算并输出下面分段函数的值。出下面分段函数的值。顺序步骤顺序步骤:先输入,后判断,再计算,最后输出。流程图描述流程图描述:输入x,5y x0是 否x2-2y输出y的值 程序编写程序编写:#include int main()return 0;int x,y=5;int x,y=5;scanf(scanf(“%d%d”,&x);,&x);if(x0)y=x+1;if(x0)y=x*x-2;if(x0)y=x*x-2;printf(printf(“y=%dn
23、y=%dn”,y,y););北京理工大学计算机学院北京理工大学计算机学院2022/12/18295.1.3 5.1.3 程序中问题条件的处理程序中问题条件的处理程序中问题条件的处理程序中问题条件的处理if-else if-else 语句语句语句语句 2 2双分支判断执行语句双分支判断执行语句(1)语句格式 ifif(条件表达式)语句(条件表达式)语句1 1 elseelse 语句语句2 2(2)功能 先计算条件表达式的值,然后进行真假逻辑判断。若“条件表达式”成立(结果为真),执行后面的语句1,否则执行语句2。条件?成立 不成立语句1 语句2 YesNo条件判断语句1语句2 北京理工大学计算机
24、学院北京理工大学计算机学院2022/12/1830应用举例应用举例【例例5-7】输入一个一般整数,若是偶数,显示偶数输入一个一般整数,若是偶数,显示偶数even number,否则显示奇数,否则显示奇数odd number。顺序步骤顺序步骤:先输入,后奇偶判断,再输出。流程图描述流程图描述:程序编写程序编写:#include int main()return 0;int x;scanf(“%d”,&x);if(x%2!=0)if(x%2!=0)printf(“odd number!n”);elseelse printf(“even number!n”);定义变量,输入整数给变量x x是奇数?是
25、 不是输出“odd number”输出“even number”结束条件是否有其它形式,条件是否有其它形式,若修改,程序如何若修改,程序如何表达?表达?北京理工大学计算机学院北京理工大学计算机学院2022/12/1831应用举例应用举例【例例5-8】输入三个整数作为边构成三角形,计算三输入三个整数作为边构成三角形,计算三角形的面积并输出。若不能构成三角形则显示输角形的面积并输出。若不能构成三角形则显示输入错误信息。入错误信息。顺序步骤顺序步骤:先输入,后判断是否构成三角形,再相应处理,最后输出。流程图描述流程图描述:程序编写程序编写:#include#include int main()ret
26、urn 0;为什么用为什么用2.02.0而不用而不用2 2?输入a,b,c三个边值 构成?是 否 计算面积 显示错误提示 输出面积 结束int a,b,c;float s,area;scanf(“%d,%d,%d”,&a,&b,&c);if(a0&b0&c0&a+bc&a+cb&b+ca)if(a0&b0&c0&a+bc&a+cb&b+ca)s=(a+b+c)/2.0;area=sqrtsqrt(s-a)*(s-b)*(s-c)*s);printf(“area=%5.2fn”,area);/复合语句复合语句 elseelse printf(“input data error!n”);北京理工大
27、学计算机学院北京理工大学计算机学院2022/12/18325.1.3 5.1.3 程序中问题条件的处理程序中问题条件的处理程序中问题条件的处理程序中问题条件的处理if-else if-else 语句语句语句语句 3 3多分支判断执行语句多分支判断执行语句(1)语句格式之一ifif(条件表达式(条件表达式1 1)if(if(条件表达式条件表达式2)2)语句语句1 1 else else 语句语句2 2 else ifelse if(条件表达式(条件表达式3 3)语句)语句3 3 else else 语句语句4 4(2)功能 先计算条件表达式的值,然后进行真假逻辑判断。若“条件表达式”成立(结果为
28、真),继续执行后面的判断语句,否则执行另一判断语句,层层判断下去。表达式1?真 假 表达式2?表达式3?真 假 真 假语句1 语句2 语句3 语句4 北京理工大学计算机学院北京理工大学计算机学院2022/12/1833格式格式 if(表达式表达式1)语句语句1 else if(表达式表达式2)语句语句2 else if(表达式表达式3)语句语句3 else 语句语句 n表达式表达式1表达式表达式3表达式表达式2语句语句1语句语句2语句语句3语句语句nYYYNNN3.多分支的多分支的 if 结构结构 北京理工大学计算机学院北京理工大学计算机学院2022/12/1834多分支的其它形式多分支的其它
29、形式if(条件表达式1)if(条件表达式2)语句1 else 语句2else 语句3if(条件表达式1)语句1else if(条件表达式2)语句2 else 语句3if(条件表达式1)语句1else if(条件表达式2)语句2 else if(条件表达式3)语句3 else 语句nif(条件表达式1)if(条件表达式2)if(条件表达式3)if(条件表达式n)语句1 else 语句2 else 语句3 else语句n 提提示示:C语言规定,else总是与它上面最最近近的的且且没没有有配配对对的if语句进行匹配。北京理工大学计算机学院北京理工大学计算机学院2022/12/1835多分支应用举例多
30、分支应用举例【例例5-9】实型变量实型变量a,b中放有两门课程的考试成绩,中放有两门课程的考试成绩,如果两门成绩都及格如果两门成绩都及格(成绩成绩=60),则显示,则显示“pass”,如果如果a成绩不及格,则显示成绩不及格,则显示“fail”,如果,如果a成绩及格成绩及格而而b成绩不及格则不做任何处理。成绩不及格则不做任何处理。请用多分支语句描述。请用多分支语句描述。A)if(a=60)A)if(a=60)if(b=60)printf(if(b=60)printf(“passpass”);else printf(fail)else printf(fail);B)if(a60)printf(B)
31、if(a=60)printf(else if(b=60)printf(“passpass”);C)if(a=60)&(b=60)printf(C)if(a=60)&(b=60)printf(“passpass”);else if(b60)printf(fail)else if(b=60)D)if(b=60)if(a=60)printf(if(a=60)printf(“passpass”);else printf(fail)else printf(fail);北京理工大学计算机学院北京理工大学计算机学院2022/12/1836多分支应用举例多分支应用举例【例例5-10】根据学生的成绩,将学生划分
32、为根据学生的成绩,将学生划分为A,B,C,D,E五个等级,其对应的关系已如下五个等级,其对应的关系已如下(其中整型变其中整型变量量result存放学生成绩,字符型变量存放学生成绩,字符型变量grade存放学生存放学生等级等级),编写程序。,编写程序。#include int main()int result;char grade;scanf(“%d”,&result);if(result100)if(result100)printf(printf(“input Error!ninput Error!n”);return-);return-1;1;if(result=90&result=90&r
33、esult=80&result=80&result=70&result=70&result=60&result=60&result=0&result=0&result60)grade=E E;printf(“Grade=%c”,grade);return 0;if(result100)printf(if(result100)printf(“input input Error!nError!n”);return-1;);return-1;else else if(result60)grade=E;if(result60)grade=E;else if(result70)grade=D;else
34、if(result70)grade=D;else if(result80)grade=C;else if(result80)grade=C;else if(result90)grade=B;else if(result100d=c/100输出输出a+b输出输出c,dYN 对于一个整数,取前几位对于一个整数,取前几位(百位以上)用除法;取后几位(百位以上)用除法;取后几位(百位以下),用取模运算。(百位以下),用取模运算。例如:当例如:当K=12345时时前前三位:三位:K/100=123后两位:后两位:K%100=45应用实例流程图应用实例流程图 北京理工大学计算机学院北京理工大学计算机学院2
35、022/12/1838main()int a,b,c,d;printf(“Please input a,bn”);scanf(“%d,%d”,&a,&b);c=a*a+b*b;if(c100)d=c/100;printf(“%d,%dn”,c,d);else printf(“a+b=%dn”,a+b);c=a*a+b*b输入输入a,bC100d=c/100输出输出a+b输出输出c,dYN输入输入:11,10 输出:输出:221,2输入:输入:3,2 输出:输出:a+b=5应用实例程序应用实例程序 北京理工大学计算机学院北京理工大学计算机学院2022/12/18395.当当 if 后有多个执行语
36、句时,必须用后有多个执行语句时,必须用 将多个语句括将多个语句括起来,构成一个复合语句,而起来,构成一个复合语句,而 之外不必有分号。之外不必有分号。1.if if语句中进行条件判断的语句中进行条件判断的“表达式表达式”必须用必须用()括起来括起来,且不可省略。且不可省略。2.条件条件后面不加分号。后面不加分号。3.语句之后有分号。语句之后有分号。4.else 不是语句,不能单独使用。不是语句,不能单独使用。有关有关 if 语句的说明语句的说明 北京理工大学计算机学院北京理工大学计算机学院2022/12/1840目录目录1 条件描述与选择结构程序设计 2 重复操作问题与循环语句 3 典型例题解
37、析 4 本章小节第第5 5章章 判断与循环判断与循环 北京理工大学计算机学院北京理工大学计算机学院2022/12/1841思考题续思考题续 计算计算1到到100相加之和;相加之和;计算多项式计算多项式1-2+3-4+5-+99-100 的值;的值;输入某班输入某班50名学生名学生C语言考试的成绩,求平均分。语言考试的成绩,求平均分。思考:上述每一个问题在操作处理上有什么特思考:上述每一个问题在操作处理上有什么特点?点?重复操作重复操作顺序结构可以实现吗?不能实顺序结构可以实现吗?不能实现又如何编写程序?现又如何编写程序?北京理工大学计算机学院北京理工大学计算机学院2022/12/18425.2
38、.1 循环问题导引循环问题导引p对于对于重复操作问题重复操作问题,程序设计者必须考虑这些,程序设计者必须考虑这些问题的规律并加以总结,从程序功能结构层面问题的规律并加以总结,从程序功能结构层面上实现循环。上实现循环。p循环结构循环结构:方法是通过控制程序执行的顺序,:方法是通过控制程序执行的顺序,确保某些语句被反复执行,直到规定的次数或确保某些语句被反复执行,直到规定的次数或满足某种条件为止。满足某种条件为止。北京理工大学计算机学院北京理工大学计算机学院2022/12/18435.2.2 while语句语句while语句的格式为:while(while(循环条件循环条件)循环体语句循环体语句
39、执行过程为:首先计算描述循环条件的表达式的值,当值为“真”(即非0)时,执行循环体语句,然后再回到循环条件进行判断;当值为“真”时,再次执行循环体语句,如此重复,直到循环条件不成立为止。北京理工大学计算机学院北京理工大学计算机学院2022/12/1844【例5-11】分析阅读下面的程序,写出程序执行后的结果。int main()int n=0;while(n=2)while(n=2)n+;printf(%d n+;printf(%d,n);,n);return 0;注意变量n的变化!程序的运行结果为:1 2 3循环循环5 5要素:要素:循环条件循环条件循环控制变量初值循环控制变量初值循环控制变
40、量终值循环控制变量终值循环控制变量变化值循环控制变量变化值循环体循环体 北京理工大学计算机学院北京理工大学计算机学院2022/12/1845循环应用举例循环应用举例循环应用举例循环应用举例【例例5-12】用用while语句求语句求s=1+2+3+100的值。的值。问题分析问题分析:此题是求一组数的累加和问题,要累加的数从1到100是有规律的,后一个数比前一个数大1。因此,可在循环中使用一个整型变量n,开始的初值是1,每累加一次使n增1,直到n的值大于100为止。编写程序编写程序:/*计算1到100相加之和*/#include int main()int n=1,sum=0;while(n=10
41、0)sum=sum+n;n+;printf(sum=%dn,sum);北京理工大学计算机学院北京理工大学计算机学院2022/12/1846循环应用举例循环应用举例循环应用举例循环应用举例【例例5-13】统计从键统计从键盘输入一行字符的盘输入一行字符的个数(输入完一行个数(输入完一行字符后以回车键结字符后以回车键结束)。束)。程序如下:程序如下:/*/*统计一行字符个数统计一行字符个数 */#include#include int main()int main()int n=0;int n=0;printf(input a printf(input a string:n);string:n);w
42、hile(getchar()!=n)while(getchar()!=n)n+;n+;printf(%d,n);printf(%d,n);是否循环问题,是否循环问题,如何控制结束如何控制结束?北京理工大学计算机学院北京理工大学计算机学院2022/12/1847循环问题总结循环问题总结(1)待解决的问题必须有重复操作的特性,这是选定循环结构的)待解决的问题必须有重复操作的特性,这是选定循环结构的前提。前提。(2)分析问题,找出重复操作的部分,并用)分析问题,找出重复操作的部分,并用C语言语句描述。语言语句描述。(3)分析设计控制循环的办法,一般有如下两种:)分析设计控制循环的办法,一般有如下两种
43、:已知重复次数,用次数控制循环,如例已知重复次数,用次数控制循环,如例5-12;已知结束条件,用结束条件控制循环,如例已知结束条件,用结束条件控制循环,如例5-13。(4)对于利用循环次数控制循环,要明晰循环控制的初始值、变)对于利用循环次数控制循环,要明晰循环控制的初始值、变化情况和结束条件,确保循环控制变量由初值向循环终值变化,化情况和结束条件,确保循环控制变量由初值向循环终值变化,并达到结束条件。并达到结束条件。(5)对于利用结束条件控制循环,应确保输入的结束条件能被发)对于利用结束条件控制循环,应确保输入的结束条件能被发现执行导致循环结束。对于这一类,还有一种方法:就是循环现执行导致循
44、环结束。对于这一类,还有一种方法:就是循环条件永远成立,但在循环体中加入结束循环结束条件判别。条件永远成立,但在循环体中加入结束循环结束条件判别。#include int main()int n=0;printf(input a string:n);while(1)while(1)/循环条件永远为真 if(getchar()=n)break;if(getchar()=n)break;/满足条件跳出循环,关键字break表示中断循环并跳出 else n+;else n+;printf(%d,n);北京理工大学计算机学院北京理工大学计算机学院2022/12/1848应用举例应用举例【例例5-15】
45、输入任意一个一般整数,判断其是否输入任意一个一般整数,判断其是否是素数?编写程序实现是素数?编写程序实现。什么是素数?如何检验是否为素数?编写程序编写程序1 1:#include int main()int m,n,k=1;/变量k为标识量,初值为1代表是素数 printf(“n input an integer to m:”);scanf(“%d”,&m);n=2;while(nm)while(nm)if(m%n=0)k=0;break;if(m%n=0)k=0;break;else n+;else n+;if(k)printf(“%d is a prime!n”,m);else print
46、f(“%d is not a prime!n”,m);return 0;#include#include int main()int m,n,k;printf(“n input an integer to m:”);scanf(“%d”,&m);n=2;k=sqrt(m);k=sqrt(m);/k的值为m的开平方 while(n=k)while(nk)if(nk)printf(“%d is a prime!n”,m);else printf(“%d is not a prime!n”,m);return 0;北京理工大学计算机学院北京理工大学计算机学院2022/12/1849目录目录1 条件描
47、述与选择结构程序设计 2 重复操作问题与循环语句 3 典型例题解析 4 本章小节第第5 5章章 判断与循环判断与循环 北京理工大学计算机学院北京理工大学计算机学院2022/12/1850【例例5-16】输入一年份,编写程序判断是否为闰年?输入一年份,编写程序判断是否为闰年?#include int main()int year;printf(“n input a year:”);scanf(“%d”,&year);if(year%4=0&year%100!=0)|(year%400=0)if(year%4=0&year%100!=0)|(year%400=0)printf(“%d is a l
48、eap year.”,year);else printf(“%d is not a leap year.”,year);return 0;#include int main()int year,leap;printf(“n input a year:”);scanf(“%d”,&year);if(year%4!=0)leap=0;if(year%4!=0)leap=0;else if(year%100!=0)leap=1;else if(year%100!=0)leap=1;else if(year%400!=0)leap=0;else if(year%400!=0)leap=0;else l
49、eap=1;else leap=1;if(leap)printf(“%d is a leap year.n”,year);else printf(“%d is not a leap year.n”,year);return 0;北京理工大学计算机学院北京理工大学计算机学院2022/12/1851【例例5-18】有一类数,被称为有一类数,被称为“水仙花数水仙花数”,它是一个,它是一个三位数,其各位数字立方和等于该数本身。例如三位数,其各位数字立方和等于该数本身。例如153是水仙花数,因为是水仙花数,因为153=13+53+33。请输入一个三位。请输入一个三位数,编程判断是否为水仙花数。数,编程判
50、断是否为水仙花数。问题分析问题分析:题意要求输入一个三位数,并根据水仙花数的含义加以判断,是与不是要给出相应信息。分解法构造法 北京理工大学计算机学院北京理工大学计算机学院2022/12/1852【例例5-19】求求Fibonacci数列的前数列的前20个数。这个数列的个数。这个数列的特点如下:第特点如下:第1、2两个数为两个数为1和和1,从第,从第3个数开始,个数开始,每个数都是前面连续两个数的和。即数列为:每个数都是前面连续两个数的和。即数列为:1,1,2,3,5,8,13,21,。请编程显示这些数。请编程显示这些数。p数学史话:该数列来源于一个有趣的数学故事。有数学史话:该数列来源于一个