信息学奥赛培训第二课

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

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

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

资源描述

第二课顺序结构第一节赋值语句•第一节赋值语句•第二节运算符和表达式•第三节常量和变量•第四节标准数据类型•第五节数据输入输出•第六节顺序结构实例赋值语句在C++语言中,“=”作为赋值运算符,而不表示“等于”判断。赋值语句是由赋值表达式再加上分号构成的表达式语句,它是程序中使用最多的语句之一。变量=表达式;在赋值语句的使用中,需要注意以下几点:1)由于赋值运算符“=”右边的表达式也可以是赋值表达式,因此,下述形式:变量=(变量=表达式);是成立的,从而形成嵌套的情形。其展开之后的一般形式为:变量=变量=…=表达式;例如,“a=b=c=d=e=5;”,它实际上等价于:e=5;d=e;c=d;b=c;a=b;2)在进行赋值运算时,如果赋值运算符两边的数据类型不同,系统将会自动进行类型转换,即将赋值运算符右边的数据类型转换成左边的变量类型。当左边是整型而右边是实型时,将去掉小数部分并截取该整型对应的有效位数。阅读下列程序,理解赋值语句。程序一#includeiostreamusingnamespacestd;intmain(){inta=5;//定义变量,并赋初值。coutaendl;//输出a的值。a=a+2;//让a值加2。coutaendl;//输出a的值。a=a+5;coutaendl;//输出a的值。return0;}阅读下列程序,理解赋值语句。程序二#includeiostreamusingnamespacestd;intmain(){inta,b;a=b=3;a+=b;coutaendl;coutbendl;return0;}例2.1输入两个正整数a和b,试交换a、b的值(使a的值等于b,b的值等于a)。【分析】交换两个变量的值方法很多,一般我们采用引入第三个变量的算法,二个变量交换,可以想像成一瓶酱油和一瓶醋进行交换,这时容易想到拿一个空瓶子过来:①将酱油倒到空瓶中;②将醋倒到酱油瓶中;③将原空瓶中的酱油倒到醋瓶中。程序如下:#includeiostream//使用cin,cout,须调用iostream库usingnamespacestd;intmain(){inta,b,c;//定义三个变量coutInputa,b=;//输入提示Inputa,b=cinab;//输入A、B的值c=a;a=b;b=c;//交换A、B的值cout“a=”a“b=”bendl;return0;//输出结果}例2.2圆柱体的表面积输入底面半径r和高h,输出圆柱体的表面积,保留3位小数,格式见样例。样例输入:3.59样例输出:274.889【分析】圆柱体的表面积由3部分组成:上底面积、下底面积和侧面积。由于上下底面积相等,完整的公式可以写成:表面积=底面积*2+侧面积。根据平面几何知识,底面积=πR2,侧面积=2πrh。#includecstdio//使用printf和scanf,须调用cstdio库#includecmath//使用数学函数atan,须调用cmath库usingnamespacestd;//在这个程序中可以省略这行intmain(){constdoublepi=3.1415926;//定义pi为常量doubler,h,s1,s2,s;//定义双精度实型,float为单精度实型scanf(%lf%lf,&r,&h);//r和h前的&符号不能漏掉,double型用%lfs1=pi*r*r;//计算底面积s2=2*pi*r*h;//计算侧面积s=2*s1+s2;//计算总的表面积printf(Area=%0.3lf\n,s);//输出结果保留3位小数,注意用lf格式return0;}例2.3数学中经典的“鸡兔同笼”问题,已知头共30个,脚共90只,问笼中的鸡和兔各有多少只?【分析】设鸡为j只,兔为t只,头为h,脚为f,那么有:j+t=30①2*j+4*t=90②假设笼中30个头全都是兔,那么都按每头4只脚计算,总脚数为(4*h),与实际脚数(f)之差为(4*h-f),如果这个差=0,则笼中全是兔(即鸡为0只);如果这个差值0,说明多计算了脚数,凡是鸡都多计算了两只脚,用它除以2就能得到鸡的只数,算法为:①j=(4*h-f)/2//先用脚数差值除以2算出鸡的只数②t=h-j//再用总头数减鸡数算出免的只数注意这两步运算的先后顺序。程序如下:#includeiostream//使用cin,cout,须调用iostream库usingnamespacestd;intmain(){inth,f,j,t;//定个变量h=30;f=90;//赋初始值j=(4*h-f)/2;//计算鸡的只数t=h-j;//计算免的只数coutj=jt=tendl;//输出结果return0;}第二节运算符和表达式C++语言中运算符和表达式数量之多,在高级语言中是少见的。正是丰富的运算符和表达式使C++语言功能十分完善。这也是C++语言的主要特点之一。运算符纵览1.算术运算符用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。2.关系运算符用于比较运算。包括大于()、小于()、等于(==)、大于等于(=)、小于等于(=)和不等于(!=)六种。3.逻辑运算符用于逻辑运算。包括与(&&)、或(||)、非(!)三种。4.位操作运算符参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移()、右移()六种。运算符纵览5.赋值运算符用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,=,=)三类共十一种。6.条件运算符这是一个三目运算符,用于条件求值(?:)。7.逗号运算符用于把若干表达式组合成一个表达式(,)。8.指针运算符用于取内容(*)和取地址(&)二种运算。9.求字节数运算符用于计算数据类型所占的字节数(sizeof)。10.特殊运算符有括号(),下标[],成员(-,.)等几种。一、算术运算符1、模运算符求余的运算符“%”也称为模运算符,是双目运算符,两个操作数都是整型数。a%b的值就是a除以b的余数,5%2余数为1。其操作对象只能是整型数,而其他四种运算符对int,float,double,char都适用。2、除法运算符C++语言的除法运算符有一些特殊之处,即如果a、b是两个整数类型的变量或常量,那么a/b的值是a除以b的商。例如,5/2的值是2,而不是2.5,而5.0/2或5/2.0的值是2.5。一、算术运算符3、自增自减运算符自增、自减运算符用来对一个操作数进行加1或减1运算,其结果仍然赋予该操作数,而且参加运算的操作数必须是变量,而不能是常量或表达式。1)自增运算符。例如,x++表示在使用x之后,使x的值加1,即x=x+1;++x表示使用x之前,先使x的值加1,即x=x+1。2)自减运算符。例如,x--表示在使用x之后,使x的值减1,即x=x-1;--x表示使用x之前,先使x的值减1,即x=x-1。4、复合算术赋值。例如,a+=1,相当于a=a+1;a+=b,相当于a=a+b。例2.4变量自加运算#includeiostreamusingnamespacestd;intmain(){intx,y,z1,z2;x=7;y=8;z1=y-(x++);z2=y-(++x);coutz1endlz2;}二、关系运算符关系运算符用于数值的大小比较。包括大于()、小于()、等于(==)、大于等于(=)、小于等于(=)和不等于(!=)六种,它们都是双目运算符。关系运算符运算的结果是整型,值只有两种:0或1,0代表关系不成立,1代表关系成立。请看下面的例子:intmain(){intn1=4,n2=5,n3;n3=n1n2;//n3=n1n2;//n3=n1==4;//n3=n1!=4;//n3=n1==1+3;//}三、逻辑运算符C++语言中提供了三种逻辑运算符:与运算(&&)、或运算(||)、非运算(!)。与运算符(&&)和或运算符(||)均为双目运算符。具有左结合性。非运算符(!)为单目运算符,具有右结合性。逻辑运算符和其它运算符优先级的关系可表示如下:按照运算符的优先顺序可以得出:ab&&cd等价于(ab)&&(cd)!b==c||da等价于((!b)==c)||(da)a+bc&&x+yb等价于((a+b)c)&&((x+y)b)逻辑运算的值也为“真”和“假”两种,用“1”和“0”来表示。三、逻辑运算符其求值规则如下:1.与运算&&参与运算的两个量都为真时,结果才为真,否则为假。例如,50&&42,由于50为真,42也为真,相与的结果也为真。2.或运算||参与运算的两个量只要有一个为真,结果就为真。两个量都为假时,结果为假。例如:50||58,由于50为真,相或的结果也就为真3.非运算!参与运算量为真时,结果为假;参与运算量为假时,结果为真。例如:!(50)的结果为假。虽然C++编译在给出逻辑运算值时,以“1”代表“真”,“0”代表“假”。但反过来在判断一个量是为“真”还是为“假”时,以“0”代表“假”,以非“0”的数值作为“真”。例如:由于5和3均为非“0”因此5&&3的值为“真”,即为1。又如:5||0的值为“真”,即为1。四、位运算符运算符含义说明例子&按位与把参与运算的两个数对应的二进制位相与,只有对应的二进制均为1时,结果的对应位才为1,否则为0。9&5中9可以写成(00001001),5可以写成(00000101),那么9&5的运算结果为00000001,输出结果是1。|按位或把参与运算的两个数对应的二进制位相或,也就是只要对应的两个二进制位有一个为1时,其结果就为1。9|5相当于00001001|00000101,运算结果是00001101,输出结果是13。^按位异或把参与运算的两个数对应的二进制位相异或,当对应的二进制位上的数据字不相同时,结果对应为1时,否则为0。1^1=0,1^0=1,0^0=0,0^1=19^5相当于00001001^00000101,运算结果是00001100,输出结果是12。~取反把运算数的各个二进制位按位求反。~9相当于~(00001001),运算结果为11110110。左移把“”左边的运算数的各二进制位向左移若干位,“”右边的数是指定移动的位数,高位丢弃,低位补0。a4指把a的各二进位向左移动4位,如a=00000011(十进制为3),左移4位后为00110000(十进制48)。右移把“”左边的运算数的各二进制位全部右移若干位,“”右边的数是指定移动的位数。设a=15,a2表示把00001111右移为00000011(十进制为3)。需要说明的是,对于有符号数,在右移时,符号位将随同移动。当操作数为正数时,最高位为0,而为负数时,最高位为1。最高位是补0或补1取决于编译系统的规定。五、运算的简写在C++语言中,有一些运算可以简写,如下表所示。算术运算符、关系运算符、逻辑运算符和赋值运算符的优先级如下:赋值运算符逻辑运算符关系运算符算术运算符低高关系运算符的结合性为:自左至右。根据以上优先级和结合性,计算出以下表达式的结果(假设a=3,b=2,c=1)ab表达式为真,所以表达式的值为1(ab)==c表达式为真,所以表达式的值为1b+ca表达式为假,所以表达式的值为0d=abab为真,所以d的值为1f=abcab为真,结果为1,1c为假,所以f的值为0简写含义简写含义a+=ba=a+ba&=ba=a&ba-=ba=a-ba|=ba=a|ba*=ba=a*ba^=ba=a^ba/=ba=a/ba=ba=aba%=ba=a%ba=ba=ab函数名格式功能说明例子绝对值函数a

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

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

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

×
保存成功