第04章_复杂信息的表示与处理_第1页
第04章_复杂信息的表示与处理_第2页
第04章_复杂信息的表示与处理_第3页
第04章_复杂信息的表示与处理_第4页
第04章_复杂信息的表示与处理_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、0西安交通大学西安交通大学计算机教学实验中心计算机教学实验中心http:/http:/2012.82012.8第4章 复杂信息的表示与处理计算机程序设计(计算机程序设计(C+)内容提要数组数组二维数组二维数组多维数组多维数组字符串字符串一维字符数组一维字符数组二维字符数组二维字符数组string类类1结构体结构体枚举枚举4.1多个事物的多项特征 多项事物的多个相同类型的特征,多项事物的多个相同类型的特征, 一个班级一个班级60位同学的三门课程的成绩位同学的三门课程的成绩 多个矩形的位置、长和宽多个矩形的位置、长和宽 数学中的数学中的n维空间的多个点维空间的多个点24.1.1 二维数组二维数组

2、1.1.二维数组的定义二维数组的定义 ; 例如例如 int rectangle602 char months1220; const int N=100,M=3; double scoresNM+1;3 2.2.二维数组的使用二维数组的使用 int A55; int sum; A00=2; A01=7; A02=6; A10=8; A11=1; A12=3; A20=10;4A21=5;A22=4; sum=A00+ A11+ A22 coutA00 A11 A22 sumendl; 注意下标不能越界注意下标不能越界 3.3.二维数组在计算内存中的存储二维数组在计算内存中的存储int A5;in

3、t B34; int i,j;for(i=0;i5;i+)Ai=2*i+1;for(i=0;i3;i+)for(j=0;j4;j+) Bij=(i+1)*(j+1);5int A5;int B34; int i,j;for(i=0;i5;i+)Ai=2*i+1;for(i=0;i3;i+)for(j=0;j4;j+) Bij=(i+1)*(j+1);6 4.4.二维数组初始化二维数组初始化 =,.; 举例举例int a=9;int B33=a+1,a+2,a+3,a+4,a+5,a+6,a+7,a+8,a+9;int A54=2,7,6,8,1,3,10,5,4;int A3=2,7,6,8,

4、1,3,10,5,4;int A33=2,7,6,8,1,3,10,5,4;int A33=2,7,8,1,10,5;7 5.5.用一维数组存放矩阵元素用一维数组存放矩阵元素int A20=4,1,6,2,17,3,11,18,20,14,15,19,5,7,9,8,10,12,16,13,;int B54= 4,1,6,2,17,3,11,18,20,14,15,19,5,7,9,8,10,12,16,13,;Ak=BijAk=Bij, k=k=?84.1.2.多维数组 int A543int A543 double B3456double B34569想一想数组还有哪些具体应用?104.1

5、.3 二维字符数组及字符串的其他表示方法 1.1.二维字符数组存放多个字符串二维字符数组存放多个字符串char weekday110=Sunday; char weekday2710=Sunday,Monday,Tuesday, Wednesday, Thirsday,Friday,Satday; 【例【例4-14-1】 用户输入阿拉伯数字表示的月份,如用户输入阿拉伯数字表示的月份,如1,2或或3等,请输出等,请输出对应的英文表示的月份,如对应的英文表示的月份,如January,Febuary,March等。等。 【问题分析】【问题分析】 表示多个字符串使用二维字符数组。如果英文单词表示表示多

6、个字符串使用二维字符数组。如果英文单词表示的月份与行标对应,问题就容易了,如的月份与行标对应,问题就容易了,如January对应第对应第1行。行。11#include using namespace std;int main()char month1312=,January,February,March,April,May,June,July,August,September,October,November,December;/int m; /coutm; /输入月份输入月份while(m0 & m13) /coutmonthmendl;coutm;/return 0;12 【问题问

7、题扩展】扩展】 容易编写表示星期几的数字转换为单词的程序。容易编写表示星期几的数字转换为单词的程序。 编写程序,判断用户给定的日期是星期几。用户输入编写程序,判断用户给定的日期是星期几。用户输入用数字表示的年、月、日,输出星期几的单词,如输入用数字表示的年、月、日,输出星期几的单词,如输入2013 2 2输出输出“Saturday”。13 2. 2.用用stringstring类型的类型的“变量变量”表示字符串表示字符串string ,.; 举例举例string text1,text2; /定义两个对象定义两个对象text1=Sluice gates at Three Gorges Dam o

8、pened to discharge water.;/text2=07-07-2012 09:04 BJT;/: string text3(Heavy rains across southern China are pushing water levels at the Three Gorges Dam beyond the flood level limit.);14 .();); int k;k=text3.find(Heavy);对象操作函数(方法)对象操作函数(方法)char &at(int n);/返回第返回第n个字符(从个字符(从0开始),开始),const char *c

