class控制流循环语句

上传人:油条 文档编号:1506514 上传时间:2017-06-23 格式:PPT 页数:27 大小:325.50KB
返回 下载 相关 举报
class控制流循环语句_第1页
第1页 / 共27页
class控制流循环语句_第2页
第2页 / 共27页
class控制流循环语句_第3页
第3页 / 共27页
class控制流循环语句_第4页
第4页 / 共27页
class控制流循环语句_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《class控制流循环语句》由会员分享,可在线阅读,更多相关《class控制流循环语句(27页珍藏版)》请在金锄头文库上搜索。

1、,面向对象程序设计与实践,第5课控制流循环语句,主讲人:杨峰,Page 1,本课主要内容,while语句do-while语句for语句综合实例,Page 2,1 while语句,一般形式,while( expression )statement,首先对expression求值,若值非0,则执行statement。然后再对expression求值,如此反复直至expression为0.expression可以是任何表达式,Page 3,1 while语句,while( -1 ).和while( 1 ).,二者相同,都是死循环。因为-1和1都是非0。,4,int main()int alphaTo

2、tal = 0;int upperTotal = 0;int lowerTotal = 0;int numberTotal = 0;int spaceTotal = 0;int otherTotal = 0;char ch;while( (ch = getchar() != n )if( isalpha(ch) )+alphaTotal;if( isupper(ch) )+upperTotal;else +lowerTotal;else if( isdigit(ch) )+numberTotal;else if( isspace(ch) )+spaceTotal;else+otherTotal

3、;,以 统计输入字符个数为例,变量使用前必须初始化。编译器不会自动把变量设置为0,如果不初始化,变量中就是一个垃圾值,计算结果肯定不正确。,5,if( isalpha(ch) )可以改为if( ch = A & ch = a & ch = A & ch = a & ch = 0 & ch = 9)if( isspace(ch) )可以改为if( ch = ) 或 if( ch = 0x20)注意循环判断表达式,因为赋值运算符的优先级低,所以必须加括号。,isalpha()、 isupper ()、isdigit ()、isspace()函数是标准库提供的字符类型判断函数。自己写也很简单,比如:

4、,Page 6,2 do-while语句,一般形式,dostatementwhile( expression );,先执行statement,再对expression求值,若值非0,再执行statement ,如此反复直至expression为0.注意结尾的分号。因为整个do-while 是一个语句。,7,int sum = 0;int num = 0;string input;bool quitFlag = false;dogetline( cin, input );if( input = quit | input = exit )quitFlag = true;elseif( input

5、= 0 )+num;/no need to add sumcout 警告:0分,现在人数 num 现在总分 sum endl;elseint score = atoi( input.c_str() );if( score = 0 )cout 输入数据格式错误!跳过 endl;else if( score 100 )cout 输入数据错误!跳过 endl;elsesum += score;+num;cout 输入正确,现在人数 num 现在总分 sum endl;while( quitFlag = false );,输入分数的例子:,Page 8,3 for语句,一般形式,for( expr1;

6、 expr2; expr3 )statement,等价于expr1;while( expr2 )statementexpr3;,Page 9,3 for语句,int sum = 0;for( int i=1; i=num; +i )sum += i;,由于for循环和while循环完全等价,所以具体使用哪种形式完全按个人喜好而定。,求,for循环的3个表达式中的任一个都可以省略,省略表达式1int i = 1;for( ; i num )break;sum += i;,for( int i=1; i num )break;sum += i;+i;全部省略,Page 10,4 break和con

7、tinue,break用于跳出当前语句,即跳出switch或循环语句。continue则是结束本次循环,即跳过循环体下面尚未执行的语句,执行对判定表达式的求值。,只对n以内的奇数求和:,for( int i=1; i=num; +i )if( i % 2 = 0 )continue;sum += i;,for( int i=1; i=num; i+=2 )sum += i;,或,Page 11,5 多重循环,百钱百鸡问题,100元买了100只鸡,其中公鸡5元一只,母鸡3元一只,小鸡3只一元,问100只鸡中有几只公鸡,几只母鸡,几只小鸡?用多重循环求解,实际上是个穷举法:公鸡数目从020循环,母

8、鸡从033循环,小鸡等于100减去公鸡和母鸡数目,计算每种情况的价格,看哪组数目正好是100,遇到这个数就输出。由于问题可能有多个解,所以找到一个解后还要继续循环,12,#include using namespace std;const int COCKPRICE = 5;const int HENPRICE = 3;const int CHICKENPERYUAN = 3;/why not const double CHICKPRICE = 1.0/3;const int TOTALMONEY = 100;const int TOTALCHICK = 100;int main()for(

9、int cock=0; cock = TOTALMONEY/COCKPRICE; +cock )for( int hen=0; hen = TOTALMONEY/HENPRICE; +hen )int chicken = TOTALCHICK - cock - hen;if( chicken%CHICKENPERYUAN = 0 & cock*COCKPRICE + hen*HENPRICE + chicken/CHICKENPERYUAN = TOTALMONEY )cout cock = cock , hen = hen , chicken = chicken endl;return 0;

