小学信息学竞赛C++编程信息学校本教材+讲解+练习_第1页
小学信息学竞赛C++编程信息学校本教材+讲解+练习_第2页
小学信息学竞赛C++编程信息学校本教材+讲解+练习_第3页
小学信息学竞赛C++编程信息学校本教材+讲解+练习_第4页
小学信息学竞赛C++编程信息学校本教材+讲解+练习_第5页
已阅读5页,还剩145页未读 继续免费阅读

下载本文档

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

文档简介

1、小学信息学竞赛C+编程信息学校本教材创作: Z J【可编辑】【附竞赛原题讲解】目 录第一部分 我的新朋友1第1课 奇怪的电脑2第2课 购买电影票4第3课 建一座金字塔7第二部分 独木小桥顺序过9第1课 一碗水和一碗油10第2课 计算表面积的神器12第3课 小朋友的平均年龄14第4课 数字的拆分16阅读材料:其它运算符18第5课 可怕的传染病19阅读材料:常量21第6课 卡卡的难题22第7课 匪夷所思的结果24第8课 加密的文字26阅读:数据类型转换28第9课 格式化输入输出29第三部分 是真是假做选择32第1课 奇数偶数我知道33第2课 这不是考试的成绩35第3课 这次考试我通过了36第4课

2、麻烦的火车托运38综合练习41第四部分 省时省力的循环46第1课 快速输出法47第2课 这种计算方法真快49第3课 循环与分支的结合50第4课 什么是素数51第5课 无从下手的输入53第6课 辗转相除法54综合练习55第7课 堆出一个三角形57第8课 阶乘之和59第9课 100-200以内的素数60第五部分 太多的变量62第1课 还是交换苹果63综合练习65第2课 开关灯问题67第3课 约瑟夫问题69第4课 排序问题(选择排序)71第5课 排序问题(冒泡排序)73第6课 判断回文数75综合练习77阅读:二维数组79第六部分 重复使用语句块81第1课 函数的准备知识82第2课 再谈变量值的交换1

3、85第3课 再谈变量值的交换286第4课 最大公约数88第5课 省力的排序90阅读:全局变量和局部变量91第6课 你植了多少棵树93综合练习95第3课递归算法97第七部分 多个变量捆绑一起100第1课 结构体变量101第2课 结构体数组104第八部分 文件操作114第九部分 常见算法1181、桶排序1182、排序与去重1203、模拟算法1224、贪心算法1245、动态规划(背包问题)1256、动态规划1317、高精度算法134 3上派西校区校本教材第九部分 常见算法第一部分 我的新朋友C+语言简介信息学奥林匹克竞赛是一项益智性的竞赛活动,核心是考查选手的智力和使用计算机解题的能力,选手首先应针

4、对竞赛题目的要求构建数学模型,进而构造出计算机可以接受的算法,之后编写出计算机能够执行的程序。程序设计是信息学竞赛的基本功,选手参与竞赛活动的第一步是熟练掌握一门程序设计语言,目前竞赛中允许使用的程序设计语言有C语言、C+语言、Pascal。C+由美国AT&T贝尔实验室的本贾尼斯特劳斯特卢普博士在20世纪80年代初期发明并实现(最初这种语言被称作“C with Classes”带类的C)。开始,C+是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。今天C+已成为世界主流编程语言之一。C+ 语言的特点:(1)语言简洁紧凑,使用灵活方便;(2)运算符丰富;(3)数据结构丰富;(4

5、)结构化语言;(5)生成的代码质量高(6)可移植性强。第1课 奇怪的电脑卡卡,你好!卡卡的电脑上多出了一个文件,打开一看,电脑屏幕上出现了几个字“卡卡,你好!”,真奇怪,这是怎么做到的?一定是西西弄的,西西可是电脑高手。西西说,这是他用C+写的一个小程序。例1 在屏幕上输出“Hello World!”。代码注释备注#include/调用iostream 库头文件部分using namespace std;/使用std命名空间int main()/int类型的主函数主函数部分包括:int main( ) coutHello World!;/输出Hello World!return 0;/返回值0

