《工学ch数组》ppt课件

上传人:tia****nde 文档编号:70495924 上传时间:2019-01-17 格式:PPT 页数:41 大小:708.81KB
返回 下载 相关 举报
《工学ch数组》ppt课件_第1页
第1页 / 共41页
《工学ch数组》ppt课件_第2页
第2页 / 共41页
《工学ch数组》ppt课件_第3页
第3页 / 共41页
《工学ch数组》ppt课件_第4页
第4页 / 共41页
《工学ch数组》ppt课件_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《《工学ch数组》ppt课件》由会员分享,可在线阅读,更多相关《《工学ch数组》ppt课件(41页珍藏版)》请在金锄头文库上搜索。

1、Ch6 数组,C语言快速培训教案,2019/1/17,NEUQ计算机兴趣小组专用教案,2,内容提要,数组类型; 向函数传递一维数组和二维数组; 常用算法:排序、查找、求最大最小值等; 用字符数组存取字符串; 使用字符串处理函数处理字符串,2019/1/17,NEUQ计算机兴趣小组专用教案,3,数组的用处,保存大量同类型的相关数据 如矩阵运算,表格数据等,2019/1/17,NEUQ计算机兴趣小组专用教案,4,数组(Array),int a10; 定义一个有10个元素的数组,每个元素的类型均为int 使用a0、a1、a2、a9这样的形式访问每个元素。它们与普通变量没有任何区别 系统会在内存分配连

2、续的10个int空间给此数组 数组下标可以是整型表达式 直接对a的访问,就是访问此数组的首地址,a,a9,a8,a7,a1,a0,2019/1/17,NEUQ计算机兴趣小组专用教案,5,数组的定义与初始化,数组定义后的初值仍然是随机数,一般需要我们来初始化 int a5 = 12, 34, 56 ,78 ,9 ; int a5 = 0 ; int a = 11, 22, 33, 44, 55 ; 数组大小最好用宏来定义,以适应未来可能的变化 #define SIZE 10 int aSIZE; 数组大小定义好后,将永远不变,2019/1/17,NEUQ计算机兴趣小组专用教案,6,数组的使用,数