9、_str()const;/返回一个以返回一个以null终止的终止的char型字符串型字符串string substr(int pos = 0,int n = npos) const;/返回返回pos开始的开始的n个字符组成的字符串。个字符组成的字符串。int find(char c, int pos = 0) const;/从从pos开始查找字符开始查找字符c在当前在当前字符串的位置。字符串的位置。int find(const char *s, int pos = 0) const;/从从pos开始查找字符开始查找字符串串s在当前串中的位置。在当前串中的位置。15string &rep

10、lace(int p0, int n0,const char *s);/删除从删除从p0开始的开始的n0个字符,然后在个字符,然后在p0处插入串处插入串s。string &insert(int p0, const char *s);/在在p0处插入字符串处插入字符串s。string &erase(int pos = 0, int n = npos);/删除删除pos开始的开始的n个字个字符,返回修改后的字符串。符,返回修改后的字符串。16 【例【例4-24-2】使用】使用stringstring进行字符串的操作。进行字符串的操作。设有两个句子:设有两个句子:Heavy rain

11、s are pushing water levels beyond the limit.Sluice gates at Three Gorges Dam opened to discharge water.开始由两个符号表示,请将它们合并为一段文字,然后查开始由两个符号表示,请将它们合并为一段文字,然后查找其中的找其中的“Heavy”替换为替换为“Strong”,最后显示处理过,最后显示处理过的文本。的文本。【问题分析】【问题分析】目的目的:练习使用练习使用string类表示字符串,先定义两个类表示字符串,先定义两个string对对象,为它们赋值,用象,为它们赋值,用“+”号将它们连接起来,使

12、用号将它们连接起来,使用find函数查找函数查找“Heavy”的位置,使用的位置,使用erase函数删除该字符函数删除该字符串,再使用串,再使用insert函数插入函数插入“Strong”。17【源程序】使用【源程序】使用string字符串的操作字符串的操作/例例4-2用用string类的对象表示和处理字符串类的对象表示和处理字符串#include /包含需要的头文件包含需要的头文件#include /使用使用string类需要包含头文件类需要包含头文件stringusing namespace std;/名字空间名字空间int main()/主函数主函数 /定义并初始化字符串对象定义并初始化

13、字符串对象text1string text1(Heavy rains are pushing water levels beyond the limit.);string text2,text3; /定义但没有初始化话对象定义但没有初始化话对象text2,text3int k;/定义整型变量定义整型变量k18/为对象为对象text2赋值赋值text2=Sluice gates at Three Gorges Dam opened to discharge water.; text3=text1+text2;/k=text3.find(Heavy); text3.erase (k, sizeof

14、(Heavy)-1); /删除删除Heavytext3.insert (k,Strong);couttext3endl;return 0;194.2多项特征整体描述 表示一般班级的表示一般班级的姓名、学号、年龄、分数姓名、学号、年龄、分数char name20;char number20;int age;float score;存在的问题?存在的问题?204.2.1 结构体类型的定义和使用 1.1.结构体的定义结构体的定义struct 类型名类型名1 成员名表成员名表1; 类型名类型名2 成员名表成员名表2; . 类型名类型名n 成员名表成员名表n;21 struct Student char

15、 number20; char name20; int age; float score;Struct Student huagong30;Student huagong30;2.结构体变量的声明和初始化结构体变量的声明和初始化 struct struct ; struct Student zhang, li; struct struct =, , =, . ;, . ;struct Student cheng= 0101, 王鹏王鹏, 20, 98 , wang;22结构体变量的其他声明方法 定义结构体时同时声明变量。定义结构体时同时声明变量。struct Dateint year,mont

16、h,day;today=2013,2,2,tomorrow; 省略结构体名省略结构体名struct Rectangledouble length, width;rect1=10,20,rect2,rect3; 233.结构体变量的使用 cheng= 0101, cheng= 0101, 王鹏王鹏, 20, 98 , 20, 98 X X 分量运算符分量运算符、成员运算符成员运算符“. .”. 【例【例4-34-3】结构体的使用。】结构体的使用。 本例说明结构体的定义、嵌套,结构体变量定义、初始本例说明结构体的定义、嵌套,结构体变量定义、初始化、输入、赋值和输出等。化、输入、赋值和输出等。24#

