1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第二讲基本数据类型及数组等,主讲:曹岳辉,本讲内容,上次作业讲解,常见错误,基本数据类型,数组及其应用,本讲作业,2,2.1,上次作业讲解,1,、编写程序计算,y,的值:,x-5 (x1),y=x*5+2 (1x10),x+5 (x10),2,、从键盘上输入一个整数和一浮点数,比较 其大小,并输出小值。,3,#include,vo
2、id main(),double,x,y,;,cout,x;,if(x,=1,else y=x+5;,cout,y=y,endl,;,2.1,上次作业讲解,4,int,x,double,y;,cout,x y;,double min=x,y?x:y,;,cout,The min istmin,x,y,;,cin,xy,endl,;,之类的错误,6,、函数实现的函数头处写分号的错误(见上讲程序),7,、函数未能按声明、使用、定义的原则(第四讲),重复上机过程!,6,常见错误及改正,1,、单词拼写错误,void,viod,main-,mian,iostream-iosteam,cout,-coun
3、t,endl,end1,2,、输出,用错,cin,x,y,;,cout,xy;,3,、,main,后少了,(),函数体少了,或,不匹配,7,4,、,;,用错,该有的没有,不该有的却有,5,、中文标点用错,特别是引号,#include,void,main(),double x,y;,cout,xy,;,double z=x+y;,cout,x+y=,z,endl,;,不是“”!,应该是,;,此处无,;,error C2018:unknown character,0 x,a3,肯定是中文符号错,常见错误及改正,8,6,、大小写错误,void Void,前面是,x,,后面完成,X,7,、函数后面接,
4、),不是,也不是,unknown character,“,0 xa3,”,:不可知字符(中文符号),syntax error:missing;before type double,x:undeclared identifier,:,x:,是没有声明的标识符,4,、,unexpected tokens following preprocessor directive-expected a newline,(,若在,#include,行尾有,;,则有本条错误,),:在预处理命令后有一个意外的符号,8,、常见错误,常见错误及改正,9,5,、,missing,function header(old-
5、style formal list?),缺少函数头,(,在函数实现代码如,main,后面加了,;,就会出现,),6,、,subscript,requires array or pointer type,下标需要数组或指针类型,,max(2,4),误写成,max2,4,!,7,、,max:function does not take 3 parameters,函数不支持,3,个参数,8,、,main:function should return a value;void return type assumed,main,前少了,void,常见错误及改正,10,9,、,local variable
6、 x used without having been initialized,本地变量没有初始化就使用了,10,、,function void _,cdecl,main(void)already has a body,在程序中有两个,main,函数体!不能在同一文件中放两个程序的代码,一个程序中只有一个,main,函数!,解决办法,常见错误及改正,11,11,、编译与构建时文件名称不同,大,.,obj,:error LNK2005:_main already defined in,aa.obj,大,.,obj,:error LNK2005:double _,cdecl,max(double,
7、double)(?maxYANNNZ)already defined in,aa.obj,Debug/,aa.exe,:,fatal error LNK1169:one or more multiply defined symbols found,解决办法,:关闭工作区选择否重新编译、构建,常见错误及改正,12,2.3,基本数据类型,基本数据类型,类型修饰符,常用数据类型,C+,语言的基本数据类型有如下,4,种:,char,(字符型),int,(整型),float,(单精度浮点型)、,double,(双精度浮点型),void,(空值型),1,、基本数据类型,如:,A,,,b,z,12,,,98
8、999,12.90,0.9e12,2,、类型修饰符,C+,语言中还有四种类型修饰符:,signed,(有符号),unsigned,(无符号),long,(长型),short,(短型),是否能为负数,数的范围是否更宽,无符号:,0000,0000,1111,1111,可表示,0,到,255,共,256,个数,有符号:,1,111,1111,0111,1111,可表示,-128,到,+127,共,256,个数,0,代表正,,1,代表负,,111,111 1,3,、常用数据类型,允许用修饰符组合构成的常用数据类型有:,char,(,signed char,),,unsigned char,:,1,个
9、字节,short,(,signed short,),,unsigned short,:,2,个字节,int,(,signed,int,),,unsigned,int,:,4,个字节,long,(,signed long,),,unsigned long,:,4,个字节,float,:,4,个字节,(,大约,6,位有效数字,),double,:,8,个字节,(,大约,12,位有效数字,),long double:10,个字节,(,大约,15,位有效数字,),4,、常量和变量,常量,是指在程序中不被改变的量,变量,指在程序中其值可以被改变的量,5,、常量,常量,是指在程序中不被改变的量。,常量有各
10、种不同的数据类型,这由它的表示方法决定。,1,、整型常量,2,、浮点型常量,3,、字符型常量,4,、字符串常量,5,、符号常量,1,、整型常量,有,3,种表示方式:,十进制整数,八进制整数,(以,0,开头的整数),十六进制整数,(以,0X,或,0 x,开头的整数),如:,123,,,-34,,,0,0123,(=1*8,2,+2*8,1,+3*8,0,),/,等于数,83,0X123 /,等于数,291,-024,,,-0X32 /,不正确,123L /,长整型数,123LU /,无符号长整型数,5,、常量,有两种表示:,定点数形式,指数形式,如:,0.123,,,.23,,,0.0,/,定点
11、数形式,123E5,,,23.4e-2,/,指数形式,要注意,E,或,e,的前面要有数字,且,E,的后面的指数必须为整数。,E2,,,2.1E3.5,,,e,/,不合法,实型常数分为单精度、双精度和长双精度,3,类。,如:,34.5,、,3.8f,、,34.6l,在,C+,中,一个实型常数未说明则表示是,double,型。,2,、浮点型常量,5,、常量,是用,单引号,括起来的一个字符。如,a,、,!,等。,此外,还有一种特殊形式,即以,开头的字符序列,称为,转义字符,。,如,n,,它表示一个换行符。,转义字符中可将反斜杠同八进制或十六进制数值结合使用,以表示相应于该数值的,ASCII,码,。,
12、用八进制数表示时,所能表示的范围为,000,377,,即从,0255,。,用十六进制数表示时,表示的范围是,x00,xff,。,3,、字符型常量,5,、常量,是由一对,双引号,括起来的字符序列。,如:,How do you do?,、,hello,字符常量和字符串常量在存储方式上是不同的。,字符常量只占一个字节的空间,而字符串常量除字符序列中每个字符占一个字节外,还要在最后多占一个字节空间用来保存一个,0,字符(空字符)称为,字符串结束标志符号,。它是系统自动增加的。,如:,hello,的长度为,6,,,占,6,个内存单元。,注意:,0,与,0,的不同。,4,、字符串常量,5,、常量,5,、符
13、号常量,用一个与常量相关的标识符来替代常量出现在程序中,这种相关的标识符称为,符号常量,。,定义方法须用类型说明符,const,。,如:,const float pi=3.14159;,定义成符号常量后,程序中对其值只能读而不能改变,否则出现编译错误。,由于其常量值不可改变,所以该常量定义时必须,初始化,。,注:,符号常量名不能放在赋值语句的左边。,5,、常量,6,、变量,变量,是指在程序中其值可以被改变的量。,变量具有三个基本要素:,名字,、,类型,和,值。,1,、变量名,C+,将大写和小写的字母认为是不同的字母。,如变量名,something,和,Something,为不同的名字。,命名变
14、量名的规则为:,不能为关键字,遵循标识符的命名规则,不能与程序中的其他名字如函数名等同名,一般讲究见名知意,一般变量名全用小写字母。如,myBook,,,theFox,。,必须先定义其类型才能使用该变量。,如:,unsigned,myAge,myWeight,;,float,myScore,;,可用赋值运算符给变量赋值。,如:,int,x(0);,unsigned short width;,width=5;,也可在定义时直接给变量赋值。这时所赋的一般是初始值,称为,变量初始化,。,如:,unsigned short width=5;,2,、变量类型,6,、变量,如:,int,a;a=300;,
15、注意,有两个值的概念:,一个是,数据值,(存放在内存空间中的数据),另一个是,地址值,(所占内存空间的起始地址),3,、变量值,内容,起始地址,空间大小,由类型决定,与变量名,A,关联,对应变量值,100110051009100d,300,6,、变量,2.4,数组,数组的定义,数组的赋值,字符数组,数组的定义,数组是一种用一个名字来标识一组有序且类型相同的数据组成的派生数据类型,它占有一片连续的内存空间。,一维数组的说明形式为:,类型说明符 数组名,常量表达式,;,起始地址,内容,B,1,001,1005,1009,100d,1011,对应元素值,与数组名关联,如:,int,B5;,表示定义了
16、一个,名为,B,的,一维,数组,其中有,5,个元素,,,类型,都为整型。,定义时,方括号,内必须为,常量形式,,不能为变量。,如:,int,size=50;,void main(),int,arraysize;,/error,应为:,const,int,size=50;,数组的定义,数组的赋值,1,、数组元素的表示,数组的赋值是给数组的各个元素赋值。数组的元素可以被赋值也可被赋初值。,一维数组元素的下标表示如下:,如:,int,a5;,则元素为,a0a4,注意:,a5,不属于该数组的空间范围,。,又如:,int,b34;,则元素为,b00b23,。,1,2,3,4,5,a0,a1,a2,a3,
17、a4,2,、,数组元素的赋初值,在定义数组时,同时给各元素赋初值,这称为,数组元素的初始化,。,规定:,数组元素的个数不能少于初始值的个数。,如:,int,a4=1,2,3,4;,int,a4=2,3;,/,默认值为,0,int,a4=1,2,3,4,5;,/,error,int,b23=,1,2,3,4,5,6;,int,b23=1,2,3,4,5;,int,b23=1,3,2,4;,数组的赋值,3,、,数组元素的赋值,即用赋值表达式给每个数组元素赋值。,如:,int,m3;,m0=1;m1=2;m2=3;,注意:,m3=4,;,/,error,也可用循环语句实现:,如:,int,a5;,f
18、or(,int,i=0;i5;i+),ai=i*2+1;,1,2,3,4,5,a0,a1,a2,a3,a4,1,3,5,7,9,数组的赋值,例如:,计算由键盘输入的五个人的平均年龄,#include,void main(),int,age5;/,数组声明,int,sum=0;,for(int,i=0;iagei;/,给数组赋值,sum+=agei;/,累加数组元素之和,cout,E,nter another age:,;,cout,the average is:,sum/5.0,endl,;,数组的应用举例,字符数组,字符数组是指数组类型为,char,的一种数组。,如:,char s14=,a
19、b,c,d,;,char s25=,a,b,c,d,0,;,char s25=,abcd,;,char s35=,abcde,;,/,error,char s3=,abcde,;,/,元素个数由初始值的个数决定,char ss23=,a,b,0,c,d,0,;,char ss23=,ab,cd,;,ss0,0,ss0,1,ss0,2,ss1,0,ss1,1,ss1,2,a,b,0,c,d,0,注意:,char s15;s15=,abcd,;,/,error,s1=,abcd,;,/,error,too,!,初始化时允许直接用字符串常量赋值,而在一般赋值时,严禁直接对数组名操作,,而只能对其中
20、的元素逐个操作,(,因为数组名是一个指针常量!,),。,如:,static,int,a=1,2,4,8,16;,for(,int,i=0;i5;i+),cout,ai,;,cout,endl,;,结果为:,1 2 4 8 16,注 意,字符数组,#include,iostream.h,void main(),int,a12;,for(int,i=0;i12;i+),ai,=i+1;,/,元素赋值,if(i%4=0)cout,endl,;,cout,ai,t;,1,2,3,4,5,6,7,8,9,10,11,12,a12,p,a0,a1,a2,a9,a10,a11,给一维数组赋值,并按每行,4,
21、个元素输出,数组的应用举例,随机生成数组的,10,个元素,求它们的最大值及平均值,#include,#include /,srand,(),及,rand(),函数,#include /,包含,time(),函数,void main(),int,i,a10,sum=0,max;,srand(unsigned,),time(NULL),);/,使种子数随时间变化,否则每次运行结果相同,/,数组元素用随机函数赋值,for(i,=0;i10;i+),数组的应用举例,ai,=rand()/300,;,/rand(),值的范围是,0,32768,/,数组元素累加求和,for(i,=0;i10;i+)sum
22、sum+ai,;,/,求数组的最大值(打擂算法),max=a0;,for(i,=1;i,max)max,=,ai,;,/,数组按每行,5,列输出,for(i,=0;i10;i+),if(i%5=0)cout,endl,;,cout,ai,t;,cout,nmax,of array a is max,endl,;,数组的应用举例,给二维数组,a34,赋值,并按每行,4,个元素输出,1,2,3,4,5,6,7,8,9,10,11,12,a00,a10,a20,a00,a01,a02,a03,a20,a21,a22,a23,1,2,3,4,5,6,7,8,9,10,11,12,a23,a00,a
23、ij,是一维数组中的第几个元素?,如,a21,:以首元素为基准,前面有,2,行,(2,4,个,),,有,1,列故有,2,4,1,9,其地址为:,(a00+,2,4,1,),数组的应用举例,给二维数组,a34,的第,0,行赋值,a0,0,a0,1,a0,2,a0,3,1,2,3,4,5,6,7,8,9,10,11,12,a23,a00,for(int,i=0;i4;i+),a0i=i+1;,for(int,i=0;i4;i+),a1i=5+i;,for(int,i=0;i4;i+),a2i=9+i;,给,1,行赋值,给,2,行赋值,数组的应用举例,给二维数组,a34,的各行赋值,a0,0,a0,
24、1,a0,2,a0,3,for(int,i=0;i3;i+)/,外循环,控制行,for(int,j=0;j4;j+),/,内循环,控制列,aij,=4*i+j+1;,cout,aij,t;,cout,endl,;,2,3,4,5,6,7,8,9,10,11,12,可把,aij,改为,*,(*(,a+i)+j,),数组的应用举例,2.5,本讲作业,从键盘上输入三个整数,求出其中的最大与最小值(用条件运算符,?:,);,分别设计一个求最大值与最小值的函数,求出最大、最小值及中间值,并输出;,用,for,或,while,循环编程输出以下图形:,4,、编程求,Sum=1!+2!+3!+,+10!,之和
25、void main(),double,x,y,z,max,min,;,cout,xyz;,/,先比较其中两数,求出大的再与第三个数相比,if(x,=y)max=x;,else max=y;,if(z,max)max,=z;,if(x,=,y)min,=x;,else min=y;,if(z,min)min,=z;,cout,max=max,tmin,min,endl,;,从键盘上输入三个数,求三个数的最大与最小值,cout,mid=(,x+y+z,-max-min),endl,;,#include,iostream.h,void main(),double x,y,z;,/,定义三个变量用
26、来输入三个数,double,maxv,midv,minv,;,/,存放最大、最小及中间数,double max(double x,double y);,/,求最大值函数,max,的声明,double min(double x,double y);,/,求最小值的函数,min,的声明,cout,xyz;,/,从键盘上输入三个任意的数,maxv,=max(x,max(y,z);,/,计算最大值,minv,=min(x,min(y,z);,/,计算最小值,midv,=(,x+y+z)-(maxv+minv,);,/,通过公式计算中间值,cout,最大值,中间值,最小值,endl,;,cout,maxv,midv,minv,y),return x;,else,return y;,/*/,/*,求最小值的函数的实现*,/,double min(double x,double y),if(x,y?x:y,);,return(x,y?x:y,);,






