资源描述
信息学奥赛培训第二课第二课 顺序结构信息学奥赛培训第二课2第一节赋值语句 第一节赋值语句 第二节运算符和表达式 第三节常量和变量 第四节标准数据类型 第五节 数据输入输出 第六节顺序结构实例信息学奥赛培训第二课3赋值语句 在C+语言中,“=”作为赋值运算符,而不表示“等于”判断。赋值语句是由赋值表达式再加上分号构成的表达式语句,它是程序中使用最多的语句之一。 变量=表达式;在赋值语句的使用中,需要注意以下几点:1)由于赋值运算符“=”右边的表达式也可以是赋值表达式,因此,下述形式 : 变量=(变量=表达式);是成立的,从而形成嵌套的情形。其展开之后的一般形式为:变量=变量=表达式;例如,“a=b=c=d=e=5;”,它实际上等价于:e=5;d=e;c=d;b=c;a=b; 2)在进行赋值运算时,如果赋值运算符两边的数据类型不同,系统将会自动进行类型转换,即将赋值运算符右边的数据类型转换成左边的变量类型。当左边是整型而右边是实型时,将去掉小数部分并截取该整型对应的有效位数。信息学奥赛培训第二课4阅读下列程序,理解赋值语句。程序一#includeusing namespace std;int main() int a=5; /定义变量,并赋初值。 coutaendl; /输出a的值。 a=a+2; /让a值加2。 coutaendl; /输出a的值。 a=a+5; coutaendl; /输出a的值。return 0;信息学奥赛培训第二课5阅读下列程序,理解赋值语句。程序二#includeusing namespace std;int main()int a,b;a=b=3;a+=b;coutaendl;coutbendl;return 0;信息学奥赛培训第二课6例例2.1输入两个正整数a和b,试交换a、b的值(使a的值等于b,b的值等于a)。【分析】 交换两个变量的值方法很多,一般我们采用引入第三个变量的算法,二个变量交换,可以想像成一瓶酱油和一瓶醋进行交换,这时容易想到拿一个空瓶子过来: 将酱油倒到空瓶中; 将醋倒到酱油瓶中; 将原空瓶中的酱油倒到醋瓶中。信息学奥赛培训第二课7程序如下:#include /使用cin,cout,须调用iostream库using namespace std;int main() int a,b,c; /定义三个变量 coutab; /输入A、B的值 c=a; a=b; b=c; /交换A、B的值 cout“a=”a“ b=”bendl; return 0; /输出结果信息学奥赛培训第二课8例2.2 圆柱体的表面积 输入底面半径输入底面半径r和高和高h,输出圆柱体的表面积,保,输出圆柱体的表面积,保留留3位小数,格式见样例。位小数,格式见样例。样例输入:3.5 9 样例输出:274.889【分析】 圆柱体的表面积由3部分组成:上底面积、下底面积和侧面积。由于上下底面积相等,完整的公式可以写成:表面积=底面积*2+侧面积。根据平面几何知识,底面积=R2,侧面积=2rh。信息学奥赛培训第二课9#include /使用printf和scanf, 须调用cstdio库#include /使用数学函数atan,须调用cmath库using namespace std; /在这个程序中可以省略这行int main() const double pi=3.1415926; /定义pi为常量 double r,h,s1,s2,s; /定义双精度实型,float为单精度实型 scanf(%lf%lf,&r,&h); /r和h前的&符号不能漏掉,double型用%lf s1=pi*r*r; /计算底面积 s2=2*pi*r*h; /计算侧面积 s=2*s1+s2; /计算总的表面积 printf(Area=%0.3lfn,s); /输出结果保留3位小数,注意用lf格式 return 0;信息学奥赛培训第二课10例2.3 数学中经典的数学中经典的“鸡兔同笼鸡兔同笼”问题,已知头共问题,已知头共30个,脚共个,脚共90只,问笼中只,问笼中的鸡和兔各有多少只的鸡和兔各有多少只?【分析】 设鸡为j只,兔为t只,头为h,脚为f,那么有: j+t=302*j+4*t=90假设笼中30 个头全都是兔,那么都按每头只脚计算,总脚数为(4*h),与实际脚数(f )之差为(4*h-f),如果这个差=0,则笼中全是兔(即鸡为0只);如果这个差值 0,说明多计算了脚数,凡是鸡都多计算了两只脚,用它除以2就能得到鸡的只数,算法为: j=(4*h - f)/2 /先用脚数差值除以2算出鸡的只数 t=h - j /再用总头数减鸡数算出免的只数信息学奥赛培训第二课11注意这两步运算的先后顺序。程序如下:#include /使用cin,cout,须调用iostream库using namespace std;int main() int h,f,j,t; /定个变量 h=30;f=90; /赋初始值 j=(4*h-f)/2; /计算鸡的只数 t=h-j; /计算免的只数 coutj=j t=t)、小于(=)、小于等于(=)和不等于(!=)六种。3.逻辑运算符 用于逻辑运算。包括与(&)、或(|)、非(!)三种。4.位操作运算符 参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非()、位异或()、左移()六种。信息学奥赛培训第二课14 运算符纵览5.赋值运算符用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,=,=,,.)等几种。信息学奥赛培训第二课15一、算术运算符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。信息学奥赛培训第二课16一、算术运算符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。信息学奥赛培训第二课17例2.4 变量自加运算#includeusing namespace std;int main() int x,y,z1,z2; x=7; y=8; z1=y-(x+); z2=y-(+x); coutz1endl)、小于(=)、小于等于(n2; / n3=n1b & cd等价于(ab) & (cd) !b=c|da等价于(!b)=c)|(dc & x+yc) & (x+y)0 & 42,由于50为真,42也为真,相与的结果也为真。2.或运算|参与运算的两个量只要有一个为真,结果就为真。 两个量都为假时,结果为假。例如:50|58,由于50为真,相或的结果也就为真3.非运算!参与运算量为真时,结果为假;参与运算量为假时,结果为真。例如:!(50)的结果为假。虽然C+编译在给出逻辑运算值时,以“1”代表“真”,“0 ”代表“假”。 但反过来在判断一个量是为“真”还是为“假”时,以“0”代表“假”,以非“0”的数值作为“真”。例如:由于5和3均为非“0”因此5&3的值为“真”,即为1。又如:5|0的值为“真”,即为1。信息学奥赛培训第二课21四、位运算符运算符运算符含含 义义说明说明例子例子& &按位与按位与把参与运算的两个数对应的二进把参与运算的两个数对应的二进制位相与,只有对应的二进制均制位相与,只有对应的二进制均为为1 1时,结果的对应位才为时,结果的对应位才为1 1,否,否则为则为0 0。9&59&5中中9 9可以写成可以写成(00001001),5(00001001),5可以可以写成写成(00000101)(00000101),那么,那么9&59&5的运算的运算结果为结果为0000 00010000 0001,输出结果是,输出结果是1 1。| |按位或按位或把参与运算的两个数对应的二进把参与运算的两个数对应的二进制位相或,也就是只要对应的两制位相或,也就是只要对应的两个二进制位有一个为个二进制位有一个为1 1时,其结果时,其结果就为就为1 1。9|59|5相当于相当于00001001|0000010100001001|00000101,运,运算结果是,输出结果是算结果是,输出结果是1313。 按位异或按位异或把参与运算的两个数对应的二进把参与运算的两个数对应的二进制位相异或,当对应的二进制位制位相异或,当对应的二进制位上的数据字不相同时,结果对应上的数据字不相同时,结果对应为为1 1时,否则为时,否则为0 0。11=011=0,10=110=1,00=000=0,01=101=19595相当于相当于00001001000001010000100100000101,运,运算结果是,输出结果是算结果是,输出结果是1212。取反取反把运算数的各个二进制位按位求把运算数的各个二进制位按位求反。反。9 9相当于相当于(0000 1001)(0000 1001),运算结,运算结果为果为1111 01101111 0110。左移左移把把“”左边的运算数的各二进制左边的运算数的各二进制位向左移若干位,位向左移若干位,“”右边的数右边的数是指定移动的位数,高位丢弃,是指定移动的位数,高位丢弃,低位补低位补0 0。a4a右移右移把把“”左边的运算数的各二进制左边的运算数的各二进制位全部右移若干位,位全部右移若干位,“”右边的右边的数是指定移动的位数。数是指定移动的位数。设设a=15a=15,a2a2表示把右移为表示把右移为0000 0000 0011(0011(十进制为十进制为3)3)。信息学奥赛培训第二课22 需要说明的是,对于有符号数,在右移时,符号位将随同移动。当操作数为正数时,最高位为0,而为负数时,最高位为1。最高位是补0或补1取决于编译系统的规定。信息学奥赛培训第二课23五、运算的简写在C+语言中,有一些运算可以简写,如下表所示。算术运算符、关系运算符、逻辑运算符和赋值运算符的优先级如下:赋值运算符 逻辑运算符 关系运算符 算术运算符 低 高关系运算符的结合性为:自左至右。根据以上优先级和结合性,计算出以下表达式的结果(假设a=3,b=2,c=1) ab 表达式为真,所以表达式的值为1 (ab)=c 表达式为真,所以表达式的值为1 b+cb ab为真,所以d的值为1 f=abc ab为真,结果为1,1c为假,所以f的值为0简简 写写含含 义义简简 写写含含 义义a+=ba+=ba=a+ba=a+ba&=ba&=ba=a&ba=a&ba-=ba-=ba=a-ba=a-ba|=ba|=ba=a|ba=a|ba a* *=b=ba=aa=a* *b ba=ba=ba=aba=aba/=ba/=ba=a/ba=a/ba=ba=ba=aba=a=ba=ba=aba=ab信息学奥赛培训第二课24 函数名函数名格式格式功能说明功能说明例子例子绝对值函数绝对值函数abs(x)abs(x)求一个数求一个数x x的绝对值的绝对值abs(-5)=5abs(-5)=5自然数指数函数自然数指数函数exp(x)exp(x)求实数求实数x x的自然指数的自然指数e ex xexp(1)=2.718282exp(1)=2.718282向下取整向下取整floor(x)floor(x) 求不大于实数求不大于实数x x的最大整数的最大整数floor(3.14)=3floor(3.14)=3向上取整向上取整ceil(x)ceil(x)求不小于实数求不小于实数x x的最小整数的最小整数ceil(3.14)=4ceil(3.14)=4自然对数函数自然对数函数log(x)log(x)求实数求实数x x的自然数对数的自然数对数log(1)=0log(1)=0指数函数指数函数pow(x,y)pow(x,y) 计算计算x xy y, ,结果为双精度实数结果为双精度实数pow(2,3)=8pow(2,3)=8随机函数随机函数rand()rand()产生产生0 0到到RAND-MAXRAND-MAX之间的随机整数之间的随机整数平方根值函数平方根值函数sqrt(x)sqrt(x)求实数求实数x x的平方根的平方根sqrt(25)=5sqrt(25)=5六、常用库函数六、常用库函数信息学奥赛培训第二课25【上机练习】1.A+B问题【1.3编程基础之算术表达式与顺序执行01】 大部分的在线题库,都会将A+B问题作为第一题,以帮助新手熟悉平台的使用方法。 A+B问题的题目描述如下:给定两个整数A和B,输出A+B的值。保证A、B及结果均在整型范围内。现在请你解决这一问题。输入: 一行,包含两个整数A,B,中间用单个空格隔开。A和B均在整型范围内。输出: 一个整数,即A+B的值。保证结果在整型范围内。样例输入: 1 2样例输出: 3信息学奥赛培训第二课26【上机练习】2.计算(a+b)*c的值【1.3编程基础之算术表达式与顺序执行02】 给定3个整数a、b、c,计算表达式(a+b)*c的值。输入: 输入仅一行,包括三个整数a、b、c, 数与数之间以一个空格分开。(10,000a,b,c10,000)输出: 输出一行,即表达式的值样例输入: 2 3 5样例输出: 25信息学奥赛培训第二课27【上机练习】3.计算(a+b)/c的值【1.3编程基础之算术表达式与顺序执行03】 给定3个整数a、b、c,计算表达式(a+b)/c的值,/是整除运算。输入; 输入仅一行,包括三个整数a、b、c, 数与数之间以一个空格分开。(10,000 a,b,c 10,000, c不等于0)输出: 输出一行,即表达式的值。样例输入: 1 1 3样例输出: 0信息学奥赛培训第二课28【上机练习】4.带余除法【1.3编程基础之算术表达式与顺序执行04】 给定被除数和除数,求整数商及余数。此题中请使用默认的整除和取余运算,无需对结果进行任何特殊处理。输入: 一行,包含两个整数,依次为被除数和除数(除数非零),中间用一个空格隔开。输出: 一行,包含两个整数,依次为整数商和余数,中间用一个空格隔开。样例输入: 10 3样例输出: 3 1信息学奥赛培训第二课29【上机练习】5.计算分数的浮点数值【1.3编程基础之算术表达式与顺序执行05】 两个整数a和b分别作为分子和分母,既分数a/b,求它的浮点数值(双精度浮点数,保留小数点后9位)。输入: 输入仅一行,包括两个整数a和b。输出: 输出也仅一行,分数 a/b 的浮点数值(双精度浮点数,保留小数点后9位)。样例输入: 5 7样例输出: 0.714285714
展开阅读全文