17、include using namespace std;/结构体的定义,一般在结构体的定义,一般在main函数之外函数之外struct Date /结构体结构体Dateint year,month,day; /注意最后的分号注意最后的分号struct Student /结构体结构体Studentchar number20;char name20;Date birthday; /结构体的嵌套,成员是另一个结构体变量结构体的嵌套,成员是另一个结构体变量float score; /注意最后的分号注意最后的分号25int main()struct Student cheng= 0101, 王鹏王鹏,1

18、993,1,1, 98 , wang,zhang; cinwang.number ; cinwang.birthday.year wang.birthday.monthwang.birthday.daywang.score ; zhang=wang; t; /coutwang.birthday .year. wang.birthday .month .wang.birthday .day ;couttwang.scoreendl; cheng.birthday.month=2; / coutcheng.numbertchen

19、t; /coutcheng.birthday .year. cheng.birthday .month .cheng.birthday .day ;couttcheng.scoreendl; return 0;264.结构体变量所占得内存大小 一个字符占一个字节,一个整数占一个字符占一个字节,一个整数占4 4个字节,那么下个字节,那么下列结构体:列结构体:struct SHAPE char name; int x;int y;char classification; ; 占几个字节呢?占几个字节呢?27#include using namespace std;struct SHAP

20、E1 char name;int x; int y; char classification;/为节省篇幅,写在一行,不推荐为节省篇幅,写在一行,不推荐struct SHAPE2 char name;double x;int y; char classification;struct SHAPE3 char name;double x;double y;char classification;int main()coutsizeof(SHAPE1) sizeof(SHAPE2) sizeof(SHAPE3)endl;return 0;28使用使用sizeof()或或sizeof()4.2.2结

21、构体数组 1.1.结构体数组的定义结构体数组的定义struct ; 例如例如struct Student huagong50;2.2.结构体数组的使用结构体数组的使用huagongi.number、、huagongi.score注意下标范围注意下标范围二维、三维、更多维二维、三维、更多维293.结构体数组的初始化 struct =;struct Student huagong50=1301,zhao,1994,5,8,98, 1302,qian,1995,6,12,96, 1303,sun,1994,12,2,97 ;struct Student huagong=13

22、01,zhao,1994,5,8,98, 1302,qian,1995,6,12,96, 1303,sun,1994,12,2,97;30 【例【例4-44-4】成绩统计。】成绩统计。 使用结构体数组,保存一个班级(不超过使用结构体数组,保存一个班级(不超过100人)的三门人)的三门课程的成绩。每个数组元素记录一个人的学号、姓名及课程的成绩。每个数组元素记录一个人的学号、姓名及高等数学、英语、程序设计等三门课程的成绩和平均成高等数学、英语、程序设计等三门课程的成绩和平均成绩。每个人的信息从键盘输入,输入全绩。每个人的信息从键盘输入,输入全0信息表示结束(信息表示结束(以姓名为以姓名为”0”作为

23、判别依据),平均成绩自动计算,对成作为判别依据),平均成绩自动计算,对成绩进行从大到小排序后输出。绩进行从大到小排序后输出。 【问题分析】【问题分析】31插入排序的算法设待排序元素用数组设待排序元素用数组Ai表示,表示,i=0,1,.,N-1;对对i=1,N-1 /控制控制N-1次插入,每次插入的元素为次插入,每次插入的元素为Ai tmp=Ai /把把Ai保存在临时变量保存在临时变量tmp中中 对对j=i-1,i-2,.,0 /与前面与前面i个元素比较个元素比较 若若tmpAj,则,则 /小于前面的元素,小于前面的元素,Aj+1=Aj /前面元素后移前面元素后移 否则否则 /不小于前面的元素不

24、小于前面的元素 转转 Aj=tmp /放在当前放在当前j指位置指位置结束结束 /N-1次插入后结束次插入后结束32【算法描述】定义相应的变量、数组,定义相应的变量、数组,N=0N=0;输入第输入第N+1N+1个人的信息(平均成绩不输入);个人的信息(平均成绩不输入);如果姓名是如果姓名是”0”0”,转;否则,继续;,转;否则,继续;计算平均成绩;计算平均成绩;N=N+1N=N+1;排序;排序;通过循环,按数组的顺序输出每个人的信息。通过循环,按数组的顺序输出每个人的信息。结束。结束。33【源程序】#include #includeusing namespace std;/结构体的定义结构体的定

