第04章_New数组、字符串、结构、枚举与联合_第1页
第04章_New数组、字符串、结构、枚举与联合_第2页
第04章_New数组、字符串、结构、枚举与联合_第3页
第04章_New数组、字符串、结构、枚举与联合_第4页
第04章_New数组、字符串、结构、枚举与联合_第5页
已阅读5页,还剩91页未读 继续免费阅读

下载本文档

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

文档简介

1、计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊1/95 第第 4 章章 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊2/95 主要内容主要内容 数组数组 字符串字符串 结构体结构体 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊3/95 一维数组一维数组 二维数组二维数组 一维一维与二维的关系与二维的关系 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊4/95 全国各大城市汽车拥有量排名全国各大城市汽车拥有量排名 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊5/95 中国各大城市人口排名中国各大城市人口排名(可含流动人可含流动人

2、口口)!2000年。年。 1 重庆市重庆市 2816.00 2 上海市上海市 1858.00 3 北京市北京市 1633.00 4 成都市成都市 1257.90 5 天津市天津市 1115.00 6 广州市广州市 1004.58 7 周口市周口市 990.13 8 哈尔滨哈尔滨 987.40 9 石家庄石家庄 955.05 10 潍坊市潍坊市 883.61 11 徐州市徐州市 871.12 12 西安市西安市 830.54 13 武汉市武汉市 828.80 14 济宁市济宁市 818.27 15 盐城市盐城市 808.00 16 信阳市信阳市 798.57 17 温州市温州市 790.10 1

3、8 杭州市杭州市 786.20 19 泉州市泉州市 774.00 20 南通市南通市 766.13 5 21 青岛市青岛市 757.99 22 遵义市遵义市 749.68 23 南京市南京市 741.30 24 唐山市唐山市 724.66 25 东莞市东莞市 694.72 26 南宁市南宁市 683.51 27 湛江市湛江市 680.79 28 福州市福州市 676.00 29 邵阳市邵阳市 673.90 30 黄冈市黄冈市 666.70 31 长沙市长沙市 652.92 32 烟台市烟台市 651.47 33 荆州市荆州市 642.26 34 洛阳市洛阳市 634.15 35 苏州市苏州市

4、624.00 36 昆明市昆明市 619.33 37 南充市南充市 618.30 38 常德市常德市 611.99 39 安庆市安庆市 610.99 40 六安市六安市 609.00 41 大连市大连市 608.00 42 济南市济南市 604.85 43 茂名市茂名市 604.68 44 无锡市无锡市 599.21 45 襄樊市襄樊市 582.00 46 聊城市聊城市 580.75 47 揭阳市揭阳市 569.91 48 台州市台州市 569.39 49 达州市达州市 569.32 50 齐齐哈尔齐齐哈尔 567.80 51 宁波市宁波市 564.60 52 德州市德州市 561.67 53

5、 新乡市新乡市 551.63 54 泰安市泰安市 543.40 55 岳阳市岳阳市 542.94 56 绵阳市绵阳市 537.95 57 淮安市淮安市 534.00 58 宜宾市宜宾市 526.98 59 昭通市昭通市 525.22 60 孝感市孝感市 521.76 61 永州市永州市 512.80 62 运城市运城市 504.60 63 梅州市梅州市 503.36 64 汕头市汕头市 500.82 65 咸阳市咸阳市 499.67 66 合肥市合肥市 478.90 67 漳州市漳州市 474.74 68 扬州市扬州市 459.25 69 南昌市南昌市 458.06 70 泰州市泰州市 458

6、.02 71 怀化市怀化市 455.80 72 凉山州凉山州 448.40 73 淄博市淄博市 448.39 74 连云港连云港 446.98 75 黔东南黔东南 446.91 76 郴州市郴州市 438.50 77 红河州红河州 437.30 78 伊犁州伊犁州 434.22 79 吉林市吉林市 432.70 80 衡水市衡水市 426.03 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊6/95 什么是数组?什么是数组? 将相同数据类型的多个变量有序地组织起来构成顺将相同数据类型的多个变量有序地组织起来构成顺 序排列的集合。序排列的集合。 数组属于一种构造(复合)数据类型。数组

