程序设计教程ppt课件第ii版第5章_第1页
程序设计教程ppt课件第ii版第5章_第2页
程序设计教程ppt课件第ii版第5章_第3页
程序设计教程ppt课件第ii版第5章_第4页
程序设计教程ppt课件第ii版第5章_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

1、第5章 数组5.1 数组的作用有序数据的集合用一个数组名和小标来唯一地确定数组中的元素,用下标区分各个元素数组中的每一个元素都属于同一个数据类型。不能把不同类型的数据放在同一个数组中相当于数学中的下标变量,如 x1 , x2 , . a11 , a12 , . , a21 , .5.2.1 怎样定义一维数组定义: 类型说明 数组名常量 定义一个数组的名称、类型、元素个数5.2.1 怎样定义一维数组short int a3;说明:不能动态定义数组,见P.143说明(3)存储地址数组元素存储单元0000000000000110a2=6;5.2.2 一维数组元素的引用 定义后的数组可分别引用各个元素

2、 数组名下标 下标是整型常量或表达式注意:引用的是数组中的元素,而不是整个数组;C编译系统对下标越界的引用不给出错误提示5.2 一维数组的定义和引用实例int a5,i;for (i=0;i=3;i+) ai=2*i;a4=100;for (i=0;i=4;i+) printf(a%d=%dn,i,ai);ai=20;printf(a%d=%dn,i,ai);5.2.3 一维数组的定义和初始化 int a10=2,5,3,1,8,6,9,4,7,1;定义整型数组a并给a0-a9赋初值5.2.3 一维数组的定义和初始化 int a10=2,5,3,1,8,6;定义整型数组a并给a0-a5赋初值,

3、其余元素值为05.2.3 一维数组的定义和初始化 int a =2,5,3,1,8,6;定义整型数组a并赋初值,该数组包含6个元素a0-a55.2.3 一维数组的定义和初始化int a5,i;for(i=0;i5;i+) printf(%dn,ai);5.2.4 一维数组的典型算法-递推与排序例5.2:显示Fibonacci数列前40项。 int i, fibo40=1,1;for (i=2;i40;i+)fiboi=fiboi-1+fiboi-2;for (i=0;i40;i+)printf(%10d,fiboi);if (i+1)%5=0) printf(n);例:求一维数组最大值及下标i

4、nt a10=23,41,56,21,15,67,32,44,16,31;int i, max;max=a0;for (i=0;imax) max=ai;printf(最大值: %dn,max);5.2.4 一维数组的典型算法-递推与排序例:在一维数组中查找给定数据及下标int a10=23,41,56,21,15,67,32,44,16,31;int i, key, index=-1;printf(输入要查找的值: );scanf(%d,&key);for (i=0;i10;i+)if (key=ai)index=i;break;if (index=-1) printf(找不到n);else

5、 printf(找到,下标是: %dn,index);这是顺序查找法。还有一种常用的折半查找法,数据量大且有序时使用,效率更高。5.2.4 一维数组的典型算法-递推与排序折半查找 int a11=5,13,19,21,37,56,64,75,80,88,92; int index=-1,key,low,high,middle; scanf(%d,&key); low=0;high=10; while(lowamiddle) low=middle+1; else high=middle-1; if (index!=-1) printf(Index: %d,index); else printf(

6、Not found !);例:排序算法算法演示冒泡排序选择排序插入排序快速排序5.2.4 一维数组的典型算法-递推与排序 基本思路:依次将数组中相邻两元素比较,并按要求的顺序交换,从而将最大/最小的数推至最前或最后;对余下的数重复上述步骤,最终获得所需的顺序冒泡排序对数组元素a0-a5升序排序比较a5和a4,若顺序不符则交换;比较a4和a3,若顺序不符则交换;比较a3和a2,若顺序不符则交换;比较a2和a1,若顺序不符则交换;比较a1和a0,若顺序不符则交换。冒泡排序=结果:最小的数被换到了a0中。=对a1-a5重复上述步骤,将其中最小的数换到a1中。=重复上述步骤直至完成排序。冒泡排序冒泡排

7、序 int a6,i,j,t; for (i=0;i6;i+) scanf(%d,&ai); printf(n); for (i=1;i=i;j-) if (aj=aj-1) t=aj; aj=aj-1; aj-1=t; for (i=0;i6;i+) printf(%dn,ai); 基本思路:在一列数中找到最小/最大值,与指定位置的数交换;对余下的数重复上述步骤,最终获得所需的顺序。选择排序对数组元素a0-a5升序排序找a0至a5的最小值,与a0交换其值找a1至a5的最小值,与a1交换其值找a2至a5的最小值,与a2交换其值找a3至a5的最小值,与a3交换其值找a4至a5的最小值,与a4交换

8、其值选择排序for (i=0;i5;i+) imin=i;min=ai; /*求ai之后元素的最小值*/ for (j=i+1;j=5;j+) if (ajmin) min=aj; /*变量min记录最小值 */ imin=j; /*变量imin记录最小值的下标 */ temp = ai; ai = aimin; aimin = temp; /*最小值与ai交换*/ 选择排序选择排序for (i=0;i5;i+) imin=i; for (j=i+1;j=5;j+) if (ajaimin) imin=j; /*只记录最小值的下标imin,最小值就是aimin */ if (imin!=i)

