C语言第8章-数组和字符串.ppt
《C语言第8章-数组和字符串.ppt》由会员分享,可在线阅读,更多相关《C语言第8章-数组和字符串.ppt(77页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第8 8章章 数组与字符串数组与字符串苏州市职业大学苏州市职业大学 计算机工程系计算机工程系C C 语言程序设计语言程序设计1第第8章章 数组与字符串数组与字符串 本章重点介绍本章重点介绍:8.1 一维数组一维数组8.2 二维数组二维数组8.3 字符数组与字符串字符数组与字符串8.4动态分配与动态分配与void类型指针类型指针2023/1/162 整型整型基本类型:基本类型:实型实型 字符型字符型、枚举类型枚举类型 数组类型数组类型 构造类型:构造类型:结构体类型结构体类型 公用体类型公用体类型指针类型指针类型空类型空类型C语言的数据类型2023/1/163引言引言 简单变量简单变量:如:如
2、a,b2,x3,day,sum,如同一个姓名代表如同一个姓名代表一个人一样,变量间没有任何联系。一个人一样,变量间没有任何联系。有一些变量可以归结为同一类型,如有一些变量可以归结为同一类型,如s1,s2,s3,s4,s5,s10代表同一个班中代表同一个班中10个学生每个学生的成个学生每个学生的成绩。这些变量都用绩。这些变量都用相同的名字相同的名字,只是下角标有所区别只是下角标有所区别,即,即用相同的名字不同的下标代表同一类型的一组数据,这种用相同的名字不同的下标代表同一类型的一组数据,这种变量称为变量称为下标变量下标变量。C语言中同样也可以用下标变量,只是把下标用方括语言中同样也可以用下标变量
3、,只是把下标用方括号括起来。即号括起来。即s1,s2,s10,这就是,这就是数组类型变量数组类型变量。2023/1/164什么构造类型?什么构造类型?所谓构造类型是指由基本类型数据按一定的规则组成所谓构造类型是指由基本类型数据按一定的规则组成的,是用户自己按规则定义的。数组是构造类型之一。的,是用户自己按规则定义的。数组是构造类型之一。在数学中我们学过数列、矩阵的概念,在数学中我们学过数列、矩阵的概念,数列通常表示为:数列通常表示为:a a1 1 、a a2 2、a a3 3、.、a an n 矩阵通常表示为:矩阵通常表示为:a11a12a13a14a21a22a23a24242023/1/1
4、65在在C C语言中表示数组和矩阵的方法是:语言中表示数组和矩阵的方法是:数组:数组:a0a0、a1a1、a2a2、a3a3、a4a4、a5a5其中其中 a a:称为数组名。:称为数组名。方括号中的数:称为下标方括号中的数:称为下标 下标是一个数时,也就是数列,称为一维数组。下标是一个数时,也就是数列,称为一维数组。下标是两个数时,也就是矩阵,称为二维数组。还有下标是两个数时,也就是矩阵,称为二维数组。还有三维数组、四维数组等。三维数组、四维数组等。2023/1/166第第8章章 数组与字符串数组与字符串l l一个人一个人一个人一个人N N门课的成绩怎样存储和处理?门课的成绩怎样存储和处理?门
5、课的成绩怎样存储和处理?门课的成绩怎样存储和处理?l l一个班一个班一个班一个班N N门课的成绩怎样存储和处理?门课的成绩怎样存储和处理?门课的成绩怎样存储和处理?门课的成绩怎样存储和处理?.这些数据的特点这些数据的特点这些数据的特点这些数据的特点:具有相同的数据类型。:具有相同的数据类型。:具有相同的数据类型。:具有相同的数据类型。为了方便地使用这些数据,为了方便地使用这些数据,为了方便地使用这些数据,为了方便地使用这些数据,C C C C语言提供了一种语言提供了一种语言提供了一种语言提供了一种构造数据类型:构造数据类型:构造数据类型:构造数据类型:数组。数组。数组。数组。例如:存储学生成绩
6、用例如:存储学生成绩用例如:存储学生成绩用例如:存储学生成绩用实型数组实型数组实型数组实型数组 score5score5score5score5其中:其中:其中:其中:scorescorescorescore是数组名。是数组名。是数组名。是数组名。该数组可以存放该数组可以存放该数组可以存放该数组可以存放5 5 5 5个成绩,个成绩,个成绩,个成绩,分别用下标变量表示:分别用下标变量表示:分别用下标变量表示:分别用下标变量表示:score0,score1,score4score0,score1,score4score0,score1,score4score0,score1,score4。下标变量
7、下标变量下标变量下标变量也称为也称为也称为也称为数组元素数组元素数组元素数组元素。2023/1/167引言引言 数组的特点:数组的特点:数组的特点:数组的特点:1、数组是有序数据的集合;数组是有序数据的集合;2、数组中的每一个元素都属于同一个数据类型;、数组中的每一个元素都属于同一个数据类型;3、用一个统一的数组名和下标来唯一的确定数组中的、用一个统一的数组名和下标来唯一的确定数组中的元素。元素。2023/1/1688.1 一维数组一维数组例如:例如:例如:例如:int a10;int a10;float float score5score5;“数据类型数据类型数据类型数据类型”:是数组元素的
8、数据类型。是数组元素的数据类型。是数组元素的数据类型。是数组元素的数据类型。“数组名数组名数组名数组名”:”:遵循遵循遵循遵循C C语言语言语言语言标识符规则。标识符规则。标识符规则。标识符规则。“常量表达式常量表达式常量表达式常量表达式”:表示数组中有多少个元素,即数:表示数组中有多少个元素,即数:表示数组中有多少个元素,即数:表示数组中有多少个元素,即数组的长度。它可以是整型常量、整型常量表达式组的长度。它可以是整型常量、整型常量表达式组的长度。它可以是整型常量、整型常量表达式组的长度。它可以是整型常量、整型常量表达式或符号常量。或符号常量。或符号常量。或符号常量。8.1.1 一维数组的定
9、义一维数组的定义数据类型数据类型 数组名数组名常量表达式常量表达式;2023/1/169以下数组定义是正确的:以下数组定义是正确的:以下数组定义是正确的:以下数组定义是正确的:#define N 10#define N 10float score1N,score2N;float score1N,score2N;int num10+N;int num10+N;char c26;char c26;以下数组定义是不正确的:以下数组定义是不正确的:以下数组定义是不正确的:以下数组定义是不正确的:int array(10);int array(10);int n;float scoren;int n;f
10、loat scoren;double ba.d;double ba.d;char str;char str;8.1.1 一维数组的定义(续)一维数组的定义(续)2023/1/1610数组在内存的存放数组在内存的存放l l数组下标从数组下标从数组下标从数组下标从0 0开始。开始。开始。开始。l l一维数组的数组元素一维数组的数组元素一维数组的数组元素一维数组的数组元素在内存里在内存里在内存里在内存里按顺序按顺序按顺序按顺序存放。存放。存放。存放。l l数组名代表数组的首数组名代表数组的首数组名代表数组的首数组名代表数组的首地址,即地址,即地址,即地址,即scorescore的值的值的值的值与与与
11、与score0 score0 的地址的地址的地址的地址值相同。值相同。值相同。值相同。score0score1score2score3score491.534.567.572.084.0低地址低地址高地址高地址score数组数组2023/1/16118.1.2 数组元素的引用数组元素的引用 格式:格式:格式:格式:例如:输入学生成绩例如:输入学生成绩例如:输入学生成绩例如:输入学生成绩 for(i=0;ifor(i=0;i5 5;i+);i+)scanf scanf(%f%f,&score&scorei);i);例如:例如:例如:例如:fibn=fibn-1+fibn-2;fibn=fibn-
12、1+fibn-2;下标表达式下标表达式下标表达式下标表达式的值必须是的值必须是的值必须是的值必须是整型表达式整型表达式整型表达式整型表达式。数组名数组名下标表达式下标表达式2023/1/16128.1.2 数组元素的引用(续)数组元素的引用(续)说明说明:下标从下标从下标从下标从0 0开始(下界为开始(下界为开始(下界为开始(下界为0 0),数组的最大下标),数组的最大下标),数组的最大下标),数组的最大下标(上界)是数组长度减(上界)是数组长度减(上界)是数组长度减(上界)是数组长度减1 1。例如:例如:例如:例如:int a10;int a10;scanf(%d,&a10);/*scanf
13、(%d,&a10);/*下标越界下标越界下标越界下标越界*/C编译系统不做越界检查,如果引用的数组元素编译系统不做越界检查,如果引用的数组元素超出数组范围会破坏其他变量的值。超出数组范围会破坏其他变量的值。2023/1/16138.1.2 数组元素的引用(续)数组元素的引用(续)是是下标运算下标运算下标运算下标运算符符符符,引用引用数组元素数组元素时,根据数组的时,根据数组的首首首首地址地址地址地址和和下标下标下标下标数,计数,计算出该元素的实际算出该元素的实际地址,取出该地址地址,取出该地址的的内容内容内容内容进行操作。进行操作。如引用如引用 score2:(1)计算计算 2000+2*4=
14、2008(2)取出取出2008的内容的内容2000H2004H2008H200CH218CHscore0score1score2score3score491.534.567.572.084.02023/1/1614合法标识符表示元素个数引用时下标从0开始 :数组运算符单目运算符例 int a6;a00145a1a2a3a4a523a编译时分配连续内存内存字节数=数组大小*sizeof(元素数据类型)数组名表示内存首地址,是地址常量 一维数组的定义一维数组的定义l l定义方式:定义方式:定义方式:定义方式:类型说明符类型说明符类型说明符类型说明符 数组名数组名数组名数组名 常量表常量表常量表常量
15、表达式达式达式达式;返回2023/1/1615main()int i,a10;for(i=0;i=0;i-)printf(“%d”,ai);一维数组的引用一维数组的引用l l数组必须先定义,后使用数组必须先定义,后使用数组必须先定义,后使用数组必须先定义,后使用l l只能逐个引用数组元素,不能一次引用整个只能逐个引用数组元素,不能一次引用整个只能逐个引用数组元素,不能一次引用整个只能逐个引用数组元素,不能一次引用整个数组数组数组数组l l数组元素表示形式:数组元素表示形式:数组元素表示形式:数组元素表示形式:数组名数组名数组名数组名 下标下标下标下标 其中:下标可以是常量或整型表达式其中:下标
16、可以是常量或整型表达式其中:下标可以是常量或整型表达式其中:下标可以是常量或整型表达式 例例8.1 数组元素的引用数组元素的引用运行结果:运行结果:9 8 7 6 5 4 3 2 1 02023/1/16168.1.3 一维数组的初始化一维数组的初始化初始化:在定义数组时给数组元素赋初值。初始化:在定义数组时给数组元素赋初值。1 1在定义数组时,对全部数组元素赋初值在定义数组时,对全部数组元素赋初值在定义数组时,对全部数组元素赋初值在定义数组时,对全部数组元素赋初值 例如:例如:例如:例如:int a5=0,1,2,3,4;int a5=0,1,2,3,4;此时可以省略数组长度,例如:此时可以
17、省略数组长度,例如:此时可以省略数组长度,例如:此时可以省略数组长度,例如:int a=0,1,2,3,4;int a=0,1,2,3,4;2 2在定义数组时,对部分数组元素赋初值在定义数组时,对部分数组元素赋初值在定义数组时,对部分数组元素赋初值在定义数组时,对部分数组元素赋初值 例如:例如:例如:例如:int a5=1,2,3;int a5=1,2,3;系统为其余元素赋系统为其余元素赋系统为其余元素赋系统为其余元素赋 0 0。3 3当初值的个数多于数组元素的个数时,编译出错当初值的个数多于数组元素的个数时,编译出错当初值的个数多于数组元素的个数时,编译出错当初值的个数多于数组元素的个数时,
18、编译出错 例如:例如:例如:例如:int a5=0,1,2,3,4,5;int a5=0,1,2,3,4,5;2023/1/16178.1.4 一维数组应用举例一维数组应用举例【例例例例8.18.18.18.1】将将将将10101010个人的成绩输入计算机后按逆序显示。个人的成绩输入计算机后按逆序显示。个人的成绩输入计算机后按逆序显示。个人的成绩输入计算机后按逆序显示。#define N 10#define N 10main()main()int i;float scoreN;int i;float scoreN;for(i=0;iN;i+)for(i=0;i=0;i-)for(i=N-1;i
19、=0;i-)printf(%8.1f,scorei);printf(%8.1f,scorei);运行情况如下:运行情况如下:运行情况如下:运行情况如下:67 74 89 92 34 67 83 95 73 7867 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 78.0 73.0 95.0 83.0 67.0 34.0 92.0 89.0 74.0 67.02023/1/1618【例例例例8.28.2】用数组求用数组求Fibonacci数列前数列前20个数个数分析:定义一个含有分析:定义
20、一个含有20个元素的数组个元素的数组f,即即 int f20;其中其中 f0=1,f1=1,fn=fn-1+fn-2 (n2)用一个循环结构:让循环变量用一个循环结构:让循环变量n从从 2到到 20,循环体为,循环体为 fn=fn-1+fn-2 程序如面所示:程序如面所示:lt162023/1/1619f0f1f2f3f4f5f19.11f1901452319235#include main()int i;int f20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;ia1,则交换;然后比较第二个数与第三个数;则交换;然后比较第二个数与第三个数;依次类推,直至
21、第依次类推,直至第n-1个数和第个数和第n个数比较为止个数比较为止第一趟起泡排序第一趟起泡排序,结果,结果最大最大的数被安置在最后一个的数被安置在最后一个元素位置上元素位置上(2)对前)对前n-1个数进行第二趟起泡排序,结果使个数进行第二趟起泡排序,结果使次次大大的数被安置在第的数被安置在第n-1个元素位置个元素位置(3)重复上述过程,共经过)重复上述过程,共经过n-1趟起泡排序后,排趟起泡排序后,排序结束序结束2023/1/1621例例38 49 65 76 13 27 30 97第第一一趟趟38 49 65 13 27 30 76第第二二趟趟38 49 13 27 30 65第第三三趟趟3
22、8 13 27 30 49第第四四趟趟13 27 30 38第第五五趟趟13 27 30第第六六趟趟49 38 65 97 76 13 27 30初初始始关关键键字字n=813767676273013652765306513134949304927382738303813 27第第七七趟趟38497697979797271327302023/1/1622冒泡法排序冒泡法排序(续)(续)从上述过程可以看到:从上述过程可以看到:从上述过程可以看到:从上述过程可以看到:n n n n个数要比较个数要比较个数要比较个数要比较n-1n-1n-1n-1趟,而趟,而趟,而趟,而在第在第在第在第j j j j
23、趟比较中,要进行趟比较中,要进行趟比较中,要进行趟比较中,要进行n-jn-jn-jn-j次两两比较。次两两比较。次两两比较。次两两比较。冒泡法排序冒泡法排序for(i=0;iN;i+)输入输入ai for(j=1;jN;j+)for(i=0;iai+1 T F ai与与ai+1交换交换输出输出a0aN-12023/1/1623#include main()int a11,i,j,t;printf(Input 10 numbers:n);for(i=1;i11;i+)scanf(%d,&ai);printf(n);for(j=1;j=9;j+)for(i=1;iai+1)t=ai;ai=ai+1
24、;ai+1=t;printf(The sorted numbers:n);for(i=1;i11;i+)printf(%d,ai);2023/1/1624以以6个数:个数:3、7、5、6、8、0为例。为例。思路:思路:思路:思路:第一趟:将第一趟:将第一趟:将第一趟:将第一个数第一个数第一个数第一个数依次和后面的数比较,如依次和后面的数比较,如依次和后面的数比较,如依次和后面的数比较,如果后面的某数小于果后面的某数小于果后面的某数小于果后面的某数小于第一个数第一个数第一个数第一个数,则两个数交换,比较,则两个数交换,比较,则两个数交换,比较,则两个数交换,比较结束后,结束后,结束后,结束后,第
25、一个数第一个数第一个数第一个数则是则是则是则是最小最小最小最小的数。的数。的数。的数。第二趟:第二趟:第二趟:第二趟:将将将将第二个数第二个数第二个数第二个数依次和后面的数比较,如依次和后面的数比较,如依次和后面的数比较,如依次和后面的数比较,如果后面的某数小于果后面的某数小于果后面的某数小于果后面的某数小于第二个数第二个数第二个数第二个数,则两个数交换,比较,则两个数交换,比较,则两个数交换,比较,则两个数交换,比较结束后,结束后,结束后,结束后,第二个数第二个数第二个数第二个数则是则是则是则是次小次小次小次小的数;的数;的数;的数;。【例例8.5】选择法排序(从小到大)。选择法排序(从小到
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 数组 字符串
限制150内