信息学奥赛简介NOIP及C++基础知识第一讲

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

基础知识第一讲C++基础知识目录•信息学奥赛介绍•体验算法与程序设计•基础知识一.信息学奥林匹克竞赛介绍面向全国中学生的一种竞赛活动旨在激发中学生在计算机科学方面的兴趣培养他们的逻辑思维能力给那些有才华的学生提供相互交流和学习的机会通过竞赛和相关的活动培养和选拔优秀的计算机后备人才。信息学奥林匹克竞赛赛事:1.NOIP(全国信息学奥林匹克联赛)NationalOlympiadinInformaticsinProvinces2.NOI(全国信息学奥林匹克竞赛)NationalOlympiadinInformatics3.IOI(国际信息学奥林匹克竞赛)InternationalOlympiadinInformaticsNOIP联赛初赛:•10月中旬(周六/周日下午2:30-4:30)•笔试(100分)•资格赛,地市独立组织(全国统一命题,统一时间)复赛:•11月份中旬(第二周,周六周日上午3.5个小时)•上机编程•两试:每试3个题目,300分,共600分。•提交源程序,黑盒子测试法一种选拔性竞赛不是一般计算机知识的普及。兴趣能力勤奋如何学好信息学奥林匹克竞赛学习内容:掌握一门计算机程序设计语言(Pascal/C/C++)数据结构(线性表、树、图等)算法(搜索、图论、动规等)什么是算法?算法:解决某一类问题的方法和步骤。比如:渡河问题一个农夫,要过河,他有一棵白菜,一只狼和一只羊。一次船上农夫只能带一个东西。羊和白菜,狼和羊不能在一起。请你找出一种最快的过河方法?渡河的方法与步骤:第一步:农夫带过河第二步:农夫划船回来第三步:农夫带过河……猜数字(1..1000)•回答大了或小了猜生日?月?日?二分法每次舍弃“一半”不符合条件的情况,逐渐缩小范围,最后找到问题的解枚举算法基本思想:按照问题本身的性质,一一列举出该问题所有可能的解,并根据问题的条件对各解进行逐个检验,从中挑选出符合条件的解,舍弃不符合条件的解。多动手、模仿是捷径勤思考、实践是王道二.体验算法与程序设计(C++语言)引例1:最简单的程序:输出:Helloworld!【参考程序】#includecstdiointmain(){printf(Helloword!);return0;}提示:所有的代码都要在英状态输入。如何编写调试代码?(1)双击,打开c++编译器;(2)文件/新建源代码;(3)F11:保存并运行程序。友情提示:可以在桌面上建立一个以自己的名字命名的文件夹,用来保存程序。【问题分析】:正方形的面积等于边长乘以边长;【算法设计】:正方形的边长用a表示,面积用s表示。引例2:计算正方形的面积【参考程序】#includecstdiointmain(){inta,s;scanf(%d,&a);s=a*a;printf(%d,s);return0;}【问题分析】:周长等于边长的4倍。【算法设计】:正方形的边长用a表示,周长用c表示。引例2拓展:计算正方形的周长【参考程序】#includecstdiointmain(){inta,c;scanf(%d,&a);c=4*a;printf(%d,c);return0;}三、基础知识例1:从键盘输入两个正整数a,b,求出两数字之和。#includecstdiointmain(){inta,b;scanf(%d%d,&a,&b);printf(%d,a+b);return0;}提示:所有的代码都要在英状态输入。样例输入1:1820样例输入2:5000090000样例输入3:123456789987654321样例输入4:12345678901234567890例1:程序解释#includecstdio//预处理命令。//使用printf/scanf须调用cstdio库,否则编译出错intmain(){//主函数inta,b;//定义了a,b两个整型变量scanf(“%d%d”,&a,&b);//读取键盘输入,并存到变量a、bprintf(“%d”,a+b);//输出a+b的值return0;//结束整个程序,返回0,每个主程序都必有。}说明(1)以“//”开头为注释行,“//”后的内容用以对语句进行说明,不运行,无需输入。(2)上面的程序中共有4条语句,每条语句必须以分号“;”作为结束。(3)第一条语句“inta,b;”定义了2个int类型(整数型)的变量a,b,c,变量之间用逗号隔开,最后用分号结束。知识点1:格式化输入函数scanf格式:scanf(格式化字符串,地址列表);说明:1)地址列表中给出各变量的地址(即变量名的前面加“&”符号)。2)格式控制符由%和格式符组成,作用是将要输入的字符按指定的格式输入,如%d,%lf等3)格式字符和和变量的类型一一对应:类型和个数一致。知识点2:格式化输出函数printf格式:printf(格式控制字符串,变量列表);说明:(1)格式说明由%和格式字符组成,作用是将要输出的字符转换为指定的格式,如%d,%c等。(2)输出列表是需要输出的一组数据,各参数之间用“,”分开。(3)格式说明和各输出项在数量和类型上要一一对应。(4)格式字符串中可以有空格或提示信息,回车符“\n”等。输入半径r,输出圆的面积s,保留3位小数。样例输入:3样例输出:28.274提示:实型用double来定义假设:π=3.14159读取数据的代码:scanf(%lf,&r);例2:圆的面积#includecstdioconstdoublePI=3.14159;intmain(){doubler,s;//定义实型变量scanf(%lf,&r);//输入r的值,&符号不能漏掉s=PI*r*r;//计算圆的面积printf(%.2lf\n,s);//显示计算结果,结果保留2位小数return0;}【说明】:1、程序中定义的PI代表常量3.14159,在编译源程序时,遇到PI就用常量3.14159代替,PI可以和常量一样进行运算。C++语言规定,每个符号常量的定义占据一个书写行,而且符号常量不能被再赋值。如果在上例中使用以下赋值语句是错误的。PI=3.1415926;2、习惯上,符号常量名用大写,而变量名用小写,以便于区别。知识点3:常量的概念及分类常量:是指在程序中使用的一些具体的数、字符。在程序运行过程中,其值不能被更改。如123,145.88,'m',TRUE等。1、整型常量:如3、-5、0等。整型常量是表示整数的常量。有三种表示形式:1)十进制形式。如99、-1。2)八进制形式。以数字0打头,由0-7构成,如012,表示八进制整数12,即12(8)。3)十六进制形式。以0x打头,如0x12A,表示十六进制整数12A,即12A(16)。2、实型常量:如3.1、-6.1E+2(科学记数法)。3、字符常量:是用单引号括起来的字符,如'k'、'5'、'%'。注意:'a'与a表示的含义是不同的,'a'表示一个字符常量,a表示一个字符串。2、常量的说明一个常量可以直接调用(如124,'A'),也可以给常量取个名字用一个标识符代表它,这就是符号常量。其语法格式为:const符号常量=常量字串;例如:constdoublePI=3.1415926;知识点4:变量的定义格式:数据类型变量名列表例如:inta,b;//定义a,b为整型变量,doublex=5.9,y,z;//定义x,y,z为实型变量;x赋初值为5.9,y,z的初值未知。变量需要先定义后使用。变量的命名规则:一般是字母和数字的组合,如:a,i,sum,x1,x2。但不能与关键字重名。在定义变量的同时可以为变量赋初值。变量名大小写有区别例如:intS,s//定义了大S和小s两个变量例2.输入三角形的三边a,b,c。求三角形的面积s(a,b,c是实数100,满足三角形条件,结果保留3位小数)样例输入1:345样例输出1:6.000样例输入2:111样例输出2:0.433))()((cpbpapps分析:求三角形面积的海伦公式:其中p=(a+b+c)/2提示:sqrt是开方函数,如:sqrt(16)=4Sqrt函数在cmath库中,在程序头添加#includecmath1.#includecstdio2.#includecmath3.intmain(){4.doublea,b,c,p,s;5.scanf(%lf%lf%lf,&a,&b,&c);6.p=(a+b+c)/2;7.s=sqrt(p*(p-a)*(p-b)*(p-c));8.printf(%0.3lf\n,s);9.return0;10.}思考:语句5和6可以交换吗?1.#includecstdio2.#includecmath3.intmain(){4.doublea,b,c,p,s;5.scanf(%lf%lf%lf,&a,&b,&c);6.p=(a+b+c)/2;7.s=sqrt(p*(p-a)*(p-b)*(p-c));8.printf(%0.3lf\n,s);9.return0;10.}程序从第一句开始,依次顺序执行语句直到结束,中间无分支和循环,这种程序结构称为顺序结构读入边长a,b,c求p求s输出面积s流程图知识点5:赋值语句格式:变量=表达式;功能:将赋值运算符右边表达式的值赋给其左边的变量例如:p=(a+b+c)/2;下述形式:变量=(变量=表达式)是成立的,其展开之后的一般形式为:变量=变量=…=表达式;例如,“a=b=c=d=e=5;”,它实际上等价于:e=5;d=e;c=d;b=c;a=b;实现演习:1.输入长方形的边长a和b,输出长方形的面积S。样例输入:56样例输出:30方法1:1.#includecstdio2.intmain(){3.inta,b;4.scanf(%d%d,&a,&b);5.printf(%d,a*b);6.return0;7.}方法2:#includecstdiointmain(){inta,b,s;scanf(%d%d,&a,&b);s=a*b;printf(%d,s);return0;}2.输入两个整数a和b,交换a和b的值输出。样例输入:56样例输出:65方法1:1.#includecstdio2.intmain(){3.inta,b,t;4.scanf(%d%d,&a,&b);5.t=a;6.a=b;7.b=t;8.printf(%d%d,a,b);9.return0;10.}方法2:1.#includecstdio2.intmain(){3.inta,b;4.scanf(%d%d,&a,&b);5.printf(%d%d,b,a);6.return0;7.}•3:输出保留3位小数的实数输入一个实数,保留3位小数输出这个实数。•样例输入–12.34521•样例输出–12.345•#includecstdio•intmain(){•doublea;•scanf(%lf,&a);•printf(%.3lf,a);•return0;•}•3:输出保留12位小数的实数输入一个实数,保留12位小数输出这个实数。•样例输入–12.34521•样例输出–12.345•#includecstdio•intmain(){•doublea;•scanf(%lf,&a);•printf(%.3lf,a);•return0;•}4:空格分隔输出描述读入一个整数,一个实数,然后按顺序输出它们,并且要求在他们之间用一个空格分隔。输入共有二行:第一行是一个整数;第二行是一个实数;输出按顺序输出整数和实数,之间用空格分隔(输出实数时保留6位小数)。样例输入122.3样例输出122.300000•#includecstdio•intmain(){•intb;•doublea;•scanf(%d%lf,&b,&a);•printf(%d%.3lf,b,a);•return0;•}5:A*B问题•描述输入两个正整数A和B,求A*B。•输入一行,包含两个正

1 / 94
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功