1 / 45

第二讲 基本数据类                   型及数组等

第二讲 基本数据类                   型及数组等. 主讲:谢 昕. 本讲内容. 上次作业讲解 常见错误 基本数据类型 数组及其应用 本讲作业. 2.1 上次作业讲解. 1 、编写程序计算 y 的值: x-5 (x<1) y= x*5+2 (1≤x<10) x+5 (x≥10). 2 、从键盘上输入一个整数和一浮点数,比较 其大小,并输出小值。. 2.1 上次作业讲解. #include <iostream.h>

ruth-perez
Download Presentation

第二讲 基本数据类                   型及数组等

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第二讲 基本数据类                   型及数组等第二讲 基本数据类                   型及数组等 主讲:谢 昕

  2. 本讲内容 • 上次作业讲解 • 常见错误 • 基本数据类型 • 数组及其应用 • 本讲作业 2

  3. 2.1 上次作业讲解 1、编写程序计算y的值: x-5 (x<1) y= x*5+2 (1≤x<10) x+5 (x≥10) 2、从键盘上输入一个整数和一浮点数,比较 其大小,并输出小值。 3

  4. 2.1 上次作业讲解 #include <iostream.h> void main( ) { double x,y; cout <<"Input x:" ; cin >> x ; if(x<1) y=x-5; else if(x>=1 &&x<10) y=x*5+2; else y=x+5; cout<<"y="<<y<<endl; } 4

  5. 2.1 上次作业讲解 int x;double y; int x,double y; cout <<"Input x(int) and y(double):" ; cin >> x >>y; double min=x<y?x:y; cout<<"The min is\t"<<min<<endl; 9056.6 9056 'double ' : storage-class or type specifier(s) unexpected here; ignored nonstandard extension used : qualifiers after comma in declarator list are ignored--两个警告 5

  6. 2.2 常见错误与警告 1、变量未定义或定义了却从未使用 2、逻辑表达式错误(||与&&) 3、IF…ELSE不匹配,或IF(表达式)中少了括号 4、字符串与表达式的错误,如“y=x-5”是字符串 5、 cin >> x,y ;cin >> x>>y >>endl;之类的错误 6、函数实现的函数头处写分号的错误(见上讲程序) 7、函数未能按声明、使用、定义的原则(第四讲) 重复上机过程! 6

  7. 常见错误及改正 1、单词拼写错误 void—viod main---mian iostream--iosteam cout---count endl—end1 2、输出<< 与输入>>用错 cin<<"Enter two numbers:">>x,y; cout<<"Enter two numbers:"; cin>>x>>y; 3、main后少了( ),函数体少了{ }或{ }不匹配 7

  8. 常见错误及改正 4、;用错,该有的没有,不该有的却有 #include <iostream.h> voidmain( ) { double x,y; cout << "Enter two float number:" ; cin >> x>>y ; double z=x+y; cout <<"x+y= "<<z<<endl ; } 不是“ ”! 此处无; 应该是; 5、中文标点用错,特别是引号 肯定是中文符号错 error C2018: unknown character "0xa3" 8

  9. 常见错误及改正 6、大小写错误 void –Void  前面是x,后面完成X 7、函数后面接(),不是{ }也不是[ ] 8、常见错误 • unknown character “ 0xa3 ”:不可知字符(中文符号) • syntax error : missing ";" before type "double" • "x" : undeclared identifier:x:是没有声明的标识符 4、unexpected tokens following preprocessor directive - expected a newline(若在#include行尾有;则有本条错误):在预处理命令后有一个意外的符号 9

  10. 常见错误及改正 5、missing function header (old-style formal list?) 缺少函数头(在函数实现代码如main后面加了;就会出现) 6、subscript requires array or pointer type 下标需要数组或指针类型,max(2,4)误写成max[2,4]! 7、"max" : function does not take 3 parameters 函数不支持3个参数 8、"main" : function should return a value; "void" return type assumedmain前少了void 10

  11. 常见错误及改正 9、local variable "x" used without having been initialized 本地变量没有初始化就使用了 10、function "void _cdecl main(void)" already has a body 在程序中有两个main函数体!不能在同一文件中放两个程序的代码,一个程序中只有一个main函数! 解决办法 11

  12. 常见错误及改正 11、编译与构建时文件名称不同 大.obj : error LNK2005: _main already defined in aa.obj 大.obj : error LNK2005: "double __cdecl max(double,double)" (?max@@YANNN@Z) already defined in aa.obj Debug/aa.exe : fatal error LNK1169: one or more multiply defined symbols found 解决办法:关闭工作区-选择否-重新编译、构建 12

  13. 2.3 基本数据类型 •  基本数据类型 •  类型修饰符 •  常用数据类型

  14. 1、基本数据类型 C++语言的基本数据类型有如下4种: • char(字符型) • int(整型) • float(单精度浮点型)、 double(双精度浮点型) • void(空值型) 如:A,b ,z 12 ,98999 12.90, 0.9e12

  15. 是否能为负数 数的范围是否更宽 2、类型修饰符 C++语言中还有四种类型修饰符: • signed(有符号) • unsigned(无符号) • long(长型) • short (短型) 无符号:00000000 ~11111111 可表示0到255共256个数 有符号: 11111111~ 01111111 可表示-128到+127共256个数 0代表正,1代表负, ×111111 1

  16. 3、常用数据类型 允许用修饰符组合构成的常用数据类型有: char (signed char) ,unsigned char: 1个字节 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位有效数字)

  17. 4、常量和变量 • 常量 是指在程序中不被改变的量 • 变量 指在程序中其值可以被改变的量

  18. 5、常量 常量是指在程序中不被改变的量。 常量有各种不同的数据类型,这由它的表示方法决定。 1、整型常量 2、浮点型常量 3、字符型常量 4、字符串常量 5、符号常量

  19. 5、常量 1、整型常量 有3种表示方式: • 十进制整数 • 八进制整数(以0开头的整数) • 十六进制整数(以0X或0x开头的整数)  如: 123,-34,0 0123(=1*82+2*81+3*80) //等于数83 0X123 //等于数291 -024,-0X32 //不正确 123L //长整型数 123LU //无符号长整型数

  20. 5、常量 2、浮点型常量 有两种表示: • 定点数形式 • 指数形式 如: 0.123,.23,0.0 //定点数形式 123E5,23.4e-2 //指数形式 要注意E或e的前面要有数字,且E的后面的指数必须为整数。 E2,2.1E3.5,e //不合法 实型常数分为单精度、双精度和长双精度3类。 如:34.5 、3.8f、 34.6l 在C++中,一个实型常数未说明则表示是double型。

  21. 5、常量 3、字符型常量   是用单引号括起来的一个字符。如'a'、'! '等。 此外,还有一种特殊形式,即以'\ '开头的字符序列,称为转义字符。 如' \n ',它表示一个换行符。 转义字符中可将反斜杠同八进制或十六进制数值结合使用,以表示相应于该数值的ASCII码。 用八进制数表示时,所能表示的范围为 '\000'~'\377',即从0~255。 用十六进制数表示时,表示的范围是'\x00'~'\xff'。

  22. 5、常量 4、字符串常量   是由一对双引号括起来的字符序列。如: "How do you do? "、 "hello "字符常量和字符串常量在存储方式上是不同的。   字符常量只占一个字节的空间,而字符串常量除字符序列中每个字符占一个字节外,还要在最后多占一个字节空间用来保存一个'\0'字符(空字符)称为字符串结束标志符号。它是系统自动增加的。如: "hello "的长度为6,占6个内存单元。 注意:"0"与'0'的不同。

  23. 5、常量 5、符号常量 用一个与常量相关的标识符来替代常量出现在程序中,这种相关的标识符称为符号常量。 定义方法须用类型说明符const。如: const float pi=3.14159; 定义成符号常量后,程序中对其值只能读而不能改变,否则出现编译错误。 由于其常量值不可改变,所以该常量定义时必须初始化。注: 符号常量名不能放在赋值语句的左边。

  24. 6、变量 变量是指在程序中其值可以被改变的量。 变量具有三个基本要素:名字、类型和值。 1、变量名 C++将大写和小写的字母认为是不同的字母。 如变量名something和 Something为不同的名字。 命名变量名的规则为: • 不能为关键字 • 遵循标识符的命名规则 • 不能与程序中的其他名字如函数名等同名 • 一般讲究见名知意 一般变量名全用小写字母。如myBook,theFox。

  25. 6、变量 2、变量类型 必须先定义其类型才能使用该变量。 如: unsigned myAge , myWeight; float myScore; 可用赋值运算符给变量赋值。 如:int x(0); unsigned short width; width=5; 也可在定义时直接给变量赋值。这时所赋的一般是初始值,称为变量初始化。 如: unsigned short width=5;

  26. 内容 对应变量值 起始地址 100110051009100d 空间大小 300 与变量名A关联 由类型决定 6、变量 3、变量值 如:int a; a=300; 注意有两个值的概念: • 一个是数据值(存放在内存空间中的数据) • 另一个是地址值(所占内存空间的起始地址)

  27. 2.4 数 组 • 数组的定义 • 数组的赋值 • 字符数组

  28. 与数组名关联 B 起始地址 内容 1001 1005 1009 100d 1011 对应元素值 数组的定义 数组是一种用一个名字来标识一组有序且类型相同的数据组成的派生数据类型,它占有一片连续的内存空间。 一维数组的说明形式为: 类型说明符 数组名[常量表达式]; 如: int B[5]; 表示定义了一个名为B的一维数组,其中有5个元素,类型都为整型。

  29. 数组的定义 定义时方括号内必须为常量形式,不能为变量。 如: int size=50; void main ( ) { int array[size]; // error … } 应为:const int size=50;

  30. 数组的赋值 a[0] a[1] a[2] a[3] a[4] 1 2 3 4 5 1、数组元素的表示 数组的赋值是给数组的各个元素赋值。数组的元素可以被赋值也可被赋初值。 一维数组元素的下标表示如下: <数组名>[<下标表达式>] 如: int a[5];则元素为a[0]~a[4] 注意:a[5]不属于该数组的空间范围。 又如: int b[3][4];则元素为b[0][0]~b[2][3]。

  31. 数组的赋值 2、数组元素的赋初值 在定义数组时,同时给各元素赋初值,这称为数组元素的初始化。 规定:数组元素的个数不能少于初始值的个数。 如: int a[4]={1,2,3,4}; int a[4]={2,3}; //默认值为0 int a[4]={1,2,3,4,5}; //error int b[2][3]={{1,2,3},{4,5,6}}; int b[2][3]={1,2,3,4,5}; int b[2][3]={{1,3},{2,4}};

  32. 数组的赋值 a[0] a[1] a[2] a[3] a[4] 1 2 3 4 5 3、数组元素的赋值 即用赋值表达式给每个数组元素赋值。 如: int m[3]; m[0]=1; m[1]=2;m[2]=3; 注意:m[3]=4;//error 也可用循环语句实现: 如: int a[5]; for (int i=0;i<5;i++) a[i]=i*2+1; 1 3 5 7 9

  33. 数组的应用举例 例如:计算由键盘输入的五个人的平均年龄 #include <iostream.h> void main( ) { int age[5]; //数组声明 int sum=0; for(int i=0; i<5; i++) { cin>>age[i]; //给数组赋值 sum+=age[i]; //累加数组元素之和 cout<<"Enter another age:"; } cout<<"the average is:"<<sum/5.0<<endl; }

  34. 字符数组 ss[0,0] ss[0,1] ss[0,2] ss[1,0] ss[1,1] ss[1,2] a b \0 c d \0 字符数组是指数组类型为char的一种数组。如: char s1[4]={'a', 'b', 'c', 'd'}; char s2[5]={'a', 'b', 'c', 'd', '\0'}; char s2[5]="abcd"; char s3[5]="abcde"; //error char s3[ ]="abcde"; //元素个数由初始值的个数决定 char ss[2][3]={{'a', 'b', '\0''},{ 'c', 'd', '\0'}}; char ss[2][3]={"ab", "cd"};

  35. 字符数组 注意: char s1[5]; s1[5]="abcd"; //error s1="abcd"; //error,too! 初始化时允许直接用字符串常量赋值,而在一般赋值时严禁直接对数组名操作,而只能对其中的元素逐个操作(因为数组名是一个指针常量!)。如: • static int a[ ]={1,2,4,8,16}; • for (int i=0; i<5;i++) • cout<<a[i]<<" "; • cout<<endl; • 结果为:1 2 4 8 16 注 意

  36. 数组的应用举例 给一维数组赋值,并按每行4个元素输出  a[12] p a[0] #include "iostream.h" void main() { int a[12]; for(int i=0;i<12;i++) { a[i]=i+1;//元素赋值 if(i%4==0)cout<<endl; cout<<a[i]<<"\t"; } } a[1] a[2] a[9] a[10] a[11]

  37. 随机生成数组的10个元素,求它们的最大值及平均值随机生成数组的10个元素,求它们的最大值及平均值 数组的应用举例 #include <iostream.h> #include <stdlib.h> //srand()及rand()函数 #include <time.h> //包含time()函数 void main() {int i,a[10],sum=0,max; srand((unsigned) time( NULL ) ); //使种子数随时间变化,否则每次运行结果相同 //数组元素用随机函数赋值 for(i=0;i<10;i++)

  38. 数组的应用举例 a[i]=rand()/300;//rand()值的范围是0-32768 //数组元素累加求和 for(i=0;i<10;i++) sum=sum+a[i]; //求数组的最大值(打擂算法) max=a[0]; for(i=1;i<10;i++) if(a[i]>max)max=a[i]; //数组按每行5列输出 for(i=0;i<10;i++) { if (i%5==0)cout<<endl; cout<<a[i]<<"\t"; } cout<<"\nmax of array a[] is "<<max<<endl; }

  39. 数组的应用举例 给二维数组a[3][4]赋值,并按每行4个元素输出  a[0][0] a[0][1] a[0][2] a[0][3] a[0][0] a[0][0] a[1][0] a[2][0] a[2][0] a[2][1] a[2][2] a[2][3] a[i][j]是一维数组中的第几个元素? 如a[2][1]:以首元素为基准,前面有2行(2*4个) ,有1列故有2*4+1=9,其地址为: &(a[0][0]+ 2*4+1) a[2][3]

  40. 数组的应用举例 给二维数组a[3][4]的第0行赋值 a[0][0] a[0][0] a[0][1] a[0][2] a[0][3] for(int i=0;i<4;i++) a[0][i]=i+1; 给1行赋值 for(int i=0;i<4;i++) a[1][i]=5+i; 给2行赋值 for(int i=0;i<4;i++) a[2][i]=9+i; a[2][3]

  41. 数组的应用举例 给二维数组a[3][4]的各行赋值 a[0][0] a[0][1] a[0][2] a[0][3] for(int i=0;i<3;i++) //外循环,控制行 { for(int j=0;j<4;j++)//内循环,控制列 可把a[i][j]改为*(*(a+i)+j) { a[i][j]=4*i+j+1; cout<<a[i][j]<<"\t"; } cout<<endl; } • 234 5678 9101112

  42. 2.5 本讲作业 • 从键盘上输入三个整数,求出其中的最大与最小值(用条件运算符 ? : ); • 分别设计一个求最大值与最小值的函数,求出最大、最小值及中间值,并输出; • 用for或while循环编程输出以下图形: * ** *** **** ***** ****** ****** ***** **** *** ** * 4、编程求Sum=1!+2!+3!+…+10!之和。

  43. 从键盘上输入三个数,求三个数的最大与最小值 从键盘上输入三个数,求三个数的最大与最小值  void main() { double x,y,z,max,min; cout<<"Enter three number:\n"; cin>>x>>y>>z; //先比较其中两数,求出大的再与第三个数相比 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;

  44. 从键盘上输入三个数,通过函数实现对三个数的从小到大的排序 从键盘上输入三个数,通过函数实现对三个数的从小到大的排序  #include "iostream.h" void main() { double x,y,z; //定义三个变量用来输入三个数 double maxv,midv,minv; // 存放最大、最小及中间数 double max(double x,double y); //求最大值函数max的声明 double min(double x,double y);//求最小值的函数min的声明 cout<<"Enter three number:\n"; cin>>x>>y>>z; //从键盘上输入三个任意的数 maxv=max(x,max(y,z)); //计算最大值 minv=min(x,min(y,z)); //计算最小值 midv=(x+y+z)-(maxv+minv); //通过公式计算中间值 cout<<"最大值 "<<"中间值 "<<"最小值 "<<endl; cout<<maxv<<" "<<midv<<" "<<minv<<" "<<endl;}

  45. return(x>y?x:y); return(x<y?x:y); /**********求最大值的函数的实现***************/ double max(double x,double y) { if(x>y) return x; else return y; } /**********************************************/ /**********求最小值的函数的实现***************/ double min(double x,double y) { if(x<y) return x; else return y; } /**********************************************/

More Related