6、,结束整个程序/主函数结尾运行结果:Hello World!在此程序中包括头文件、注释、主函数、输出、返回值等部分,有时根据需要还可能有输入、子函数等部分。 “这也太难了吧!”卡卡说。西西:“其实一下子让你明白这么多很不容易,但是你不必太在意, 你只要把你想让电脑说的话,写在引号里面就好了。”卡卡说:“以后多教教我,我也要学习C+。”做一做填空:(1)c+语句,除了少数几个地方,每句话以_结尾;(逗号、句号、分号) (2)调用库在_(尖括号、小括号)内;(3)main后面有一对_后面再一对_(小括号、大括号);(4)cout后面的符号是“_”;()(5)C+语句中所有字符和符号均为_(中文、英

7、文)。(6)C+程序通常有_、 _、 _、 _、 _等部分。做一做试着写一个C+程序,输出:“卡卡,你好!”。第2课 购买电影票电影院出了新电影,明天正好是周末,可以一饱眼福了,卡卡邀请了几个好朋友去看电影,电影票每张10元,他该准备多少电影票钱呢?在例1中,输出的内容是不用计算的,其实C+程序还具有处理数学计算的功能呢!例2已知一位小朋友的电影票价是10元,计算x位小朋友的总票价是多少?解题:卡卡想每张票是10元,那么x位小朋友就是10*x元,虽然他知道怎么算电影票钱,可是程序该怎么写呢?卡卡请教了西西。西西操作如下:1(1)打开Dev-C+软件;2(2)文件新建源代码;(3)写入代码,然后

8、保存在桌面;43(4)然后点编译、运行;5(5)对程序进行了测试和调试。#includeusing namespace std;int main()int x,s;/定义x和s两个整数变量,其中x表示小朋友的位数,s表示总票价cinx;/输入小朋友的位数,存放在变量x中s=10*x;/计算总票价存放于s中,总票价=单张票价小朋友的位数cout”,细心的同学可能发现cin与cout后面的符号正好相反。使用C+编程大致有以下环节:(1)启动开发环境;(2)新建源程序;(3)保存源程序到硬盘;(4)编译、运行;(5)调试程序。这个内容有点烧脑了,卡卡认真的把这个程序看了几遍,一遍看代码一边读西西给的

9、注释,“有点明白了”卡卡说,“但是输入是什么意思啊?”输入就是你告诉电脑有几位小朋友,不过是通过键盘打入数字告诉电脑的,西西说完给卡卡留了一道难题。我正想去看电影呢做一做填空:使用Dev_C+编程大致有以下几个环节:(1)_;(2)_;(3)_;(4)_;(5)_。做一做有一个牧场,牧场上的牧草每天都在匀速生长,这片牧场可供15头牛吃20天,或可供20头牛吃10天,那么,这片牧场每天新生的草量可供几头牛吃1天?输出你的计算结果。第3课 建一座金字塔电影结束了,给卡卡留下最深的印象就是壮观的金字塔,我回家也要用C+,在电脑上造一座金字塔。例2中C+程序处理了数学的计算,其实C+还可以处理字符。例

10、3给定一个字符,用它构造一个底边长5个字符,高3个字符的等腰字符三角形。例如给定的字符是“#”那么输出:#解题:#include using namespace std;int main()char a; /定义字符变量,cina; /输入给定一个字符cout aendl; /输出2个空格、1个字符和换行cout aaaendl; /输出1个空格、3个字符和换行coutaaaaa;的功能是_;而couta;的功能是_。做一做用指定的字符输出一个三角形,如给定字符“+”,则输出:+第二部分 独木小桥顺序过每条语句按自上而下的顺序依次执行一次,这种自上而下依次执行的程序称为顺序结构程序。要学好顺序

11、结构程序设计,先要学习C+语言的基本语句,并且在学习过程中逐步学会程序设计的基本方法。本部分内容主要介绍赋值语句、运算符、变量与常量、输入与输出、数据类型等内容。第1课 一碗水和一碗油例4数值交换,输入两个正整数a和b,试交换a、b的值(使a的值等于b,b的值等于a)。一碗水和一碗油,怎么把水和油换到对方的碗里面呢?答案是借助第三只碗。所以我们这里交换a和b的值,借助第三个变量c。解题:#include using namespace std;int main()int a,b,c; /先定义三个变量cinab; /分别输入a、b的值c=a;/先将a赋值给c(c相当于空碗),暂时存起来a=b;

