第三章基本程序设计_第1页
第三章基本程序设计_第2页
第三章基本程序设计_第3页
第三章基本程序设计_第4页
第三章基本程序设计_第5页
已阅读5页,还剩133页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第三章第三章 基本程序设计基本程序设计循环控制语句循环控制语句循环结构循环结构选择结构选择结构输出格式输出格式的控制的控制顺序结构顺序结构基本程序设计基本程序设计2 #include iostream using namespace std; void main() int i=1,j=1;couti+i+i+endl;coutiendl;cout(+j)+(+j)+(+j)endl;coutjendl;cout+j+j+j+endl; 33.1 顺序结构程序设计顺序结构程序设计 例例3.1.1 “鸡兔同笼问题鸡兔同笼问题”:在一个笼子里养着鸡与兔,:在一个笼子里养着鸡与兔,但不知其中鸡有多

2、少只,兔有多少只。只知道鸡和兔的总但不知其中鸡有多少只,兔有多少只。只知道鸡和兔的总数是数是a,鸡与兔的总脚数是,鸡与兔的总脚数是b,求鸡与兔各有多少只。,求鸡与兔各有多少只。 思路分析:思路分析: 首先从题目本身开始,找出解决问题的基本思路。每只鸡首先从题目本身开始,找出解决问题的基本思路。每只鸡有两只脚,每只兔有四只脚。假设有有两只脚,每只兔有四只脚。假设有x只鸡和只鸡和y只兔,则根只兔,则根据已知条件可列出如下方程组:据已知条件可列出如下方程组: x+y=a 2x+4y=b 对该方程组做进一步的转换可得:对该方程组做进一步的转换可得:2422/ )ba(x/ )ab(y45 #inclu

3、de using namespace std; void main( ) int a,b,x,y;couta;coutb;x=(4*a-b)/2;y=(b-2*a)/2;cout鸡的数量为鸡的数量为:xendl;cout兔的数量为兔的数量为:yendl; 6编程技巧:编程技巧: 1在顺序结构的程序设计中,主函数(即在顺序结构的程序设计中,主函数(即main函数)的函数)的函数体的执行顺序为语句的书写顺序。即写在前面的语句函数体的执行顺序为语句的书写顺序。即写在前面的语句先执行,写在后面的语句后执行,且每条语句都会被执行先执行,写在后面的语句后执行,且每条语句都会被执行一次;一次; 2组成顺序结

4、构的常见语句有:组成顺序结构的常见语句有: (1)说明语句说明语句,包括变量、常量定义;,包括变量、常量定义; (2)表达式语句表达式语句,由表达式(一般为赋值表达式)加分,由表达式(一般为赋值表达式)加分号构成;号构成; (3)输入输入/输出流语句输出流语句; (4)复合语句复合语句,由,由 括起来的多条语句组成,具体应用括起来的多条语句组成,具体应用见例见例3.2.1; (5)空语句空语句,由独立的分号构成,具体应用见例,由独立的分号构成,具体应用见例 3在程序中,输入语句的前面通常应该增加一条输出语在程序中,输入语句的前面通常应该增加一条输出语句,用于提示操作者应该输入几个什么数据类型的

5、数据。句,用于提示操作者应该输入几个什么数据类型的数据。7 例例3.1.2 输入一位同学的三门课程考试成输入一位同学的三门课程考试成绩,计算该同学的平均成绩,要求输出数绩,计算该同学的平均成绩,要求输出数据的形式如下例:据的形式如下例: 科目科目 成绩成绩 英语英语 67 程序设计程序设计 78.5 大学物理大学物理 89 该生的平均成绩为:该生的平均成绩为: 78.178 思路分析:思路分析: 本程序要求的计算内容很简单,在输入考试成绩本程序要求的计算内容很简单,在输入考试成绩score1,score2,score3的基础上,通过运算的基础上,通过运算式子式子average=(score1+

6、score2+score3)/3可以可以求出该生的平均成绩。本例的重点在输出数据的求出该生的平均成绩。本例的重点在输出数据的位置控制上,如题目示例所示:要求前四行输出位置控制上,如题目示例所示:要求前四行输出的两列信息要对齐,且最后计算出的平均成绩的的两列信息要对齐,且最后计算出的平均成绩的小数部分只显示两位数字。小数部分只显示两位数字。910 #include iostream #include iomanip using namespace std; void main() double score1,score2,score3,average; cout请输入三门课程的考试成绩:请输入三

7、门课程的考试成绩:score1score2score3; average=(score1+score2+score3)/3; coutsetw(10)科目科目setw(12)成绩成绩endl; coutsetw(10)英语英语setw(12)score1endl; coutsetw(10)程序设计程序设计setw(12)score2endl; coutsetw(10)大学物理大学物理setw(12)score3endl; coutfixed; cout.precision(2); cout该生的平均成绩为:该生的平均成绩为:averageendl; 11编程技巧:编程技巧: 1对于输出的多列信

8、息对齐的问题可以通过对于输出的多列信息对齐的问题可以通过控制输出的数据所占的位置宽度来实现。实控制输出的数据所占的位置宽度来实现。实现方法为:现方法为:在输出该数据前先通过在输出该数据前先通过setw(n)来来设置该数据输出时所占的最少位置宽度设置该数据输出时所占的最少位置宽度n。使。使用时需注意;用时需注意;(1)setw(n)所设置的位置宽度只对其后输出所设置的位置宽度只对其后输出的一个数据生效;的一个数据生效;(2)使用使用setw(n)时需增加文件包含时需增加文件包含#include iomanip;12 2该设置也可以通过该设置也可以通过cout.width(n);来实现。即语句来实

9、现。即语句 coutsetw(10)科目科目setw(12)成绩成绩endl; 可更换为:可更换为:cout.width(10);cout科目科目;cout.width(12);cout成绩成绩; 注意:此方法不再需要文件包含注意:此方法不再需要文件包含#include iomanip。请。请大家自行对比这两种方法的优缺点。大家自行对比这两种方法的优缺点。13 3在在输出一个浮点数输出一个浮点数时,系统会在科学记数法和小数点时,系统会在科学记数法和小数点法两种形式里按照一定的规则(通常在整数部分超过法两种形式里按照一定的规则(通常在整数部分超过6位位时采用科学记数法)自动选择采用哪种形式输出。

10、若想规时采用科学记数法)自动选择采用哪种形式输出。若想规定不管什么样的浮点数均使用小数点形式输出,可采用定不管什么样的浮点数均使用小数点形式输出,可采用coutfixed;语句来实现语句来实现 4以小数点形式输出浮点数时,系统默认输出的浮点数以小数点形式输出浮点数时,系统默认输出的浮点数的整数和小数部分的总位数最多只有的整数和小数部分的总位数最多只有6位数字。若想规定位数字。若想规定输出的输出的浮点数的小数部分的位数可通过浮点数的小数部分的位数可通过cout.precision(n);语句来实现语句来实现。其中。其中n代表小数部分的位数(若数据的实际代表小数部分的位数(若数据的实际位数超过位数

11、超过n,则按,则按4舍舍5入规则处理后输出;若数据的实际入规则处理后输出;若数据的实际位数少于位数少于n,则其余位数用,则其余位数用0补齐)。补齐)。 5. t : 跳跳8个空格个空格141、在输出该数据前先通过在输出该数据前先通过setw(n)来设置该来设置该数据输出时所占的最少位置宽度数据输出时所占的最少位置宽度n。 setw(n)所设置的位置宽度只对其后输出的所设置的位置宽度只对其后输出的一个数据生效;使用一个数据生效;使用setw(n)时需增加文件时需增加文件包含包含#include iomanip2、 cout.width(n);与与setw(n)一样一样 只是不需要只是不需要#in

