程序设计教程课件谭浩强第ii版第5章清华出版社_第1页
程序设计教程课件谭浩强第ii版第5章清华出版社_第2页
程序设计教程课件谭浩强第ii版第5章清华出版社_第3页
程序设计教程课件谭浩强第ii版第5章清华出版社_第4页
程序设计教程课件谭浩强第ii版第5章清华出版社_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

第5章 数组,5.1 数组的作用,有序数据的集合 用一个数组名和小标来唯一地确定数组中的元素,用下标区分各个元素 数组中的每一个元素都属于同一个数据类型。不能把不同类型的数据放在同一个数组中 相当于数学中的下标变量,如 x1 , x2 , . a11 , a12 , . , a21 , .,5.2.1 怎样定义一维数组,定义: 类型说明 数组名常量 定义一个数组的名称、类型、元素个数,5.2.1 怎样定义一维数组,short int a3;,说明:不能动态定义数组,见P.143说明(3),存储地址,数组元素,存储单元,0000000000000110,a2=6;,5.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赋初值,其余元素值为0,5.2.3 一维数组的定义和初始化,int a =2,5,3,1,8,6; 定义整型数组a并赋初值,该数组包含6个元素a0-a5,5.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“); ,例:求一维数组最大值及下标,int 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“,这是顺序查找法。 还有一种常用的折半查找法,数据量大且有序时使用,效率更高。,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“,例:排序算法,算法演示 冒泡排序 选择排序 插入排序 快速排序,5.2.4 一维数组的典型算法-递推与排序,基本思路:依次将数组中相邻两元素比较,并按要求的顺序交换,从而将最大/最小的数推至最前或最后;对余下的数重复上述步骤,最终获得所需的顺序,冒泡排序,对数组元素a0-a5升序排序 比较a5和a4,若顺序不符则交换; 比较a4和a3,若顺序不符则交换; 比较a3和a2,若顺序不符则交换; 比较a2和a1,若顺序不符则交换; 比较a1和a0,若顺序不符则交换。,冒泡排序,=结果:最小的数被换到了a0中。 =对a1-a5重复上述步骤,将其中最小的数换到a1中。 =重复上述步骤直至完成排序。,冒泡排序,冒泡排序,int a6,i,j,t; for (i=0;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交换其值,选择排序,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) 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,a02 int a1:包括三个元素a10,a11,a12,5.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“, ,5.3.3 二维数组程序举例,例5.4 二维数组行列对换(矩阵转置) 例 对于一个二维数组,求最大值及其下标,5.3.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, p, p, y;,a5值为0,char 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“,5.4.3 引用字符数组的元素,字符数组的输入输出,逐个元素输出 int i; char a =“hello“ ; for (i=0;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个字符 (到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(字符数组) 输入字符串赋值给字符数组,函数值为该数组的首地址 对比 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(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(字符串),返回字符串(字符串常量或字符数组)中“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

温馨提示

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

评论

0/150

提交评论