◎ ◎ ◎ ◎ ◎ ◎ ◎ ◎ ◎ ◎
在C++中,经常需要对一些条件做出判断,从而决定执行哪段代码,这时就需要使用选择结构语句。
if条件语句有三种语法格式,如下图所示。
(1)if语句——单分支结构,如下图所示。
(2)if…else语句——双分支结构,如下图所示。
(3)if语句的嵌套。在一个if语句中还可以包含一个或多个if语句,这叫作if语句的嵌套,如下图所示。
除了if语句,switch条件语句也是一种常用的选择结构语句。和if条件语句不同,switch条件语句只能针对某个表达式的值做出判断,从而决定程序执行哪段代码。
注意,switch条件语句在执行完一个case之后不会自动停止,可以使用break语句停止;switch语句中的每一个case都必须是一个单独的值,该值必须是整数或字符,不能是浮点数。如果涉及取值范围、浮点数或比较,则先使用if…else转换。
训练1-5: 输入一个学生的成绩score,判断是否及格。
训练1-6: 输入一个学生的成绩score,判断其成绩等级(小于60为不及格,60~69为及格,70~79为中等,80~89为良好,90~100为优秀)。
训练1-7: 输入一个年份,判断其是闰年还是平年(非整百年:能被4整除的为闰年。整百年:能被400整除的是闰年)。
训练1-8: 输入一个整数,判断其是否为水仙花数。水仙花数是指一个3位数,它的各位数字的3次幂之和等于它本身。例如,3位数153是水仙花数,各位数字的立方和1 3 +5 3 +3 3 = 153。
训练1-9: 输入一个月份,判断该月份属于什么季节(在阳历中,3~5月为春季,6~8月为夏季,9~11月为秋季,12月至来年2月为冬季)。
◎ ◎ ◎ ◎ ◎ ◎ ◎ ◎ ◎ ◎
我们在实际生活中经常会将同一件事情重复做很多次。在C++中也经常需要重复执行同一代码块,这时就需要使用循环结构。循环结构包括for、while和do while语句。
for语句示例及其流程图如下图所示。
训练1-10: 输入一个整数 n ,输出1~ n 的所有整数。
(1)工具→编译选项→代码生成/优化→连接器,在“产生调试信息”中将“no”改为“yes”。
(2)设置断点。
(3)单击菜单→运行→调试,按F5或者单击工具栏上的“√”可以开始调试。“X”用于停止调试。
(4)设置需要监控的对象。
(5)单步运行。
break语句指直接跳出所在的循环,流程图如下图所示。
训练1-11: 输入一个整数 n ,输出1~ n 的所有整数,遇到5时停止。
训练1-12: 输入一个整数 n ,输出 n 行1~ n 的整数(输出1~ n 的整数时遇到5停止)。
continue语句指直接执行下一次循环,流程图如下图所示。
训练1-13: 输入一个整数 n ,输出1~ n 的所有整数,遇到偶数时不输出。
训练1-14: 输入一个整数 n (0< n <10),输出 n !。
训练1-15: 输出斐波那契数列第100项( F (1)= F (2)=1; F ( n )= F ( n -1)+ F ( n -2))。
while语句会反复地进行条件判断,只要条件成立,“{}”内的执行语句就会一直执行,直到条件不成立,while循环才会结束。其示例及流程图如下图所示。
训练1-16: 输入一个整数 n ,输出1~ n 的所有整数。
do while循环语句先执行一次大括号内的代码再判断循环条件。
训练1-17: 输入一个整数 n ,输出1~ n 的所有整数。
for、while、do while语句三者的区别如下。
● while语句先判断循环条件,再决定是否执行循环体。
● do while语句先执行循环体,再判断循环条件,至少执行一次循环体。
● for语句在省略测试条件时,会认为条件为true。
● for语句可以用初始化语句声明一个局部变量,while语句则不可以。
● 如果在循环体中包含continue语句,则for语句会跳到循环更新处,while语句会跳到循环条件处。
● 在无法预知循环次数或者循环更新不规律时,用while语句。
训练1-18: 输入一个整数 n ,输出1~ n 的所有整数。
训练1-19: 输入一个整数 n ,输出1~ n 的所有整数。
训练1-20: 输入一个整数 n ,输出1~ n 的所有整数,跳过3的倍数。
训练1-21: 输入一个大于1的整数 n ( n <100),若 n 为奇数,则 n 变为3 n +1;否则 n 变为 n /2。经过若干变换, n 会变为1并停止,输出变换次数。
在无法预知循环次数或者循环更新不规律时,用while语句。
◎ ◎ ◎ ◎ ◎ ◎ ◎ ◎ ◎ ◎
函数是对实现某一功能的代码的模块化封装,其定义如下:
训练1-22: 输入 n 对整数 a 和 b ,输出它们的和。
如果前面有函数原型声明,则可以将函数定义放在被调用函数之后。
如果没有返回值,则返回值类型为void。
训练1-23: 输入 n ,输出1~ n 的所有整数(无返回值)。
训练1-24: 输入 n ,如果 n 为10的倍数,则输出3个“very good!”。
传值参数在函数内部的改变出了函数后无效。
训练1-25: 输入两个整数 a 和 b ,交换后输出。
引用参数在参数前加“&”符号,引用参数在函数内部的改变出了函数后仍然有效。
训练1-26: 输入两个整数 a 和 b ,交换后输出。
训练1-27: 输入 n 个整数并将其存入 a []数组,求和后输出和值。
训练1-28: 输入 n 个字母,如果是小写字母,则将其转换为大写字母,输出转换后的字符串。
训练1-29: 输入两个整数 a 和 b ,求这两个整数的最大公约数和最小公倍数。
函数重载(多态)指有多个同名函数,但是每个同名函数的参数数量、类型、顺序不同。
训练1-30: 写一个函数,对于字符串类型的数据,取其长度的一半;对于浮点数类型的数据,取其值的二分之一。
训练1-31: 输入两个数 a 和 b (整数或者浮点数),求这两个数的和值。
练习:
(1)输入10个学生的程序设计成绩,将其存储在数组中,写3个函数,分别输入、显示和计算平均成绩。
(2)一直输入两个数,直到其中一个为0,对每两个数都求它们的调和平均数。调和平均数=2× x × y /( x + y )。