3、组的下标都是从0开始 对数组每个元素的使用与普通变量无异 可以用任意表达式作为下标,动态决定访问哪个元素 for (i=0; iSIZE; i+) ai = 2 * i; 下标越界是大忌! 使用大于最大下标的下标,将访问数组以外的空间。那里的数据是未知的,可能带来严重后果 sizeof可以用来获得数组大小,2019/1/17,NEUQ计算机兴趣小组专用教案,7,数组的特点,快速地随机访问 一旦定义,不能改变大小,2019/1/17,NEUQ计算机兴趣小组专用教案,8,只能逐个对数组元素进行操作(字符数组例外),输入方法:,int a10,i;,输入第i个数组元素:,scanf(“%d“,输入整

4、个数组元素:,for (i=0;i10;i+) scanf(“%d“,输出方法:,输出第i个数组元素:,printf(“%d“,ai);,输出整个数组元素:,for (i=0;i10;i+) printf(“%d“,ai);,一维数组的输入和输出,2019/1/17,NEUQ计算机兴趣小组专用教案,9,例6.1,兔子生崽问题 Fibonacci数列 1,2,3,5,8,13,21,34,55,89,144,233,,2019/1/17,NEUQ计算机兴趣小组专用教案,10,例6.1,#include #define YEAR_MONTH 12 main() int fYEAR_MONTH+1

5、= 0,1,2; int month; for (month=3; month=YEAR_MONTH; month+) fmonth = fmonth-1 + fmonth-2; for (month=1; month=YEAR_MONTH; month+) printf(“%dt“, fmonth); printf(“nsum = %dn“, fYEAR_MONTH); ,2019/1/17,NEUQ计算机兴趣小组专用教案,11,例6.2 打印出最高分及其学生序号,从键盘输入学生人数n; 从键盘输入所有学生的学号和成绩分别存入数组num和score 假设其中的一个学生成绩为最高,同时记录其学

6、号,即令 maxScore = score0 maxNum = num0; 对所有学生成绩进行比较,即 for (i=0; i maxScore, 则修改maxScore值为scorei, 并记录其学号maxNum = numi; 打印最高分maxScore及其学号maxNum;,2019/1/17,NEUQ计算机兴趣小组专用教案,12,#include #define ARR_SIZE 40 main() float scoreARR_SIZE, maxScore; int n, i; long maxNum, numARR_SIZE; printf(“Please enter total

7、number:“); scanf(“%d“, ,2019/1/17,NEUQ计算机兴趣小组专用教案,13,float FindMax(float arr, int n) float max; int i; max = arr0; for (i=1; i max) max = arri; ,#include #define ARR_SIZE 40 float FindMax(float arr,int n); main() float scoreARR_SIZE, maxScore; int n, i; printf(“Please enter total number:“); scanf(“%

8、d“, ,2019/1/17,NEUQ计算机兴趣小组专用教案,14,数组名作函数参数,用数组名作参数,就是将数组的首地址传递给函数 实参数组与形参数组占用同一段内存 在函数中可对形参数组元素修改的结果,会影响结果主调函数中的实参数组,2019/1/17,NEUQ计算机兴趣小组专用教案,15,简单变量作函数参数,2019/1/17,NEUQ计算机兴趣小组专用教案,16,数组作函数参数,2019/1/17,NEUQ计算机兴趣小组专用教案,17,现场演示排序算法,交换法排序 选择法排序,2019/1/17,NEUQ计算机兴趣小组专用教案,18,交换法排序,交换法排序 for (i=0; i scor

9、ei) “交换成绩scorej和scorei“, “交换学号numj和numi“; ,2019/1/17,NEUQ计算机兴趣小组专用教案,19,交换法排序,2019/1/17,NEUQ计算机兴趣小组专用教案,20,选择法排序,选择法排序 for (i=0; i scorek) 记录此轮比较中最高分的元素下标 k = j; 若k中记录的最大数不在位置i,则 “交换成绩scorej和scorei“, “交换学号numj和numi“; ,2019/1/17,NEUQ计算机兴趣小组专用教案,21,选择法排序,2019/1/17,NEUQ计算机兴趣小组专用教案,22,现场演示查找算法,顺序查找 特例:求

10、最大值,求最小值 折半查找,2019/1/17,NEUQ计算机兴趣小组专用教案,23,顺序查找,int Search(long a, int n, long x) int i; for (i=0; in; i+) if (ai = x) return (i); return (-1); ,2019/1/17,NEUQ计算机兴趣小组专用教案,24,折半查找,2019/1/17,NEUQ计算机兴趣小组专用教案,25,折半查找,2019/1/17,NEUQ计算机兴趣小组专用教案,26,int BinSearch(long a, int n, long x) int low, high, mid; l

11、ow = 0; high = n - 1; while (low amid) low = mid + 1; else if (x amid) high = mid - 1; else return (mid); return(-1); ,2019/1/17,NEUQ计算机兴趣小组专用教案,27,字符串(String)与字符数组,字符串 一串以0结尾的字符在C语言中被看作字符串 用双引号括起的一串字符是字符串常量,C语言自动为其添加0终结符 C语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理 字符数组 每个元素都是字符类型的数组 char string80;,2019/1

12、/17,NEUQ计算机兴趣小组专用教案,28,字符数组的初始化,用字符型数据对数组进行初始化 char str6 = C,h,i,n,a,0; 用字符串常量直接对数组初始化 char str6 = “China“; char str6 = “China“;,2019/1/17,NEUQ计算机兴趣小组专用教案,29,逐个输入输出,for (i=0; si!=0; i+) putchar(si); putchar(n);,一次性输入输出,scanf(“%s“,s); printf(“%s“,s);,char s10;,字符数组的输入输出,gets(“%s“,s); puts(“%s“,s);,20

13、19/1/17,NEUQ计算机兴趣小组专用教案,30,scanf(),int i; scanf(“%d“, 不能读入带空格的字符串,gets()可以 这种用法很不安全。当用户的输入多于10个(含10个),str数组将越界 scanf被公认为最易遭到黑客攻击的函数之一,2019/1/17,NEUQ计算机兴趣小组专用教案,31,gets(),字符串输入函数gets()也没有提供限制输入字符串长度的方法,容易引起缓冲区溢出,给黑客攻击以可乘之机 对输入字符串长度有限制的函数调用 fgets(buf, sizeof (buf), stdin);,2019/1/17,NEUQ计算机兴趣小组专用教案,32

14、,字符串处理函数,在中定义了若干专门的字符串处理函数 strcpy: string copy char *strcpy(char *dest, const char *src); strlen: string length size_t strlen(const char *s); 返回字符串的实际长度,不包括0 strcat: string combination char *strcat(char *dest, const char *src); strcmp: string comparison int strcmp(const char *s1, const char *s2); 当出

15、现第一对不相等的字符时,就由这两个字符决定所在字符串的大小,字符串不能直接整体复制!,str1=str2 /*错误*/,2019/1/17,NEUQ计算机兴趣小组专用教案,33,0作为字符串结束符的天生缺陷,假若交给这些字符串处理函数的字符串没有0会如何? 0很关键,如果没有,那么这些处理函数会一直进行处理直到遇到一个0为止。此时可能已经把内存弄得乱七八糟 ANSI C定义了一些“n族”字符处理函数,包括strncpy、strncat、strncmp等,通过增加一个参数来限制处理的最大长度 char *strcpy(char *dest, const char *src, unsigned int count);,2019/1/17,NEUQ计算机兴趣小组专用教案,34,例6.9,从键盘任意输入5个学生的姓名,编程找出并输出按字典顺序排在最前面的学生姓名 等价于求最小字符串,2019/1/17,NEUQ计算机兴趣小组专用教案,35,#include #include #define ARRA_SIZE 80 main() int n, num; char

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

当前位置:首页 > 高等教育 > 大学课件

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