12、clude iomanip“3、输出一个浮点数输出一个浮点数coutfixed4、 cout.precision(n);5. t : 跳跳8个空格个空格153.2 选择结构程序设计选择结构程序设计 例例3.2.1 从键盘输入一个数,计算并输出该数的从键盘输入一个数,计算并输出该数的绝对值。绝对值。 思路分析:思路分析: 对于对于0和正数而言,其绝对值就是该数本身;对和正数而言,其绝对值就是该数本身;对于负数而言,其绝对值为该数与于负数而言,其绝对值为该数与-1相乘的结果。相乘的结果。 本题算法的实质就是判断什么情况下需要执行本题算法的实质就是判断什么情况下需要执行“该数与该数与-1相乘相乘”这

13、个操作,同时意味者该操作这个操作,同时意味者该操作对应的语句虽然书写在了程序中,但在某种情况对应的语句虽然书写在了程序中,但在某种情况下是可能不会被执行的。下是可能不会被执行的。1617 #include using namespace std; void main( ) float m;coutm;if(m0)m=-1*m;cout你输入数据的绝对值为你输入数据的绝对值为:mendl;18编程技巧: 1在程序中,如果书写的某些语句只有在特定在程序中,如果书写的某些语句只有在特定的条件成立的情况下才会被执行时,需要把这些的条件成立的情况下才会被执行时,需要把这些语句书写在一路分支选择结构的实现

