《程序设计种基本结构优秀PPT.ppt》由会员分享,可在线阅读,更多相关《程序设计种基本结构优秀PPT.ppt(51页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、程序设计种基本结构程序设计种基本结构现在学习的是第1页,共51页3.1 顺序结构 为了提高程序设计的质量和效率,为了提高程序设计的质量和效率,C C语言中经常采用结构化程语言中经常采用结构化程序设计方法。当然,面向对象程序设计方法在序设计方法。当然,面向对象程序设计方法在C+C+中用得更为中用得更为常见。不过两者并不矛盾,因为在面向对象程序设计方法中也常见。不过两者并不矛盾,因为在面向对象程序设计方法中也一定包含了结构化程序设计方法,因此,作为基础,必须熟练一定包含了结构化程序设计方法,因此,作为基础,必须熟练掌握结构化程序设计的方法。掌握结构化程序设计的方法。结构化程序由若干个基本结构组成。
2、每一个基本结构可以包含结构化程序由若干个基本结构组成。每一个基本结构可以包含 一个或若干个语句。有三种基本结构一个或若干个语句。有三种基本结构.采用流程图可以较好地描述算法的思路。采用流程图可以较好地描述算法的思路。当语句之间是顺序执行的关系时,就是当语句之间是顺序执行的关系时,就是顺序结构顺序结构顺序结构顺序结构,这也是,这也是最简单的结构。最简单的结构。现在学习的是第2页,共51页3.2 分支结构又称选择结构,典型的流程图如下:现在学习的是第3页,共51页分支结构的相关知识分支结构的相关知识3.2.1关系运算符和关系表达式3.2.2逻辑运算符和逻辑表达式3.2.3if语句3.2.4swit
3、ch语句3.2.5 条件运算符现在学习的是第4页,共51页1 1)关系运算符及其优先次序)关系运算符及其优先次序)关系运算符及其优先次序)关系运算符及其优先次序 关系运算是逻辑运算中比较简单的一种。所谓关系运算是逻辑运算中比较简单的一种。所谓“关系运算关系运算”实际上是实际上是“比较运算比较运算”。将两个值进行比较,判断其比较的。将两个值进行比较,判断其比较的结果是否符合给定的条件。比较的结果是一个逻辑值结果是否符合给定的条件。比较的结果是一个逻辑值(true,falsetrue,false)。)。6 6种关系运算符的优先次序如下:种关系运算符的优先次序如下:、=、=,=、!=!=其中,前其中
4、,前4 4个优先级相同,后个优先级相同,后2 2个优先级相同,前个优先级相同,前4 4种高于后种高于后2 2种。关系运算符的优先级低于算术运算符,高于赋值运算符。种。关系运算符的优先级低于算术运算符,高于赋值运算符。2 2)关系表达式:)关系表达式:)关系表达式:)关系表达式:用关系运算符将两个表达式连接的表达式。关系表达式的值用关系运算符将两个表达式连接的表达式。关系表达式的值也是一个逻辑值(也是一个逻辑值(true,falsetrue,false)。)。一般形式为:表达式一般形式为:表达式 关系运算符关系运算符 表达式表达式3.2.13.2.1关系运算符和关系表达式关系运算符和关系表达式
5、现在学习的是第5页,共51页3.2.23.2.2逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式1 1)3 3种逻辑运算符及其优先次序种逻辑运算符及其优先次序 !,&,|&、|为双目运算符,左结合;为双目运算符,左结合;!为单目运算符,右结合。为单目运算符,右结合。优先级如右图:优先级如右图:2 2)逻辑表达式)逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。表达式的值也是一个逻辑值(辑表达式。表达式的值也是一个逻辑值(true,falsetrue,false)。)。逻辑表达式的
6、一般形式为:逻辑表达式的一般形式为:表达式表达式 逻辑运算符逻辑运算符 表达式表达式现在学习的是第6页,共51页3.2.3if 语句共有共有共有共有3种形式的种形式的if if语句语句语句语句1 1)if(if(表达式表达式表达式表达式)语句语句语句语句例如:例如:if(xif(xy)y)cout“hello”cout“hello”;这种这种if if语句的执行过程见图。语句的执行过程见图。现在学习的是第7页,共51页example现在学习的是第8页,共51页2 2)if(if(表达式表达式表达式表达式)语句语句语句语句1 1 elseelse语句语句语句语句2 2例如:例如:if(xif(x
7、y)y)cout“first condition”cout“first condition”;elseelse cout“second condition”cout500)cost=0.15;else if(number300)cost=0.10;else if(number100)cost=0.075;else if(number50)cost=0.05;elsecost=0;现在学习的是第10页,共51页4 4)在使用在使用在使用在使用if语句应注意的问题语句应注意的问题语句应注意的问题语句应注意的问题:n nif if之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其它表
8、达式,如赋值表达式等,甚至也可以是一个变量。n n在if if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。n n在在if if语句中的内嵌语句为多个语句时,必须把这多个语语句中的内嵌语句为多个语句时,必须把这多个语句用句用括起来组成一个复合语句。但要注意的是在之后不能再加分号。n nif if语句可以嵌套,流程图见后页。语句可以嵌套,流程图见后页。现在学习的是第11页,共51页现在学习的是第12页,共51页例:输入三角形的例:输入三角形的3 3个边长,判断能否构成三角形个边长,判断能否构成三角形#includeinclude#includeinclude using name
9、spaceusing namespace std;std;intint main()main()floatfloat a,b,c;a,b,c;cincinabc;abc;if if(a+bc&a+cb&b+ca)(a+bc&a+cb&b+ca)/&(fabs(a-b)c&fabs(a-c)b&fabs(b-c)a)/&(fabs(a-b)c&fabs(a-c)b&fabs(b-c)a)coutYes“endl;coutYes“endl;elseelse coutNo“endl;coutNo“endl;returnreturn 0;0;现在学习的是第13页,共51页例:输入例:输入3 3个各不相
10、同的数,输出最大、最小值个各不相同的数,输出最大、最小值#include#include using namespace std;using namespace std;intint main()main()floatfloat a,b,c,maxVal,minVal;a,b,c,maxVal,minVal;cincinabc;abc;if if(ab&ac)maxVal=a;(ab&ac)maxVal=a;else ifelse if(ba&bc)maxVal=b(ba&bc)maxVal=b;else ifelse if(ca&cb)maxVal=c;(ca&cb)maxVal=c;if
11、if(ab&ac)minVal=a;(ab&ac)minVal=a;else ifelse if (ba&bc)minVal=b;(ba&bc)minVal=b;else ifelse if (ca&cb)minVal=c;(ca&cb)minVal=c;coutcout“Max,Min:”maxVal“,”minValendl;“Max,Min:”maxVal“,”minValendl;returnreturn 0;0;现在学习的是第14页,共51页3.2.4switch语句 switchswitch语句是多分支选择语句。用来实现多分支选择结构。语句是多分支选择语句。用来实现多分支选择结构。
12、if if语句只语句只有两个分支可供选择,而实际问题中常常需要用到多分支的选有两个分支可供选择,而实际问题中常常需要用到多分支的选择。择。例如,学生成绩分类例如,学生成绩分类(90(90分以上为分以上为 aa等,等,80808989分为分为 bb等,等,70707979分为分为 cc等等);人口统计分类;人口统计分类(按年龄分为老、中、青、少、儿按年龄分为老、中、青、少、儿童童);工资统计分类;银行存款分类;工资统计分类;银行存款分类。语法格式如下:语法格式如下:switchswitch(表达式表达式)casecase常量表达式常量表达式1 1:语句:语句1 1 casecase常量表达式常量
13、表达式2 2:语句:语句2 2 casecase常量表达式常量表达式n n:语句:语句n n defaultdefault :语句:语句n n1 1 现在学习的是第15页,共51页例如,要求按照考试成绩的等级打印出百分制分数段,可以用Switch语句实现:switchswitch(grade)(grade)casecase AA cout85 cout85100100nn;breakbreak;casecase BB cout70 cout708484nn;breakbreak;casecase CC cout60 cout606969nn;breakbreak;casecase DD cou
14、t cout 6060nn;breakbreak;defaultdefault couterror couterrornn;现在学习的是第16页,共51页说明说明 (1 1)有无)有无break语句的区别。(2 2)在)在casecase后的各常量表达式的值不能相同,否则会出错。后的各常量表达式的值不能相同,否则会出错。(3 3)各)各case和和defaultdefault子句的先后顺序可以调换。子句的先后顺序可以调换。(4 4)在)在casecase后,允许有多个语句,可以不用后,允许有多个语句,可以不用括起来。括起来。(5 5)defaultdefault子句可以省略不用。子句可以省略不
15、用。(6 6)多个)多个casecase可以共用一组执行语句。可以共用一组执行语句。(7 7)表达式允许为任何类型。)表达式允许为任何类型。现在学习的是第17页,共51页流程图:现在学习的是第18页,共51页3.2.5 条件运算符(了解即可)若若if if语句中,在表达式为“真”和“假”时,且都只执行一个赋值语句给同一个变量赋值时,可以用简单的条件运算符来处理。例如,若有以下if if语句:语句:if if(a(ab)max=amax=a;elseelsemax=b;可以用下面的条件运算符来处理:max=(ab)b)?a a b b;其中其中“(a(ab)b)?a a b”b”是一个是一个“条
16、件表达式条件表达式”。它是这样执行。它是这样执行的:如果的:如果(a(ab)条件为真,则条件表达式取值条件为真,则条件表达式取值a,否则取值,否则取值b b。现在学习的是第19页,共51页n n3.3.1 whilen n3.3.2 do whilen n3.3.3 forn n3.3.4 break和continue n n3.3.5 示例3.3 循环结构现在学习的是第20页,共51页3.3.1 while while语句用来实现“当型”循环结构。其一般形式如下:while(表达式表达式)语句语句现在学习的是第21页,共51页例例:求求sum=1+2+3+100sum=1+2+3+100in
17、t int main()int i=1,sum=0;i=1,sum=0;whilewhile (i=100)(i=100)sum=sum+i;sum=sum+i;i+;i+;coutcoutsumendl;sumendl;returnreturn 0;0;现在学习的是第22页,共51页3.3.2 do while do while语句的特点是先执行循环体,然后判断循环条件是否成立。一般形式为do 循环体语句循环体语句while(表达式表达式);现在学习的是第23页,共51页例例:求求sum=1+2+3+100sum=1+2+3+100int main()int main()int i=1,su
18、m=0;int i=1,sum=0;dodo sum=sum+i;sum=sum+i;i+;i+;whilewhile(i=100)(i=100);coutsumendl;coutsumendl;return 0;return 0;现在学习的是第24页,共51页3.3.3 for for语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。一般形式为:for(表达式表达式1;表达式;表达式2;表达式;表达式3)语句语句 现在学习的是第25页,共51页它的执行过程如下:它的执行过程如下:(1)先求解表达式先求解表
19、达式1 1。(2)(2)求解表达式求解表达式2,若其值为真,则执行,若其值为真,则执行for语句中指定的内嵌语句,然后执行语句中指定的内嵌语句,然后执行下面第下面第(3)(3)步。若为假,则结束循环。步。若为假,则结束循环。(3)(3)求解表达式求解表达式3。(4)(4)转回上面第(2)(2)步骤继续执行。for语句最简单的应用形式形式:for(循环变量赋初值;循环条件;循环变量增值)语句 例如:for(int i=1;i=100;i+)sum=sum+i;现在学习的是第26页,共51页例:求sum=1+2+3+100int main()int main()int sum=0;for(int
20、i=1;i=100;i+)for(int i=1;i=100;i+)sum=sum+i;sum=sum+i;coutsumendl;return 0;return 0;int main()int main()int i,sum=0;int i,sum=0;for(i=1;i=100;i+)for(i=1;i=100;i+)sum=sum+i;sum=sum+i;coutsumendl;coutsumendl;return 0;现在学习的是第27页,共51页3.3.4 break和continuebreak语句在前面已经介绍过,可以使流程跳出Switch结构,继续执行Switch语句下面的一个语
21、句。实际上,break语句还可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。continue的作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。现在学习的是第28页,共51页continue语句和break语句的区别是:语句的区别是:continuecontinue语句只结束本次循环,而不是终止整个循环的执行。而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。注意:注意:A、breakbreak语句对语句对if-else的条件语句不起作用。的条件语句不起作用。B B、在多层循环中、在多层循环中,一个breakbre
22、ak语句只向外跳一层。现在学习的是第29页,共51页3.3.5 3.3.5 示例:示例:例:多项式如下:例:多项式如下:/4=1-1/3+1/5-1/7+1/9 ./4=1-1/3+1/5-1/7+1/9 .计算的项数计算的项数n n由键盘输入,求由键盘输入,求。结果保留。结果保留2 2位小数。位小数。#include#include int main()int main()int n,sign=1;int n,sign=1;double sum=0.0;double sum=0.0;cinn;cinn;for(int i=1;i=n;i+=2)for(int i=1;i=n;i+=2)sum
23、=sum+sign*1.0/i;sum=sum+sign*1.0/i;sign=-sign;sign=-sign;/设置浮点数的小数个数设置浮点数的小数个数2 2位位coutfixedsetprecision(2)4*sumendl;coutfixedsetprecision(2)4*sumendl;return 0;return 0;现在学习的是第30页,共51页例:统计给定的例:统计给定的n n个整数中,负数、零和正数的个数。个整数中,负数、零和正数的个数。输入第一个数是整数输入第一个数是整数n n(n100nn;cinn;int zero=0,positive=0,negative=0;
24、int zero=0,positive=0,negative=0;for(int i=0;in;i+)for(int i=0;ix;cinx;if(x0)if(x0)positive+;positive+;else if(x0)else if(x0)negative+;negative+;elseelsezero+;zero+;coutnegative zero positiveendl;coutnegative zero positiveab;ab;for for(int i=1;ia;i+)(int i=1;ia;i+)if if(a%i=0)sumA+=i;(a%i=0)sumA+=i;
25、forfor(int j=1;jsumb;j+)(int j=1;jsumb;j+)if if(b%j=0)sumB+=j;(b%j=0)sumB+=j;if if(sumA=b&sumB=a)(sumA=b&sumB=a)coutcoutYESn;YESn;elseelsecoutcoutNOn;NOn;returnreturn 0;0;现在学习的是第33页,共51页3.4.1 基本运算3.4.2 示例3.4 使用string现在学习的是第34页,共51页#include#include/包含头文件包含头文件声明变量及初始化:声明变量及初始化:string s1,s2,s3=Hello;st
26、ring s1,s2,s3=Hello;赋值:赋值:s2=“World”;s2=“World”;串加法运算串加法运算 s1=s2+s3;s1=s2+s3;串比较运算串比较运算if(s2s3)cout“Bigger”s3)cout“Bigger”endl;输出输出 couts3endl;couts3cin的读入方式总是将前导的空格(所谓空格,即包括空的读入方式总是将前导的空格(所谓空格,即包括空格、回车、水平或垂直制表符等)滤掉,将单词读入,在遇格、回车、水平或垂直制表符等)滤掉,将单词读入,在遇到空格时结束本次输入到空格时结束本次输入n ngetlinegetline总是将行末的回车符滤掉,将
27、其整行输入总是将行末的回车符滤掉,将其整行输入对字串对字串”Hello,How are you?”Hello,How are you?”的两种输入方式的两种输入方式/方法方法1 1string s;string s;while(while(cins)cins)couts”“;couts”“;coutendl;coutendl;/方法方法2 2(优先考虑本方法)(优先考虑本方法)string s;string s;getline(cin,s);getline(cin,s);coutsendl;coutstotal;cintotal;for(int i=1;i=total;i+)for(int i
28、=1;is;cins;bool flag=true;bool flag=true;/存放结果存放结果len=s.size();len=s.size();/s.size()/s.size()表示串表示串s s的长度的长度for(int j=0;jlen/2;j+)for(int j=0;jlen/2;j+)if(sj!=slen-1-j)if(sj!=slen-1-j)/判断字符的范围判断字符的范围 flag=false;flag=false;break;break;if(flag=true)if(flag=true)cout“YES”endl;cout“YES”endl;elseelsecou
29、t“NO”endl;cout“NO”s)=NULL)break;if(cins)=NULL)break;/离开测试的条件(必要)离开测试的条件(必要)/或者或者 if(!(cins)break;if(!(cins)break;/也可使用本方法也可使用本方法 char maxchar=s0;char maxchar=s0;for(int for(int i=1i=1;is.size();i+);imaxchar)maxchar=si;if(simaxchar)maxchar=si;for(int j=0;js.size();j+)for(int j=0;js.size();j+)/按要求输出按要
30、求输出 coutsj;coutsj;if(sj=maxchar)cout(max);if(sj=maxchar)cout(max);coutendl;couts)!=NULL)while(cins)!=NULL)/离开测试的条件(必要)离开测试的条件(必要)/或者或者while(cins)while(cins)char maxchar=s0;char maxchar=s0;for(int i=1;is.size();i+)for(int i=1;imaxchar)maxchar=si;if(simaxchar)maxchar=si;for(int j=0;js.size();j+)for(in
31、t j=0;js.size();j+)/按要求输出按要求输出 coutsj;coutsj;if(sj=maxchar)cout(max);if(sj=maxchar)cout(max);coutendl;coutendl;return 0;return 0;现在学习的是第39页,共51页例:输入一个只包含空格和小写字母的英文句子,将每个单词的第一例:输入一个只包含空格和小写字母的英文句子,将每个单词的第一例:输入一个只包含空格和小写字母的英文句子,将每个单词的第一例:输入一个只包含空格和小写字母的英文句子,将每个单词的第一个字母改成大写首字母。个字母改成大写首字母。个字母改成大写首字母。个字母
32、改成大写首字母。(HDOJ2026HDOJ2026)int main()int main()while(true)while(true)string s;string s;if(!getline(cin,s)if(!getline(cin,s)break;break;/离开测试的条件离开测试的条件s0=s0-a+A;s0=s0-a+A;/处理首字母处理首字母for(int for(int i=1i=1;is.size();i+);is.size();i+)/小写转大写小写转大写if(si-1=)si=si-a+A;if(si-1=)si=si-a+A;coutsendl;coutsendl;r
33、eturn 0;return 0;现在学习的是第40页,共51页(HDOJ2026HDOJ2026)的另一种方式:)的另一种方式:int main()int main()string s;string s;while(getline(cin,s)while(getline(cin,s)/离开测试的条件离开测试的条件s0=s0-a+A;s0=s0-a+A;/处理首字母处理首字母for(int i=1;is.size();i+)for(int i=1;is.size();i+)/小写转大写小写转大写if(si-1=)si=si-a+A;if(si-1=)si=si-a+A;coutsendl;co
34、utsendl;return 0;return 0;现在学习的是第41页,共51页3.5.1 3.5.1 简单字符图形的双重循环简单字符图形的双重循环3.5.2 3.5.2 判断素数判断素数3.5.3 3.5.3 百鸡问题3.5.4 3.5.4 最大公约数最大公约数3.5 其他应用现在学习的是第42页,共51页3.5.1 3.5.1 简单字符图形的双重循环简单字符图形的双重循环MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
35、分析方法:分析方法:该图形一共该图形一共1010行,每一行增加一个行,每一行增加一个字符,所以,应循环字符,所以,应循环1010次,每次输次,每次输出一行,其循环模式为:出一行,其循环模式为:forfor(intint i=1;i=10;+i)i=1;i=10;+i)输出第输出第i i行行(循环循环)换行换行 n n行行 i M i M的个数的个数n n 1 1 1 1 1 1n n 2 2 2 2 2 2n n 3 3 3 3 3 3n n 4 4 4 4 4 4n n.n n10 10 1010 10 10forfor(intint i=1;i=10;+i)i=1;i=10;+i)forf
36、or(intint j=1;j=i;+j)j=1;j=i;+j)cout”M”;cout”M”;coutendl;coutm;cinm;bool isPrime=true;bool isPrime=true;intint sqm=(int)sqrt(m*1.0);sqm=(int)sqrt(m*1.0);forfor(intint i=2;i=sqm;i+)i=2;i=sqm;i+)if if(m%i=0)(m%i=0)isPrime=isPrime=falsefalse;break;break;现在学习的是第44页,共51页3.5.3 百鸡问题 本问题记载于中国古代约56世纪成书的张邱建算经
37、中,是原书卷下第38题,也是全书的最后一题:今有鸡翁一,值钱伍;鸡母一,值钱三;鸡鶵(雏)三,值钱一。凡百钱买鸡百只,问鸡翁、母、鶵各几何?答曰:鸡翁四,值钱二十;鸡母十八,值钱五十四;鸡鶵七十八,值钱二十六。又答:鸡翁八,值钱四十;鸡 母十一,值钱三十三,鸡鶵八十一,值钱二十七。又答:鸡翁十二,值钱六十;鸡母四、值钱十二;鸡鶵八十 四,值钱二十八。该问题导致三元不定方程组,其重要之处在于开创一问多答的先例,这是过去中国古算书中所没有的。100100元钱买元钱买100100只鸡,只鸡,大公鸡大公鸡5 5元元1 1只,母鸡只,母鸡3 3元元1 1只,小鸡只,小鸡1 1元元3 3只。只。问公鸡,母
38、鸡,小鸡各多少只?问公鸡,母鸡,小鸡各多少只?现在学习的是第45页,共51页分析:把三种鸡的只数分别设为未知数x、y、z,然后利用总只数、总钱数两个条件,列出两个方程,根据鸡的只数必须取整数的要求,一步一步推出各种鸡的只数。解:设大公鸡x只,母鸡y只,小鸡z只。根据题意,得现在学习的是第46页,共51页方法一:方法一:方法一:方法一:int x,y,z;int x,y,z;/cock,hen,chick;/cock,hen,chick;forfor(x=1;x=100/5;x+)(x=1;x=100/5;x+)forfor(y=1;y=100/3;y+)(y=1;y=100/3;y+)forf
39、or(z=1;z=100;z+)(z=1;z=100;z+)if if(x+y+z=100&5*x+3*y+z/3=100&z%3=0)(x+y+z=100&5*x+3*y+z/3=100&z%3=0)coutx“,”y“,”zendl;coutx“,”y“,”zendl;现在学习的是第47页,共51页方法二:方法二:方法二:方法二:int x,y,z;int x,y,z;/cock,hen,chick;/cock,hen,chick;forfor(x=1;x=100/5;x+)(x=1;x=100/5;x+)forfor(y=1;y=100/3;y+)(y=1;y=100/3;y+)z=100-x-y;z=100-x-y;if if(5*x+3*y+z/3=100&z%3=0)(5*x+3*y+z/3=100&z%3=0)coutx“,”y“,”zendl;coutx“,”y“,”zmn;while(n0)int t=m%n;m=n;n=t;gcd=m;课后思考:怎么求最小公倍课后思考:怎么求最小公倍数数?现在学习的是第51页,共51页