7、属于一种构造(复合)数据类型。 一个数组包含多个数组元素,这些元素可以是基本一个数组包含多个数组元素,这些元素可以是基本 数据类型或其它构造数据类型。数据类型或其它构造数据类型。 数组类型:数值数组、字符数组、结构数组等。数组类型:数值数组、字符数组、结构数组等。 数组中的几个概念数组中的几个概念 数组名、数组类型数组名、数组类型 数组元素、数组元素的个数数组元素、数组元素的个数 下标下标 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊7/95 一维数组的定义一维数组的定义 例如:例如: int a10; double b8; char d50; 数据类型数据类型 数组名数组名 常

8、量表达式常量表达式; 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊8/95 一维数组的初始化一维数组的初始化 例如:例如: int a10= 0,1,2,3,4,5,6,7,8,9 ; int a10=0,1,2,3,4; int a= 0,1,2,3,4,5,6,7,8,9 ; int a10=1; 数据类型数据类型 数组名数组名常量表达式常量表达式= 值值1,值值2,值值n; 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊9/95 一维数组的引用一维数组的引用 例如:例如: int a10= 0,1,2,3,4,5,6,7,8,9 ; a5、ai+j和和ai+ f

9、or(i=0;i10;i+) ai=2*i+1; for(i=0;i=9;i+) coutai; 数组名数组名下标下标 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊10/95 二维数组的定义二维数组的定义 例如:例如: int a34; a00a01a02a03 a10a11a12a13 a20a21a22a23 数据类型数据类型 数组名数组名常量表达式常量表达式1常量表达式常量表达式2; 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊11/95 二维数组的初始化二维数组的初始化 int a53= 80,75,92,61,65,71,59,63,70,85,87,90

10、,76,77,85 ; int a53= 80,75,92,61,65,71,59,63,70,85,87,90,76,77,85; int a53=1,2,3; int a53=0,1,0,0,2,3; int a3=1,2,3,4,5,6,7,8,9; 数据类型数据类型 数组名数组名常量表达式常量表达式1 常量表达式常量表达式2 =值值1,值值2,值值n; 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊12/95 二维数组的引用二维数组的引用 例如:例如: int s=0,a53; a43=3; for(int i=0;i3;i+) for(int j=0;jaji; s=s+

11、aji; 数组名数组名下标下标1下标下标2; 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊13/95 一维与二维的关系一维与二维的关系 int BUV; / 二维数组二维数组 int AM; / 一维数组一维数组 转换公式:转换公式: Buv=Am; 其中:其中:m=u*V+v 见见P.102 例例4-6 矩阵相乘矩阵相乘 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊14/95 【例【例4-1】数组元素的排序】数组元素的排序 定义定义 依次比较数据序列中相邻的两个数,将较小者放在前面,依次比较数据序列中相邻的两个数,将较小者放在前面, 较大者放在后面较大者放在后面

12、。 冒泡排序算法思路:冒泡排序算法思路: 1)从有序数列)从有序数列和无序数列和无序数列a1,a2,a3,an开始进行排序;开始进行排序; 2)第)第i步时(步时(i=2,3,n),数列),数列a1,a2,ai-1是已有序的,是已有序的, 而数列而数列ai,ai+1,an是无序的。对无序区元素两两比是无序的。对无序区元素两两比 较后从中选择一个最小元素较后从中选择一个最小元素ak放入有序区的尾部;放入有序区的尾部; 3)重复第)重复第2)步,共进行步,共进行n-i次处理。次处理。 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊15/95 程序程序 int i, j, tmp; fo

13、r(int i = 0; i i; j -) if( aj aj-1 ) int tmp = aj; aj = aj-1; aj - 1 = tmp; 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊16/95 【例【例4-2】求数组中的最大值元素】求数组中的最大值元素 算法分析:算法分析: 1. 定义一个整数数组变量;定义一个整数数组变量; 2. 由键盘输入其各个元素的值;由键盘输入其各个元素的值; 3. 首先假定数组的第首先假定数组的第0个元素是当前的最大值;个元素是当前的最大值; 4. 数组的下一个元素与这个当前的最大值比较,如果大于,数组的下一个元素与这个当前的最大值比较,如