12、/再把b赋值给ab=c; /最后把暂存在c的数据赋值给bcouta b; /输出a、空格、breturn 0;测试:输入3 5输出5 3。此方法后面还有用到,同学们要能领会。试一试把c赋值给b以后,c是多少了?猜猜看,然后把coutc;加入到程序中验证下你的猜想。赋值语句简单的说就是给变量具体的值,这个值可以直接给,也可以间接算出来,是由赋值表达式再加上分号构成的表达式语句。赋值语句语法:变量=表达式;(1)赋值运算符“=”右边的表达式还可以是赋值表达式,例如,“a=b=c=d=e=5;”。(2)在进行赋值运算时,先计算等号右边的值,再将值赋给左边的变量,如果类型不同会更改类型后赋值。Z j做

13、一做观看下面代码,推算结果:a=1;b=2;a=b;b=a;结果:a=_、b=_。做一做现在有5个小朋友围成一圈,已知各小朋友的苹果数(输入),每位小朋友把自己的苹果给他右边的小朋友。一轮结束后,输出各小朋友苹果数。(测试:输入1 3 5 7 9输出7 1 3 5 9)第2课 计算表面积的神器今天数学课上,卡卡学了圆柱体的表面积计算公式,可是算起来好烦。卡卡想:我能不能把这个计算公式写入C+里面,只要我给出电脑圆柱体的底面半径和高,电脑就会算出表面积。可是到现在,我只会用整数,现在出现小数又该怎么办呢?例5求圆柱体的表面积,输入底面半径r和高h,输出圆柱体的表面积,保留3位小数。圆柱体表面积的

14、公式是:s=2*3.14159*r*r+2*3.14159*r*h样例输入: 3.5 9 样例输出: 274.889#include /使用printf或scanf,须调用cstdio库using namespace std; int main()double r,h,s1,s2,s; /先定义双精度实型,可以存放小数cinrh; s1=3.14159*r*r; /利用公式计算底面积并赋值s2=2*3.14159*r*h; /利用公式计算侧面积并赋值s=2*s1+s2; /计算总的表面积并赋值printf(%0.3lf,s); /输出结果保留3位小数,注意double用lf占位符return

15、0;试一试将printf(%0.3lfn,s);更改成couts;会出错吗?为什么?错误修正以后结果是什么?做一做填空:(1)保留2位小数输出输出变量a的语句为:printf(_);(2)使用cout调用的库是_;使用printf调用的库是_;做一做数学中经典的“鸡兔同笼”问题,已知头共30个,脚共90只,问笼中的鸡和兔各有多少只?输出鸡和兔的个数。(输出15 15)第3课 小朋友的平均年龄例6输入2个整数,小朋友的总年龄a和小朋友的个数b,输出平均年龄。例如输入18和5,结果是3.6。解题: #includeusing namespace std;int main()int a,b;/先定义

16、变量double c;/因为除法可能会产生小数,所以结果定义成浮点数(小数)cinab;c=1.0*a/b;/a和b都是整数,除法运算的结果还是整数,所以先乘上1.0coutc;return 0;在变量的使用中,必须符合“先定义后使用”的原则。相同类型的变量的计算结果还是同类型的。试一试去掉1.0以后结果如何?去掉1.0以后使用保留一位小数输出结果又是怎样的?先猜一猜结果,再验证一下你的结果。如果把c设置成int类型或者改输出为cout、=、=、=、!=逻辑运算符: | 、&、!赋值运算符:=条件运算符:?:逗号运算符:,除法运算符“/”:如果a、b是两个整数类型的变量或常量,那么a/b的值是

17、a除以b的商。注意:整形/整形=整形,实数/整形=实数,例如, 5/2的值是2,而不是2.5,而5.0/2或5/2.0的值是2.5。做一做变量的使用必须符合_的原则。整数/整数=_,实数/整形=_。做一做输入三个整数a、b、c,输出(a+b)/c的值结果保留3位小数。(测试:输入3 4 5输出1.400。)第4课 数字的拆分例7将指定的三位数,百位、十位、个位分开输出以一个空格隔开。(测试:输入239 输出2 3 9)Z j解题思路:对这个三位数用10除取余数,余数就是个位;对这个三位数先用10除,结果是去掉个位的两位数,然后再用10取余就是十位;对这个数直接除100就是百位。#include

