第三章基本程序设计教学目标:1.掌握顺序、选择、循环三种基本控制结构的程序实现方法;2.了解基本程序调试技能。教学内容:1.顺序结构的程序实现语句;2.一路、两路、多路分支选择结构的实现语句;3.循环结构的实现语句,循环控制语句的作用;5.程序调试过程。C++的控制结构顺序结构一路选择分支选择结构两路选择分支多路选择分支当型循环循环结构直到型循环for循环基本控制结构§3.1顺序结构程序设计[例3.1]“鸡兔同笼问题”:在一个笼子里养着鸡与兔,但不知其中鸡有多少只,兔有多少只。只知道鸡和兔的总数是a,鸡与兔的总脚数是b,求鸡与兔各有多少只。思路分析:首先从题目本身开始,找出解决问题的基本思路。每只鸡有两只脚,每只兔有四只脚。假设有x只鸡和y只兔,则根据已知条件可列出如下方程组:x+y=a2x+4y=b对该方程组做进一步的转换可得:y=(b-2a)/2;x=(4a-b)/2;源程序清单:#includeiostreamusingnamespacestd;voidmain(){inta,b,x,y;cout请输入鸡和兔的总数:;cina;cout请输入鸡和兔的总脚数:;cinb;x=(4*a-b)/2;y=(b-2*a)/2;cout鸡的数量为:xendl;cout兔的数量为:yendl;}输入数据分别为2377是否合适实现顺序结构的语句定义与声明语句:数据类型声明、常量声明、函数定义和声明表达式语句:由表达式加分号构成输入/输出流语句:cincout复合语句:用{}将若干执行语句组成一个整体(在语法上作为一条语句处理)空语句:由独立分号构成,不产生任何操作。[例3.2]输入一位同学的三门课程考试成绩,计算该同学的平均成绩,要求输出数据的形式如下例:科目成绩英语67程序设计78.5大学物理89该生的平均成绩为:78.17算法描述:输入三门课程的考试成绩score1,score2,score3计算平均成绩average输出标题行“科目成绩”输出科目“英语”和相应的考试成绩score1输出科目“程序设计”和相应的考试成绩score2输出科目“大学物理”和相应的考试成绩score3输出信息“该生的平均成绩为:”和计算所得的平均成绩average#includeiostream#includeiomanipusingnamespacestd;voidmain(){floatscore1,score2,score3,average;cout请输入三门课程的考试成绩:endl;cinscore1score2score3;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;}以小数形式输出设置小数位2位形式输出设置输出宽度使用setw(n)时需增加此文件包含命令通过控制输出的数据所占的位置宽度来实现。1:在输出该数据前先通过setw(n)来设置该数据输出时所占的最少位置宽度n。用法:coutsetw(n);注意:使用setw(n)时要加文件包含命令:#includeiomanipsetw(n)所设置的位置宽度只对其后输出的一个数据生效。2.输出多列信息对齐#includeiostream#includeiomanipusingnamespacestd;voidmain(){floatscore1,score2,score3,average;cout请输入三门课程的考试成绩:endl;cinscore1score2score3;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;}实际显示宽度不够的在前面填充空格。2:通过cout.width(n);设置字段宽度用法:cout.width(n);作用:设置紧跟其后的第一个输出项所占的宽度为n位。width成员函数包含在头文件iostream中#includeiostream#includestringusingnamespacestd;voidmain(){stringstr1=12345,str2=abcdefgh;cout.width(10);coutstr1endl;coutstr2endl;}cout.width(n):设置字段宽度例子12345abcdefgh三、格式化数字的输出普通情况下小数点前多于6位时以科学计数法显示,否则以小数点格式显示。fixed:控制以定点符号显示数据输出用法:coutfixed;cout.precision(n):指明有效位数n位例如:cout.precision(5):显示5位有效数cout.precision(0):回到正常方式fixed和cout.precision(n)两个共用时,cout.precision(n)表示小数点后的位数。例:#includeiostreamusingnamespacestd;voidmain(){doublea=87654321.12345678;coutaendl;coutfixed;coutaendl;}#includeiostreamusingnamespacestd;voidmain(){doublea=87654321.12345678;coutaendl;cout.precision(3);coutaendl;}cout.precision(n):指明输出有效位数n位fixed和cout.precision(n)两个共用时:cout.precision(n)表示小数点后的位数(若数据的实际位数超过n,则按4舍5入规则处理后输出;若数据的实际位数少于n,则其余位数用0补齐)。该设置一直有效,直到遇到新的设置为止。格式化浮点数输出例coutfixed;cout.precision(3);cout123.2endl;cout3.4567endl;cout.precision(0);cout23.56endl;cout34.7endl;控制输出对齐方式默认为右对齐输出,若要左对齐可用:coutleft左对齐;重新设置为右对齐coutright。一旦设置了对齐一直有效,直到新的设置。#includeiostream#includeiomanipusingnamespacestd;voidmain(){floatscore1,score2,score3,average;cout请输入三门课程的考试成绩:endl;cinscore1score2score3;average=(score1+score2+score3)/3;coutleft;coutsetw(10)科目setw(12)成绩endl;coutsetw(10)英语setw(12)score1endl;//coutright;coutsetw(10)程序设计setw(12)score2endl;coutsetw(10)大学物理setw(12)score3endl;coutfixed;cout.precision(2);cout该生的平均成绩为:averageendl;}输入一字符并找出该字符的前趋字符和后继字符,输出这三个字符和其对应的ASCII码值。课堂练习1算法分析:只要将所输入字符的ASCII码进行减1和加1运算后,即可得到该字符的前趋与后续字符,最后再分别按字符型和数值型数据输出即可。#includeiostream#includeiomanipusingnamespacestd;voidmain(){charx,y,z;cout请输入字符:;ciny;x=y-1;z=y+1;coutsetw(2)x,y,zendl;coutint(x),int(y),int(z)endl;}源程序§3.2选择结构程序设计选择结构是根据给定条件的判断结果决定程序执行的走向,也称判断结构。如xx≥0计算绝对值y=-xx<0§3.2选择结构程序设计除了逗号表达式之外的C++表达式关系运算符与关系表达式简单的条件通过包含关系运算符的关系表达式来表示。C++语言的关系运算符见下表运算符运算优先级==小于小于等于大于大于等于1111==!=等于不等于22(1)关系表达式的值为布尔型。若满足条件,值为布尔值true;若不满足条件,关系表达式的值为布尔值false;(2)关系运算符若为两字符,在书写时两字符间不能加空格;(3)==与=的区别:如x==1为条件表达式,判断x是否等于1。x=1为赋值表达式,将数值1存入变量x中;(4)两个浮点数之间一般不用==来判断是否相等;浮点数在大多数计算机上都采用近似表示。浮点数的相等与否用测试差值绝对值是否小于指定的值来判定。(5)关系运算符的优先级低于算术运算符,高于赋值运算符。注意:=和=运算符不能写成=和=,=和=是无效的运算符。例:运算符名字实例小于55.5//得出1=小于或等于5=5//得出1大于55.5//得出0=大于或等于6.3=5//得出1==等于5==5//得出1!=不等于5!=5//得出0运用举例:1、若A=3,B=2,C=1,求下列表达式的值。AB(AB)==CB+CAD=ABF=ABC11(不加括号也可)0D=1F=0(AB为1,1C为0)例分析下面程序的执行结果:#includeiostreamusingnamespacestd;voidmain(){charx='m',y='n';intn;n=xy;coutnendl;n=x==y-1;coutnendl;n=('y'!='Y')+(53)+(y-x==1);coutnendl;}112逻辑运算符与逻辑表达式如果条件比较复杂,需要由多个关系表达式按照一定的逻辑关系共同构成,则需要在条件表达式中使用逻辑运算符,C++语言的逻辑运算符见下表:运算符运算优先级!逻辑非(单目运算符)1&&逻辑与(双目运算符)2||逻辑或(双目运算符)3逻辑运算举例如下:a&&b若a,b为真,则a&&b为真。a||b若a,b之一为真,则a||b为真。!a若a为真,则!a为假。逻辑运算真值表ab!aa&&ba||btruetruefalsefalsetruefalsetruefalsefalsefalsetruetruetruefalsefalsefalsetruetruetruefalse逻辑表达式:由逻辑运算符连接表达式构成,其结果类型为bool,值为true或false。原则上,逻辑运算符的操