14、果大于, 则成为新的最大值;则成为新的最大值; 5. 循环进行上一步,直到数组的全部元素都处理过一遍为循环进行上一步,直到数组的全部元素都处理过一遍为 止则转下一步止则转下一步; 6. 此时的最大值就是数组的最大值元素。此时的最大值就是数组的最大值元素。 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊17/95 源程序 int big = a0; for(int j=0; jbig) big = aj; cout最大值是最大值是”bigendl; 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊18/95 字符数组字符数组 字符串处理函数字符串处理函数 计算机程序设计计算

15、机程序设计- C+语言语言 主讲:卫颜俊19/95 字符数组的定义与初始化字符数组的定义与初始化 char Country6=C,h,i,n,a, 0; char Country=C,h,i,n,a, 0; char Country6; Country0=C; Country1=h; Country2=i;Country3=n; Country4=a;Country5=0; char Country6=China; char Country=China; char Country6=China; char Country=China; 密切注意:密切注意: 0 0 0 计算机程序设计计算机程序

16、设计- C+语言语言 主讲:卫颜俊20/95 字符数组字符数组的的输入方法输入方法 char Country6; for(int i=0;iCountryi; cinCountry; cin.getline(Country,6); 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊21/95 字符数组字符数组的的输出方法输出方法 for(i=0;i6;i+) coutCountryi; coutCountry; 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊22/95 字符串标准处理函数字符串标准处理函数 (1)输入字符串函数:)输入字符串函数:char * gets(ch

17、ar *str); (2)输出字符串函数:)输出字符串函数:int puts(char *str); (3)求字符串长度函数:)求字符串长度函数:int strlen(char *s); (4)小写字母全部转成大写函数:)小写字母全部转成大写函数:char*strupr(char*src); (5)大写字母全部转成小写函数:)大写字母全部转成小写函数:char*strlwr(char*src); (6)将字符串逆序:)将字符串逆序:char*strrev(char*src); (7)赋值函数:)赋值函数:char *strset(char *str, char c); (8)查找字符函数:)查

18、找字符函数:char *strchr(char *str, char c); (9)查找字符串函数:)查找字符串函数:int strspn(char *str1, char *str2); (10)查找字符串函数:)查找字符串函数:char *strstr(char *str1, char *str2); 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊23/95 字符串标准处理函数字符串标准处理函数 (11)字符串拷贝函数:)字符串拷贝函数:char *strcpy(char *str1, char *str2); (12)字符串比较函数:)字符串比较函数:int strcmp(c

19、har *str1, char *str2); (13)字符串比较函数)字符串比较函数: int stricmp(char *str1, char *str2); (14)字符串拼接函数:)字符串拼接函数:char *strcat(char *destin, char *source); 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊24/95 字符串标准处理函数字符串标准处理函数 (15)将整数转换为字符串函数:)将整数转换为字符串函数:char *itoa(int value, char *string, int radix); (16)把字符串转换成长整型数把字符串转换成长整

20、型数:int atoi(const char *nptr); (17)将串转换为长整数函数:)将串转换为长整数函数:long strtol(char *str, char *endptr, int base); (18)字符串转换为)字符串转换为double型值函数型值函数:double strtod(char *str, char *endptr); 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊25/95 字符串标准处理函数字符串标准处理函数 (19)把格式化的数据写入某个字符串:)把格式化的数据写入某个字符串: int sprintf( char *buffer, const

21、 char *format, argument ) ; (20)从一个字符串中读进与指定格式相符的数据)从一个字符串中读进与指定格式相符的数据 : int sscanf(const char *buffer,const char *format,argument .); 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊26/95 【例【例4-3】文字信息统计】文字信息统计 用户输入一段文本(英文),其中的用户输入一段文本(英文),其中的 标点只有逗号标点只有逗号(,)和句号(和句号(.):): 统计其中的字符统计其中的字符总个总个数(包括空格);数(包括空格); 统计统计大小写字母个

