C++程序设计提纲青岛市黄岛区珠江路小学为何选择C++•NOIP指定语言之一(C/C++/pascal);•是很多语言的基础,有着广泛的代表性;•有着丰富的函数库,用途广泛;•大多数老师都接触过C/C++;为什么DEV-C++编译环境•开源,没有版权问题;•NOIP指定编译环境(仅限于目前阶段);DEV-C++基本命令简介•新建一个文件:CTRL+N•保存:CTRL+S•编译:F9•运行:F10•编译并运行:F11第一个程序#includeiostream#includecstdiousingnamespacestd;intmain(){cout“Hello,World!”;return0;}程序说明:1.通过该程序熟悉dev-c++的编译环境,以及基本命令的操作;2.通过该程序,记住C++程序的基本框架;3.前两行程序是引用C++的函数库,随着程序的复杂,引用的函数库会越来越多。4.第三行,制定使用的命名空间。这样在接下来的程序中,将不需要再考虑函数的冲突问题。5.主函数一定是int类型,且一定有return0;语句。——NOIP判分程序是运行在linux下的,如果没有return0,将认为程序没有结束。6.每个语句后面的分号很重要,一定不能漏掉,或者加错。C++语言的基本数据类型1.整数int,longlongintx;longlonga;2.浮点数float(单精度),double(双精度)floatx;doubled;3.字符型charcharc;4.布尔型boolboolf;//取值只有两种true和false,但输出是对应的是1和0C++语言的运算符1.四则运算符整数:+-*/(取商)%(取余)浮点数:+-*/2.比较运算符(关系运算符)====!=3.逻辑运算符&&||!4.自增自减运算符++--5.其它C++语言的输入输出语句1.对应iostream头文件cin”要输入的内容”;cout”要输出的内容”;2.对应cstdio头文件scanf(格式列表,变量列表);printf(格式列表,变量列表);输入输出语句说明1.cincout输入时不需要写明要输入的变量的数据类型,c++自动匹配;scanf,printf则需要详细指定要输入的数据的数据类型。2.cincout效率略低3.cincout在输出小数时显得略微复杂一些;4.可以混合使用,但程序中必须包含iostream和cstdio两个头文件。练习1:1.屏幕上输出10个*;2.屏幕上输出用*表示的字符Z;3.输入一个字符,屏幕上输出用该字符拼出的3*3的矩形;4.输入一个字符,屏幕上输出一个用该字符表示等腰三角形5.屏幕上输出用*表示的三汉字”九一八”C++语言的赋值语句1.赋值运算符=举例:x=5;y=a+b;2.复合赋值运算符+=-=*=/=%=等举例:x+=5;说明:复合赋值运算符是为了简化程序编写而引入的运算符,根据个人爱好选择用还是不用,没有强制性。练习21.输入矩形的长和宽,计算矩形的周长和面积;2.输入圆的半径,计算圆的周长和面积;3.温度转换:输入华氏温度,输出对应的摄氏温度。(转换公式:摄氏度=(华氏度-32)÷1.8)4.输入一个三位数,计算这个数各个位数上的数字和。例如,输入123,输出6;5.输入一个三位数,计算这个三位数和它的倒序生成的三位数的和。例如输入123,则有123+321=444,屏幕上输出444。结构化程序设计语言的三种结构•顺序结构:顺序结构的程序中的各执行语句是顺序执行的。这种程序最简单,最容易理解。•选择结构:执行符合相应条件的语句分支,如果都不符合条件,则跳过该语句的执行。•循环结构:满足条件的情况下,执行循环体的语句。•三种基本控制机构,原则上可以构成任何复杂的程序。选择语句之——IF语句•if语句是二路分支语句,执行的是一个非此即彼的判断。•如果只处理满足条件的数据,使用下列格式:if(条件表达式)语句;•如果两种情况都做处理,使用下列格式:if(条件表达式)语句1;else语句2;练习31.输入一个整数,输出这个数的绝对值2.输入一个整数,如果是偶数,输出1,否则输出0;3.输入两个数,输出其中较大的数;4.输入三个数,输出其中最大的数;5.你买了一箱n个苹果,很不幸的是买完时箱子里混进了一条虫子。虫子每x小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时你还有多少个完整的苹果?选择语句之——SWITCH语句•switch语句是多路分支语句•switch语句的格式是:switch(表达式){case结果1:语句1;case结果2:语句2;......default:语句n;}•SWITCH用法举例——计算器描述:输入一个算式,输出这个算是的结果。举例:输入3+5,输出8;程序参考:练习41.输入年份与月份,求该月共有多少天。2.价格查询循环语句之—FOR语句•for语句是次数循环语句,在能够确定循环次数的情况下,使用此语句将非常方便。•for语句的一般格式如下:for(初始值;条件表达式;增量)语句;•说明:1.for语句中有三个表达式,之间用分号(;)隔开。第一个是变量初始值,定义循环变量初识状态,中间表达式是条件表达式,决定循环是否执行;第三个表达式是增量,定义循环变量该如何变化。2.如果for语句后面仅有一条语句,可以省略{},否则必须用{}将for控制的语句括起来。FOR用法举例——计算1+2+3+...+100的和【分析】循环的问题,关键是找出循环体。在这个程序中,循环体是一条加法运算,即:sum=sum+i;其中sum是求和变量,i是循环变量。【程序参考】#includeiostream#includecstdiousingnamespacestd;intmain(){floati,sum=0;for(i=1;i=100;i++)sum=sum+i;coutsum;return0;}练习51.输入10个数,计算这10个数的和。2.输入10个正整数,输出这10个数中最大数和最小数的和。3.求平均年龄。班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄。4.输入一个正整数,输出这个数的所有的因子。5.输入一个6位数,输出这个数的各个位数上的数字和。输入第一行有一个整数n(1=n=100),表示学生的人数。其后n行每行有1个整数,表示每个学生的年龄,取值为15到25。输出输出一行,该行包含一个浮点数,为要求的平均年龄。循环语句之—WHILE语句•while语句是C++中另一个使用频率很高的语句。•while语句的一般格式如下:while(条件表达式)循环体;•说明:1.while语句也叫“当语句”,意思是:当条件表达式的值成立时,执行循环体的语句;2.如果开始是条件表达式的值就不成立,则循环体一次都不执行,这个跟for语句类似;3.循环体中一定要有改变循环条件的语句,否则将会成为永远循环(死循环),程序将无法正常退出。WHILE用法举例——计算各个位数上的数字和【分析】如果是3位以内的数,我们不需要循环,很容易写出来,如果明确了数的位数,我们用for循环可以解决,但当啥也不知道的时候,我们只能借助于while循环了。【程序参考】#includeiostream#includecstdiousingnamespacestd;intmain(){intx,sum=0;cinx;while(x0){sum=sum+x%10;x=x/10;}coutsum;return0;}练习61.输入一个整数,将这个数倒序输出。例如输入821,输出128。2.输入一个整数,输出这个数和它的倒序数的和,例如输入123,输出444。3.给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零,例如输入420100,输出1024。4.已知:Sn=1+1/2+1/3+…+1/n。显然对于任意一个整数K,当n足够大的时候,Sn大于K。现给出一个整数K(1=k=15),要求计算出一个最小的n;使得Sn>K。【输入】一个整数K。【输出】一个整数n。【举例】输入1,输出25.【角谷猜想】所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整数为5,计算过程分别为16、8、4、2、1。程序要求输入一个整数,将经过处理得到1的过程输出来。小结1•C++的基本语句只需要了解这些就足够了,接下来要做的就是如何熟练运用这些语句来解决问题。•这些知识对于小学生的程序设计竞赛来说,基本上已经够用,接下来要掌握的就是较为复杂的内容了。数组的引入【问题描述】输入50个学生的某门课程的成绩,打印出低于平均分的学生序号与成绩。【分析】如果是求总分,或者平均分,这个题目还是比较简单的,但这个题目要求的是找出低于平均分的学生的序号。这就要求我们除了计算平均分之外,还得拿着这个平均分跟每一个学生的成绩进行对照,才能找到想要的结果。而这个对照的操作,需要我们记住原来输入的数据。那原来的数据怎么记录呢?定义50个变量肯定不是一个好的解决方案。为了解决这类问题,C++语言引入了一个新的概念——数组。一维数组的定义【定义】当数组中每个元素只带有一个下标时,我们称这样的数组为一维数组。数组的定义格式如下:类型标识符数组名[常量表达式]说明:①数组名的命名规则与变量名的命名规则一致。②常量表达式表示数组元素的个数。可以是常量和符号常量,但不能是变量。例如:inta[10];//数组a定义是合法的intb[n];//数组b定义是非法的一维数组的引用一维数组元素的引用格式:数组名[下标]例如:inta[10];需要注意的是:a[10]不属于该数组的空间范围。说明:(1)下标可以是整型常量或整型表达式。(2)C++语言中,每个数组第一个元素的下标都是0,因此第一个元素为第0个数组元素。(3)C++语言只能逐个引用数组元素,而不能一次引用整个数组。例如:inta[100],b[100];a=b;这样的写法是非法的。(4)数组元素可以像同类型的普通变量那样使用,对其进行赋值和运算的操作,和普通变量完全相同。例如:c[10]=34;实现了给c[10]赋值为34。一维数组的初始化数组的初始化可以在定义时一并完成。格式:类型标识符数组名[常量表达式]={值1,值2,…}例如:inta[5]={1,2,3,4,5};说明:(1)可以初始化部分数据:intx[10]={0,1,2,3,4};该方法一次仅对数组的前5个元素依次进行初始化。(2)对数组元素全部初始化为0,可以简写为:{0}。例如:inta[5]={0};将数组a的5个元素都初始化为0。(3)可以直接用for循环或者while循环来赋值。例如:inta[10];for(inti=0;i10;i++)a[i]=1;一维数组示例•【问题描述】输入n个数,要求程序按输入时的逆序把这n个数打印出来,已知整数不超过100个。也就是说,按输入相反顺序打印这n个数。•【程序参考】#includecstdiointa[100],n;intmain(){scanf(%d,&n);for(inti=0;in;i++)scanf(%d,&a[i]);for(inti=n-1;i=0;i--)printf(%d,a[i]);return0;}一维数组示例•【问题描述】输入n个数,要求程序按输入时的逆序把这n个数打印出来,已知整数不超过100个。也就是说,按输入相反顺序打印这n个数。•【程序参考】#includecstdiointa[100],n;intmain(){scanf(%d,&n);for(inti=0;in;i++)scanf(%d,&a[i]);for(inti=n-1;i=0;i--)printf