25、义struct Student /结构体结构体Studentchar number10;/学号学号char name20;/姓名姓名float score3;/三门课程成绩三门课程成绩 float average;/平均成绩平均成绩; /注意最后的分号注意最后的分号344.3取有限值的特征的描述取有限值的特征的描述枚举枚举 性别的取值为性别的取值为 男,女男,女 方向的取值为方向的取值为 东,南,西,北东,南,西,北 星期的取值是星期的取值是Sun, Mon,Tes, Wed,Thu, Fri,SatSun, Mon,Tes, Wed,Thu, Fri,Sat 表示?表示? 限制?限制? 运算

26、?运算?35 1.1.枚举类型的定义枚举类型的定义 枚举类型的定义格式为:枚举类型的定义格式为:enum 枚举常量表枚举常量表;枚举元素枚举元素enum ColorRED,YELLOW,BLUE,WHITE,BLACK;enum WeekSun,Mon,Tes,Wed,Thu,Fri,Sat;enum CoinPENNY=1,NICKEL=5,DIME=10,QUARTER=25 HALF_DOLLAR=50,DOLLAR=100;enum ColorRED,YELLOW,BLUE=1,WHITE,BLACK; enum WeekSun=7,Mon=1,Tes,Wed,Thu,Fri,Sat;

27、36 注意,枚举常量实际是以标识符形式表示的整型量注意,枚举常量实际是以标识符形式表示的整型量而不是字符串,或字面常量而不是字符串,或字面常量enum Selection A,B,C,D; 错误错误 enumb Year=2015,2016,2017,2018,2019,2020;错错372.枚举变量的声明枚举变量的声明 enum enum ; enum COLOR background,foreground; Week begin,end;enum WeekSun=7,Mon=1,Tes,Wed,Thu,Fri,Satbegin,end;enum Sun=7,Mon=1,Tes,Wed,Th

28、u,Fri,Satbegin,end; 383.枚举变量的使用 可以将枚举常量或相同类型的枚举变量赋值给枚可以将枚举常量或相同类型的枚举变量赋值给枚举变量;举变量; 不允许将整数赋给枚举变量,但可以使用强制类不允许将整数赋给枚举变量,但可以使用强制类型转换后赋给枚举变量;型转换后赋给枚举变量; 不用类型的枚举变量之间不能相互赋值;不用类型的枚举变量之间不能相互赋值; 可将枚举变量、常量赋值给整型变量;可将枚举变量、常量赋值给整型变量; 枚举变量可以参加数学运算,结果是数值型;枚举变量可以参加数学运算,结果是数值型; 枚举变量不能直接输入;枚举变量不能直接输入; 枚举变量可以直接输出,但输出的是

29、变量的整数枚举变量可以直接输出,但输出的是变量的整数值,而不是枚举常量名;值,而不是枚举常量名;39【例4-5】枚举变量的使用规则演示404.4 综合实例 4.4.1 4.4.1 矩阵运算矩阵运算 【例【例4-64-6】矩阵相乘。用户输入】矩阵相乘。用户输入A AM MN N,B,BN NK K两个矩阵的两个矩阵的元素,计算它们的乘积并输出。其中元素,计算它们的乘积并输出。其中M,N,KM,N,K也由用户也由用户输入,它们均不超过输入,它们均不超过2020。 【问题分析】【问题分析】41问题扩展 这是一个正确的程序,但不是一个好的程序,请这是一个正确的程序,但不是一个好的程序,请同学们讨论这个

30、程序有哪些不足?如何处理?同学们讨论这个程序有哪些不足?如何处理? 关于矩阵的典型运算还有两个矩阵的和、差,求关于矩阵的典型运算还有两个矩阵的和、差,求矩阵的逆矩阵、转置矩阵,矩阵元素的最大值、最矩阵的逆矩阵、转置矩阵,矩阵元素的最大值、最小值,各行的最大、最小值,对角线的乘积、和等小值,各行的最大、最小值,对角线的乘积、和等等,总之是通过下标操作数组的元素。等,总之是通过下标操作数组的元素。424.4.2 字符串处理字符串处理 【例【例4-74-7】取子字符串。用户输入一个字符串,然后】取子字符串。用户输入一个字符串,然后输入起始位置输入起始位置k k和长度和长度l l,显示从第,显示从第k k个字符开始,长个字符开始,长度为度为l l的子字符串。若从的子字符串。若从k k开始,到末尾的长度小于开始,到末尾的长度小于l l时,只取到末尾。要求字符串输入一次,子串操作时,只取到末尾。要求字符串输入一次,子串操作可以多次,输入位置和长度均为可以多次,输入位置和长度均为0 0时停止。时停止。 【问题分析】【问题分析】43 【算法描述

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论