22、大小写字母个数;数; 统计统计数字个数字个数;数; 统计统计其他字符个其他字符个数。数。 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊27/95 程序程序 const int N=101; char strN; int len=0,capital=0,smallletter=0, digit=0, others=0; int i; cin.getline (str,N); i=0; while(stri!=0) len+; if(stri=A) capital+; else if(stri=a) smallletter+; else if(stri=0) digit+; else

23、 others+; i+;字符下标加字符下标加1,指向下一个字符,指向下一个字符 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊28/95 【例【例4-4】字符串转数值字符串转数值 用户输入一段文本用户输入一段文本: AA 75 24 05 4B FF 00 FF 01 09 43 01 08 97 02 18 00 80 02 34 00 00 00 00 00 00 00 00 00 0E 请编程把每个数取出来,转为十六进制请编程把每个数取出来,转为十六进制 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊29/95 二维字符数组二维字符数组 char weekday

24、710 = Sunday,Monday,Tuesday,Wednesday,Thirsday,Friday,F riday,Satday ; P.89 例例4-1 月份号转月份名月份号转月份名 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊30/95 例子例子 有一批学生数据,内容包括有一批学生数据,内容包括 char no20; char name20; int age; double score; 要求保存这些数据,并按照学号重新排序要求保存这些数据,并按照学号重新排序 如何表示这些数据?如何表示这些数据? 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊31/95

25、结构体结构体 结构体类型结构体类型 用户定义的数据类型,由若干个成员组成,这些成员用户定义的数据类型,由若干个成员组成,这些成员 也称为域或字段,这些成员可以是不同的数据类型。也称为域或字段,这些成员可以是不同的数据类型。 例如以上的学生数据例如以上的学生数据 char no20; char name20; int age; double score; 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊32/95 结构体的使用过程结构体的使用过程 1. 定义结构体类型定义结构体类型 2. 定义属于该结构体类型的变量定义属于该结构体类型的变量 3. 分别引用结构体变量中的各个成员分别引用

26、结构体变量中的各个成员 输入、计算、输出输入、计算、输出 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊33/95 结构体类型和结构体变量结构体类型和结构体变量 1定义结构体类型定义结构体类型 格式:格式: struct 结构体名结构体名 类型名类型名1 成员名成员名1; 类型名类型名2 成员名成员名2; 类型名类型名n 成员名成员名n; ; 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊34/95 示例:定义结构体类型示例:定义结构体类型student struct student int stdno; char stdname20; double stdscore;

27、 ; 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊35/95 定义结构体类型的说明定义结构体类型的说明 (1)结构体名的命名规则与用户标识符一样;)结构体名的命名规则与用户标识符一样; (2)各个成员名中可以包含多个同类型的成员)各个成员名中可以包含多个同类型的成员 名名, 之间用逗号隔开;之间用逗号隔开; (3)成员名可以和程序中的其它变量同名,互)成员名可以和程序中的其它变量同名,互 相不会干扰。相不会干扰。 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊36/95 2. 定义结构体类型的变量定义结构体类型的变量 (1)一般格式)一般格式 格式格式1: 结构体名结

28、构体名 变量名列表;变量名列表; 格式格式2: struct 结构体名结构体名 变量名列表;变量名列表; 例如:例如: struct student std1,std210; 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊37/95 (2)同时定义结构体类型和变量)同时定义结构体类型和变量 格式:格式: struct 结构体名结构体名 成员表列成员表列 变量名表列;变量名表列; 例如:例如: struct student int stdno; char stdname20; double stdscore; stu_1; 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊3

29、8/95 (3)省略结构体类型的名称)省略结构体类型的名称 同时定义结构体类型和变量时,可以省略结构体类型的名称同时定义结构体类型和变量时,可以省略结构体类型的名称 struct 成员表列成员表列 变量名表列;变量名表列; 例如:例如: struct int stdno; char stdname20; double stdscore; stu_1; 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊39/95 3结构体变量的初始化结构体变量的初始化 在定义变量同时对各成员分别赋值,各个初值按顺在定义变量同时对各成员分别赋值,各个初值按顺 序放在一对花括号中,例如:序放在一对花括号中,

