c语言程序设计15第十四讲第六章下培训课件

上传人:日度 文档编号:149739047 上传时间:2020-10-29 格式:PPT 页数:61 大小:543KB
返回 下载 相关 举报
c语言程序设计15第十四讲第六章下培训课件_第1页
第1页 / 共61页
c语言程序设计15第十四讲第六章下培训课件_第2页
第2页 / 共61页
c语言程序设计15第十四讲第六章下培训课件_第3页
第3页 / 共61页
c语言程序设计15第十四讲第六章下培训课件_第4页
第4页 / 共61页
c语言程序设计15第十四讲第六章下培训课件_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《c语言程序设计15第十四讲第六章下培训课件》由会员分享,可在线阅读,更多相关《c语言程序设计15第十四讲第六章下培训课件(61页珍藏版)》请在金锄头文库上搜索。

1、1,C语言编程是一项技艺,需要多年的历练才能达到较为完善的境界! -摘自Expert C Programming,2,高级语言程序设计,主讲教师:贾彩燕 计算机与信息技术学院 计算机科学与技术系 ,3,第六章 数组,4,数组的概念、定义和使用 数组程序实例 数组作为函数参数 字符数组和字符串 两维和多维数组 编程实例,主要内容,一维数值型数组的重要应用,5,要点回顾,一维数组的重要操作 排序 查找 插入 删除 元素交换 字符数组的如何定义,如何初始化? 字符数组的有效长度和字符数组? 常用的字符串处理函数有哪些?,6,例,找出(标准输入)文本中最长行并输出,保存已读最长行以输出,数组maxli

2、ne,按字符串形式。 数组line保存新行,更长时转存maxline。 假定行长不超过1022字符,用符号常量定义数组大小。,函数getline读入一行,存入参数数组并返回行长。 需防止越界,用参数limit控制实参数组长度。 int getline(int limit, char line);,基本处理框架: while (还有新行输入) if (新行比已记录的最长行更长) 记录新行及其长度; 输出记录下来的最长行;,7,行总有字符(空行有换行符),返回值0。文件结束时返回0。 设MAXLEN表示数组长度,大循环可写为: while (getline(MAXLEN, line) != 0)

3、.,int main () int n, max = 0; /*记录当前行和最长行长度*/ char lineMAXLEN, maxlineMAXLEN; while (n = getline(MAXLEN, line) 0) if (n max) /*新行更长,保存 */ strcpy(maxline, line); max = n; if (max 0) printf(”Len: %dn%sn, max, maxline); return 0; ,8,整个程序: #include #include enum MAXLEN = 1024 ; int getline(int limit, ch

4、ar line); int main() int getline(int limit, char line) int c, i = 0; while(i limit - 2 ,9,#include enum MAXLEN = 1024 ; int getline(void); char lineMAXLEN, maxlineMAXLEN; int main () int n, max = 0; /*当前行和最长行长*/ while (n = getline() 0) if (n max) max = n; strcpy(maxline, line); if (max 0) printf(%sn

5、, maxline); return 0; ,另一种写法:把两个数组作为外部变量,各函数里直接访问,不再作为参数传递。,10,int getline(void) int c, i = 0; while(i MAXLEN-2 ,优点:可简化函数定义和参数描述。 缺点:数组名写在函数定义里,造成函数对全局数据的依赖。,11,程序的缺点: 1)固定数组限制了能读入的最长行; 2)出现超长行时出现截断,且长度统计错误。 长度统计错误问题易解决:数组满后继续读字符计数,但字符不存入line。最后得到实际最长行的长度,及该行中不超过1022个实际字符。,人们倾向于把程序里大型、唯一、许多函数公用的数据(如

6、大数组)定义为外部变量。一般数据用参数传递。 对于具体问题应怎样处理,要考虑软件系统实现各方面的问题,如方便、清晰、数据安全等因素。,怎么办?,12,第十四讲(作业提示),P215页第5题: 写一个把数字字符串转换成整数的函数,它只有一个字符数组参数 参照:P192页二进制转换 P215页第11题: 写程序,它读入一个文件,输出其中最长的词 参照:P194页读入文件输出最长行 P215页第13题: 写一个函数,它能够判断字符串是否是一个回文 英文字符串、中文字符串、中英文混杂 中文:双字节表示一个中文 要求:首字节的ASCII值大于127简单方法 准确方法:了解中文的unicode, 双字节编

7、码后对应的ASCII值在19968(4E00)至40891(9FBB)之间,13,轻松一下:回文(Palindrome)的乐趣,回文就是指一个单词或短语,其顺读和倒读都是一样的 两个经验的回文 拿破伦被放逐到Elba岛时说的一句话“Albe was I, ere I saw Elba” A man, a plan, a canal-panama! 1983年10月,CMU计算机科学研究生Jim Saxe将它扩展为: A man, a plan, a cat, a canal-panama! 一场竞赛开始了,14,世界上最长的回文,耶鲁大学的Steve Smith A tool, a fool,