9、t=ai; ai=aimin; aimax=t; /* 当imin=i时无需交换 */对选择排序法进行改进5.3 二维数组本节要点二维数组的物理存储方式二维数组的逻辑概念矩阵二维数组元素的遍历双重循环5.3.1 二维数组的定义 类型说明 数组名常量常量功能:定义一个二维数组的名称、类型、元素个数5.3.1 二维数组的定义说明:二维数组在内存中按行连续存放例如定义 short int a23; 5.3.1 二维数组的定义-逻辑结构二维数组可视为一维数组的集合例如 int a23; 可以被当成两个一维数组的集合:int a0:包括三个元素a00,a01,a02int a1:包括三个元素a10,a1

10、1,a125.3.2 二维数组元素的引用 数组名下标下标例:赋值 a13=8; 输出 printf(%d,a21);5.3.2 二维数组的引用下面的程序运行时输入 34 56 12 7 9 41 52,显示结果为_。 int a23, i, j; for (i=0; i=1; i+) for (j=0; j=2; j+) scanf(%d, &aij); for (j=0; j=2; j+) for (i=0; i=1; i+) printf(%dt, aij); printf(n);5.3.3 二维数组程序举例例5.4 二维数组行列对换(矩阵转置)例 对于一个二维数组,求最大值及其下标5.3

11、.4 二维数组的初始化1,int a23=2,5,3,1,8,6;2,int a23=2,5,3,1,8,6;3,int a23=2,1,8,6;4,int a 3=2,5,3,1,8,6;讨论:以矩阵的形式输出这个数组5.4 利用字符数组处理字符串数据 C语言中没有字符串变量,字符串数据需要使用字符数组保存。字符常量与字符串常量的区别5.4.1 怎样定义字符数组定义字符数组及元素赋值a0=a;a1=n;a2= ;a3=97;a4=n;a5=t;char a6;注意:实际存储二进制码字符数组5.4.2 字符数组的初始化char a6=a, n, , a, n, t;char a6=h, a,

12、p, p, y;a5值为0char a =h, e, l, l, o;char a =hello;char a10=hello;printf(%dn,sizeof(a);printf(%dn,strlen(a);5.4.3 引用字符数组的元素字符数组的输入输出逐个元素输入P132 例5.6 输入一个字符串 int i; char a10; for (i=0; i=9; i+) scanf(%c,&ai); for (i=0; i=9; i+) ai=getchar();5.4.3 引用字符数组的元素字符数组的输入输出逐个元素输出 int i; char a =hello ; for (i=0;

13、i=4;i+) printf(%c,ai); for (i=0;i=4;i+) putchar(ai);5.4.3 引用字符数组的元素字符数组的输入输出整个字符串(字符数组)输入 char a5,b5; scanf(%s%s,a,b); printf(%s,%sn, a,b); printf(%x,%x, a,b);输入时两个字符串以空格分隔以十六进制显示数组首地址字符数组5.4.4 字符串和字符串结束标志P.133-134 自学5.4.5 字符数组的输入输出整个字符串(字符数组)输出 int i; char a10=hello ; printf(%s, a);字符串格式符字符数组名只输出5个

14、字符(到0为止)5.4.5 字符数组的输入输出整个字符串(字符数组)输入 int i; char a10; scanf(%s,a); printf(%s, a);字符串格式符,不可包含空格字符数组名,不加&5.4.6 有关字符处理的算法P136 例5.8 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开P138 例5.9有3个国家名,要求找出其中按字符顺序最前者字符数组5.4.7 字符串处理函数puts(字符数组) 输出字符数组的值对比 printf(%s, a)对比 putchar(字符变量)字符数组5.4.7 字符串处理函数gets(字符数组) 输入字符串赋值给字符数组,函数值为该

15、数组的首地址对比 scanf(%s, a) 对比 getchar(字符变量)字符数组5.4.7 字符串处理函数strcat(字符数组1,字符数组2)连接两个字符数组,保存在字符数组1中,函数值为字符数组1的值 char s1=Good,s2= Bye;printf(%sn,strcat(s1,s2);printf(%sn, s1);printf(%sn, s2);字符数组5.4.7 字符串处理函数strcpy(字符数组1,字符串2)将字符串2(字符串常量或字符数组)内容复制到字符数组1中char s1=Good Morning!;char s2=Hello!;printf(%sn,strcpy

16、(s1,s2);字符数组5.4.7 字符串处理函数strncpy(字符数组1,字符串2,数值n)将字符串2前n个字符复制到字符数组1中char s1=Good Morning!char s2=Hello!;printf(%s,strncpy(s1,s2,4);字符数组5.4.7 字符串处理函数strcmp(字符串1,字符串2)比较两个字符的大小逐个字符进行比较出现不同的字符或结束符,返回两者ASCII值的差char s1=God,s2=Good;printf(%dn,strcmp(s1,s2);C语言中没有字符串“=”、“”的运算字符数组5.4.7 字符串处理函数strlen(字符串)返回字符

17、串(字符串常量或字符数组)中“0”之前的字符个数char s110=Good;printf(%d,strlen(s1);printf(%d,strlen(Hello);字符数组5.4.7 字符串处理函数strlwr(字符串)将字符串(字符串常量或字符数组)中的大写字母转换为小写char s110=Good;printf(%sn,strlwr(s1);printf(%s,strlwr(Hello);字符数组5.4.7 字符串处理函数strupr(字符串)将字符串(字符串常量或字符数组)中的小写字母转换为大写char s110=Good;printf(%sn,strupr(s1);printf(%s,strupr(Hello);字符数组5.4.7 字符串处理函数 练习main() char pass_str80; int i=0; while(1) printf(Input your password: ); gets(pass_str); if(strcmp(pass_str,ppp)!=0) printf(Password Error!n); else brea

温馨提示

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

评论

0/150

提交评论