30、例如: struct student int stdno; char stdname10; double stdscore; stu= 11031,Li Lin,85; 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊40/95 4. 引用结构体变量的成员引用结构体变量的成员 成员运算符成员运算符 分别引用各个成员,引用时要用成员运算符分别引用各个成员,引用时要用成员运算符“.”, 又称为分量运算符又称为分量运算符 引用格式:引用格式: 结构体变量名结构体变量名.成员名成员名 例如:例如: student1.stdscore=90.5; 计算机程序设计计算机程序设计- C+语言语言

31、主讲:卫颜俊41/95 【例【例4-4】结构体变量的使用】结构体变量的使用 定义与学生相关的结构体,其中有定义与学生相关的结构体,其中有3个成员,个成员, 分别是学号、姓名和年龄。分别是学号、姓名和年龄。 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊42/95 struct int stdno; char stdname10; double stdscore; stu; / 结构体类型与结体体变量在一条语句中定义结构体类型与结体体变量在一条语句中定义 stu.stno=123456; strcpy(,Zhang); stu.age=85; / 对每个成员分别赋值对

32、每个成员分别赋值 coutstu.stno stu.age; / 分别输出每个成员的值分别输出每个成员的值 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊43/95 【例【例4-5】 使用结构体处理学生成绩使用结构体处理学生成绩 有有10个学生,每个学生有个学生,每个学生有5门课程成绩,分别是门课程成绩,分别是“数学数学”、 “物理物理”、“化学化学”、“英语英语”和和“计算机计算机”,对每个学,对每个学 生的成绩进行判断,找出有不及格的课程,然后显示该同生的成绩进行判断,找出有不及格的课程,然后显示该同 学的学号、姓名以及不及格课程的名称和分数。学的学号、姓名以

33、及不及格课程的名称和分数。 定义结构体数据类型定义结构体数据类型student,其成员分别是学号、姓名和一个数组,其成员分别是学号、姓名和一个数组, 该数组用来保存该数组用来保存5门课的成绩。门课的成绩。 定义一个含有定义一个含有10个元素的结构体类型的数组,并初始化每个学生的个元素的结构体类型的数组,并初始化每个学生的 学号,姓名和各门课成绩,再定义一个字符串数组用来保存学号,姓名和各门课成绩,再定义一个字符串数组用来保存5门课门课 程的名称。程的名称。 先判断每个同学不及格课程的门数,当有不及格课程即门数大于先判断每个同学不及格课程的门数,当有不及格课程即门数大于0时,时, 显示该学生的学

34、号,姓名和不及格课程名称、分数和门数。显示该学生的学号,姓名和不及格课程名称、分数和门数。 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊44/95 【源程序【源程序】 struct student char stno20; / 保存学号保存学号 char stname20; / 保存姓名保存姓名 int score5; / 保存保存5门课成绩门课成绩 ; 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊45/95 student stud10= 08091101,张品张品,76,87,69,76,78, 08091102,李利李利,97,67,79,45,90, 080

35、91103,应一利应一利,54,69,76,79,56, 08091104,周勤周勤,87,88,97,99,76, 08091105,吴风吴风,69,56,98,34,32, 08091106,赵强赵强,77,87,99,65,76, 08091107,李力平李力平,91,67,67,87,65, 08091108,张军利张军利,87,45,77,56,79, 08091109,冯红冯红,100,69,89,89,76, 08091110,孙李孙李,99,76,97,96,79 ; / 定义并初始化结构体数组定义并初始化结构体数组 char course520=数学数学,物理物理,化学化学,

36、英语英语,计算机计算机; / 保存保存5门课的名称门课的名称 int i,j,cnt; 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊46/95 cout每个同学的成绩:每个同学的成绩:endl; cout 学号学号t姓名姓名t数学数学t物理物理t化学化学t英语英语t计算机计算机endl; cout= =endl; for(i=0;i10;i+) / 该循环输出每个学生的记录该循环输出每个学生的记录 coutstudi.stnotstudi.stnamet; for(j=0;j5;j+) coutstudi.scorejt; coutendl; cout= =endl; 计算机程序

