资源描述
第2章基本数据运算与输入输出(A),C+程序设计,2,主要内容,如何用计算机计算圆面积(2.1-2.4)标识符(2.5)基本数据类型(2.9)变量定义(2.6)常量(2.8,2.9.1)I/O流控制(3.12)小结及作业,C+程序设计,3,2.1如何用计算机计算圆面积,问题描述计算机从键盘读入圆的半径,输出其面积程序将使用变量保存半径和面积,并用一个表达式计算面积解决思路读入半径利用圆面积公式计算面积输出面积,C+程序设计,4,2.1如何用计算机计算圆面积,程序主函数框架程序清单,intmain()/Step1:Readinradius/Step2:Computearea/Step3:Displaythearea,#includeusingnamespacestd;intmain()/Step1:Readinradiusdoubleradius;coutradius;/Step2:Computeareadoublearea=radius*radius*3.14159;/Step3:DisplaytheareacoutTheareaisareaendl;return0;,consolein/out,C+程序设计,5,2.2标识符,字符集字符是指计算机中使用的字母、数字、单词和符号用于构造有意义语句的一组字符,这也是任何一种语言的特点C+程序的字符集26个大、小写字母:az,AZ10数字:09其他符号:+-*/%,C+程序设计,6,2.2标识符,标识符由字符集元素组成的一串字符,为变量、常量及函数等程序实体命名分为系统预定义标识符(如预编译指令)和用户自定义标识符(如变量名,函数名)标志符命名规则由字母、下划线、数字组成,且第一个符号不能是数字中间不能有空格C+是大小写敏感,即大写和小写字母是不同的最好使用英文单词或其组合,切忌使用汉字或汉语拼音不能使用保留字作为标志符(参见附录A)采用见名思义的原则:sum、name、sex,不要太长,一般以不超过31个字符为宜,C+程序设计,7,2.2标识符,保留字又称关键字(Keyword),是预先定义好的标识符,对C+编译程序有特殊含义在程序中用到的其他名字(标识符)不能与C+的关键字相同关键字也不能重新定义不同开发环境如VC、BC会对保留字有不同扩充C/C+保留字参见教材附录AC+关键字(P492),C+程序设计,8,2.3基本数据类型,中学阶段数学课学习的数据类型及运算实数(R)、复数(C)355.5,76.8有序实数对:2+3i整数(I)、小数35,-683.5,0.8自然数(N),正整数(Z)0,1,2,3,有理数、无理数正数、负数常数:,e,C+程序设计,9,2.3基本数据类型,C+语言中的数据类型,C+程序设计,10,2.3基本数据类型,C+语言中数据为什么要区分类型?不同类型的数据代表不同的数据表示形式合法的取值范围可参与的运算种类占用内存空间大小对程序当中所用到的所有数据都必须指定其数据类型从基本数据类型到抽象数据类型无数据类型void基本数据类型构造数据类型抽象数据类型,C+程序设计,11,2.3基本数据类型,基本数据类型:系统事先规定了的数据类型(内置类型)int,整数,在目前绝大多数机器上占4个字节float,单精度浮点数,一般是4个字节长,VC内缺省显示为6位有效数字double,双精度浮点数,一般是8个字节长,VC内缺省显示为14位有效数字char字符,一般是1个字节长用来表示256个ASCII字符,或者0255的整数,注意,数据类型标识符为小写字母int大小范围与机器有关,C+程序设计,12,2.3基本数据类型,基本数据类型修饰符:short、long、signed、unsignedshortshortint,短整数,一般2个字节长,通常简写为shortlonglongint,长整数,VC中一般是4个字节长,通常简写为longlongdouble,长双精度(高精度)浮点数,一般是10个字节长。signed用来修饰char、int、short和long,说明他们是有符号的整数(正整数、0和负整数),一般缺省都是有符号的,所以这个修饰符通常省略unsigned用来修饰char、int、short和long,说明他们是无符号的整数(正整数和0),C+程序设计,13,一、无符号的整型数据大于或等于零的正整数,无符号的短整型,分类,无符号的基本整型,无符号的长整型,unsignedshortint,标识符,unsignedint,unsignedlongint,2,对应内存空间的大小,4,4,0216-1,取值范围,同上,0232-1,注意,1、的含义2、标识符为小写字母3、int与机器有关,2.3基本数据类型,C+程序设计,14,二、有符号的整型数据包括负整数、零、正整数,有符号的短整型,分类,有符号的基本整型,有符号的长整型,signedshortint,标识符,signedint,signedlongint,2,对应内存空间的大小,4,4,取值范围-215215,2.3基本数据类型,-231231,同上,有符号整数在计算机内存中是以补码形式存储,C+程序设计,15,1.求整数的补码规则,例如:(10)补=(-10)补=,2.由补码推出原码,2.3基本数据类型,下面以一个字节存储有符号整数为例分析其取值范围,C+程序设计,16,补码,原码,取值范围,-128127,-2727-1,2.3基本数据类型,C+程序设计,17,三、实型:一律作为有符号的数据使用,2.3基本数据类型,分类标志符字节数缺省有效精度,单精度实数float46位,双精度实数double814位,实数作为有符号的数据使用,可表示为小数形式和指数形式,但在计算机内部都用浮点方式来实现存储定点小数:小数点位置固定,位于符号位和第一个数值位之间,如-0.34,表示的是纯小数;浮点数:小数点的位置是可以浮动的数,如,浮点数通用表示是将实数分为阶码和尾数两部分:S为尾数(正负均可),一般规定用纯小数形式,r为基数,对二进制而言,r=2,j为阶码(正负均可),但必须是整数,C+程序设计,18,2.3基本数据类型,理论上浮点数在计算机中的存储格式为,C+程序设计,19,浮点数在VC6中实际的存储方式为float型,2.3基本数据类型,double型,阶码:决定数的大小,对应浮点数:2-1282127,尾数:决定数的精度,C+程序设计,20,例:float71.3125转换为二进制为:1000111.0101,将其规范化之后成为:1.000111010126,这里的规范化是指移动小数点使小数点的左边只有一个“1”。内存里实际存储实数的三部分信息:符号(如+)、指数(如6)和尾数(即小数点右边的位,如000111010100),而小数点左边的1并不存储。01000010100011101010000000000000(428EA000),2.3基本数据类型,符号位指数位小数部分指数偏移量单精度浮点数1位318位30-2323位22-00127双精度浮点数1位6311位62-5252位51-001023,尾数部分占的位数愈多,实数的有效数字愈多,即有效精度愈高。指数部分占的位数愈多,则能表示的数值范围愈大。实数在操作中存在误差,例如:把111111.111作为float型数据,输出的结果是111111.109,C+程序设计,21,四、字符型采用ASCII码字符集,即用1个字节存放字符的ASCII码值,2.3基本数据类型,分类标志符内存空间取值范围,有符号字符型signedchar1-128127,无符号字符型unsignedchar10255,C+程序设计,22,2.3基本数据类型,C+程序设计,23,2.4变量,变量:在程序运行中其值可以改变的量变量是存储信息的单元,它对应某个内存空间变量名代表其存储空间,程序能在变量中存储值和取出值变量的定义:数据类型变量名1=初值,变量名2=初值,;例:floatr1=1.5f,r2=0.5f,r3;charch=A;变量的初始化:为变量赋初值的过程,用赋值运算符“=”进行定义的同时进行初始化单独进行初始化,inta,b;unsignedlongsum;a=123,sum=0;b=a;,C+程序设计,24,2.4变量,变量名的含义表示分配给变量的存储空间表示内存空间中存储的数据:变量的值每个变量都有一个名字、一个数据类型和一个值注意变量名与变量值的区别,C+程序设计,25,2.4变量,变量名命名规定由字母、下划线、数字组成,且第一个符号不能是数字不要与关键字、保留字重名;中间不能有空格C+是大小写敏感,即大写和小写字母是不同的变量名中不能包含”.;,“+-”之类特殊符号变量名不要与C+中的库函数、类名和对象名相同不要使用易混淆的字母某些功能的变量采用习惯命名,如循环变量习惯用i,j,k采用见名思义的原则:sum、name、sex,不要太长,一般以不超过31个字符为宜最好使用英文单词或其组合,切忌使用汉字或汉语拼音,C+程序设计,26,2.4变量,变量名命名风格下划线和大小写通常用来增强可读性Unix风格:variable_nameWindows风格(匈牙利命名法):chName,strName,指出下列命名的正确性,错误的指出原因x_y,x1,X1,x,y姓名2xvarname,指出下列命名的正确性,错误的指出原因_y1Case,51select,Alot,-vvSin,cin,cout,stringD6Xy,C+程序设计,27,2.4变量,匈牙利命名法标识符的名字以一个或者多个小写字母开头,用这些字母来指定数据类型在标识符内,前缀以后就是一个或者多个第一个字母大写的单词,这些单词指出程序中该对象的用途常用的数据类型的标准前缀ch字符(char)n整数(integer)bBOOLl长整数(long)hHANDLE(无符号int)m_类成员变量fn函数(function)例如,nCount表示一个计数器的变量,数据类型是整型。,C+程序设计,28,#includeusingnamespacestd;intmain()intprice=30;intnum,total;/定义变量,在内存中开辟区间num=10;/变量赋值,10为常量total=num*price;couttotal=total;/输出结果return0;,其中:num=10total=num*PRICE,是赋值号,不同于数学意义上的等号!,num,total,10,300,2.4变量,C+程序设计,29,2.5常量,在程序运行时保持不变的值,称为常量根据常量的数据类型,常量可分为整型常量、实型常量、字符常量、字符串常量、枚举常量根据常量的声明,常量可分为文字常量和自定义常量文字常量:在程序中出现的、代表数据的文字整型文字常量十进制:78,-132八进制:以数字0开头,后跟一串八进制数字(注意:数字0),如012(),03256(),0128()十六进制:以0 x开头,后跟09、AF或af(数字0,字母x),如0 x123(),0 xabc(),01bc()10进制数有正负之分,8进制、16进制只能表示无符号整数,C+程序设计,30,2.5常量,整型文字常量长整型常量123l、123L、123456l、123456L无符号型常量123u、123U实型文字常量小数形式,例如:0.123,-5.6,.123,2.0,2.指数形式(科学记数法)1.5610-31.56E-3,1.561081.56E8,1.56e+8注意实数一律用十进制表示:0 x2.5E的左右必须要有数字:E2(1E2),2E(2E+1、2E1)指数部分必须为整数:2.5E+2.5,C+程序设计,31,#includeusingnamespacestd;intmain()intint10,int8,int16;/定义3个整型变量int10=10;/默认为十进制int8=010;/八进制int16=0 x10;/十六进制coutint10=int10endl;coutint8=int8endl;coutint16=int16endl;return0;,输出int10=10int8=8int16=16,2.5常量,C+程序设计,32,2.5常量,实型文字常量单精度float:一般在内存中占4个字节,提供7位有效数字双精度double:一般在内存中占8个字节,提供15位有效数字长双精度longdouble:一般在内存中占10个字节,提供19位有效数字在C+中,一个实型常数如果没有任何说明,表示double型;若要表示float型数,则必须在实数后加上f或F;若要表示longdouble型数,则必须在实数后加上l或L,34.5f/float型34.5/double型(系统默认表示)34.5L/longdouble型34.5l/longdouble型34.5e23f/float型,34.5e23/double型(系统默认表示)34.5e23L/longdouble型34.523l/longdouble型34.5e400/longdouble型(范围超过double表示),C+程序设计,33,#includeusingnamespacestd;intmain()floata,b;doublec,d;a=0.01;b=3.45678e-2;c=3.45678e-2;d=9.7654e-5;couta=atb=bendl;coutc=ctd=dendl;return0;,a=0.01b=0.0345678c=0.0345678d=9.7654e-005Pressanykeytocontinue,2.5常量,C+程序设计,34,2.5常量,字符文字常量用一对英文单引号括起来的单个字符或转义序列单个字符:如a,x,$转义序列:以开头后跟一个字符或几个数字n回车键,ttab键ddd1-3位8进制数所代表的字符:101与A、65表示同一个字符,不需以0开头,表示范围为000377(0255)xhh1-2位16进制数所代表的字符:x41与A、65表示同一个字符,242、362、xF2表示,必须用x或X引导,表示范围为x00xff(0255)将一个字符常量赋值给字符变量,实际上并不是把该字符本身放到内存单元中,而是将该字符的相应ASCII码(整型数)存入,即在内存中字符数据以ASCII存储,即以整数表示,C+程序设计,35,2.5常量,字符文字常量例:charchVar=b,chVar1=ncharchVar2=007;/1-3位8进制数charchVar3=xff;/1-2位16进制数charchVar4=97;C+中字符数据和整型数据之间可以相互赋值,但要注意其表示的范围合理性inta=b;/Ok给一个整型变量赋一个字符值charb=97;/Ok给一个字符变量赋一个整型值coutaendl;结果为98coutbendl;结果为a0与0的区别常用转义字符:一些特殊字符(无法从键盘输入或者另有它用)用转义字符表示,C+程序设计,36,#includeusingnamespacestd;intmain()charc1,c2,c3,c4;charn1,n2;c1=a;/字符常量c2=97;/十进制c3=x61;/转义字符c4=0141;/八进制coutc1=c1tc2=c2endl;coutc3=c3tc4=c4endl;n1=n;/转义字符:回车n2=t;/转义字符:下一个输出区(Tab)cout使用转义字符n;coutc1=c1n2c2=c2n1;coutc3=c3n2c4=c4n1;return0;,输出:c1=ac2=ac3=ac4=a使用转义字符c1=ac2=ac3=ac4=a,2.5常量,C+程序设计,37,2.5常量,字符串文字常量用一对双引号括起来的一个或多个字符序列,如:China,CLanguage,hello!字符串的存储:在内存中,依次存放组成字符串的每个字符的ASCII码值,并且把空字符0(ASCII码值为0)加到字符串的尾部,作为字符串的结束标志。字符串的长度:等于字符的个数字符串存储时占内存的大小:字符串的长度+1不能将字符串常量赋值给字符变量,如charch=abcd;一个字符占一个内存单元,含有一个字符的字符串占2个内存单元,区分A与A,0、0与0,C+程序设计,38,2.5常量,用户自定义常量若希望变量的内容自初始化后一直保持不变,此时可以定义一常量若程序中多处都要用到一个常数,此时应定义一常量以避免常数值的不一致性constfloatpi=3.14159;常量定义时必须初始化,此后程序中对其只能读不能修改常量名不能放在赋值语句的左边constfloatpi;pi=3.14159;常量在编译时求值constintnSize=100*sizeof(int);constintnMax=fnMax(15,23);/fnMax用户自定义函数,C+程序设计,39,2.5常量,用户自定义常量#defineC+为兼容C而保留#define称为编译预定义指令,其语法格式为#define常量名字符串#definePI3.1415926常量名与字符串之间用空格分隔,行末不用分号,在编译预处理阶段进行字符串直接替换在C+编程中,常量定义应使用const不用define,C+程序设计,40,#includeusingnamespacestd;#definePI3.1415926/自定义常量intmain()constintPRICE=30;/自定义常量,在程序中保持不变intnum,total;/定义变量,在内存中开辟区间num=10;/变量赋值,10为文字常量total=num*PRICE;couttotal=total;/输出结果floatfR,fArea;/定义变量,在内存中开辟区间fR=3.5f;/变量赋值,3.5f为文字常量fArea=fR*fR*PI;coutArea=fArea;/输出结果return0;,num,total,10,300,2.5常量,C+程序设计,41,#includeusingnamespacestd;#definePI3.14156#defineSChinaintmain()constfloatpi=3.14156;/变量作为常量使用coutPI=PIendl;cout10*PI=10*PIendl;coutSendl;/PI=PI+3;/pi=pi+4;coutPI=PIendl;coutpi=piradius;/Step2:Computeareadoublearea=radius*radius*PI;/Step3:DisplaytheareacoutTheareaisareaab;/程序运行至此停下,等待从键盘输入变量值,键盘输入:35或:35均可。,输入语句自动过滤空白字符!,3,键盘,5,键盘,输入语句:cin输入十进制整数和实数:cin.,2.6I/O流控制,C+程序设计,45,floatc,d;cincd;,charch1,ch2;cinch1ch2;,若输入:ab则ch1为a,ch2为b。,若输入:ab则ch1为a,ch2为b。,字符型变量过滤空白字符,cin格式过滤空白字符!,输入语句:cin浮点型数据同整型数据一样字符型数据,2.6I/O流控制,C+程序设计,46,floata;inti1,i2;charch1,ch2;cini1ai2ch1ch2;,输入:345.6781ab,i2:1,在缺省的情况下,cin自动跳过输入的空格,换言之,cin不能将输入的空格赋给字符型变量;回车键也是作为输入字符之间的分隔符,也不能将输入的回车键字符赋给字符型变量。,a:5.578,i1:34,ch1:a,ch2:b,2.6I/O流控制,输入语句:cin不同类型数据混合输入,C+程序设计,47,若要把从键盘上输入的每一个字符,包括空格和回车键都作为一个输入字符赋给字符型变量时,必须使用函数cin.get(),其格式为:cin.get();,cin.get()从输入行中取出一个字符,并将它赋给字符型变量,该语句一次只能从输入行中提取一个字符。,charc1;cin.get(c1);,charch1,ch2,ch3;cin.get(ch1);cin.get(ch2);cin.get(ch3);,则:ch1:A,ch2:空格,ch3:B,输入:AB,并且在输入缓冲区中保留回车键!,2.6I/O流控制,C+程序设计,48,输入语句:cin输入十六进制或八进制数据:缺省情况下,系统约定输入的整型数是十进制数据;当要求按八进制或十六进制输入数据时,在cin中必须指明相应的数据类型:hex为十六进制,oct为八进制,dec为十进制。,inti,j,k,l;cinhexi;/指明输入为十六进制数cinoctj;/指明输入为八进制数cink;/输入仍为八进制数cindecl;/指明输入为十进制数当执行到语句cin时,若输入的数据为:11111212,结果:i:17,j:9,k:10,l:12,2.6I/O流控制,C+程序设计,49,2.6I/O流控制,输入语句:cin使用非十进制数输入时,要注意以下几点八进制或十六进制数的输入,只能适用于整型变量,不适用于字符型变量,实型变量当在cin中指明使用的数制输入后,则所指明的数制一直有效,直到在接着的cin中指明输入时所使用的另一数制为止。如上例中,输入k的值时,仍为八进制。输入数据的格式、个数和类型必须与cin中所列举的变量类型一一对应。一旦输入出错,不仅使当前的输入数据不正确,而且使得后面的提取数据也不正确。,cinab;,cinab;,inta,b;,cinab;,C+程序设计,50,输出语句:cout与输入cin对应的输出是cout输出流当要输出一个表达式的值时,可使用cout来实现,其一般格式为:cout.;其中运算符“”称为插入运算符,它将紧跟其后的表达式的值,输出到显示器当前光标的位置。,2.6I/O流控制,C+程序设计,51,inta=6;floatf1=12.4;chars1=abcd;coutatf1ts1endl;,t为转义字符Tab,endl为回车或n,显示器,显示器,显示器,6,12.4,abcd,2.6I/O流控制,C+程序设计,52,cout将双引号中的字符串常量按其原样输出,charch1=a,ch2=b;coutc1=ch1tc2=ch2endl;,c1=a,c2=b,inti1=4,i2=5;floata=3.5;couta*i1=a*i1endla*i2=a*i2endl;,a*i1=14a*i2=17.5,2.6I/O流控制,C+程序设计,53,2.6I/O流控制,使用控制符用于对I/O流的格式进行控制在头文件iomanip.h中定义的对象可以直接将控制符插入流中,C+程序设计,54,2.6I/O流控制,输出语句:cout输出八进制或十六进制数:控制符是hex,oct和dec,分别对应16进制、8进制和10进制数的显示当在cout中指明使用的数制输出后,则所指明的数制一直有效,直到在接着的cout中指明输出时所使用的另一数制为止,如下例中,输出j的值时,仍为八进制。,coutdeciendl;couthexiendl;coutoctiendl;coutjendl;,10013e91751,inti=1001,j=127;coutdeciendl;couthexiendl;coutoctiendl;,10013e91751177,C+程序设计,55,2.6I/O流控制,输出语句:cout设置值的输出宽度:在输出的数据项之间进行隔开的另一种办法是指定输出项的宽度setw(6)指明其后的输出项占用的字符宽度为6,即括号中的值指出紧跟其后的输出项占用的字符位置个数,并向右对齐,setw是“setwidth”的缩写,inti=4,j=12,m=7,k=2;coutsetw(6)isetw(10)jendl;coutsetw(5)msetw(10)j*kendl;,_4_12_7_24,C+程序设计,56,使用setw()应注意以下三点:1、在程序的开始位置必须包含头文件iomanip.h,即在程序的开头增加:#include2、括号中必须给出一个表达式(值为正整数),它指明紧跟其后输出项的宽度。3、该设置仅对其后的一个输出项有效。一旦按指定的宽度输出其后的输出项后,又回到原来的缺省输出方式,2.6I/O流控制,C+程序设计,57,2.6I/O流控制,输出语句:cout控制浮点数值显示setprecision(n)控制输出流显示浮点数的数字个数,C+默认的流输出数值有效位是6setprecision(n)与setiosflags(ios:fixed)联合控制小数点右边的数字个数setprecision(n)与setiosflags(ios:scientific)联合控制指数表示法的小数位数VC6中setiosflags(ios:scientific)与setiosflags(ios:fixed)不能连续使用,否则后者失效,doublefSum=22.0/7;coutfSumendl;coutsetprecision(0)fSumendl;coutsetprecision(2)fSumendl;coutsetiosflags(ios:fixed)setprecision(4)fSumendl;coutsetiosflags(ios:scientific)setprecision(6)fSumendl;,C+程序设计,58,2.6I/O流控制,输出语句:cout设置填充字符:缺省时流使用空格符来保证字符间的正确间隔,setfill用于设置非空字符来填充,inti=4,j=12,m=7,k=2;coutsetfill(*);coutsetw(6)isetw(10)jendl;coutsetw(5)msetw(10)j*kendl;coutsetfill();,C+程序设计,59,2.6I/O流控制,输出语句:cout强制显示小数点和符号:要强制显示小数点,用setiosflags(ios:showpoint)标志要强制显示正数前的正号,用setiosflags(ios:showpos)标志,floatfSum=10.0/5;coutfSumendl;coutsetiosflags(ios:showpoint)fSumendl;coutsetiosflags(ios:showpos)fSumendl;,pos:positive,C+程序设计,60,2.6I/O流控制,输出语句:coutios:right,ios:leftios:uppercase,ios:lowercaseios:skipws忽略前导空白printf与scanfC语言中的标准输入输出函数包含在头文件stdio.h中C+语言中已被I/O流完全替代,C+程序设计,61,2.6I/O流控制,printf与scanfprintf的简单使用%d或%i:输出用十进制表示的int型数据%u:输出用十进制表示的unsigned型数据%o:输出用八进制表示的unsigned型数据%x:输出用十六进制表示的unsigned型数据%f:以小数形式输出实数,并且自动按四舍五入形式保留6位小数;如果输出的实数本身不足6位小数,则在小数后面自动补数字0,以凑足6位。%e或%E:以指数形式输出实数%g:以小数或指数形式最合适的方式输出浮点数%c:输出一个字符%s:输出字符串,C+程序设计,62,2.6I/O流控制,#includeintmain()inta=10,b=-1;unsignedx=65535;printf(a=%dta=%it,a,a);printf(a=%ota=%xta=%Xn,a,a,a);printf(b=%dtb=%in,b,b);printf(x=%utx=%otx=%xtx=%Xn,x,x,x,x);printf(b=%otb=%xtb=%Xtx=%dn,b,b,b,x);return0;,C+程序设计,63,小结与作业,这一节我们主要学习了。C+语言中的保留字基本数据类型变量常量I/O流作业教材P46:习题2.12.4,2.12,2.172.19,2.24教材P72:习题3.24,3.26预习实验指导书实验二预习教材第2章:2.92.15,
展开阅读全文