14、语句语句书写在一路分支选择结构的实现语句if中。中。 (1)if关键字的后面跟一对圆括号(关键字的后面跟一对圆括号( ),圆括号),圆括号中书写需要判断的条件;中书写需要判断的条件; (2)如果在特定的条件成立的情况下才会被执如果在特定的条件成立的情况下才会被执行的语句超过一条时,这些语句要放在一对花括行的语句超过一条时,这些语句要放在一对花括号号 中,此时这一对花括号及其中括起来的所有中,此时这一对花括号及其中括起来的所有语句一起组成一条复合语句。语句一起组成一条复合语句。19 2关系运算符20注意:注意: (1)若满足条件,关系表达式的值为布尔值)若满足条件,关系表达式的值为布尔值true

15、; (2)若不满足条件,关系表达式的值为布尔值)若不满足条件,关系表达式的值为布尔值false ; (3)关系运算符若为两字符,在书写时两字符间不能加)关系运算符若为两字符,在书写时两字符间不能加空格;空格; (4)= =与与=的区别:如的区别:如x= =1为条件表达式,判断为条件表达式,判断x是否是否等于等于1。x=1为赋值表达式,将数值为赋值表达式,将数值1存入变量存入变量x中;中; (5)两个浮点数之间一般不用)两个浮点数之间一般不用= =来判断是否相等;来判断是否相等; (6)关系运算符的优先级低于算术运算符,高于赋值运)关系运算符的优先级低于算术运算符,高于赋值运算符。算符。21 例

16、例3.2.2输入一个年份,判断该年是否为输入一个年份,判断该年是否为闰年,并输出判断结果。闰年,并输出判断结果。 闰年的条件闰年的条件: (1)能被能被4整除整除,但不能被但不能被100整除的年份整除的年份; (2)能被能被100整除整除,又能被又能被400整除的年份整除的年份 22思路分析:思路分析: 假设用假设用year表示年份,则判断表示年份,则判断year年是否为闰年年是否为闰年的问题就转换成了判断数字的问题就转换成了判断数字year是否满足闰年的是否满足闰年的条件(条件(1)或者条件()或者条件(2)。在该条件()。在该条件(1)中又)中又要求两个子条件要求两个子条件“能被能被4整除

17、整除”和和“不能被不能被100整整除除”同时成立。要表示多个条件之间的这种逻辑同时成立。要表示多个条件之间的这种逻辑关系就需要用到本例编程技巧部门中介绍的逻辑关系就需要用到本例编程技巧部门中介绍的逻辑运算符。运算符。 本例中要求根据对本例中要求根据对year年份的不同判断结果决定年份的不同判断结果决定输出不同的信息,因此在条件成立时执行一种操输出不同的信息,因此在条件成立时执行一种操作,条件不成立时执行另一种操作。这两种操作作,条件不成立时执行另一种操作。这两种操作不管条件如何,均必有一种操作且只有一种操作不管条件如何,均必有一种操作且只有一种操作会被执行。会被执行。23 #include u

18、sing namespace std; void main( ) int year;coutyear;if(year%4=0&year%100!=0|year%400=0)coutyear is a leap yearendl;elsecoutyear is not a leap year , = , = , !=&|? :赋值运算赋值运算=逗号运算,逗号运算,低高27 1、if语句及语句及if-else语句语句 2、if-else语句的嵌套语句的嵌套 3、 switch语句语句28 顺序结构的实现方法顺序结构的实现方法 分支结构的实现方法分支结构的实现方法 循环结构的实现方法循环结构的实现方

19、法三种基本控制结构的实现三种基本控制结构的实现29实现选择结构的方法程程序序流流程程:根根据据给给定定条条件件的的判判断断结结果果, 决决定定在在多多支支程程序序段段中中选选择择一一支支执执行行选择结构算法回顾选择结构算法回顾30 选选择择结结构构用用于于解解决决需需根根据据不不同同情情况况分分支支计计算算或或处处理理的的问问题题 条条件件: :对对不不同同情情况况的的表表达达, , 决决定定着着程程序序流流向向 - - - - - - - - - -由由 c c+ + +表表达达式式构构成成条件的描述方法条件的描述方法31算术表达式、关系表达式、算术表达式、关系表达式、逻辑表达式、条件表达式