8、 a pool-loopaloofallota! 几周之后的扩展 A man, a plan, a cat, a ham , a yak, a yam, a hat, a cannal-panama! 世界上最长的回文 17826个单词,15,清代女诗人吴绛雪的四季回文诗,春:莺啼岸柳弄春晴,夜月明。 莺啼岸柳弄春晴,柳弄春晴夜月明。明月夜晴春弄柳,晴春弄柳岸啼莺。 夏:香莲碧水动风凉,夏日长。 香莲碧水动风凉,水动风凉夏日长。长日夏凉风动水,凉风动水碧莲香。 秋:秋江楚雁宿沙洲,浅水流。 秋江楚雁宿沙洲,雁宿沙洲浅水流。流水浅洲沙宿雁,洲沙宿雁楚江秋。 冬:红炉透炭炙寒风,御隆冬。 红炉透炭

9、炙寒风,炭炙寒风御隆冬。冬隆御风寒炙炭,风寒炙炭透炉红。,16,数组的概念、定义和使用 数组程序实例 数组作为函数参数 字符数组和字符串 两维和多维数组 编程实例,主要内容,一维数值型数组的重要应用,17,6.5 两维和多维数组,一维数组有一个下标,元素线性排列。 需要处理更复杂的结构,如数值应用中的矩阵。 矩阵为两维,元素通过两个下标指定。如何表示?,例:计算两个88的矩阵的和及乘积 计算三维空间中的一系列点的中心。,18,二维数组的定义 定义方式: 数据类型数组名常量表达式常量表达式;,例 int a34; double b25; int c234; int a3,4; (),行数,列数,

10、元素个数=行数*列数,二维和多维数组,称a为34的int(二维)数组,b为25的double(二维)数组等,c为234的int(三维)数组,19,数组元素的存放顺序 原因:内存是一维的 二维数组:按行序优先 多维数组:最右下标变化最快,二维和多维数组,20,每个元素ai由包含4个元素 的一维数组组成,二维数组a是由3个元素组成,二维数组理解,a是开始位置(数组a的首地址)也是a0的开始位置,也是a00的位置,21,二维数组元素的初始化 分行初始化:,22,二维数组元素的初始化 按元素排列顺序初始化 :,23,设有数组定义: double a32; int b44; a表示整个数组,a0、a1和

11、a2表示成员数组。a01表示a的0成员数组中下标1的元素。例: a21 = a01 + a11;,二维(多维)数组的表示和使用,for (i = 0; i 4; +i) for (j = 0; j 4; +j) bij = i + j;,24,例:向一个二维数组输入并输出其全部元素,#include int main() int i, j; int b32; printf(“输入数据:n”); for (i = 0; i 3; i+) for (j = 0; j 2; j+) scanf(“%d”, ,25,for(i = 0; i N; +i) for(j = 0; j N; +j) x =

12、 0.0; for(k = 0; k N; +k) x += Aik * Bkj; Cij = x; for(i = 0; i N; +i) for(j = 0; j N; +j) printf(%f%c, Cij, j=N-1 ? n : );,例:写程序段求出由两维数组A、B表示的55矩阵的 乘积,存入两维数组C(设A,B已有值)并输出。,26,例:将5个同学的姓名从小到大排序并输出,27,二维(多维)数组作为函数参数,下面函数求出n5数组中数据均值(n是参数): double aavg (int n, double a5) int i, j; double sum = 0.0; for

13、(i = 0; i n; +i) for (j = 0; j 5; +j) sum += aij; return sum / (5 * n); ,可用于任何n5的数组,但不能用于例如47的数组 下章将介绍一种定义通用函数的方法。,作为函数参数时不必给出最左一维长度,但要求给出除最左一维外其他各维的长度。,28,例: 有一个3*4的矩阵,求出其中的最大元素的值.,#include int max_value(int, int 4); int max_value(int n, int array4) int i, j, max = array00; for (i = 0; i max) max =

14、 arrayij; return max; int main() static int a34 = 1,3,5,7,2,4,6,8,15,17,34,12; printf(“max value is %dn”, max_value(3, a); return 0; ,29,数组的概念、定义和使用 数组程序实例 数组作为函数参数 字符数组和字符串 两维和多维数组 编程实例,主要内容,30,6.6 编程实例(下),本节讨论一些基于数组的编程实例。 一个具体问题可写出许多不同的程序。从问题到程序的工作过程中,许多地方需要编程者做出选择。 有些选择涉及对问题的不同考虑或认识,可能引起程序间的显著差异。

15、,31,例1 :成绩直方图 文件里保存着一批学生成绩,写程序读入这些成绩,产生其平均值M和标准差S,并做直方图。有定义:,程序中需要反复使用学生成绩,应存入数组(double型)。 程序工作比较多,考虑将主要工作划分为若干函数。,程序工作分为三步(第一层分解): 输入, 计算并输出统计量, 计算并输出直方图。,32,enum NUM = 200, HISTOHIGH = 60 ; double scoresNUM; int readscores(int lim, double tb); void statistics(int num, double tb); void histogram(in

16、t num, double tb, int high); int main(void) int n = readscores(NUM, scores); statistics(n, scores); histogram(n, scores, HISTOHIGH); return 0; ,程序主体结构,函数原型,33,int readscores(int lim, double tb) int i = 0; while(ilim ,输入成绩函数,34,void statistics(int n, double tb) int i; double s, sum, avr; if (n 2) /*项数小于2时的处理*/ printf(Data too few.n); return; for (sum =

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 专业基础教材

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号