c语言第8章-数组和字符串

上传人:san****019 文档编号:70206640 上传时间:2019-01-16 格式:PPT 页数:77 大小:712.51KB
返回 下载 相关 举报
c语言第8章-数组和字符串_第1页
第1页 / 共77页
c语言第8章-数组和字符串_第2页
第2页 / 共77页
c语言第8章-数组和字符串_第3页
第3页 / 共77页
c语言第8章-数组和字符串_第4页
第4页 / 共77页
c语言第8章-数组和字符串_第5页
第5页 / 共77页
点击查看更多>>
资源描述

《c语言第8章-数组和字符串》由会员分享,可在线阅读,更多相关《c语言第8章-数组和字符串(77页珍藏版)》请在金锄头文库上搜索。

1、1,第8章 数组与字符串,苏州市职业大学 计算机工程系,C 语言程序设计,2019/1/16,2,第8章 数组与字符串,本章重点介绍 : 8.1 一维数组 8.2 二维数组 8.3 字符数组与字符串 8.4动态分配与void类型指针,2019/1/16,3,2019/1/16,4,引言,简单变量:如a, b2, x3, day ,sum,如同一个姓名代表一个人一样,变量间没有任何联系。 有一些变量可以归结为同一类型,如s1,s2,s3,s4,s5,s10代表同一个班中10个学生每个学生的成绩。这些变量都用相同的名字,只是下角标有所区别,即用相同的名字不同的下标代表同一类型的一组数据,这种变量称

2、为下标变量。 C语言中同样也可以用下标变量,只是把下标用方括号括起来。即s1,s2,s10,这就是数组类型变量。,2019/1/16,5,什么构造类型? 所谓构造类型是指由基本类型数据按一定的规则组成的,是用户自己按规则定义的。数组是构造类型之一。 在数学中我们学过数列、矩阵的概念, 数列通常表示为:a1 、a2 、a3、.、an 矩阵通常表示为:,2019/1/16,6,在C语言中表示数组和矩阵的方法是: 数组:a0、a1、a2、a3、a4、a5 其中 a :称为数组名。 方括号中的数:称为下标 下标是一个数时,也就是数列,称为一维数组。 下标是两个数时,也就是矩阵,称为二维数组。还有三维数

3、组、四维数组等。,2019/1/16,7,第8章 数组与字符串,一个人N门课的成绩怎样存储和处理? 一个班N门课的成绩怎样存储和处理?,这些数据的特点:具有相同的数据类型。 为了方便地使用这些数据,C语言提供了一种构造数据类型:数组。 例如:存储学生成绩用实型数组 score5 其中:score是数组名。该数组可以存放5个成绩,分别用下标变量表示:score0,score1,score4。 下标变量也称为数组元素。,2019/1/16,8,引言,数组的特点: 1、 数组是有序数据的集合; 2、数组中的每一个元素都属于同一个数据类型; 3、用一个统一的数组名和下标来唯一的确定数组中的元素。,20

4、19/1/16,9,8.1 一维数组,例如: int a10; float score5; “数据类型”: 是数组元素的数据类型。 “数组名”: 遵循C语言标识符规则。 “常量表达式”:表示数组中有多少个元素,即数组的长度。它可以是整型常量、整型常量表达式或符号常量。,8.1.1 一维数组的定义,数据类型 数组名常量表达式;,2019/1/16,10,以下数组定义是正确的: #define N 10 float score1N, score2N; int num10+N; char c26;,以下数组定义是不正确的: int array(10); int n; float scoren; do