20、、逻辑表达式、条件表达式、赋值表达式赋值表达式即:除了逗号表达式之外即:除了逗号表达式之外 的的 c c+表达式表达式构成条件可以为:构成条件可以为:变量、常量、函数变量、常量、函数32 条件分支语句条件分支语句 ifif 语句语句 适用于两个或较少分支适用于两个或较少分支 开关分支语句开关分支语句 switchswitch 语句语句 适合于多分支选择适合于多分支选择实现选择结构的语句实现选择结构的语句33ifif语句语句 三种形式三种形式34(1)规则嵌套)规则嵌套 if(if(条件条件 1)1)语句语句 1 1 else if(else if(条件条件 2)2) 语句语句 2 2 else

21、 if( else if(条件条件 n-1)n-1) 语句语句 n-1n-1 else else 语句语句 n n 嵌套形式嵌套形式35(2)(2)任意任意嵌套嵌套 如如: if(ab)if(ab) if (ab)if (ab) if(bc)if(bc) if(bc)if(bc)x=yx=y; ; x=yx=y; elseelse else else x=zx=z; x=zx=z; 约定:约定:一个一个 elseelse 总是与前面最近的总是与前面最近的一个且没有与其它一个且没有与其它 elseelse 配对的配对的 ifif 组成组成配对关系配对关系36 #include using nam

22、espace std; void main() char ch;cinch;if(ch=a& ch=z)ch=ch+32;coutchendl; 37 语句语句1 1; 语句语句2 2; 语句语句n n; 复合语句复合语句 用用 将若干执行语句组成一个整体将若干执行语句组成一个整体 (在语法上作为一条语句处理)(在语法上作为一条语句处理)38从键盘输入两个实数x和y,如果y的值大于x则交换x,y的值并输出x,y. #include using namespace std; void main( ) double x,y,t;coutxy;if(yx) t=x; x=y; y=t; coutx,

23、yendl; 39 #include using namespace std; void main( ) double x,y;cinx;if (x8.0) y=6.0*x-5.0;else y=10.0-3*x;coutx=xty=yendl; 40输入一个年份,判断是否闰年。输入一个年份,判断是否闰年。闰年条件闰年条件: (1)能被能被4整除整除,但不能被但不能被100整除的年份整除的年份; (2)能被能被100整除整除,又能被又能被400整除的年份。整除的年份。 41 #include using namespace std; void main( ) int year;bool isl

24、eapyear;coutyear;isleapyear=(year%4=0&year%100!=0)|(year%400=0);if(isleapyear)coutyear is a leap yearendl;elsecoutyear is not a leap yearendl; 42运行结果:enter the year: 20002000 is a leap year43(1)规则嵌套)规则嵌套 if(if(条件条件 1)1)语句语句 1 1 else if(else if(条件条件 2)2) 语句语句 2 2 else if( else if(条件条件 n-1)n-1) 语句语句 n

25、-1n-1 else else 语句语句 n n 嵌套形式嵌套形式44嵌套形式嵌套形式规则嵌套规则嵌套45(2)(2)任意任意嵌套嵌套 如如: if(ab)if(ab) if (ab)if (ab) if(bc)if(bc) if(bc)if(bc)x=yx=y; ; x=yx=y; elseelse else else x=zx=z; x=zx=z; 约定:约定:一个一个 elseelse 总是与前面最近的总是与前面最近的一个且没有与其它一个且没有与其它 elseelse 配对的配对的 ifif 组成组成配对关系配对关系46例:输入两个整数,比较两个数的大小例:输入两个整数,比较两个数的大小

26、#includevoid main(void) int x,y; coutxy; if (x!=y) if (xy) coutyendl; else coutxyendl; else coutx=yendl;47运行情况1:enter x and y:5 8 xy运行结果2:enter x and y:8 8 x=y运行结果3:enter x and y:12 8 xy48 例例:从从键键盘盘输输入入三三个个整整数数,找找出出其其中中的的最最大大数数并并显显示示出出来来。 方方法法 1 1 源源程程序序清清单单:# #i in nc cl lu ud de e v vo oi id d m m