18、using namespace std;int main()int n,a,b,c;cinn;a=n%10;/取个位时直接用10除求余数b=n/10%10;/取十位时,先用10整除,然后用10取余c=n/100;/取百位时直接用100整除coutc b )、小于(=)、小于等于(0 & 42 (2)或运算|参与运算的两个量只要有一个为真,结果就为真。 两个量都为假时,结果为假。例如:50|58 (3)非运算!参与运算量为真时,结果为假;参与运算量为假时,结果为真。例如:!(50)按照运算符的优先顺序可以得出:ab & cd等价于(ab) & (cd)!b=c|da等价于(!b)=c)|(dc

19、& x+yc) & (x+y)关系逻辑赋值第5课 可怕的传染病例8对于传染病要做到早发现,早诊断,早隔离,早治疗。请根据报告的甲流确诊数和死亡数,计算甲流的死亡率。输入:输入仅一行,有两个整数,第一个为确诊数,第二个为死亡数。输出:输出仅一行,甲流死亡率,以百分数形式输出,精确到小数点后3位。样例输入:10433 60样例输出: 0.575% 解题:#include#includeusing namespace std;int main()int a,b;/定义2个整型变量存放患病数和死亡数double c;/定义双精度浮点型变量,存放死亡率cinab;/输入患病人数和死亡人数c=100.0*

20、b/a;/计算死亡率printf(%0.3lf%c,c,%);/输出,注意单独的“%”的输出return 0;变量的值是可以改变的,因此称为变量。一个程序中可能要使用到若干个变量,为了区别不同的变量,必须给每个变量取一个名(称为变量名),变量中值的类型为变量的类型。 1、变量三要素 类型、名称和值2、变量命名规则 只能由字母、数字和下划线构成,最多255个字符。变量要遵循“先定义后使用的原则”。变量名区分大小写,而且不能使用C/C+语言中的关键字。例如 int、for等。3、变量的定义语法格式为: 数据类型 变量表变量定义举例:double x;/定义1个双精度浮点型变量xchar a,b,c

21、;/定义3个字符型变量a、b和cint i=5,j,k;/一次定义3个整型变量i、j和k,i赋予初始值5做一做统计及格率,语文考试结束了。能否根据班上的人数和及格人数,求出及格率呢?结果保留2位小数(测试:输入50 42输出84.00% )阅读材料:常量常量是指在程序中值只能赋予第一次,然后不能被更改。1、整型常量 1)十进制形式:数字19开头 如99 2)八进制形式:数字0开头 如017 3)十六进制形式:0x开头 如0xFF2、实型常量:小数法和科学计数法 如:2.1 或者0.6E+23、字符常量:单引号括起来的 如a常量的定义:一个常量可以直接调用(如124,A),也可以给常量取个名字用

22、一个标识符代表它,这就是符号常量。其语法格式为:const 符号常量=常量字串;例如:const double PI=3.1415926;注意习惯上,符号常量名用大写,而变量名用小写,以便于区别。使用符号常量的好处:(1)增加了程序的可读性。(2)增加了程序的易改性。第6课 卡卡的难题例9计算(calc)(2017县赛第一题)西西同学从四年级就开始学习信息学,通过信息学的学习,她掌握了很多有关电脑的知识,慢慢成为了班级里的电脑高手。卡卡同学也很想学电脑,但是他一直有个疑问:计算机与计算器有什么区别?西西同学解释:计算机较之计算器功能更强加,通过程序设计可以很方便的实现计算器的计算功能。卡卡疑问

23、道:我们刚刚学习了四则运算,电脑能帮助计算a * ( b + c ) 吗?西西摆摆手说:太简单了。各位同学你能够通过程序设计的方式解决这个问题吗?输入:输入数据只有1行,有三个用空格分开的整数,分别表示a、b和c。输出:输出数据只有1行,为a * ( b + c ) 的结果。样例:输入:(calc.in)2 3 4输出:(calc.out)14数据范围:对于20%数据 0a,b,c1000对于40%数据 0a,b,c100000对于100%数据 0a,b,c1000000000解题:#includeusing namespace std;int main()long long a,b,c,d;

24、 /许多同学设置成int,没考虑到结果d可能超过int的范围cinabc;d=a*(b+c);coutd;return 0;数据类型定义标识符占字节数数值范围数值范围整型long int4(32位)-21474836482147483647-231231-1超长整型long long int8(64位)-92233720368547758089223372036854775807-263263-1许多同学看到109,很容易想到定义int够用了,没想到结果超过了最大可能会到1018,远远超过了int的范围。做一做计算长方形的面积,输入长和宽(范围0=长、宽=108),计算长方形的面积。(测试:输

25、入1000000 2000000输出2000000000000)第7课 匪夷所思的结果试一试输入并查看运行结果(结果0.33 0.00)#includeusing namespace std;int main()double a,b;a=1.0/3;b=1/3;printf(%.2lf%0.2lf,a,b);return 0;同样是1除3结果却不一样,奇怪!原来相同类型的变量(或数值)计算结果类型不变。试一试计算1/3,分别存入float和double变量中,保留12位小数输出这2个变量。(结果0.333333343267和0.333333333333)还是1除3,小数部分竟然不都是3,有猫腻