5、uble ba d; char str ;,8.1.1 一维数组的定义(续),2019/1/16,11,数组在内存的存放,数组下标从0开始。 一维数组的数组元素在内存里按顺序存放。 数组名代表数组的首地址,即score的值与score0 的地址值相同。,score数组,2019/1/16,12,8.1.2 数组元素的引用,格式:,例如:输入学生成绩 for(i=0;i5;i+) scanf(“%f“,例如:fibn=fibn-1+fibn-2;,下标表达式的值必须是整型表达式。,数组名下标表达式,2019/1/16,13,8.1.2 数组元素的引用(续),说明: 下标从0开始(下界为0),数组

6、的最大下标(上界)是数组长度减1。 例如: int a10; scanf (“%d“, /* 下标越界 */,C编译系统不做越界检查,如果引用的数组元素 超出数组范围会破坏其他变量的值。,2019/1/16,14,8.1.2 数组元素的引用(续), 是下标运算符,引用数组元素时,根据数组的首地址和下标数,计算出该元素的实际地址,取出该地址的内容进行操作。,如引用 score2: (1)计算 2000+2*4=2008 (2)取出2008的内容,2019/1/16,15,合法标识符,表示元素个数 引用时下标从0开始, :数组运算符 单目运算符,例 int a6;,编译时分配连续内存 内存字节数=

7、数组大小* sizeof(元素数据类型),数组名表示内存首地址, 是地址常量,一维数组的定义 定义方式: 类型说明符 数组名常量表达式;,返回,2019/1/16,16,main() int i,a10; for(i=0;i=0;i-) printf(“%d”,ai); ,一维数组的引用 数组必须先定义,后使用 只能逐个引用数组元素,不能一次引用整个数组 数组元素表示形式: 数组名下标 其中:下标可以是常量或整型表达式 例8.1 数组元素的引用,运行结果: 9 8 7 6 5 4 3 2 1 0,2019/1/16,17,8.1.3 一维数组的初始化,初始化:在定义数组时给数组元素赋初值。,1

8、在定义数组时,对全部数组元素赋初值 例如:int a5=0,1,2,3,4; 此时可以省略数组长度,例如:int a =0,1,2,3,4; 2在定义数组时,对部分数组元素赋初值 例如:int a5=1,2,3;系统为其余元素赋 0 。 3当初值的个数多于数组元素的个数时,编译出错 例如: int a5=0,1,2,3,4,5;,2019/1/16,18,8.1.4 一维数组应用举例,【例8.1】将10个人的成绩输入计算机后按逆序显示。 #define N 10 main( ) int i;float scoreN; for (i=0; i=0; i-) printf(“%8.1f“,scor

9、ei); ,运行情况如下: 67 74 89 92 34 67 83 95 73 78 78.0 73.0 95.0 83.0 67.0 34.0 92.0 89.0 74.0 67.0,2019/1/16,19,【例8.2】用数组求Fibonacci数列前20个数,分析:定义一个含有20个元素的数组f ,即 int f20 ; 其中 f0=1,f1=1, fn=fn-1+fn-2 (n2) 用一个循环结构:让循环变量n从 2到 20 ,循环体为 fn=fn-1+fn-2 程序如面所示:,lt16,2019/1/16,20,f0,f1,f2,f3,f4,f5,f19,.,1,1,f19,0,1

10、,4,5,2,3,19,#include main() int i; int f20=1,1; for(i=2;i20;i+) fi=fi-2+fi-1; for(i=0;i20;i+) if(i%5=0) printf(“n“); printf(“%12d“,fi); ,2019/1/16,21,【例8.4】冒泡法排序(从小到大)。,排序过程: (1)比较第一个数与第二个数,若为逆序a0a1,则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第n个数比较为止第一趟起泡排序,结果最大的数被安置在最后一个元素位置上 (2)对前n-1个数进行第二趟起泡排序,结果使次大的数被安置在第n

11、-1个元素位置 (3)重复上述过程,共经过n-1趟起泡排序后,排序结束,2019/1/16,22,例,38 49 65 76 13 27 30 97,第一趟,38 49 65 13 27 30 76,第二趟,38 49 13 27 30 65,第三趟,38 13 27 30 49,第四趟,13 27 30 38,第五趟,13 27 30,第六趟,49 38 65 97 76 13 27 30,初始关键字,n=8,13,76,76,76,27,30,13,65,27,65,30,65,13,13,49,49,30,49,27,38,27,38,30,38,13 27,第七趟,38,49,76,9

12、7,97,97,97,27,13,27,30,2019/1/16,23,冒泡法排序 (续),从上述过程可以看到:n个数要比较n-1趟,而在第j趟比较中,要进行n-j次两两比较。,2019/1/16,24,#include main() int a11,i,j,t; printf(“Input 10 numbers:n“); for(i=1;iai+1) t=ai; ai=ai+1; ai+1=t; printf(“The sorted numbers:n“); for(i=1;i11;i+) printf(“%d “,ai); ,2019/1/16,25,以6个数:3、7、5、6、8、0为例。

13、 思路: 第一趟:将第一个数依次和后面的数比较,如果后面的某数小于第一个数,则两个数交换,比较结束后,第一个数则是最小的数。 第二趟:将第二个数依次和后面的数比较,如果后面的某数小于第二个数,则两个数交换,比较结束后,第二个数则是次小的数; 。,【例8.5】选择法排序(从小到大)。,2019/1/16,26,【例8.5】选择法排序(续),2019/1/16,27,#define N 5 main( ) int aN; int i,j,t; for (i=0; iai) t=aj;aj=ai;ai=t; printf(“The sorted numbers: n“); ,程序运行情况如下: 96

14、 78 65 86 40 The sorted numbers: 40 65 78 86 96,2019/1/16,28,8.2 二维数组,数据类型 数组名常量表达式1常量表达式2;,例如: float x23;,8.2.1 二维数组的定义,int a3,4,b(3,4),c ,d(3)(4);,2019/1/16,29,地址 值 数组元素,二维数组元素在内存中的排列顺序:按行存放,2019/1/16,30,例 int a34;,二维数组理解,每个元素ai由包含4个元素 的一维数组组成,二维数组a是由3个元素组成,2019/1/16,31,x0是数组名,是元素x00的地址,x1是数组名, 是元

15、素x10的地址,二维数组可看作是一种特殊的一维数组,x0- x00,x01,x02,x1- x10,x11,x12,例如,可以把x数组看作是包含二个元素的一维数组,每个元素又是一个含有三个元素一维数组。,2019/1/16,32,a34=3; /* 下标越界 */ a1,2=1; /* 应写成 a12=1; */,8.2.2 二维数组元素的引用,例:int a34; a00=3; a01=a00+10;,数组名行下标表达式列下标表达式,数组元素的表示形式 :,2019/1/16,33,8.2.3 二维数组的初始化,例:int a23=1,2,3,4,5,6;,1按行赋初值,例:int a23=1,2,3,4,5,6; 初始化后结果: 1 2 3 4 5 6,2按数组元素在内存中排

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

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

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