27、a ai in n( (v vo oi id d) ) i in nt t a a, ,b b, ,c c, ,m ma ax x; ; c co ou ut t a a b b c c; ;49i if f( (a a = =b b& & &a a = =c c) ) m ma ax x= =a a; ; i if f( (b b = =a a& & &b b = =c c) ) m ma ax x= =b b; ; i if f( (c c = =a a& & &c c = =b b) ) m ma ax x= =c c; ; c co ou ut t m ma ax x= = m ma

28、ax x; ; 50 方方法法 2 2 源源程程序序清清单单:# #i in nc cl lu ud de e v vo oi id d m ma ai in n( (v vo oi id d) ) i in nt t a a, ,b b, ,c c, ,m ma ax x; ; c co ou ut t a a b b c c; ; i if f( (a a = =b b& & &a a = =c c) ) m ma ax x= =a a; ; e el ls se e i if f( (b b = =c c) ) m ma ax x= =b b; ; e el ls se e m ma a

29、x x= =c c; ; c co ou ut t m ma ax x= = m ma ax x; ; 51 方方法法 3 3 源源程程序序清清单单:# #i in nc cl lu ud de e v vo oi id d m ma ai in n( (v vo oi id d) ) i in nt t a a, ,b b, ,c c, ,m ma ax x; ; c co ou ut t a a b b c c; ; m ma ax x= =( (a a = =b b) )? ?a a: :b b; ; m ma ax x= =( (m ma ax x = =c c) )? ?m ma a

30、x x: :c c; ; c co ou ut t m ma ax x= = m ma ax x; ; 52 例例将等级成绩按下表转换成对应消息输出将等级成绩按下表转换成对应消息输出 等级成绩等级成绩 消息消息a或或a优秀优秀b或或b 良好良好c或或c 一般一般d或或d及格及格 f或或f 不及格不及格53 #include using namespace std; void main( ) char grade;coutgrade;if(grade=a|grade=a)cout优秀优秀endl;else if(grade=b|grade=b) cout良好良好 endl; else if(gr

31、ade=c|grade=c) cout一般一般endl; else if(grade=d|grade=d) cout及格及格endl; else if(grade=f|grade=f) cout及格及格endl; else couterrorendl; 54判断两个float型数值相等要小心 因为因为float型数值在内存中不能精确的存储,型数值在内存中不能精确的存储,所以判断两个所以判断两个float型数值相等不相等,一型数值相等不相等,一般比较两个值的差是否小于某值。般比较两个值的差是否小于某值。55 #include #include using namespace std; int m

32、ain() float num1 = float(10.0);float num2 = float (3.0);float quotient = 0.0;quotient = num1 / num2;56 if (fabs(quotient - 3.33333) .00001)cout yes, the quotient quotient is equal to 3.33333 endl;elsecout no, the quotient quotient is not equal to 3.33333 endl;return 0; 57 #include #include using nam

33、espace std; int main() char letter = ;cout letter;if (toupper(letter) = p)cout pass endl;elsecout fail endl;return 0; 58 #include #include using namespace std; int main() string name = ;cout enter your name: ;改错改错getline(cin, name);cout age;if (age 21)cout name is over 21. endl;elsecout name is not

34、over 21. endl;return 0; 59 #include #include using namespace std; void main() string a1=20040417;string str;coutstr;if(str=a1) coutthe password is correct.press any key to enter!;else cout密码错密码错!endl; 60switch switch (条件)(条件)casecase 常量表达式常量表达式 1 1: 语句序列语句序列 1 1 break;break; casecase 常量表达式常量表达式 2 2:

35、 语句序列语句序列 2 2 break;break; case case 常量表达式常量表达式(n-1)(n-1): 语句序列语句序列(n-1)(n-1) break;break; default:default: 语句序列语句序列 n n 条件只能是整型、字符型条件只能是整型、字符型 及枚举型表达式。及枚举型表达式。 每个每个 casecase 后的表达式称为后的表达式称为 开关常数,开关常数,值不能相同值不能相同, 且只起入口标号的作用;且只起入口标号的作用; breakbreak 语句起着语句起着结束结束 switchswitch 语句的执行语句的执行,转,转 移到其后继语句的作用;移到