37、设计计算机程序设计- C+语言语言 主讲:卫颜俊47/95 cout不及格同学的课程和成绩如下:不及格同学的课程和成绩如下:endl; for(i=0;i10;i+) cnt=0; / 统计不及格课程门数统计不及格课程门数 for(j=0;j5;j+) if(studi.scorej0) cout姓名:姓名:studi.stname 学号:学号:studi.stno 不及格门数:不及格门数: cntendl; cout=endl; for(j=0;j5;j+) if(studi.scorej60) / 输出不及格课程名称和成绩输出不及格课程名称和成绩 coutcoursej:studi.sco

38、rejendl; cout=endl; 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊48/95 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊49/95 嵌套定义例子嵌套定义例子 struct time int hour,minute,second; struct day int year,month,date; struct conversion char phonenumber11; int duration; struct day occurrentday; struct time occurrenttime; ; 49 计算机程序设计计算机程序设计- C+语言

39、语言 主讲:卫颜俊50/95 嵌套结构变量初始化嵌套结构变量初始化 struct conversion char phonenumber11; int duration; struct day occurrentday; struct time occurrenttime; account1=“1111111111”,120,2012,8,8,16,15,30; 50 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊51/95 【例【例4-6】查找是否有指定电话号码】查找是否有指定电话号码 的通话记录的通话记录 【问题分析【问题分析】 表示通话记录表示通话记录 【算法描述【算法描述】

40、 录入通话记录,按照电话号码寻找相匹配的通录入通话记录,按照电话号码寻找相匹配的通 话记录话记录 51 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊52/95 【源程序【源程序】 #include /包含基本输入输出库头文件包含基本输入输出库头文件 using namespace std; /使用名字空间使用名字空间 struct time /定义时间结构体定义时间结构体 int hour,minute,second; struct day /定义日期结构体,年、月、日定义日期结构体,年、月、日 int year,month,date; struct conversion/通话记

41、录类型通话记录类型 char phonenumber11; /电话号码电话号码 int duration; /通话时长通话时长 struct day occurrentday; /日期日期 struct time occurrenttime; /时间时间 account1=“1111111111”,120,2012,8,8,16,15,30; /初始化结构体变量初始化结构体变量account1 52 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊53/95 int main() /主函数主函数 char temp11; cout”请输入对方的电话号码请输入对方的电话号码”temp;

42、 if(strcmp(account1.phonenumber,temp)=0) /比较电话号码比较电话号码 cout”find”tempendl; coutaccount1.durationendl; /打印结构体的成员打印结构体的成员 coutaccount1.occurrentday.year”t” ; coutaccount1.occurrentday.month”t” ; cout account1.occurrentday.dateendl; coutaccount1.occurrenttime.hour”t”; coutaccount1.occurrenttime. minute

43、”t”; cout account1.occurrenttime.second endl; 53 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊54/95 else cout”not find”tempendl; return 0; 54 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊55/95 【运行结果【运行结果】 结果一:结果一: 请输入对方的电话号码请输入对方的电话号码 1111111111 find1111111111 120 2012 8 8 16 15 30 结果二:结果二: 请输入对方的电话号码请输入对方的电话号码 2222222222 not find

44、2222222222 55 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊56/95 【例【例4-7】词频统计词频统计 输入一系列英文单词,单词之间用空格隔开,用输入一系列英文单词,单词之间用空格隔开,用 “xyz”表示结束输入,统计输入过哪些单词以及表示结束输入,统计输入过哪些单词以及 各单词出现的次数,统计时,区分大小写字母,各单词出现的次数,统计时,区分大小写字母, 最后按单词的字典顺序输出单词和出现次数的对最后按单词的字典顺序输出单词和出现次数的对 照表。照表。 【问题分析【问题分析】 字典的组成字典的组成 【算法描述【算法描述】 统计不同单词出现的次数统计不同单词出现的次

45、数 56 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊57/95 【源程序【源程序】 #include /包含基本输入输出库头文件包含基本输入输出库头文件 #include using namespace std; /使用名字空间使用名字空间 struct WordList /字典类型字典类型 char word50; int freq; ; 57 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊58/95 void Sort(WordList list,int count) /排序函数排序函数 for(int i=0;ii;j=j-1) if(strcmp(listj

