版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 武平一中信息学奥林匹克竞赛校本课程 C+编程 第一课时:认识C+程序和DEV-C+集成开发环境 学习目标: 1 .认识C+程序结构; 2 .掌握编程基本步骤; 3 .记住“保存”、“编译”和“运行”的快捷键(ctrl+s、F9、F10) 二.学习内容与步骤: 1 .双击桌面 图标, 启动 DEV-C+集成开发环境,单击“文件”菜单下的“新建 源代 码”命令,在程序编辑区输入下面程序: #in clude #in clude using n amespace std; int main() couthello; system(pause); return 0; 2 .输入完毕,单击“文件”菜单
2、下的保存命令。在弹出的“保存文件”对话框中保存位置选择“桌 面”,文件名为“ ex1 ”,文件类型为c+不必修改,单击保存。 3 .单击“运行”菜单下的“编译”命令,窗口出现红色条时说明程序有错误,请对照修改,直到正 确为止。 4 .单击“运行”菜单下的“运行”命令;弹出新窗口,观察新窗口中内容,按一下键盘任意键(通 常按空格键),返回编辑界面。 5. 单击“文件”菜单“退出”命令,结束。 6. 观察桌面的ex1.cpp和ex1.exe两个文件,双击“ex1.exe ”试试,ex1.cpp称为源程序,ex1.exe 称为可执行程序,虽然这个程序简单了一点,但是电脑中的程序就是这样设计出来的。
3、7 .参考以上步骤,输入下面这个程序: #i nclude using n amespace std; int main() int a,b,c; cin ab; c=a+b; coutc; return 0; 程序运行之后,需要输入 2个整数,输完第一个数按一下空格键,输完第二个数按一下Enter (回 车键)。观察程序运行结果,说说这个程序的作用是什么? * 仝.-fx、-4? 二.参考书: 全国青少年信息学奥林匹克竞赛教程信息学奥赛一本通(C+版)第二版,(董永建舒春平等主 编,科学技术文献出版社出版),同学们可以到图书馆借阅。 第二课时:C+编程体验 一学习目标: 1 巩固C+程序结构
4、,记住“保存”、“编译”和“运行”的快捷键(ctrl+s、F9、F10); 2 了解C+数据类型(int和float); 3掌握整除和求余运算(整除 / 求余%); 4学习编写顺序结构的 C+ 程序。 二学习内容: 1 计算票价 已知每张门票价格为 50 元,输入游客人数,计算并输出票价。 #include using namespace std; int main () int n,k; cinn; k=n*50; coutkendl; return 0; 2计算梯形面积 输入梯形上底、下底和高,计算并输出梯形面积。 #include using namespace std; int mai
5、n () float a,b,h,s; cinabh; s=(a+b)*h/2; coutsendl; return 0; 3输入一个三位数,反序输出,比如输入: 789 ,输出: 987。 #include using namespace std; int main() int a,b,c,n; cinn; a=n % 10; b=(n /10)%10; c=n/100; coutabcendl; return 0; 第三课时: C + +选择语句 一学习目标: 1 学习 if 单分支和双分支结构语句; 2学习 switch 语句,; 3学习复合语句; 二学习内容: 1票价打折 已知每张门票
6、价格 50 元, 5 人以上的团体票为 45 元,输入游客人数,计算并输出票价 #include using namespace std; int main() int n,k; cinn; if (n4) k=n*45; else k=n*50; coutk; 思考:如果题目改为: 5 人以上打 9.5 折,程序是否需要修改? 2计算 2017 年各月天数 输入 2017 年的月份,计算并输出该月的天数。 #include using namespace std; int main() int month,day; cinmonth; switch(month) case 4:day=30;
7、break; case 6:day=30;break; case 9:day=30;break; case 11:day=30;break; case 2:day=28;break; default:day=31;break; coutdayendl; return 0; 思考:本题也可以用 if 语句实现,请试试。 第四课时: C+ 循环语句( 1) 一上节课思考题: 1票价打折 已知每张门票价格 50 元, 5 人以上打 9.5 折,输入游客人数,计算并输出票价。 #include using namespace std; int main() int n; float k; cinn;
8、if (n4) k=n*50*0.95; else k=n*50; coutk; return 0; 提示:因为 9.5 折是实数,所以金额的变量类型应修改为 float 。 2计算 2017 年各月天数 输入 2017 年的月份,计算并输出该月的天数( if 语句实现)。 #include using namespace std; int main() int month,day; cinmonth; day=31; /先把天数统一设置为 31 天 if (month=2)/如果是 2 月份,把 day 变量修改为 28 天 day=28; if (month=4)|(month=6)|(m
9、onth=9)|(month=11) / 如果是 4 月或 6 或 9 或 11 月, day=30; / 把 day 变量修改为 30 天 coutdayendl; return 0; 提示: |是逻辑运算符,“或”的意思。 二、循环语句 1 导游购票 1 已知每张门票价格 50元,5人以上打 9.5 折。售票处有 10 个导游在排队,因为每个旅游团人 数一般都不相同,所以每个导游希望购买的门票张数也不一定相同。 现在要求你编写一个程序,输入 10 个导游需要的门票张数,计算并输出各自的总价。 解题重点: 本题和原题的最主要区别是“ 10 个导游在买票”,本质上就是把原来的那个程序运行 10
10、 遍。 相同的事情重复多遍,这在计算机领域叫“循环” 。本题明确规定 10 遍,属于“已知次数的循 环”。要用 for 语句。 参考程序: #include using namespace std; int main() int n; float k; for (int i=1;in; if (n4) k=n*50*0.95; else k=n*50; coutkendl; return 0; 2 导游购票 2 已知每张门票价格 50 元, 5 人以上打 9.5 折。售票处有多个导游在排队,因为每个旅游团人数 一般都不相同,所以每个导游希望购买的门票张数也不一定相同。 现在要求你编写一个程序,
11、输入每一个导游需要的门票张数,计算并输出各自的总价。当输入 的门票张数为 0 时,程序结束。 已知导游人数不超过 100 ,每个导游购买的门票不超过 1000 张。 解题重点: 本题和上一题的最主要区别是 “导游人数不确定” ,也就是重复执行的次数不确定了。 这属于“未 知次数的循环”。要用 while 语句。 参考程序: #include using namespace std; int main() int n; float k; cinn; while (n!=0)/当输入的门票张数不等于 0 的时候,就计算。 if (n4) k=n*50*0.95; else k=n*50; cout
12、kn; return 0; 思考:今天的两道“循环”练习题,都是输入一张数,输出一个票价。再输入一个张数,又输出一 个票价。如果题目要求“连续输入全部导游需要的门票张数,再连续输出相应的总票价”该如何实 现? 第五课时: C+ 循环语句( 2) 学习要点: 1 复习自增自减运算符,i+与+i的区别; 2For 循环、循环嵌套; 练习题: 1. 计算1+2+3+100的和; 参考程序: #include using namespace std; int main() int s=0; for (int i=1;i=100;+i) s=s+i; coutsendl; return 0; 2. 计算
13、1*2*3*20的积; 参考程序: #include using namespace std; int main() int long long s=1; for (int i=1;i=20;+i) s=s*i; coutsendl; return 0; 3. 计算1! +2 ! +3 ! +20 !的和; 参考程序: #include using namespace std; int main() int long long s=0; for (int i=1;i=20;+i) int m=1; for (int j=1;j=i;+j) m=m*j; s=s+m; coutsendl; re
14、turn 0; 思考题: 1 .对n!和的改进; 2 输出水仙花数; 第 6 课时 数组 一.学习目标: 1 .掌握“数组”这一数据类型的使用场合; 2. 掌握“数组”的定义、应用; 3. 学习排序算法。 二.学习内容: 1 .输入一个正整数n (不超过100),再输入n个整数,按相反的顺序将n个整数输出。 分析与探索: 输入 n 个整数,需要等到全部输入完毕,才可以从最后一个开始逆序输出,所以这 n 个整数需 要事先保存起来,这 n 个数的类型相同,彼此之间有一定的关系,所以用一种新的数据类型 数组来定义: Int a101 就定义了一个有 100 个元素的整型数组。 参考程序: #incl
15、ude using namespace std; int a101,n; int main() cinn; for (int i=0;iai; for (int i=n-1;i=0;-i) coutai ; return 0; 2 输入一个正整数n (不超过100),再输入n个整数,按从小到大的顺序将n个整数输出。 #include using namespace std; int a101,n; int main() freopen(sort.in,r,stdin); freopen(sort.out,w,stdout); cinn; for (int i=1;iai; for (int i
16、=1;in;+i) for (int j=i+1;jaj) int k=ai;ai=aj;aj=k; for (int i=1;i=n;+i) coutai0,m0) 这两道题需要反复计算某一个数的阶乘,假如存在类似sin(x)这样的函数js(x),那么问题就轻松 解决了,但C+的标准函数库中并没有这样的js(x)函数,需要我们自己定义。 函数需要先声明、定义,才可以调用,下面是第 1 题作业的参考程序: #inClude using namespaCe std; int js(int);/声明函数 int main() Coutjs(5)+js(7)+js(9)+js(11)endl;/调用
17、函数 return 0; int js(int x)/定义函数 int s=1; for(int i=1;i=x;+i) s=s*i; return s; 声明函数与定义函数的区别是:声明时括号内可以只写参数类型,不写具体名称,语句末尾带 一个“;”号。 第8课时C+文件操作 到目前为止,我们写的程序都是从键盘输入数据,程序运行之后的结果也都是从显示器显示, 在竞赛中,程序的输入、输出都需要使用文件。 使用 freopen 重定向输入、输出流。格式如下: freopen(sum.in,r,stdin);/以只读方式打开 sum.in 文件 freopen(sum.out,w,stdout);/
18、以写入方式打开 sum.out 文件 这样,程序就从 sum.in 文件中读取输入数据,运行结果也保存到输出文件 sum.out 中 第1题:计算a+b (文件名sum) 输入输出样例: sum.in 25 30 sum.out 55 数据规模:a和b均不超过230 参考程序: #inClude using namespaCe std; int main () int a,b; freopen(sum.in,r,stdin); freopen(sum.out,w,stdout); Cinab; couta+b; fclose(stdi n); fclose(stdout); return 0;
19、 第2题:输入n个数,从大到小排序(文件名sort) 输入输出样例: sort.in 8 58 56 12 25 10 50 6 45 sort.out 58 56 50 45 25 12 10 6 数据规模:n不超过100000 参考程序: #in clude #i nclude using n amespace std; int a100000, n; int comp(c onst int int mai n () freope n( sort.i n,r,stdi n); freope n( sort.out,w,stdout); cinn; for (i nt i=0;i ai; s
20、ort(a,a+n, comp); for (i nt i=0;i n;+i) coutai; fclose(stdi n); fclose(stdout); return 0; NOIP2016全国信息学分区联赛提高组第一试玩具迷题(toy) 【问题描述】 小南有一套可爱的玩具小人,它们各有不同的职业。 有一天,这些玩具小人把小南的眼镜藏了起来。小南发现玩具小人们围成了一个圈,它们有 的面朝圈内,有的面朝圈外。如下图: 这时sin ger告诉小南一个谜题:“眼镜藏在我左数第3个玩具小人的右数第1个玩具小 人的左数第2个玩具小人那里。” 小南发现,这个谜题中玩具小人的朝向非常关键, 因为朝内和
21、朝外的玩具小人的左右方向是相 反的:面朝圈内的玩具小人,它的左边是顺时针方向,右边是逆时针方向;而面向圈外的玩具小人, 它的左边是逆时针方向,右边是顺时针方向。 小南一边艰难地辨认着玩具小人,一边数着: sin ger朝内,左数第 3个是archer。 archer朝外,右数第 1个是thinker 。 thinker朝外,左数第2个是writer。“所以眼镜藏在writer这里! ”虽然成功找回了眼 镜,但小南并没有放心。如果下次有更多的玩具小人藏他的眼镜,或是谜题的长度更长,他可能就 无法找到眼镜了。所以小南希望你写程序帮他解决类似的谜题。这样的谜题具体可以描述为: 有n 个玩具小人围成一圈,已知它们的职业和朝向。现在第1个玩具小人告诉小南一个包含 m条指 令的谜题,其中第i条指令形如“左数/右数第Si个玩具小人”。你需要输出依次数完这些指令后, 到达的玩具小人的职业。 【输
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 杭州房屋托管合同模板
- 证券合作投资合同模板
- 小学日常维修合同模板
- 豪华饭店转让合同模板
- 文字性编辑劳务合同模板
- 私人打井合同模板
- 防火门订货合同模板
- 工厂临时维修合同模板
- 置物架组装购买合同模板
- 2024年金融借款协议及保证担保条款示例版
- 2022年医学专题-第01篇3-药代学
- 《画出你的想象》教学课件
- 2022年劳模工作室创新工作室建设方案
- 水浒Q传乡试试题答案
- 四年级上册英语课件-Unit4 How's the weather today?Lesson20 |人教精通版 (共16张PPT)
- 宝钢QBQB4202014热镀锌锌铁合金镀层钢板及钢带
- 装配作业指导书
- 六三制新青岛版四年级科学上册第五单元《位置与速度》全部课件(一共3课时)
- DB52∕T 1533-2020 非洲狗尾草种子生产技术规程
- 沪教牛津版五年级英语上册全册单元测试卷(含听力材料及答案)
- 实用仓库管理制度物资储存保管制度运输作业管理制度
评论
0/150
提交评论