您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 信息学奥赛简介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。•输入一行,包含两个正
本文标题:信息学奥赛简介NOIP及C++基础知识第一讲
链接地址:https://www.777doc.com/doc-2756317 .html