36、其后继语句的作用; defaultdefault 分支是一个可分支是一个可 选项。选项。若若缺省缺省,则所有匹,则所有匹 配失败时,什么也不做配失败时,什么也不做 switchswitch语句语句一般形式一般形式61s sw wi it tc ch h(条条件件) c ca as se e 常常量量表表达达式式 1 1: : c ca as se e 常常量量表表达达式式 2 2: : c ca as se e常常 量量 表表 达达 式式( (n n- -1 1) ): : 语语句句序序列列( (n n- -1 1) ) b br re ea ak k; ; d de ef fa au ul

37、lt t: : 语语句句序序列列 n n 程序的流程是:程序的流程是: 当构成条件的表达式当构成条件的表达式的值与常量表达式的值与常量表达式 1 1 的值的值或常量表达式或常量表达式 2 2 的值,、的值,、或常量表达式(或常量表达式(n n- -1 1)的值)的值之一匹配时, 都执行语句序之一匹配时, 都执行语句序列(列(n n- -1 1) ;否则,执行语句) ;否则,执行语句序列序列 n n switch switch 语句语句6263#include void main(void) int day; cout “请输入请输入0到到6之间的任一数字之间的任一数字” day;switch

38、(day) case 0: cout sunday endl; break; case 1: cout monday endl; break; case 2: cout tuesday endl; break; 例:例:输入一个输入一个06的整数,转换成星期输出的整数,转换成星期输出64 case 3: cout wednesday endl; break; case 4: cout thursday endl; break; case 5: cout friday endl; break; case 6: cout saturday endl; break; default: cout “输

39、入数据不在规定范围内输入数据不在规定范围内 endl; 65 例:给学生写评语,需将学生的考例:给学生写评语,需将学生的考试成绩由百分制转换为试成绩由百分制转换为 4 4 级制,标准为:级制,标准为: 等级等级 分数段分数段 a a 1001009090 分分 b b 89 898080 分分 c c 79 796060 分分 d d 60 60 分以下分以下66分分析析:转转换换的的前前提提是是成成绩绩属属于于哪哪个个分分数数段段 所所以以问问题题的的关关键键是是对对条条件件的的描描述述。由由于于:1 10 00 0/ /1 10 0 = = 1 10 0 ( (9 90 0- -9 99

40、9) )/ /1 10 0 = = 9 9 ( (8 89 9- -8 80 0) )/ /1 10 0 = = 8 8 ( (7 70 0- -7 79 9) )/ /1 10 0 = = 7 7 ( (6 60 0- -6 69 9) )/ /1 10 0 = = 6 6因因此此,可可以以构构造造一一个个整整型型表表达达式式 g gr ra ad de e/ /1 10 0 用用于于将将分分数数段段化化为为单单个个整整数数值值。67# #include include iostream.hvoid main(void main(voidvoid) ) int grade;int grade

41、; char x;char x; coutcout请输入该学生的百分制成绩:请输入该学生的百分制成绩: grade;cingrade; switch(grade/10)switch(grade/10)68 c ca as se e 1 10 0: : c ca as se e 9 9: : x x= = a a ; ; b br re ea ak k; ; c ca as se e 8 8: : x x= = b b ; ; b br re ea ak k; ; c ca as se e 7 7: : c ca as se e 6 6: : x x= = c c ; ; b br re ea

42、ak k; ; d de ef fa au ul lt t: : x x= = d d ; ; c co ou ut t 该该学学生生成成绩绩等等级级为为: : x x e en nd dl l; ; 69# #include include iostream.hvoid main(void)void main(void) float float x,y;x,y; char op;char op; coutcout请输入算式:请输入算式:xopy;cinxopy;例:编制一个完成两个数四则运算的程序70if(op=+)if(op=+) coutx+y=x+yendl; coutx+y=x+ye

43、ndl; else if(op= else if(op=- -) coutx coutx- -y=xy=x- -yendl;yendl; else if(op=*) else if(op=*) coutx*y=x*yendl; coutx*y=x*yendl; else if (op=/&y!=0.0) else if (op=/&y!=0.0) coutx/y=x/yendl; coutx/y=x/yendl; else else cout cout非四则运算!非四则运算!endl;endl; 71# #include include iostream.hvoid main(void mai

44、n(voidvoid) ) float float x,y;x,y; char op;char op; coutcout请输入算式:请输入算式:xopy;cinxopy; switch(op)switch(op)72 case +:case +: coutx+y=x+yendl; break;coutx+y=x+yendl; break; case -:case -: coutx-y=x-yendl; break;coutx-y=x-yendl; break; case *:case *: coutx*y=x*yendl; break;coutx*y=x*yendl; break; case