26、!数据类型定义标识符占字节数数值范围有效位数单精度实型float4(32位)-3.4E-383.4E+3867位双精度实型double8(64位)-1.7E+3081.7E+3081516位长双精度实型long double16(128位)-3.4E+49321.1E+49321819位试一试输入下面代码并且查看运行结果(结果1 0)#includeusing namespace std;int main()bool a,b;a=5;b=13;couta” ”b;return 0;又是一个不可理解,难道我的电脑故障了?布尔变量的赋值:非0为真,0为假;布尔变量的值真为1,假为0。数据类型定义标

27、识符占字节数数值范围布尔变量bool真true或假false之一1(8位)第8课 加密的文字例10大小字母转换。输入一个小写字母,转换成大写字母后输出。(测试:输入a输出A)解题:#includeusing namespace std;int main()char a,b;cina;b=a-32;/从字符ASCII表可以看出对应的小写比大写的值大32coutb;return 0;这里如果变化加密的方式,只有自己或者互相有约定的对象才能读懂了。字符常量有以下两种表示法: (1)普通表示形式字符常量是由单个字符组成,所有字符采用ASCII编码,ASCII编码共有128个字符。在程序中,通常用一对单

28、引号将单个字符括起来表示一个字符常量。如:a,A,0等。如字符A的序号是65,字符a的序号是97, 字符0的序号的48。序号字符序号字符序号字符序号字符序号字符序号字符32空格4806480P96112p33!49165A81Q97a113q34”50266B82R98b114r35#51367C83S99c115s36$52468D84T100d116t37%53569E85U101e117u38&54670F86V102f118v3955771G87W103g119w40(56872H88X104h120x41)57973I89Y105i121y42*58 : 74J90Z106j122z

29、43+59;75K91107k12344,6078N94110n12647/63?79O95_111o127deL(2)转义字符表示形式。转义字符有三种用法:表示控制字符、表示特殊字符、表示所有字符。常用的转义字符如右表所示。转义字符含义n换行t水平制表r回车(不换行)单引号”双引号一个反斜杠字符不设置变量b,直接couta-32;会是怎样的结果呢?输出换成cout(char)a-32;又会是怎样呢?做一做有加密就有解密,将例题中的加密后的文字进行解密。(测试:输入A输出a)做一做输入一个字符,输出它的ASCii代码。(测试:输入a输出97)阅读:数据类型转换char、short、intint

30、unsigned intlong intdoublefloat不同数据类型的运算,需要依据数据类型转换规则进行转换。混合类型转换顺序:例如:int和long long运算结果为long long;int和double运算结果为double。赋值时的类型转换规则:1)float、double型赋值给int型:直接截断小数。例如:int a;a=1.23;结果a就是1。2)int、char型赋值给float、double型:补足有效位以进行数据类型转换。例如double a;a=A;printf(“%0.2lf”,a);结果为65.00。3)char型(1字节)赋给int型(4字节):数值赋给in

31、t型的低8位,其它位补0。int a;a=A;printf(“%d”,a);结果为65。在C+语言中,还允许强制类型转换,即将某一数据的数据类型转换为指定的另一种数据类型,强制类型转换只是临时转换。强制转换运算符组成的运算表达式的一般形式为:(类型名)(表达式)例如:(double)a=17 (int) (a/b)第9课 格式化输入输出1、格式化输入函数scanfscanf(格式控制符,地址列表) scanf函数的功能是格式化输入任意数据列表,其一般调用格式为:1)地址列表中给出各变量的地址,可以为变量的地址,也可以为字符串的首地址。2)格式控制符由%和格式符组成,作用是将要输入的字符按指定的

32、格式输入,如%d,%c等scanf函数的格式符格式符说 明d,ld,lld用于输入十进制整数u以无符号十进制形式输入十进制整数o(字母o)用于输入八进制整数x用于输入十六进制整数c用于输入单个字符s用于输入字符串(非空格开始,空格结束,字符串变量以0结尾)f、lf、llf用于输入实数float/double/long double(小数或指数均可)例如:输入三个变量,第一个学生学号int类型,第二个变量语文成绩int类型,第三个变量语文成绩等次char类型。输入:1234 98 A利用语句实现:scanf(“%d %d %c”,&a,&b,&c);如果输入:学号1234语文98语文等次A就改成