46、-1.word,listj.word)0) WordList tmp; tmp=listj-1; listj-1=listj; listj=tmp; 58 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊59/95 int main() /主函数主函数 WordList list5000; int i,num=0; char temp50; cout”请输入一系列英语单词,以请输入一系列英语单词,以xyz表示输入结束表示输入结束”temp; while(strcmp(temp,”xyz”)!=0) for(i=0;i=num)/若字典中无该单词,添加该词若字典中无该单词,添加该词 s

47、trcpy(listi.word,temp); listi.freq=1; num+; cintemp;/继续输入单词继续输入单词 Sort(list,num); /对字典进行排序对字典进行排序 cout”词频统计结果如下:词频统计结果如下:”endl; for(i=0;inum;i+) coutlisti.word”t”listi.freqendl; return 0; 60 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊61/95 【运行结果【运行结果】 请输入一系列英语单词,以请输入一系列英语单词,以xyz表示输入结束表示输入结束 Do you see the star ,

48、the little star ? xyz 词频统计结果如下:词频统计结果如下: , 1 ? 1 Do 1 little 1 see 1 star 2 the 2 you 1 61 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊62/95 【思路扩展【思路扩展】 如果在统计单词过程中,要去掉标点符号的如果在统计单词过程中,要去掉标点符号的 统计,该如何修改?实际运行时,如果标点统计,该如何修改?实际运行时,如果标点 符号与单词连在一起,统计结果会有哪些变符号与单词连在一起,统计结果会有哪些变 化,应该如何解决?化,应该如何解决? 62 计算机程序设计计算机程序设计- C+语言语言

49、主讲:卫颜俊63/95 共用体共用体 结构体与共用体的本质区别只要在于存储方式,结构体结构体与共用体的本质区别只要在于存储方式,结构体 的每个成员各自占用分配给自己的存储单元,各自拥有的每个成员各自占用分配给自己的存储单元,各自拥有 自己的地址,结构体类型分配的内存空间大小就是各成自己的地址,结构体类型分配的内存空间大小就是各成 员所占存储单元的总和。共用体的各个成员则占用共同员所占存储单元的总和。共用体的各个成员则占用共同 的存储单元,具有相同的首地址,占用存储单元最多的的存储单元,具有相同的首地址,占用存储单元最多的 成员的长度就是共用体的长度。成员的长度就是共用体的长度。 63 计算机程

50、序设计计算机程序设计- C+语言语言 主讲:卫颜俊64/95 共用体的定义共用体的定义 union 共用体名共用体名 类型类型1 成员名成员名1; 类型类型2 成员名成员名2; 类型类型n 成员名成员名n; ; 64 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊65/95 共用体变量定义共用体变量定义 单独定义单独定义 union postion int grand; char title20; ; union postion pos1,pos2,*p; 混合定义混合定义 union postion int grand; char title20; pos1,pos2,*p; 6

51、5 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊66/95 共用体变量初始化共用体变量初始化 共用体变量或数组在初始化时,只能对它的共用体变量或数组在初始化时,只能对它的 第一个成员赋值,对多个成员赋值是不允许第一个成员赋值,对多个成员赋值是不允许 的的 union postion pos1=1; /正确正确 union postion pos2=1,2;/正确正确 union postion pos2=1,lector,2,lector;/ 错误错误 66 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊67/95 共用体变量的使用共用体变量的使用 共用体变量的引用共

52、用体变量的引用 共用体变量名共用体变量名.成员成员 共用体变量指针共用体变量指针.成员成员 共用体变量的整体赋值共用体变量的整体赋值 共用体变量共用体变量1=共用体变量共用体变量2 67 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊68/95 【例【例4-8】学校人事信息管理学校人事信息管理 批量输入和输出学生或者教师信息,包括姓名、批量输入和输出学生或者教师信息,包括姓名、 年龄、职业和职位等信息,每位学生或者教师都年龄、职业和职位等信息,每位学生或者教师都 包含前包含前3项信息,但对学生而言,其第项信息,但对学生而言,其第4项信息表项信息表 示年级;对教师而言,其第示年级;对