45、/:case /: if(y=0.0) if(y=0.0) coutcout除式的分母为零除式的分母为零!endl;endl; else else coutx/y=x/yendl;coutx/y=x/yendl; break;break; default:default: coutcout非四则运算非四则运算!endl;endl; 73实现循环结构的方法实现循环结构的方法循循环环结结构构算算法法回回顾顾 当当 型型whilewhile 循循 环环74直直到到型型(u un nt ti il l 型型)循循环环7576772 2d do o- -w wh hi il le e 语语句句格式:格式

46、:do 语句;语句; while( 条件条件);78对比下列程序: 程序程序1:#includevoid main(void) int i, sum(0); cini; while(i=10) sum+=i; i+; coutsum=sumendl;程序程序2:#includevoid main(void) int i, sum(0); cini; do sum+=i; i+; while(i=10); coutsum=sumendl;793 3forfor 语句语句格式:格式: for(表达式表达式1;表达式;表达式2;表达式;表达式3)说明说明:8081for(表达式(表达式1;表达式;表

47、达式2;表达式;表达式3) 语句语句表达式表达式1;while(表达式(表达式2) 语句语句 表达式表达式3;while(条件)(条件) 语句语句 修正控制变量修正控制变量for( ;条件;修正控制变量);条件;修正控制变量) 语句语句 表达式表达式1;for(;表达式(;表达式2;表达式;表达式3) 语句语句82#includevoid main(void) int sum(0); for(int i=0;i=10;i+) sum+=i; coutsum=sumendl;运行结果:运行结果:sum=55例 求自然数求自然数1 11010之和之和分析:分析:本题需要用累加算法,累加过程本题需要

48、用累加算法,累加过程是一个循环过程,可以用是一个循环过程,可以用while语句实现。语句实现。83#include #include void main(void)void main(void) int n, right_digit; int n, right_digit; cout enter the number: ;cout n;cin n;coutthe number in reverse order coutthe number in reverse order is;is;dodo right_digit = n right_digit = n % % 10; 10;cout ri

49、ght_digit;cout right_digit;n /= 10;n /= 10; while (n != 0); while (n != 0); coutendl; coutendl; 例例 输入一个整数,将各位数字反转后输出输入一个整数,将各位数字反转后输出84运行结果:运行结果:enter the number: 365enter the number: 365the number in reverse order is 563the number in reverse order is 563思考问题:思考问题: 若要求计算出该数的反序数,该如何修改?若要求计算出该数的反序数,该如

50、何修改?85循环结构与选择结构相互嵌套循环结构与选择结构相互嵌套例例 输出输出100100至至200200中个位数为中个位数为3 3且能被且能被3 3整除的数整除的数#includevoid main(void) int n;for(n=100; n=200; n+) if (n%3=0 & n%10=3) coutnendl; 86#include void main(void) int n, k;cout n;cout number n factors ;for (k=1; k = n; k+)if (n % k = 0) cout k ; cout endl; 例 输入一个整数,求出它的

51、所有因子输入一个整数,求出它的所有因子87运行结果运行结果1 1:enter a positive integer: 36number 36 factors 1 2 3 4 6 9 12 18 36 运行结果运行结果2 2:enter a positive integer: 7number 7 factors 1 7 88读入一系列整数,统计读入一系列整数,统计出正整数个数出正整数个数i i和负整数个数和负整数个数j,j,读读入入0 0则结束则结束分析:分析:需要读入一系列整数,但是整数个需要读入一系列整数,但是整数个数不定,要在每次读入之后进行判数不定,要在每次读入之后进行判断,因此使用断,

52、因此使用while循环最为合适。循环最为合适。循环控制条件应该是循环控制条件应该是n!=0。由于要。由于要判断数的正负并分别进行统计,所判断数的正负并分别进行统计,所以需要在循环内部嵌入选择结构。以需要在循环内部嵌入选择结构。89#includevoid main(void) int i=0, j=0, n; coutn; while( n!=0 ) if(n0) i+=1; if(nn ; cout“正整数个数:正整数个数:”i“ 负整数个数:负整数个数:” jendl;90 例例编程求编程求n n!,!,n n从键盘输入从键盘输入。分析:n!=1n!=1* *2 2* *3 3* * (n

53、-1) (n-1)* *n=(n-n=(n-1)!1)!* *n n要求某自然数的阶乘要求某自然数的阶乘, ,可以先求比可以先求比它小它小1 1的自然数的阶乘的自然数的阶乘, ,用其值再乘该自然用其值再乘该自然数本身数本身, ,因此可以按下面方法通过因此可以按下面方法通过forfor语句语句控制循环来求解。控制循环来求解。91 #include using namespace std; void main( ) int mul=1,j,n;coutn;for(j=1;j=n;j+)mul*=j;coutmul=mulendl; 92 例例计算计算1-1/2+1/3- -1/100分析:因题中计