33、:scanf(“学号%d语文%d语文等次%c”,&a,&b,&c);printf(格式控制符,输出列表) 2、格式化输出函数printf1)格式控制由输入格式说明和普通字符组成,必须用双引号括起来。格式说明由%和格式符组成,作用是将要输出的字符转换为指定的格式,如%d,%c等。普通字符是在输出时原样输出的字符,一般在显示时起提示作用。2)输出列表是需要输出的一组数据(可以为表达式和变量),各参数之间用“,”分开。要求格式说明和各输出项在数量和类型上要一一对应,否则将会出现意想不到的错误。格式符格式符说 明d(或i)以带符号的十进制形式输出整数,正数的(+)号省略不输出u以无符号十进制形式输出整

34、数x(或X)以十六进制无符号形式输出整数(不输出前导符0x)o(字母)以八进制无符号形式输出整数(不输出前导符数字0)c输出一个字符s输出字符串f以小数形式输出单、双精度,隐含输出6位小数e(或E)以指数形式输出单、双精度,隐含输出6位小数g(或G)自动选用%f、%e或%E格式中输出宽度较小的一种使用d格式符参 数说 明%d输出数字长为变量数值的实际长度%md输出m位(不足补空格,大于m位时按实际长度输出)%-mdm含义同上。左对齐输出%ldl(小写字母)表示输出“长整型”数据%m1d指定长整型输出宽度m位,左边补空格;否则,按实际位数输出%0md,%0m1d0(数字0)表示位数不足m时补0f

35、格式符参 数说 明%f按实数格式输出,整数部分按实际位数输出,6位小数%m.nf总位数m(含小数点),其中有n位小数%-m.nf同上,左对齐s格式符参 数说 明%s按实际宽度输出一个字符串%msm指定宽度(不足时左补空格,大于时按实际宽度输出)%-ms左对齐,不足时右补空格%m.ns输出占m个字符位置,其中字符数最多n个,左补空格%-m.ns同上,右补空格例如:输出学生学号int类型,输出语文成绩int类型,语文等次char类型。使用语句:printf(“%d %d %c”,a,b,c);或者使用:printf(“学号%d语文%d语文等次%c”,&a,&b,&c);做一做歌手大奖赛上6名评委给

36、一位参赛者打分,6个人打分的平均分为9.6分;如果去掉一个最高分,这名参赛者的平均分为9.4分;如果去掉一个最低分,这名参赛者的平均分为9.8分;去掉一个最高分和一个最低分,这名参赛者的平均是多少?(提示:使用格式化输入和输出,一个人的分数=6人的总分-5人的总分,输出:9.6)做一做分钱游戏。甲、乙、丙三人共有24元钱,先由甲分钱给乙、丙两人,所分给的数与各人已有数相同;接着由乙分给甲、丙,分法同前;再由丙分钱给甲、乙,分法亦同前。经上述三次分钱之后,每个人的钱数恰好一样多。求原先各人的钱数分别是多少?(提示:使用格式化输入和输出,方法:还原法。输出13 7 4)第三部分 是真是假做选择程序

37、由若干条语句组成,各语句按照顺序一条一条地执行。但在解决实际问题的过程中,不可避免地遇到一些非顺序的情况。这时,程序执行的顺序需要发生变化,而非从前向后逐一执行。从结构化程序设计的观点看,所有程序都可用3种控制结构即顺序结构、选择结构、和循环结构实现。选择类语句包括if语句和switch语句,用它们来解决实际应用中按不同的情况进行不同处理的问题。C+提供四种选择结构:if选择结构单分支if-else选择结构双分支if-else-if-else选择结构多分支switch选择结构多分支第1课 奇数偶数我知道例12读入一个整数a,如果a为偶数在屏幕上输出yes。#include using name

38、space std;int main() int a; cin a;if (a%2=0)/a被2除,余数是0,其实就是偶数。注意“=”表示判断是否相等,而“=”是赋值。 cout b则交换a,b的值,输出a、b的值。思考 if(1)couta;是什么意思?if(a)couta;呢?第2课 这不是考试的成绩例13考试的分数应该是0100分,其它数字不是考试成绩。输入一个数,若这个数大于等于0并且小于等于100,则输出yes。#include using namespace std;int main()int a;cin a;if (a1 & a100)/“&”与(并且),两边都是真才为真,注意不