10、,Page 13,6 程序示例,1、求,问题描述:目标:见输出输入:n输出:算法:用双重循环实现。外层循环i从1n循环求累加和,内层循环求,14,int main()int num;cout num;while( num 10 )cout num;int sum = 0;for( int i=1; i=num; +i )int factorial = 1;for( int j=1; j=i; +j )factorial *= j;sum += factorial;for( int i=1; i 1 )cout +;cout i !;cout = sum endl;,注意累加和累乘的结果变量都必

11、须先赋初值,15,这个代码可以正常工作,但有2个问题。1、阶乘的数值增长很快,int能表示的范围不太够用。而32位系统中long和int都是32位,所以sum和factorial应改为64位的long long类型。2、可以对算法进行小小的改进以提高计算效率。比如求1!+2!+3!,那么外层循环执行3次,第一次时内层循环求1!,第2次时内层循环求12,第3次时内层循环求123。这样12就被求了2次,如果n很大的话,多执行的乘法运算就会较大幅度的降低执行效率。针对这个问题,实际上,只要不每次循环时重新将factorial设置为初值1,就可以保留住上一次累乘的结果,并将2层循环简化为单层循环,,l

12、ong long sum = 0;long long factorial = 1;for( int i=1; i=num; +i )factorial *= i;sum += factorial;,Page 16,6 程序示例,2、猴子吃桃问题(第3章22题),问题描述:目标:见算法输入:无输出:见算法算法:,即,输出,17,int main()int n = 1;for( int i=1; i10; +i )n = 2 * (n + 1);cout n endl;,注意的是表达式2应该用还是=。保险起见,假设只算3天,应该是10个桃子。用得到正确的结果,而用=得到是22,不正确。所以应该用用

13、还是=,是个很重要的问题,很容易犯差1错误(off-by-one)。在拿不准的情况下,应该用较小的值进行测试和验算以确保采用正确的判断表达式。,Page 18,6 程序示例,3、判断一个数是否是素数,问题描述:目标:判断一个正数是否是素数输入:用户输入任一正整数n输出:如果该数是素数,显示“是素数”,否则显示“不是素数”算法:1、正数1和2一定是素数,直接输出结果。2、如果是大于2的数,因子变量从2到 循环3、若所有因子均不能整除n,则n为素数,否则不是素数,19,int main()int num;cout num;while( num = 0 )cout num;if( num 3 )/ 1 or 2cout num 是素数 endl;return 0;int factor;for( factor = 2; factor = (int)sqrt(double)num); +factor )if( num % factor = 0 )cout num 不是素数,有一个因子 factor endl;return 0;cout num 是素数 endl;return 0;,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 电子/通信 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号