54、算式每相邻的两项正负分析:因题中计算式每相邻的两项正负号相反号相反,我们可以设置一个变量我们可以设置一个变量(sign)来控来控制符号的变化制符号的变化,在循环计算过程中使得每循在循环计算过程中使得每循环一次环一次,符号也变化一次。符号也变化一次。 93 #include using namespace std; void main( ) int deno;double sum=1.0,sign=1.0,term;for(deno=2;deno=100;deno+) sign=-sign;/改变正、负号改变正、负号 term=sign*(1.0/deno);/deno:计数计数 sum=sum

55、+term; coutsum=sumendl; 94 此例中应注意此例中应注意: 语句语句term=sign*(1.0/deno); 可以换成可以换成 term=sign/deno; 但不能写成但不能写成term=sign*(1/deno); 因为此处因为此处1/deno是整数除法是整数除法95 例例如果一个三位数的个位数、十位数和百如果一个三位数的个位数、十位数和百位数的立方和等于自身,则称该数为水仙位数的立方和等于自身,则称该数为水仙花数,编程找出所有的水仙花数。花数,编程找出所有的水仙花数。 分析:分析: 设设 :i为百位数,为百位数,j为十位数,为十位数,k为个位数为个位数 水仙花数水

56、仙花数:n=ijk=i3+j3+k3 可用下面方法从可用下面方法从n=ijk中分别提取数字中分别提取数字i、j和和k i=n/100; j=(n/10)%10; k=n%1096 #include using namespace std; void main( ) int n,i,j,k;for (n=100;n=999;n=n+1) i=n/100; j=(n/10)%10; k=n%10; if (n=i*i*i+j*j*j+k*k*k)/判断判断n是否水仙花数是否水仙花数 coutn=i3+j 3+k3endl; 97 例例计算级数:计算级数: 1+x-x2/2!+x3/3!-+(-1)

57、n+1xn/n! 分析:分析:根据通项式根据通项式: (-1)n+1xn/n!=(-x/n)(-1)nxn-1/(n-1)!)可以得出前后两项之间的关系可以得出前后两项之间的关系,利利用此关系用循环加以实现。用此关系用循环加以实现。98 #include using namespace std; void main( ) int j,n; double sum=1.0,term=-1.0,x; coutplease input x and nxn;for(j=1; j=n; j+) term=-term*x/j;sum=sum+term;coutsum=sumendl;99 循循环环控控制制语

58、语句句100 #include void main() const double pi=3.14; int r; double area; for(r=1;r100) break; coutarea=areaendl; coutpiendl; coutrendl; 101 #include void main() int n; for(n=100;n=200;n+) if (n%3=0) continue; cout“n=“n; 102 例例求求100-150之间和之间和400-450之间能被之间能被9整除的整除的数数。#includeusing namespace std;void main

59、( )int n; for(n=100;n150&n400) continue; if(n%9=0) coutn ; coutendl;103 #include void main() int i,sum=0; i=1 ; loop: if (i=100) sum=sum+i; i+; goto loop; cout“sum=“sum; 104 #include using namespace std;void main()int j=1,sum=0; loop:sum+=j;j+;if(j=100) goto loop;coutsum=sumendl;105例 判断一个整数是否为素数判断一个

60、整数是否为素数106流程图107方法一:程序清单108 #include using namespace std; void main() int m,j; cout请输入一整数:请输入一整数:m; for(j=2;jm;j+)if(m%j=0) break; if(j=m) coutm是素数。是素数。 endl; else coutm不是素数。不是素数。 endl;109方法二:程序清单110并列关系并列关系允许同名允许同名 嵌套关系嵌套关系不允许同名不允许同名111 计算计算1! +2!+3!+4!+.+20! #include using namespace std; void main

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论