C++高中信息学科竞赛必备第2章-基础概念1课件

上传人:文**** 文档编号:240744959 上传时间:2024-05-04 格式:PPT 页数:70 大小:798.50KB
返回 下载 相关 举报
C++高中信息学科竞赛必备第2章-基础概念1课件_第1页
第1页 / 共70页
C++高中信息学科竞赛必备第2章-基础概念1课件_第2页
第2页 / 共70页
C++高中信息学科竞赛必备第2章-基础概念1课件_第3页
第3页 / 共70页
点击查看更多>>
资源描述
C+C+高中信息学科高中信息学科竞赛必必备第第2 2章章 基基础概念概念第一节常量和变量第一节常量和变量2常量常量一、常量常量是指在程序中使用的一些具体的数、字符。在程序运行过程中,其值不能被更改。如123,145.88,m,TRUE等。1、整型常量:如3、-5、0等。整型常量是表示整数的常量。有三种表示形式:1)十进制形式。如99、-1。2)八进制形式。以数字0打头,由0-7构成,如012,表示八进制整数12,即(12)8。3)十六进制形式。以0 x打头,如0 x12A,表示十六进制整数12A,即(12A)16。2、实型常量:日常表示法如3.1、-9.87、-30科学计数法、-6.1E+2例:请将下面的数用科学计数法表示26000.045-0.00863、字符常量:是用单引号括起来的字符,如k、5、%。注意:a与a表示的含义是不同的,a表示一个字符常量,a表示一个字符串。3常量常量4、字符串常量:字符串常量又称字符串,是用一对双引号(英文)括起来的字符序列。例如”helloworld!”,”pleaseinputa=”。小说明:字符串和字符在内存中的存储形式不同,字符串除了按字符的顺序存放之外,还会在末尾加上符号0,用以表示字符串的结束。因此字符串在内存中占有的字符数为字符个数+1。注意:字符串的长度仍然注意:字符串的长度仍然是包含字符的个数。是包含字符的个数。5、布尔常量布尔常量仅有两个false和true,即0和1;4常量的定义常量的定义一个常量可以直接调用(如124,A),也可以给常量取个名字用一个标识符代表它,这就是符号常量。其语法格式为:const类型说明符符号常量=常量字串;例如:constdoublePI=3.1415926;constintINFINITY=65000;constcharGOOD=A;conststringSCHOOL=“sdshiyan”;constboolFLAG=true;5例2.5输入半径r,求圆的周长及面积。#include/调用iostream库,否则使用printf和scanf语句编译出错usingnamespacestd;/这个程序可省略这行constdoublePI=3.1415926;/PI是符号常量。代表3.1415926intmain()floatr,c,s;/定义实型变量printf(r=);/显示提示符r=scanf(%f,&r);/输入r的值,&符号不能漏掉c=2*PI*r;/计算圆的周长s=PI*r*r;/计算圆的面积printf(c=%.2fs=%.2fn,c,s);/显示计算结果,结果保留2位小数程序中定义的PI代表常量3.1415926,在编译源程序时,遇到PI就用常量3.1415926代替,PI可以和常量一样进行运算。C+语言规定,每个符号常量的定义占据一个书写行,而且符号常量不能被再赋值。如果在例2.5中使用以下赋值语句是错误的。PI=3.1415926;6习惯上,符号常量名用大写,而变量名用小写,以便于区别。使用符号常量的好处:1)增加了程序的可读性。如看到例2.5程序中,见到PI就可知道它代表圆周率,定义符号常量名时应该尽量使用见名知意的常量名。2)增加了程序的易改性。如例2.5程序中,只需改动一处,程序中的所有PI都会自动全部代换,做到“一改全改”。7变量定义变量定义变量代表了一个存储单元,其中的值是可以改变的,因此称为变量。如游戏中玩家命的条数最初为3,当你死了一次,命减少一条,这里命的条数就是一个变量(或者说命的条数存储在一个存储单元中)。一个程序中可能要使用到若干个变量,为了区别不同的变量,必须给每个变量(存储单元)取一个名(称为变量名),该变量(存贮单元)存储的值称为变量的值,变量中能够存储值的类型为变量的类型。例如游戏中用于存储“命”的变量,在游戏程序中的存储命的变量名可取为life,它的类型为整型,游戏初始时这个变量的值为3。8w变量名变量名用一个合法的标识符代表一个变量。如n,m,rot,total等都是合法变量名。在程序中用到的变量要“先定义后使用”,变量名应遵循自定义标识符的命名规则,并建议使用“见名知义”的原则,即用一些有意义的单词作为变量名。在C+语言,变量名大小写有区别。用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列称为标识符。C+语言规定,标识符只能由字母(包含下划线“_”)开头,后面的字符可以是字母或数字。对于标识符的长度,不同的C+语言编译器有不同的规定,考虑到系统的可移植性,建议变量名的长度不要超过8个字符。例如:month、_age、s2为合法的标识符;m.k.jack、a=b、9y为不合法的标识符。9定义变量的语法格式为:定义变量的语法格式为:数据类型数据类型 变量表变量表例如:inti=5,j,k;/定义i,j,k为整型变量,/i赋初值为,5j,k的初值未知。chara,b,c;/定义a,b,c为字符变量floatx,y,z;/定义x,y,z为实型变量C+语言允许在定义变量的同时为变量赋初值。10w变量的类型变量的类型常量是有类型的数据,变量在某一固定时刻用来存储一个常量,因此也应有相应的类型。如整型变量用来存储整数,实型变量用来存储实数。变量的类型,可以是标准数据类型int、short、long、float、double和char等,也可以是用户自定义的各种类型。变量一经定义系统就在计算机内存中为其分配一个存储空间。在程序中使用到变量时,就在相应的内存中存入数据或取出数据,这种操作称为变量的访问。11第二节标准数据类型第二节标准数据类型C+语言提供了丰富的数据类型,本节介绍几种基本的数据类型:整型、实型、字符型。它们都是系统定义的简单数据类型,称为标准数据类型。12整型(整型(integer)数据类型数据类型定义标识符定义标识符占字节数占字节数数值范围数值范围数值范围数值范围短整型短整型short intshort int2(162(16位位)-32768-327683276732767-2-215152 21515-1-1整型整型long intlong int4(324(32位位)-2147483648-214748364821474836472147483647-2-231312 23131-1-1长整型长整型long intlong int4(324(32位位)-2147483648-214748364821474836472147483647-2-231312 23131-1-1超长整型超长整型long long intlong long int8(648(64位位)-92233728-922337289223372792233727-2-263632 26363-1-1无符号整型无符号整型 unsigned intunsigned int2(162(16位位)0 065535655350 02 21616-1-1无符号短整型无符号短整型unsigned short unsigned short intint2(162(16位位)0 065535655350 02 21616-1-1无符号长整型无符号长整型unsigned long unsigned long intint4(324(32位位)0 0429496729542949672950 02 23232-1-1无符号超长整无符号超长整型型unsigned long unsigned long long long 8(648(64位位)0 01844674451844674450 02 26464-1-1 在C+语言中,整型类型标识符为int。根据整型变量的取值范围又可将整型变量定义为以下8种整型类型:13实型(实型(real)一个实型数据用来存储实数,实型包括正实数、负实数和零。C+语言中表示实型常量的形式有两种。十进制表示法这是人们日常使用的带小数点的表示方法。如3,0.0,+5.61,-8.0,-6.050等都是实型常量。科学记数法科学记数法是采用指数形式的表示方法,如1.25105可表示成1.25E+05。在科学记数法中,字母E表示10这个底数,而E之前为一个十进制表示的小数,称为尾数,E之后必须是一个整数,称为指数。如-1234.56E+26,+0.268E-50,1E5是合法形式,而E5,E,1.2E+0.5都不是合法的实数。C+语言支持三种实型,它们是float(单精度实型)、double(双精度实型)、longdouble(长双精度实型)。每一种类型规定了相应的实数取值范围、所使用的存储空间(字节数)以及能达到的精度(有效位数)。float在空间允许的情况下没有必要使用,都应使用double提高精度。14 表表2-2实型数取值范围实型数取值范围数据类型数据类型定义标识定义标识符符数值范围数值范围占字占字节数节数有效位数有效位数单精度实单精度实型型floatfloat-3.4E-38-3.4E-383.4E+383.4E+384(324(32位位)6 67 7位位双精度实双精度实型型doubledouble-1.7E+308-1.7E+3081.7E+3081.7E+3088(648(64位位)15151616位位长双精度长双精度实型实型long long doubledouble-3.4E+4932-3.4E+49321.1E+49321.1E+493216(1216(128 8位位)18181919位位布尔变量布尔变量boolbool真真truetrue或假或假falsefalse之一之一1(81(8位位)15字符型(字符型(char)转义字符转义字符含义含义nn换行换行tt水平制表水平制表bb退格退格rr回车(不换行)回车(不换行)00空字符空字符 单引号单引号”双引号双引号一个反斜杠字符一个反斜杠字符dddddd1 13位八进制数所代表的字符位八进制数所代表的字符xhhxhh1 12位十六进制数所代表的字符位十六进制数所代表的字符三、字符型字符常量有以下两种表示法:1、普通表示形式字符常量是由单个字符组成,所有字符采用ASCII编码,ASCII编码共有128个字符(表2-4)。在程序中,通常用一对单引号将单个字符括起来表示一个字符常量。如:a,A,0等。如字符A的序号是65,字符a的序号是97,字符0的序号的48。2、转义字符表示形式。转义字符有三种用法:表示控制字符、表示特殊字符、表示所有字符。常用的转义字符如右表所示。16ASCII编码表见下图:序号字符序号字符序号字符序号字符序号字符序号字符32空格4806480P96112p33!49165A81Q97a113q34”50266B82R98b114r35#51367C83S99c115s36$52468D84T100d116t37%53569E85U101e117u38&54670F86V102f118v3955771G87W103g119w40(56872H88X104h120 x41)57973I89Y105i121y42*58:74J90Z106j122z43+59;75K91107k12344,6078N94110n12647/63?79O95_111o127deL17例2.6字符变量的赋值举例#includeusingnamespacestd;intmain()intc1,c3;charc2,c4;c1=A;/把字符常量赋值给整型变量c1c2=65;/把整型常量赋值给字符变量c2c3=x41;/把用十六进制表示的转义字符常量赋值给整型变量c3c4=101;/把用八进制表示的转义字符常量赋值给字符变量c4coutc1=c1c3=c3endl;/用整数格式输出c1,c3coutc2=c2c4=c4endl;/用字符格式输出c2,c4运行结果:c1=65c3=65c2=Ac4=A18基于char数据的这个特点,它可以和int变量一样做加减运算,例2.7说明了这种用法。例2.7大小字母的转换#include#includeusingnamespacestd;intmain()charc1,c2;c1=a;c2=A;coutc1c2endl;c1=c1-32;/小写字母转换大写字母c2=c2+32;/大写字母转换小写字母coutc1c2)、小于、小于(=)、小于等于、小于等于(=)和不等于和不等于(!=)六种。六种。3.逻辑运算符逻辑运算符用于逻辑运算。包括与用于逻辑运算。包括与(&)、或、或(|)、非、非(!)三种。三种。4.位操作运算符位操作运算符 参与运算的量,按二进制位进行运算。包括位与参与运算的量,按二进制位进行运算。包括位与(&)、位或、位或(|)、位非、位非()、位异、位异或或()左移左移()六种。六种。5.赋值运算符赋值运算符用于赋值运算,分为简单赋值用于赋值运算,分为简单赋值(=)、复合算术赋值、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算和复合位运算赋值赋值(&=,|=,=,=,,.)等几种。等几种。25一、算术运算符一、算术运算符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。26例2.4变量自加运算#includeusingnamespacestd;intmain()intx,y,z1,z2;x=7;y=8;z1=y-(x+);/计算z1=1,计算后x=8z2=y-(+x);/计算前x的值自加1,x的值为9,再与y求差cout“z1=z1endl“z2=)、小于、小于(=)、小于等于、小于等于(n2;/n3的值为0n3=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。29四、位运算符四、位运算符运算符运算符含含 义义说明说明例子例子&按位与按位与把参与运算的两个数对应的二进制把参与运算的两个数对应的二进制位相与,只有对应的二进制均为位相与,只有对应的二进制均为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)。30需要说明的是,对于有符号数,在右移时,符号位将随同移动。当操作数为正数时,最高位为0,而为负数时,最高位为1。最高位是补0或补1取决于编译系统的规定。31五、运算的简写在C+语言中,有一些运算可以简写,如下表所示。算术运算符、关系运算符、逻辑运算符和赋值运算符的优先级如下:赋值运算符逻辑运算符关系运算符算术运算符低高关系运算符的结合性为:自左至右。根据以上优先级和结合性,计算出以下表达式的结果(假设a=3,b=2,c=1)ab表达式为真,所以表达式的值为1(ab)=c表达式为真,所以表达式的值为1b+cbab为真,所以d的值为1f=abcab为真,结果为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*=ba*=ba=a*ba=a*ba=ba=ba=aba=aba/=ba/=ba=a/ba=a/ba=ba=ba=aba=a=ba=ba=aba=ab32函数名函数名格式格式功能说明功能说明例子例子绝对值函数绝对值函数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(xfloor(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,ypow(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六、常用库函数六、常用库函数33表达式w表达式,是由数字、算符、数字分组符号(括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合。wC+语言中,常见的表达式有算术表达式、关系表达式、逻辑表达式。34优先级和结合性w().-:sizeof!+-+-(type型)&(取址)*-*.*%*/+-=!=&ww|&w|:?(三目运算)w=+=.w,(逗号)!+-+-*&sizeof自右向左?:自右向左=+=-=*=/=%=&=|=自右向左35小练习试将下列数学式写成C+表达式(1)a+4b(2)(5)变量a既能被7整除又能被11整除36【上机练习2.1】输入一个三位自然数,把这个数的百位与个位数对调,输出对调后的自然数。37第四节赋值语句第四节赋值语句38赋值语句赋值语句在C+语言中,“=”作为赋值运算符,而不表示“等于”判断。赋值语句是由赋值表达式再加上分号构成的表达式语句,它是程序中使用最多的语句之一。变量=表达式;在赋值语句的使用中,需要注意以下几点:1)由于赋值运算符“=”右边的表达式也可以是赋值表达式,因此,下述形式:变量=(变量=表达式);是成立的,从而形成嵌套的情形。其展开之后的一般形式为:变量=变量=表达式;例如,“a=b=c=d=e=5;”,它实际上等价于:e=5;d=e;c=d;b=c;a=b;2)在进行赋值运算时,如果赋值运算符两边的数据类型不同,系统将会自动进行类型转换,即将赋值运算符右边的数据类型转换成左边的变量类型。当左边是整型而右边是实型时,将去掉小数部分并截取该整型对应的有效位数。39赋值时的类型转换规则当赋值运算符两侧的数据类型不同时,需进行类型转换,这种转换是系统自动进行的,转换规则如下:1)float、double型赋值给int型:直接截断小数。例如,“inti=f+0.6;”,f的值为4.0,右边算术表达式运算后的结果为4.6的double型数据,根据上述转换原则,直接舍弃小数,所以i的值为4。2)int、char型赋值给float、double型:补足有效位以进行数据类型转换。例如:“floatf=4;”,float为7位有效数字,所以f的值为4.0000000。3)char型(1字节)赋给int型(4字节):数值赋给int型的低8位,其它位补0。4)longint型赋值给int型:longint型截断低字节给int型。5)int型赋值给longint型:赋给longint型的低16位,如果int型的最高位是0,则longint的高16位全为0;如果int型的最高位是1,则longint型的高16位全为1(称为“符号扩展”)。6)unsignedint型赋值给int型:直接传送数值。7)非unsignedint型赋值给位数相同的unsignedint型:直接传送数值。40例例2.1输入两个正整数A和B,试交换A、B的值(使A的值等于B,B的值等于A)。【分析】交换两个变量的值方法很多,一般我们采用引入第三个变量的算法,二个变量交换,可以想像成一瓶酱油和一瓶醋进行交换,这时容易想到拿一个空瓶子过来:将酱油倒到空瓶中;将醋倒到酱油瓶中;将原空瓶中的酱油倒到醋瓶中。程序如下:#include/使用cin,cout,须调用iostream库usingnamespacestd;intmain()inta,b,c;/定义三个变量coutab;/输入A、B的值c=a;a=b;b=c;/交换A、B的值couta=ab=bendl;/输出结果41例2.2圆柱体的表面积 输入底面半径输入底面半径r和高和高h,输出圆柱体的表面积,保留,输出圆柱体的表面积,保留3位小数,格式见样位小数,格式见样例。例。样例输入:3.59样例输出:274.889【分析】圆柱体的表面积由3部分组成:上底面积、下底面积和侧面积。由于上下底面积相等,完整的公式可以写成:表面积=底面积*2+侧面积。根据平面几何知识,底面积=R2,侧面积=2rh。参考程序:#include/使用printf和scanf,须调用cstdio库#include/使用数学函数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.3lfn,s);/输出结果保留3位小数,注意用lf格式return0;42例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/再用总头数减鸡数算出免的只数注意这两步运算的先后顺序。程序如下:#include/使用getchar()语句,须调用cstdio库#include/使用cin,cout,须调用iostream库usingnamespacestd;intmain()inth,f,j,t;/定个变量h=30;f=90;/赋初始值j=(4*h-f)/2;/计算鸡的只数t=h-j;/计算免的只数coutj=jt=tendl;/输出结果getchar();/和system(pause)作用相似,用于结果显示暂停43第五节数据输入输出C+语言中没有提供专门的输入输出语句,所有的输入输出都是调用标准库函数中的输入输出函数来实现的。在使用时,应在源程序的开头使用如下语句:#include#includeusingnamespacestd;C+语言标准函数库提供了许多标准输入、输出函数,本节将介绍6个最基本的输入、输出函数:字符输入getchar,字符输出putchar,格式化输入scanf,格式化输出prinf,流输入cin,流输出cout。44一、字符输入函数getchargetchar函数是接收从键盘输入的单个字符数据。它是一个无参函数,其语法格式为:getchar();【说明】1)通常把输入的字符赋予一个字符变量,构成赋值语句。例如:charch;ch=getchar();2)getchar函数只能接受单个字符,输入数字也按字符处理。3)输入多于一个字符时,只接收第一个字符。4)getchar函数等待用户输入,直到按回车键才结束,可用于暂停程序的运行,直到输入一个回车键。5)如果在程序中连续有两个以上getchar()函数,应该一次性输入所需字符,最后再按回车键,否则会把回车作为一个字符传给后面的getchar()函数。45例2.8利用getchar函数接收键盘输入。#include#includeusingnamespacestd;intmain()charch;ch=getchar();/读入字符coutinput=chendl;46利用getchar();暂停程序47二、字符输出函数putcharputchar函数是字符输出函数,功能是向标准输出设备(如显示器)输出单个字符数据,其语法格式为:putchar(ch);/其中,ch为一个字符变量或常量。例2.9利用putchar函数输出字符。#include#includeusingnamespacestd;intmain()charc=B;/定义字符变量c并赋值Bputchar(c);/输出该字符putchar(x42);/用转义字符输出字母Bputchar(0 x42);/用16进制ASCII码值输出字母Bputchar(66);/用10进制ASCII码值输出字母B运行结果:BBBB48三、通过三、通过cout流输出数据流输出数据流插入运算符和cout结合在一起使用,可向显示器屏幕输出数据。格式1:功能:它把表达式的值输出到屏幕上,该表达式可以是各种基本类型的常量、变量或者由它们组成的表达式。输出时,程序根据表达式的类型和数值大小,采用不同的默认格式输出,大多数情况下可满足要求。若要输出多个数据,可以连续使用流插入运算符格式2:功能:将表达式的内容一项接一项的输出到屏幕上。491输出字符串和输出变量的区别每当我们输出字符串常量的时候,必须用双引号把字符串引起来,以便将它和变量名明显的区分开来。例2.10下面两个语句是不同的:coutHello;/打印字符串Hello到屏幕上coutHello;/把变量Hello存储的内容打印到屏幕上2如何增强信息的可读性为了增强输出信息的可读性,在输出多个数据时可以通过插入空格符,换行符或其他提示信息将数据进行组织,以获得更好的效果。例2.11x=12;couttomismyfriend,heis;coutx;coutyearsold;输出结果为tomismyfriend,heis12yearold503换行符的使用必须注意,除非我们明确指定,cout并不会自动在其输出内容的末尾加换行符,因此下面的语句:例2.12coutThisisasentence.;coutThisisanothersentence.;将会有如下内容输出到屏幕:Thisisasentence.Thisisanothersentence.虽然我们分别调用了两次cout,两个句子还是被输出在同一行。所以,为了在输出中换行,我们必须插入一个换行符来明确表达这一要求,在C+中换行符可以写作n。coutFirstsentence.n;coutSecondsentence.nThirdsentence.;将会产生如下输出:Firstsentence.Secondsentence.Thirdsentence.另外,你也可以用操作符endl来换行,例如:coutFirstsentence.endl;coutSecondsentence.endl;将会输出:Firstsentence.Secondsentence.51转义字符转义字符含义含义nn换行换行tt水平制表水平制表bb退格退格rr回车(不换行)回车(不换行)00空字符空字符 单引号单引号”双引号双引号一个反斜杠字符一个反斜杠字符dddddd1 13位八进制数所代表的字符位八进制数所代表的字符xhhxhh1 12位十六进制数所代表的字符位十六进制数所代表的字符52例2.13在屏幕上输出234cout23endl;cout4;或cout23n4;除了以上两种写法外,还可以有其它的的写法,请试试看。你可以使用n或endl来指定cout输出换行,注意两者的不同用法。53在输入输出流中使用控制符头文件iomanip.h54#include#includeusingnamespacestd;intmain()coutsetiosflags(ios:right)setw(5)1setw(5)2setw(5)3endl;coutsetiosflags(ios:left)setw(5)1setw(5)2setw(5)3和cin结合在一起使用,可从键盘输入数据。格式格式1:功能:是从键盘读取一个数据并将其赋给“变量”。说明:在使用cin输入的时候必须考虑后面的变量类型。如果你要求输入一个整数,在后面必须跟一个整型变量,如果要求一个字符,后面必须跟一个字符型变量。例2.14声明一个整型变量age然后等待用户从键盘输入到cin并将输入值存储在这个变量中。intage;cinage;也可以连续使用,实现从键盘对多个变量输入数据。格式格式2:这要求从键盘输入的数据的个数、类型与变量相一致。从键盘读取数据时,各数据之间要有分隔符,分隔符可以是一个或多个空格键、回车键等。56例2.15用cin让用户输入多个数据。cinab;等同于:cina;cinb;57例2.16流读取运算符和cin的使用#includeusingnamespacestd;intmain()charc;inti;floatx,y;coutixy;c=i;coutc=cti=in;coutx=xty=yn;return0;58程序运行时屏幕先显示:enter:这时从键盘输入一个整数和两个实数,中间用一个或多个空格键作分隔符。如输入652.33.5最后屏幕显示:c=Ai=65x=2.3y=3.5程序中n和t都是转义符。n和n效果相同,都表示换行符。t是制表符,可以理解为连续输出几个空格。字符变量和整型变量i的值都是65,但输出的形式不同。59五、格式化输入函数scanfscanf函数的功能是格式化输入任意数据列表,其一般调用格式为:scanf(格式控制符,地址列表)【说明】【说明】1)地址列表中给出各变量的地址,可以为变量的地址,也可以为字符串的首地址。2)格式控制符由%和格式符组成,作用是将要输入的字符按指定的格式输入,如%d,%c等。格式符格式符说说 明明d,id,i用于输入十进制整数用于输入十进制整数u u以无符号十进制形式输入十进以无符号十进制形式输入十进制整数制整数o(o(字母字母)用于输入八进制整数用于输入八进制整数x x用于输入十六进制整数用于输入十六进制整数c c用于输入单个字符用于输入单个字符s s用于输入字符串(非空格开始,用于输入字符串(非空格开始,空格结束,字符串变量以空格结束,字符串变量以00结尾)结尾)f f用于输入实数(小数或指数均用于输入实数(小数或指数均可)可)e e与与f f相同(可与相同(可与f f互换)互换)表2-6scanf函数的格式符60表2-7scanf函数的附加格式说明符附加格式说 明l(字母)用于长整型数(%ld、%lo、%lx)或double型实数(%lf、%le)h用于短整型数(%hd、%ho、%hx)域宽(一个整数)指定输入所占列宽*表示对应输入量不赋给一个变量6162六、格式化输出函数printfprintf函数的功能是格式化输出任意数据列表,其一般调用格式为:printf(格式控制符,输出列表)【说明】1)格式控制由输入格式说明和普通字符组成,必须用双引号括起来。格式说明由%和格式字符组成,作用是将要输出的字符转换为指定的格式,如%d,%c等。普通字符是在输出时原样输出的字符,一般在显示时起提示作用。2)输出列表是需要输出的一组数据(可以为表达式和变量),各参数之间用“,”分开。要求格式说明和各输出项在数量和类型上要一一对应,否则将会出现意想不到的错误。63例如,对如下程序段inti=1;longj=123;printf(%d,%2d,%03d,%1d,%-4ld,%05ld,i,i,i,j,j,j);输出:1,1,001,123,123,00123参参 数数说说 明明%d%d输出数字长为变量数值的实际长度输出数字长为变量数值的实际长度%md%md输出输出m m位位(不足补空格,大于不足补空格,大于m m位时按实际长度输出位时按实际长度输出)%-md%-mdm m含义同上。左对齐输出含义同上。左对齐输出%ld%ldl(l(小写字母小写字母)表示输出表示输出“长整型长整型”数据数据%m1d%m1d指定长整型输出宽度指定长整型输出宽度m m位,左边补空格;否则,按实际位数输位,左边补空格;否则,按实际位数输出出%0md,%0m1d%0md,%0m1d0(0(数字数字0)0)表示位数不足表示位数不足m m时补时补0 0表2-9d格式符65表2-10f格式符参参 数数说说 明明%f%f按实数格式输出,整数部分按实际位数输出,按实数格式输出,整数部分按实际位数输出,6 6位小数位小数%m.nf%m.nf总位数总位数m m(含小数点),其中有(含小数点),其中有n n位小数位小数%-m.nf%-m.nf同上,左对齐同上,左对齐 表表2-11 s2-11 s格式符格式符参参 数数说说 明明%s%s按实际宽度输出一个字符串按实际宽度输出一个字符串%ms%msm m指定宽度(不足时左补空格,大于时按实际宽度输出)指定宽度(不足时左补空格,大于时按实际宽度输出)%-ms%-ms左对齐,不足时右补空格左对齐,不足时右补空格%m.ns%m.ns输出占输出占m m个字符位置,其中字符数最多个字符位置,其中字符数最多n n个,左补空格个,左补空格%-m.ns%-m.ns同上,右补空格同上,右补空格66例例2.17某幼儿园里,有5个小朋友编号为1,2,3,4,5,他们按自己的编号顺序围坐在一张圆桌旁。他们身上都有若干个糖果(键盘输入),现在他们做一个分糖果游戏。从1号小朋友开始,将自己的糖果均分三份(如果有多余的糖果,则立即吃掉),自己留一份,其余两份分给他的相邻的两个小朋友。接着2号、3号、4号、5号小朋友同样这么做。问一轮后,每个小朋友手上分别有多少糖果。【分析】题目中有5位小朋友,他们初始时糖果的数目不确定,用a,b,c,d,e分别存储5个小朋友的糖果数,初始值由键盘输入。程序如下:#includeusingnamespacestd;intmain()inta,b,c,d,e;scanf(%d%d%d%d%d,&a,&b,&c,&d,&e);a=a/3;b=b+a;e=e+a;/1号小朋友分糖b=b/3;c=c+b;a=a+b;/2号小朋友分糖c=c/3;d=d+c;b=b+c;/3号小朋友分糖d=d/3;e=e+d;c=c+d;/4号小朋友分糖e=e/3;a=a+e;d=d+e;/5号小朋友分糖printf(%5d%5d%5d%5d%5dn,a,b,c,d,e);/%5d按5位宽度输出return0;运行结果:输入:89101112输出:117911667七、几种输入输出格式的几点说明1、cin和cout在DevC+中只能调用库,而其他输入输出格式要调用库或库。2、cin和cout属于C+的概念,调用时涉及输入输出流,而scanf和printf属于C的概念,是C语言的标准输入/输出库中的函数,所以在时效上,scanf和printf优于cin、cout,对于大数据的输入输出,通常情况下应该用scanf、printf。3、对于普通数据的输入输出,cin和cout比较方便,而在格式化方面,scanf和printf比较容易。cin效率比scanf低很多,尤其输入数据达到20万以上时非常明显,在100万时cin读入就会超时。4、scanf和printf也缺点,cin和cout能够自动识别变量的数据类型,因此,在进行输入输出时,不需要指定数据类型,printf和scanf函数在输入输出时需指定数据类型。68w1.1编程基础之输入输出编程基础之输入输出(10题题)w1.2编程基础之变量定义、赋值及转换编程基础之变量定义、赋值及转换(10题题)w1.3编程基础之算术表达式与顺序执行编程基础之算术表达式与顺序执行(20题题)69谢谢!
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!