版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、程序设计种基本结构第1页,共51页,2022年,5月20日,11点58分,星期五3.1 顺序结构 为了提高程序设计的质量和效率, C语言中经常采用结构化程序设计方法。当然,面向对象程序设计方法在C+中用得更为常见。不过两者并不矛盾,因为在面向对象程序设计方法中也一定包含了结构化程序设计方法,因此,作为基础,必须熟练掌握结构化程序设计的方法。 结构化程序由若干个基本结构组成。每一个基本结构可以包含 一个或若干个语句。有三种基本结构. 采用流程图可以较好地描述算法的思路。 当语句之间是顺序执行的关系时,就是顺序结构,这也是最简单的结构。第2页,共51页,2022年,5月20日,11点58分,星期五
2、3.2 分支结构又称选择结构,典型的流程图如下:第3页,共51页,2022年,5月20日,11点58分,星期五分支结构的相关知识关系运算符和关系表达式逻辑运算符和逻辑表达式if语句switch语句3.2.5 条件运算符第4页,共51页,2022年,5月20日,11点58分,星期五1)关系运算符及其优先次序 关系运算是逻辑运算中比较简单的一种。所谓“关系运算”实际上是“比较运算”。将两个值进行比较,判断其比较的结果是否符合给定的条件。比较的结果是一个逻辑值(true,false)。 6种关系运算符的优先次序如下: 、 、= , = 、!= 其中,前4个优先级相同,后2个优先级相同,前4种高于后2
3、种。关系运算符的优先级低于算术运算符,高于赋值运算符。2)关系表达式: 用关系运算符将两个表达式连接的表达式。关系表达式的值也是一个逻辑值(true,false)。 一般形式为:表达式 关系运算符 表达式3.2.1关系运算符和关系表达式 第5页,共51页,2022年,5月20日,11点58分,星期五逻辑运算符和逻辑表达式1)3种逻辑运算符及其优先次序 !,&,| &、|为双目运算符,左结合; !为单目运算符,右结合。 优先级如右图:2)逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。表达式的值也是一个逻辑值(true,false)。逻辑表达式的一般形式为:表达式 逻辑运
4、算符 表达式第6页,共51页,2022年,5月20日,11点58分,星期五if 语句共有3种形式的if语句1) if(表达式)语句例如:if(xy) cout“hello”; 这种if语句的执行过程见图。第7页,共51页,2022年,5月20日,11点58分,星期五example第8页,共51页,2022年,5月20日,11点58分,星期五2) if(表达式)语句1 else语句2例如:if (xy) cout“first condition”;else cout500)cost=0.15; else if(number300)cost=0.10; else if(number100)cost
5、=0.075; else if(number50)cost=0.05; elsecost=0; 第10页,共51页,2022年,5月20日,11点58分,星期五4) 在使用if语句应注意的问题:if之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。在if语句中的内嵌语句为多个语句时,必须把这多个语句用括起来组成一个复合语句。但要注意的是在之后不能再加分号。if语句可以嵌套,流程图见后页。第11页,共51页,2022年,5月20日,11点58分,星期五第12页,共5
6、1页,2022年,5月20日,11点58分,星期五例:输入三角形的3个边长,判断能否构成三角形#include #include using namespace std;int main()float a,b,c;cinabc;if (a+bc & a+cb & b+ca) /& (fabs(a-b)c & fabs(a-c)b & fabs(b-c)a)coutYes“endl;elsecoutNo“endl;return 0;第13页,共51页,2022年,5月20日,11点58分,星期五例:输入3个各不相同的数,输出最大、最小值#include using namespace std;i
7、nt main()float a, b, c, maxVal, minVal;cinabc;if (ab & ac) maxVal=a;else if (ba & bc) maxVal=b;else if (ca & cb) maxVal=c ;if (ab & ac) minVal=a; else if (ba & bc) minVal=b; else if (ca & cb) minVal=c;cout“Max, Min :”maxVal“,”minValendl;return 0;第14页,共51页,2022年,5月20日,11点58分,星期五switch语句 switch语句是多分支选
8、择语句。用来实现多分支选择结构。if语句只有两个分支可供选择,而实际问题中常常需要用到多分支的选择。例如,学生成绩分类(90分以上为a等,8089分为b等,7079分为c等);人口统计分类(按年龄分为老、中、青、少、儿童);工资统计分类;银行存款分类。语法格式如下: switch(表达式) case常量表达式1:语句1 case常量表达式2:语句2 case常量表达式n:语句n default :语句n1 第15页,共51页,2022年,5月20日,11点58分,星期五例如,要求按照考试成绩的等级打印出百分制分数段,可以用Switch语句实现: switch(grade) caseA cout
9、85100n;break; caseB cout7084n; break; caseC cout6069n; break; caseD cout 60n; break; default couterrorn; 第16页,共51页,2022年,5月20日,11点58分,星期五说明 (1)有无break语句的区别。 (2)在case后的各常量表达式的值不能相同,否则会出错。 (3)各case和default子句的先后顺序可以调换。 (4)在case后,允许有多个语句,可以不用括起来。 (5)default子句可以省略不用。 (6)多个case可以共用一组执行语句。 (7)表达式允许为任何类型。第1
10、7页,共51页,2022年,5月20日,11点58分,星期五流程图:第18页,共51页,2022年,5月20日,11点58分,星期五3.2.5 条件运算符(了解即可) 若if语句中,在表达式为“真”和“假”时,且都只执行一个赋值语句给同一个变量赋值时,可以用简单的条件运算符来处理。例如,若有以下if语句:if(ab)max=a; elsemax=b; 可以用下面的条件运算符来处理:max=(ab)?ab; 其中“(ab)?ab”是一个“条件表达式”。它是这样执行的:如果(ab)条件为真,则条件表达式取值a,否则取值b。第19页,共51页,2022年,5月20日,11点58分,星期五3.3.1
11、while3.3.2 do while3.3.3 for3.3.4 break和continue 3.3.5 示例3.3 循环结构第20页,共51页,2022年,5月20日,11点58分,星期五3.3.1 while while语句用来实现“当型”循环结构。其一般形式如下:while (表达式) 语句第21页,共51页,2022年,5月20日,11点58分,星期五例: 求sum=1+2+3+100int main( )int i=1,sum=0;while (i=100)sum=sum+i;i+;coutsumendl;return 0;第22页,共51页,2022年,5月20日,11点58分
12、,星期五3.3.2 do while do while语句的特点是先执行循环体,然后判断循环条件是否成立。一般形式为do 循环体语句while (表达式);第23页,共51页,2022年,5月20日,11点58分,星期五例: 求sum=1+2+3+100int main()int i=1,sum=0;do sum=sum+i;i+;while (i=100); coutsumendl;return 0;第24页,共51页,2022年,5月20日,11点58分,星期五3.3.3 for for语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情
13、况,它完全可以代替while语句。一般形式为:for(表达式1;表达式2;表达式3) 语句 第25页,共51页,2022年,5月20日,11点58分,星期五它的执行过程如下: (1) 先求解表达式1。 (2) 求解表达式2,若其值为真,则执行for语句中指定的内嵌语句,然后执行下面第(3)步。若为假,则结束循环。 (3) 求解表达式3。 (4) 转回上面第(2)步骤继续执行。for语句最简单的应用形式形式:for(循环变量赋初值;循环条件;循环变量增值) 语句 例如:for(int i=1; i=100; i+) sum=sum+i;第26页,共51页,2022年,5月20日,11点58分,星
14、期五例: 求sum=1+2+3+100int main() int sum=0; for( int i=1;i=100;i+) sum=sum+i; coutsumendl; return 0; int main() int i,sum=0; for( i=1;i=100;i+) sum=sum+i; coutsumendl; return 0; 第27页,共51页,2022年,5月20日,11点58分,星期五3.3.4 break和continuebreak语句在前面已经介绍过,可以使流程跳出Switch结构,继续执行Switch语句下面的一个语句。实际上,break语句还可以用来从循环体内
15、跳出循环体,即提前结束循环,接着执行循环下面的语句。continue的作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。第28页,共51页,2022年,5月20日,11点58分,星期五continue语句和break语句的区别是:continue语句只结束本次循环,而不是终止整个循环的执行。而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。注意: A、break语句对if-else的条件语句不起作用。 B、在多层循环中, 一个break语句只向外跳一层。第29页,共51页,2022年,5月20日,11点58分,星期五3.3.5 示例:例
16、:多项式如下:/4 =1 - 1/3 + 1/5 - 1/7 + 1/9 .计算的项数n由键盘输入,求。结果保留2位小数。#include int main()int n, sign=1;double sum=0.0; cinn;for(int i=1; i=n; i+=2) sum = sum + sign*1.0/i;sign = -sign;/ 设置浮点数的小数个数2位coutfixedsetprecision(2)4*sumendl;return 0;第30页,共51页,2022年,5月20日,11点58分,星期五例:统计给定的n个整数中,负数、零和正数的个数。 输入第一个数是整数n(
17、nn;int zero=0, positive=0, negative=0;for(int i=0; ix;if (x0)positive+;else if (x0)negative+;elsezero+;coutnegative zero positiveab;for (int i=1; ia; i+)if (a%i=0) sumA+=i;for(int j=1; jsumb; j+)if (b%j=0) sumB+=j;if ( sumA=b & sumB=a)coutYESn;elsecoutNOn;return 0;第33页,共51页,2022年,5月20日,11点58分,星期五3.4
18、.1 基本运算3.4.2 示例3.4 使用string第34页,共51页,2022年,5月20日,11点58分,星期五#include/ 包含头文件声明变量及初始化: string s1,s2,s3 = Hello;赋值: s2=“World”; 串加法运算 s1=s2+s3;串比较运算if(s2s3) cout“Bigger”endl;输出 couts3的读入方式总是将前导的空格(所谓空格,即包括空格、回车、水平或垂直制表符等)滤掉,将单词读入,在遇到空格时结束本次输入getline总是将行末的回车符滤掉,将其整行输入对字串”Hello, How are you?”的两种输入方式/方法1st
19、ring s;while( cins) couts” “;coutendl;/方法2(优先考虑本方法)string s;getline(cin, s);coutstotal;for(int i=1; is;bool flag=true;/ 存放结果len=s.size();/ s.size()表示串s的长度for(int j=0; jlen/2; j+) if (sj != slen-1-j) / 判断字符的范围 flag=false;break; if(flag=true) cout“YES”endl;elsecout“NO”s)=NULL) break;/ 离开测试的条件(必要)/或者 i
20、f(!(cins) break;/ 也可使用本方法 char maxchar=s0;for(int i=1; imaxchar) maxchar=si; for(int j=0; js.size(); j+) / 按要求输出 coutsj; if(sj=maxchar) cout(max); couts)!=NULL)/ 离开测试的条件(必要)/ 或者while(cins) char maxchar=s0;for(int i=1; imaxchar) maxchar=si; for(int j=0; js.size(); j+)/ 按要求输出 coutsj; if(sj=maxchar) co
21、ut(max); coutendl;return 0;第39页,共51页,2022年,5月20日,11点58分,星期五例:输入一个只包含空格和小写字母的英文句子,将每个单词的第一个字母改成大写首字母。 (HDOJ2026)int main() while(true)string s; if (!getline(cin,s) break;/ 离开测试的条件s0=s0-a+A;/ 处理首字母for(int i=1; is.size(); i+) / 小写转大写if(si-1= ) si=si - a + A;coutsendl; return 0;第40页,共51页,2022年,5月20日,11点
22、58分,星期五(HDOJ2026)的另一种方式:int main()string s; while(getline(cin,s) / 离开测试的条件s0=s0-a+A;/ 处理首字母for(int i=1; is.size(); i+) / 小写转大写if(si-1= ) si=si - a + A;coutsendl; return 0;第41页,共51页,2022年,5月20日,11点58分,星期五3.5.1 简单字符图形的双重循环3.5.2 判断素数3.5.3 百鸡问题3.5.4 最大公约数3.5 其他应用第42页,共51页,2022年,5月20日,11点58分,星期五3.5.1 简单字
23、符图形的双重循环MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM分析方法: 该图形一共10行,每一行增加一个字符,所以,应循环10次,每次输出一行,其循环模式为:for(int i=1; i=10; +i) 输出第i行(循环) 换行行 i M的个数 1 1 1 2 2 2 3 3 3 4 4 4.10 10 10for(int i=1; i=10; +i) for(int j=1; j=i; +j) cout”M”; coutm; bool isPrime=true; int sqm=(int)sqrt(m*1.0); for(int i=2; i=sqm; i+) if(m%i=0) isPrime= false; break; 第44页,共51页,2022年,5月20日,11点58分,星期五3.5.3 百鸡问题 本问题记载于中国古代约56世纪成书的张邱建算经中,是原书卷下第38题,也是全书的最后一题:今有鸡翁一,值钱伍;鸡母一,值钱三;鸡鶵(雏 )三,值钱一。凡百钱
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 运动疗法第十章Brunnstrom技术讲解
- 财政学:第七章 教育
- 2025北京市商品房预售合同(合同版本)
- 2025二手房购房合同协议
- 扩大劳务分包的合同范本
- 2025购车合同样例范本资料
- 2024年城市建设项目承包合同
- 全新阳光房合同下载
- 纱窗合同协议书
- 生产原料购销合同范本
- 山东省滨州市滨城区2024-2025学年九年级上学期期末考试化学试题
- 期末试卷:安徽省宣城市2021-2022学年七年级上学期期末历史试题(解析版)
- 2024年湖南省公务员录用考试《行测》真题及答案解析
- 2024新版(北京版)三年级英语上册单词带音标
- 第21课 活动课 从考古发现看中华文明的起源 教学课件
- 部编版《道德与法治》四年级下册教材解读与分析文档
- PP、PVC-风管制作安装施工作业指导书
- 苏教版五年级上册脱式计算300道及答案
- 辽宁省沈阳市铁西区2025届初三最后一次模拟(I卷)数学试题含解析
- 幼教培训课件:《幼儿园如何有效组织幼儿户外自主游戏》
- 2024-2030年中国轻型运动飞机行业市场发展趋势与前景展望战略分析报告
评论
0/150
提交评论