版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武平一中信息学奥林匹克竞赛校本课程C+编程第一课时:认识C+程序和DEV-C+集成开发环境一学习目标:1认识C+程序结构;2掌握编程基本步骤;3记住“保存”、“编译”和“运行”的快捷键(ctrl+s、F9、F10)二学习内容与步骤:1双击桌面图标,启动DEV-C+集成开发环境,单击“文件”菜单下的“新建>源代码”命令,在程序编辑区输入下面程序:#include<iostream>#include<cstdlib>using namespace std;int main()cout<<"hello"system("pause
2、");return 0;2输入完毕,单击“文件”菜单下的保存命令。在弹出的“保存文件”对话框中保存位置选择“桌面”,文件名为“ex1”,文件类型为c+不必修改,单击保存。3单击“运行”菜单下的“编译”命令,窗口出现红色条时说明程序有错误,请对照修改,直到正确为止。4单击“运行”菜单下的“运行”命令;弹出新窗口,观察新窗口中内容,按一下键盘任意键(通常按空格键),返回编辑界面。5单击“文件”菜单“退出”命令,结束。6观察桌面的ex1.cpp和 ex1.exe两个文件,双击“ex1.exe”试试,ex1.cpp称为源程序,ex1.exe称为可执行程序,虽然这个程序简单了一点,但是电脑中的
3、程序就是这样设计出来的。7参考以上步骤,输入下面这个程序:#include <iostream>using namespace std;int main()int a,b,c;cin>>a>>b;c=a+b;cout<<c;return 0;程序运行之后,需要输入2个整数,输完第一个数按一下空格键,输完第二个数按一下Enter(回车键)。观察程序运行结果,说说这个程序的作用是什么?三参考书:全国青少年信息学奥林匹克竞赛教程 信息学奥赛一本通(C+版) 第二版,(董永建 舒春平等主编,科学技术文献出版社出版),同学们可以到图书馆借阅。第二课时:C+
4、编程体验一学习目标:1巩固C+程序结构,记住“保存”、“编译”和“运行”的快捷键(ctrl+s、F9、F10);2了解C+数据类型(int和float);3掌握整除和求余运算(整除/ 求余%);4学习编写顺序结构的C+程序。二学习内容:1计算票价已知每张门票价格为50元,输入游客人数,计算并输出票价。#include<iostream>using namespace std;int main ()int n,k;cin>>n;k=n*50;cout<<k<<endl;return 0;2计算梯形面积输入梯形上底、下底和高,计算并输出梯形面积。#i
5、nclude <iostream>using namespace std;int main ()float a,b,h,s;cin>>a>>b>>h;s=(a+b)*h/2;cout<<s<<endl;return 0;3输入一个三位数,反序输出,比如输入:789,输出:987。#include <iostream>using namespace std;int main()int a,b,c,n;cin>>n;a=n % 10;b=(n /10)%10;c=n/100;cout<<a&
6、lt;<b<<c<<endl;return 0;第三课时:C+选择语句一学习目标:1学习if单分支和双分支结构语句;2学习switch语句,;3学习复合语句;二学习内容:1票价打折已知每张门票价格50元,5人以上的团体票为45元,输入游客人数,计算并输出票价。#include<iostream>using namespace std;int main()int n,k;cin>>n;if (n>4)k=n*45;elsek=n*50; cout<<k;思考:如果题目改为:5人以上打9.5折,程序是否需要修改?2计算2017
7、年各月天数输入2017年的月份,计算并输出该月的天数。#include<iostream>using namespace std;int main()int month,day;cin>>month;switch(month)case 4:day=30;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;cout<<day<<endl;return 0;思考:本题也可以用if语句实现,
8、请试试。第四课时:C+循环语句(1)一上节课思考题:1票价打折已知每张门票价格50元,5人以上打9.5折,输入游客人数,计算并输出票价。#include<iostream>using namespace std;int main()int n;float k;cin>>n;if (n>4)k=n*50*0.95;elsek=n*50; cout<<k; return 0;提示:因为9.5折是实数,所以金额的变量类型应修改为float。2计算2017年各月天数输入2017年的月份,计算并输出该月的天数(if语句实现)。#include<iostre
9、am>using namespace std;int main()int month,day;cin>>month;day=31; /先把天数统一设置为31天 if (month=2) /如果是2月份,把day变量修改为28天 day=28;if (month=4)|(month=6)|(month=9)|(month=11) /如果是4月或6或9或11月,day=30; /把day变量修改为30天 cout<<day<<endl;return 0;提示:|是逻辑运算符,“或”的意思。二、循环语句1导游购票1已知每张门票价格50元,5人以上打9.5折。
10、售票处有10个导游在排队,因为每个旅游团人数一般都不相同,所以每个导游希望购买的门票张数也不一定相同。现在要求你编写一个程序,输入10个导游需要的门票张数,计算并输出各自的总价。解题重点:本题和原题的最主要区别是“10个导游在买票”,本质上就是把原来的那个程序运行10遍。相同的事情重复多遍,这在计算机领域叫“循环”。本题明确规定10遍,属于“已知次数的循环”。要用for语句。参考程序:#include<iostream>using namespace std;int main()int n;float k;for (int i=1;i<=10;i+)cin>>n;
11、if (n>4)k=n*50*0.95;elsek=n*50; cout<<k<<endl; return 0;2导游购票2已知每张门票价格50元,5人以上打9.5折。售票处有多个导游在排队,因为每个旅游团人数一般都不相同,所以每个导游希望购买的门票张数也不一定相同。现在要求你编写一个程序,输入每一个导游需要的门票张数,计算并输出各自的总价。当输入的门票张数为0时,程序结束。已知导游人数不超过100,每个导游购买的门票不超过1000张。解题重点:本题和上一题的最主要区别是“导游人数不确定”,也就是重复执行的次数不确定了。这属于“未知次数的循环”。要用while语句
12、。参考程序:#include<iostream>using namespace std;int main()int n;float k;cin>>n;while (n!=0) /当输入的门票张数不等于0的时候,就计算。 if (n>4)k=n*50*0.95; elsek=n*50;cout<<k<<endl;cin>>n; return 0;思考:今天的两道“循环”练习题,都是输入一张数,输出一个票价。再输入一个张数,又输出一个票价。如果题目要求“连续输入全部导游需要的门票张数,再连续输出相应的总票价”该如何实现?第五课时:C
13、+循环语句(2)学习要点:1复习自增自减运算符,i+与+i的区别;2For 循环、循环嵌套;练习题:1.计算1+2+3+100的和;参考程序:#include<iostream>using namespace std;int main()int s=0;for (int i=1;i<=100;+i) s=s+i;cout<<s<<endl;return 0;2.计算1*2*3*20的积;参考程序:#include<iostream>using namespace std;int main()int long long s=1;for (in
14、t i=1;i<=20;+i) s=s*i;cout<<s<<endl;return 0;3.计算1!+2!+3!+20!的和;参考程序:#include<iostream>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;cout<<s<<endl;return 0;思考题:1 对n!和的改进;2 输出水仙花数;第6课时 数组一学习目标:
15、1掌握“数组”这一数据类型的使用场合;2掌握“数组”的定义、应用;3学习排序算法。二学习内容:1输入一个正整数n(不超过100),再输入n个整数,按相反的顺序将n个整数输出。分析与探索:输入n个整数,需要等到全部输入完毕,才可以从最后一个开始逆序输出,所以这n个整数需要事先保存起来,这n个数的类型相同,彼此之间有一定的关系,所以用一种新的数据类型数组来定义:Int a101就定义了一个有100个元素的整型数组。参考程序:#include<iostream>using namespace std;int a101,n;int main() cin>>n; for (int
16、 i=0;i<n;+i) cin>>ai; for (int i=n-1;i>=0;-i) cout<<ai<<' ' return 0;2输入一个正整数n(不超过100),再输入n个整数,按从小到大的顺序将n个整数输出。#include<iostream>using namespace std;int a101,n;int main() freopen("sort.in","r",stdin); freopen("sort.out","w"
17、;,stdout); cin>>n; for (int i=1;i<=n;+i) cin>>ai; for (int i=1;i<n;+i) for (int j=i+1;j<=n;+j) if (ai>aj) int k=ai;ai=aj;aj=k; for (int i=1;i<=n;+i) cout<<ai<<" " return 0;3作业p70例5.4约瑟夫问题4作业p76例5.8矩阵的行列交换第7课时 函数一学习目标:1掌握函数的声明、定义、调用;2掌握函数参数类型和作用范围;3学习递
18、归算法。二学习内容:先看p107两题作业:1编程求5!+7!+9!+11!的值。2编程求c(n,m)=n!/(m!*(n-m)!) (n>0,m>0)这两道题需要反复计算某一个数的阶乘,假如存在类似sin(x)这样的函数js(x),那么问题就轻松解决了,但c+的标准函数库中并没有这样的js(x)函数,需要我们自己定义。函数需要先声明、定义,才可以调用,下面是第1题作业的参考程序:#include<iostream>using namespace std;int js(int); /声明函数int main() cout<<js(5)+js(7)+js(9)+
19、js(11)<<endl; /调用函数 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);
20、/以只读方式打开sum.in文件freopen("sum.out","w",stdout); /以写入方式打开sum.out文件这样,程序就从sum.in文件中读取输入数据,运行结果也保存到输出文件sum.out中。第1题:计算a+b(文件名sum)输入输出样例:sum.in 25 30sum.out55数据规模:a和b均不超过230参考程序:#include<iostream>using namespace std;int main ()int a,b;freopen("sum.in","r",std
21、in);freopen("sum.out","w",stdout);cin>>a>>b;cout<<a+b;fclose(stdin);fclose(stdout);return 0;第2题:输入n个数,从大到小排序(文件名sort)输入输出样例:sort.in858 56 12 25 10 50 6 45sort.out58 56 50 45 25 12 10 6数据规模:n不超过100000参考程序:#include<iostream>#include<algorithm>using nam
22、espace std;int a100000,n;int comp(const int &a,const int &b) return a>b; int main ()freopen("sort.in","r",stdin);freopen("sort.out","w",stdout);cin>>n;for (int i=0;i<n;+i) cin>>ai;sort(a,a+n,comp);for (int i=0;i<n;+i) cout<<a
23、i<<" "fclose(stdin);fclose(stdout);return 0;NOIP2016全国信息学分区联赛提高组第一试 玩具迷题(toy)【问题描述】小南有一套可爱的玩具小人,它们各有不同的职业。 有一天,这些玩具小人把小南的眼镜藏了起来。小南发现玩具小人们围成了一个 圈,它们有的面朝圈内,有的面朝圈外。如下图: 这时singer 告诉小南一个谜题:“眼镜藏在我左数第 3 个玩具小人的右数第 1 个玩 具小人的左数第 2 个玩具小人那里。”小南发现,这个谜题中玩具小人的朝向非常关键,因为朝内和朝外的玩具小人的左右方向是相反的:
24、面朝圈内的玩具小人,它的左边是顺时针方向,右边是逆时针方向;而面向圈外的玩具小人,它的左边是逆时针方向,右边是顺时针方向。 小南一边艰难地辨认着玩具小人,一边数着: singer 朝内,左数第 3 个是archer。 archer 朝外,右数第 1 个是thinker。 thinker 朝外,左数第 2 个是writer。 “所以眼镜藏在writer 这里!”虽然成功找回了眼镜,但小南并没有放心。如果下次有更多的玩具小人藏他的眼镜,或是谜题的长度更长,他可能就无法找到眼镜了。所以小南希望你写程序帮他解决类似的谜题。这样的谜题具体可以描述为: 有
25、 n 个玩具小人围成一圈,已知它们的职业和朝向。现在第 1 个玩具小人告诉小南一个包含 m 条指令的谜题,其中第 i 条指令形如“左数/右数第 si 个玩具小人”。你需要输出依次数完这些指令后,到达的玩具小人的职业。【输入格式】从文件toy.in 中读入数据。 输入的第一行包含两个正整数 n, m ,表示玩具小人的个数和指令的条数。 接下来 n 行,每行包含一个整数和一个字符串,以逆时针为顺序给出每个玩具小人的朝向和职业。其中 0 表示朝向圈内, 1 表示朝向圈外。保证不会出现其他的数。字符串长度不超过 10 且仅由小写字母构成,字符串不为空,并且字符串两两不同。整数和字符串之间用一个空格隔开。 接下来 m 行,其中第 i 行包含两个整数 ai, si ,表示第 i 条指令。若 ai = 0 ,表示向 左数 si 个人;若
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 探索白菜薹杂种优势:从理论到实践的深度剖析
- 2026年房地产买卖居间合同协议
- 2026年甘肃省金昌市医疗卫生系统第一批引进高层次和急需紧缺人才12人考试备考题库及答案解析
- 英语口语提高训练教学设计
- 2026浙江事业单位统考普陀区面向大学毕业生退役士兵招聘2人笔试模拟试题及答案解析
- 工业电动调节阀故障排查指南
- 办公软件自动化操作技巧汇编
- 幼儿园午托班日常管理细则
- 2026福建龙岩漳平市事业单位紧缺急需人才引进8人考试备考题库及答案解析
- 经典文学作品教学设计模板
- 2026广东深圳市优才人力资源有限公司公开招聘聘员(派遣至龙城街道)18人备考题库附答案详解(典型题)
- 2024-2025学年度哈尔滨传媒职业学院单招考试文化素质数学通关题库完美版附答案详解
- 第8章《力》单元测试卷(提升卷)(原卷版+解析)
- 克服压力(认知行为自助手册)
- 2024年02月苏州工业园区房地产交易管理中心2024年招考4名辅助人员笔试近6年高频考题难、易错点荟萃答案带详解附后
- 北京市部分地区2024届高三语文期初检测试卷汇编:文学类文本阅读()
- 中医护理操作并发症预防及处理
- 《大学生职业生涯规划与就业指导》(李新伟) 项目5
- 甲基丙二酸血症课件
- 工程测量 控制点交桩记录表
- GB/Z 41083-2021下肢矫形器的分类及通用技术条件
评论
0/150
提交评论