39、能使用1a100 cout “yes”;return 0;做一做输入3个数,输出最大的数。(测试:输入2 3 5输出5)完成之后修改程序变成:输入3个数,输出最小的数。做一做租车。n位小朋友,5人租一辆车,需要租多少车。(测试1:输入5输出1;测试2:输入8输出2)第3课 这次考试我通过了例13根据用户输入的成绩,判断是否通过了考试。60分或60分以上为通过,输出yes,否则输出no。解题: #includeusing namespace std;int main()int a;cin a;/输入分数给aif(a=60)/如果,a大于或等于60cout 通过;/输出“通过”else/否则cou

40、t 没通过;/输出“不通过”return 0;if-else双分支结构语法:if (条件表达式) 语句1; else 语句2; 条件表达式语句2flasetrue语句1功能:如果(条件表达式)的值为真(非0) ,则执行语句1;如果(条件表达式)的值为假(0) ,即条件不成立,那么跳过语句1选择执行“语句2” ;也就是说ifelse语句总是根据(条件表达式)的结果,选择“语句1”和“语句2”中的一个执行,执行完以后,整个ifelse就算执行完了。做一做输入温度t的值,判断是否适合晨练。(25=tx;if (x=50)p=0.35*x;/少于50k时,全部按0.35每斤收费else if (x=1

41、00)p=0.35*50+(x-50)*0.5;/50100kg时,50kg以内部分按0.35计算,超过50kg的部分按0.5计算elsep=0.35*50+0.50*50+(x-100)*1.00;/超过100kg时,50kg以内部分按0.35计算,50100kg部分按0.5计算,超出100kg部分的按照1.00计算收费printf(“%0.2f,p”);多分支结构语法:if (表达式1) 语句1;else if (表达式2) 语句2;else if (表达式n) 语句n; else语句n+1;真假真真真假假假表达式1表达式2表达式3表达式4语句1语句2语句3语句4语句5做一做给出一个百分制

42、成绩,要求输出成绩等级A,B,C,D,E。90分以上为A,8089分为B,7079分为C,6069分为D,60分以下为E。(测试1:输入0输出E;测试2输入65输出D;测试3:输入70输出C;测试4:输入85输出B;测试5输入95输出A。)(1)先填写下图:真90真真真8070=90=80=70=60输出_输出_输出_输出_输出_真=60真真真=70=80=9060708090输出_输出_输出_输出_输出_(2)再写出程序:综合练习做一做输入年份判断是否闰年,闰年判断:能被4整除而且不能被100整除的是闰年,能被400整除的是闰年。(测试1:输入500输出no;测试2输入400输出yes;测试

43、3输入2017输出no;测试4输入2016输出yes)做一做(2017县赛第二题)逻辑(logic)卡卡很惊讶,电脑竟然能够完成如此复杂的计算:太厉害了!西西连忙补充道:电脑在程序控制之下进行数值计算仅仅是它的一个最基本功能,电脑的强大远远不止数值计算。卡卡疑问:难道电脑还能做更加复杂的操作?西西解释道:逻辑判断也是电脑一个基本功能,电脑在程序的控制下能够实现逻辑判断。比如:可以根据用户输入的不同完成不同计算过程。卡卡问道:我们刚刚接触到了图形的概念,电脑能不能根据用户的输入,计算长方形、圆形、三角形的面积。西西拍拍胸口说:一切交给我吧!请各位同学,帮助西西完成这个任务?输入:输入数据有2行,

44、第1行一个数,表示图形的类型(1表示长方形,2表示圆形、3表示三角形),第2行输入若干个整数(如果是长方形输入长和宽,如果是圆形输入半径,如果是三角形输入底边和高)。注:图形类型只有三种,不会出现其他类型图形。输出:图形的面积(三角形和圆形面积输出必须保留2位小数)样例:输入1:(logic.in)13 4输出1:(logic.out)12输入2:(logic.in)23输出2:(logic.out)28.27输入3:(logic.in)33 4输出3:(logic.out)6数据范围:0半径、长、宽、高、底边105说明:统一使用3.1415做一做(2017市赛第一题)图书捐赠(books )一年过去了,卡卡

温馨提示

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

评论

0/150

提交评论