53、教师而言,其第4项信息表示职称。项信息表示职称。 【问题分析【问题分析】 学校人事信息的表示学校人事信息的表示 【算法描述【算法描述】 输入和输出学校人事信息。输入和输出学校人事信息。 68 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊69/95 【源程序【源程序】 #include /包含基本输入输出库头文件包含基本输入输出库头文件 using namespace std; /使用名字空间使用名字空间 union postion int grand; char title20; ; struct person char name20; int age; char job10;

54、postion pos; ; 69 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊70/95 int main() /主函数主函数 person p3; int i; for(i=0;pi.agepi.job; if(strcmp(pi.job,”student”)=0) cin pi.pos.grand; else cin pi.pos.title; cout”*”endl; 70 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊71/95 cout”name”t”age”t”job”t” grand/title”endl; for(i=0;i3;i+)

55、 ”t”pi.age”t” pi.job”t”; if(strcmp(pi.job,”student”)=0) cout pi.pos.grandendl; else cout pi.pos.titleendl; return 0;/程序结束,程序结束, 71 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊72/95 【运行结果【运行结果】 tom 21 student 3 john 19 teacher professor rose 19 student 1 * name age job grand/title tom 21 student 3 john 1

56、9 teacher professor rose 19 student 1 72 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊73/95 【思路扩展【思路扩展】 结构体类型中包含共用体类型的定义会在哪结构体类型中包含共用体类型的定义会在哪 些情况中出现?共用体类型中包含结构体类些情况中出现?共用体类型中包含结构体类 型的定义会在哪些情况中出现?型的定义会在哪些情况中出现? 73 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊74/95 共同体的作用举例共同体的作用举例 union postion int grand; / 年级年级 char title20; / 局长

57、、处长、科长局长、处长、科长 ; union data unsigned int i ; / 作为整数看待作为整数看待 unsigned char c4 ; / 作为字符看待作为字符看待 unsigned float f; / 作为浮点数看待作为浮点数看待 ; 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊75/95 枚举类型枚举类型 在一些实际的应用中,有些变量的取值常常在一些实际的应用中,有些变量的取值常常 被限定在一个有限范围内,如一个星期只有被限定在一个有限范围内,如一个星期只有 7天,一年只有天,一年只有12个月等。个月等。C语言提供的语言提供的 “枚举枚举”类型能够在类

58、型定义时列举出所有类型能够在类型定义时列举出所有 可能的取值,将枚举类型变量的取值限定在可能的取值,将枚举类型变量的取值限定在 取值范围内。由于枚举变量只能取一个值,取值范围内。由于枚举变量只能取一个值, 不能再分解为任何基本类型,因此枚举类型不能再分解为任何基本类型,因此枚举类型 只是一种基本数据类型,而不是构造类型。只是一种基本数据类型,而不是构造类型。 75 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊76/95 枚举的定义枚举的定义 enum 枚举名枚举名 枚举常量表枚举常量表 76 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊77/95 枚举变量的定义枚举

59、变量的定义 单独定义单独定义 enum color red,yellow,blue,white,black ; enum color temp; 混合定义混合定义 enum color red,yellow,blue,white,black temp; 无类型定义无类型定义 enum red,yellow,blue,white,black temp; 77 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊78/95 枚举变量的使用枚举变量的使用 可以把枚举常量赋值给枚举变量,但不能直可以把枚举常量赋值给枚举变量,但不能直 接把元素的序号赋值给枚举变量。接把元素的序号赋值给枚举变量。

60、78 计算机程序设计计算机程序设计- C+语言语言 主讲:卫颜俊79/95 【例【例4-9】五色球的组合】五色球的组合 口袋中有红、黄、蓝、白、黑口袋中有红、黄、蓝、白、黑5种颜色的小种颜色的小 球若干,如果每次都从口袋中取出球若干,如果每次都从口袋中取出3个不同个不同 颜色的小球,共有多少种组合?试输出每种颜色的小球,共有多少种组合?试输出每种 组合的组合的3种颜色。种颜色。 【问题分析【问题分析】 小球颜色的表示小球颜色的表示 【算法描述【算法描述】 使用穷举法测试符合三种颜色要求的每种组合。使用穷举法测试符合三种颜色要求的每种组合。 79 计算机程序设计计算机程序设计- C+语言语言 主

温馨提示

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

评论

0/150

提交评论