C语言程序设计07(一维数组)_第1页
C语言程序设计07(一维数组)_第2页
C语言程序设计07(一维数组)_第3页
C语言程序设计07(一维数组)_第4页
C语言程序设计07(一维数组)_第5页
已阅读5页,还剩168页未读 继续免费阅读

下载本文档

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

文档简介

1、C语言程序设计语言程序设计重庆邮电大学移通学院计算机系重庆邮电大学移通学院计算机系 宋文强宋文强C语言程序设计第第7章章 一维数组及其指针一维数组及其指针第第7章内容章内容一维数组一维数组一维数组的定义与初始化一维数组的定义与初始化 一维数组的引用一维数组的引用指向一维数组的指针指向一维数组的指针指针的运算指针的运算 指向一维数组的指针指向一维数组的指针 一维数组及其指针作函数参数一维数组及其指针作函数参数数组的概念数组的概念数组是一组有序数据的集合,通过方括号下标来数组是一组有序数据的集合,通过方括号下标来访问每个元素。访问每个元素。在在C语言中,数组具有以下特点:语言中,数组具有以下特点:

2、数组变量必须先定义后使用,同一数组中各元素的数据数组变量必须先定义后使用,同一数组中各元素的数据类型必须相同。类型必须相同。每个数组元素的作用相当于一个简单变量,可以通过数每个数组元素的作用相当于一个简单变量,可以通过数组下标来访问组下标来访问 数组的长度也是数组元素的个数,必须在定义时给出数组的长度也是数组元素的个数,必须在定义时给出常常量值量值,确定后不能改变,确定后不能改变 同一数组中的数组元素在内存中的空间是连续分布的,同一数组中的数组元素在内存中的空间是连续分布的,数组名代表首地址数组名代表首地址一维数组的定义一维数组的定义l 数组在使用前,必须先定义,并给出数组在使用前,必须先定义

3、,并给出数组名数组名、数据类型名数据类型名、数组长度数组长度和和维数维数。l 一维数组定义的一般格式为:一维数组定义的一般格式为: 数据类型数据类型 数组名整型常量表达式;数组名整型常量表达式; l 例:例: #define N 20 float aN; 可以存放可以存放20个个float数据数据 int b10; 可以存放可以存放10个个int数据数据一维数组定义的说明一维数组定义的说明l “数据类型数据类型”说明符表示说明符表示数组元素具有的数据类型数组元素具有的数据类型,可以,可以是是int、 short、long、char、unsigned、float、double等数据类型。等数据类

4、型。l “数组名数组名”命名规则和变量名相同。命名规则和变量名相同。“数组名数组名”惟一标识惟一标识该数组该数组,各数组元素均用数组名来访问,它,各数组元素均用数组名来访问,它是整个数组元是整个数组元素的首地址素的首地址。 l “整型常量表达式整型常量表达式”的值表示数组中所包含的的值表示数组中所包含的数组元素总数组元素总个数个数,即,即数组的长度数组的长度,必须是,必须是常量常量和和符号常量符号常量,不能是变,不能是变量量l 数组名后面的数组名后面的一对方括号一对方括号“”表示该数组是表示该数组是一维数组一维数组,“整型常量表达式整型常量表达式”只能用方括号括起来。只能用方括号括起来。 l

5、数组的每个元素分别使用:数组的每个元素分别使用:数组名数组名0、数组名数组名1、数数组名组名整型常量表达式整型常量表达式-1表示。表示。 l 相同数据类型的数组可以在同一个相同数据类型的数组可以在同一个“数据类型数据类型”说明符下说明符下一起定义,用逗号一起定义,用逗号“,”隔开,如隔开,如double a5,b10。 一维数组的存储一维数组的存储l 同一数组中的数组元素在内存中同一数组中的数组元素在内存中的空间是连续的的空间是连续的,数组名代表该数组名代表该连续内存空间的首地址连续内存空间的首地址。l 假定数组假定数组 int a10; 在内存中的在内存中的起始地址为起始地址为3000,其存

6、储情况,其存储情况如图所示:如图所示: l 一维数组在内存中一维数组在内存中连续占用的字连续占用的字节数数组长度节数数组长度sizeof(数据(数据类型)类型)。l 如如int a10,数组,数组a的字节数为的字节数为10个元素个元素2B20B(假设机(假设机器字长为器字长为16位)。数组位)。数组a的长度的长度可以可以使用使用sizeof(a)获得获得。 300230033000300130043005a1a0a2a9一维数组的初始化一维数组的初始化l 在定义数组的同时,对数组元素进行赋值,称之为数组的在定义数组的同时,对数组元素进行赋值,称之为数组的初始化。一般形式为:初始化。一般形式为:

7、 数据类型数据类型 数组名整型常量表达式数组名整型常量表达式=常数常数1,常数,常数2,常数,常数n; a0=1内存用户数据区内存用户数据区a1=3a2=2593000300230043008a3=-1a4=-10300600000001000000001111011011111111000000110000000000000011000000011111111111111111其中:常数其中:常数1,常数,常数2,常数,常数n的数据的数据类型必须与前面指定的数据类型一致。类型必须与前面指定的数据类型一致。例:例: 一维数组初始化方法一维数组初始化方法全部赋值全部赋值:给出:给出“整型常量表达

8、式整型常量表达式”的值和各元素的全部常数初值。的值和各元素的全部常数初值。各常数初值之间用逗号分开,从第一个常数开始依次赋给各数组元各常数初值之间用逗号分开,从第一个常数开始依次赋给各数组元素。素。例如:例如:float b3= 2.18,3.14,89.0 ;全部赋值,缺省长度全部赋值,缺省长度:给出各元素的全部常数初值,可不给出:给出各元素的全部常数初值,可不给出“整整型常量表达式型常量表达式”的值,即不指定数组长度。的值,即不指定数组长度。例如:例如:int a= -10,20,28,-1,88 ;部分赋值部分赋值:给出:给出“整型常量表达式整型常量表达式”的值和前面部分数组元素的常的值

9、和前面部分数组元素的常数初值。这时后面没有赋初值的元素,系统会自动赋以数初值。这时后面没有赋初值的元素,系统会自动赋以0值或值或0值。值。例如:例如:int a5= -10,20,28 ;如果需要将数组的全部元素赋以如果需要将数组的全部元素赋以0值或值或0值,则可以在定义数组时值,则可以在定义数组时添加添加static关键字并给出关键字并给出“整型常量表达式整型常量表达式”的值。的值。例如:例如:static int a5;一维数组的引用一维数组的引用l 数组除了作为数组除了作为函数参数函数参数或或字符数组作为字符串字符数组作为字符串使用时可以整体使用时可以整体引用外,其它情况必须以引用外,其

10、它情况必须以数组元素数组元素的方式引用。的方式引用。l C提供了提供了下标下标、地址地址、指针指针三种方式三种方式引用数组元素引用数组元素,下标方式,下标方式用下标表示引用的数组元素,地址方式用地址表示引用的数组用下标表示引用的数组元素,地址方式用地址表示引用的数组元素,指针方式用指针变量表示引用的数组元素。元素,指针方式用指针变量表示引用的数组元素。l 下标引用数组元素的一般形式为:下标引用数组元素的一般形式为: 数组名下标;数组名下标; 其中,其中,下标下标可以是可以是整型常量整型常量、整型变量整型变量或或整型表达式整型表达式,表示对,表示对应数组元素在数组中的顺序。应数组元素在数组中的顺

11、序。下标的取值范围为下标的取值范围为0、1、数、数组元素总个数组元素总个数-1。 一维数组引用说明一维数组引用说明l 数组元素和普通基本型变量一样数组元素和普通基本型变量一样的使用,可出现在的使用,可出现在C语言表达式中的语言表达式中的任何地方。任何地方。如:如: int b10; b0=b5+b7-b2*3;又如:又如:int i15 , n=3; i0=-10; i5=6; in*4=9;l 每个每个数组元素数组元素与其它基本类型变量一样与其它基本类型变量一样有自己的地址有自己的地址,并,并用用“&”符符号获取号获取l C语言规定:语言规定:每个数组元素只能逐个引用每个数组元素只能逐个引用

12、,而不能一次引用整个数组,而不能一次引用整个数组l 引用数组元素之前,必须确保数组元素已经被赋值引用数组元素之前,必须确保数组元素已经被赋值,否则得到的是一,否则得到的是一个不确定的值个不确定的值l C语言不提供数组下标越界的保护语言不提供数组下标越界的保护。定义数组时用到的。定义数组时用到的“数组名数组名整型整型常量表达式常量表达式”和引用数组元素时用到的和引用数组元素时用到的“数组名数组名下标下标”是有区别的是有区别的一维数组的基本操作一维数组的基本操作输入数组元素值:输入数组元素值: for(i=0; i10; i+) scanf(%d, &ai); 输出数组元素值:输出数组元素值: f

13、or(i=0; i10; i+) printf(%d, ai); 一维数组的基本操作一维数组的基本操作求最大值求最大值max#include void main() int a8=35,12,44,97,65,70,32,28; int i, max; max=a0; for(i=1; i=7; i+) if(maxai) max=ai; printf(最大值最大值=%dn, max);一维数组的基本操作一维数组的基本操作求最小值求最小值min#include void main() int a8=35,12,44,97,65,70,32,28; int i, min; min=a0; for

14、(i=1; iai) min=ai; printf(最小值最小值=%dn, min);一维数组的基本操作一维数组的基本操作求最大值求最大值max 及及max在数组中的位置在数组中的位置#include void main() int a8=35,12,44,97,65,70,32,28; int i, p=0, max; max=a0; for(i=1; i=7; i+) if(maxai) max=ai; p=i; printf(最大值最大值=%d,是数组中的第,是数组中的第%d个元素个元素n, ap, p);一维数组的基本操作一维数组的基本操作求最小值求最小值min 及及min在数组中的位

15、置在数组中的位置#include void main() int a8=35,12,44,97,65,70,32,28; int i, p=0, min; min=a0; for(i=1; iai) min=ai; p=i; printf(最小值最小值=%d,是数组中的第,是数组中的第%d个元素个元素n, ap, p);一维数组的基本操作一维数组的基本操作求数组元素的累加和求数组元素的累加和sum#include void main() int a8=35,12,44,97,65,70,32,28; int i, sum=0; for(i=0; i=7; i+) sum+=ai; printf

16、(累加和累加和 sum=%dn, sum);课堂练习课堂练习已知跳水运动员的成绩由已知跳水运动员的成绩由8位裁判各自打分,去掉位裁判各自打分,去掉一个最高分,去掉一个最低分,剩下的裁判打分一个最高分,去掉一个最低分,剩下的裁判打分计算平均,即为运动员的最终成绩。计算平均,即为运动员的最终成绩。编写程序,计算已经保存在数组编写程序,计算已经保存在数组score 中的运动中的运动员最终成绩。员最终成绩。课堂练习课堂练习已知某教学班有学生已知某教学班有学生30人,考试成绩保存在数组人,考试成绩保存在数组score 中。编写程序,分别统计及格和不及格人中。编写程序,分别统计及格和不及格人数。数。及格及

17、格(60=score)不及格不及格(60)的人数分别有多少,并在屏幕上输出。的人数分别有多少,并在屏幕上输出。#include #include void main() int score30; int i, s1=0, s2=0; for(i=0; i30; i+) scorei=71*rand()/32767+30;printf(%5d, scorei);printf(n);for(i=0; i=60)s1+;elses2+;printf(及格人数:及格人数:%dn, s1);printf(不及格人数:不及格人数:%dn, s2);已知某教学班有学生已知某教学班有学生30人,考试成绩保存在

18、数组人,考试成绩保存在数组score 中。编写程序,分别统计如下成绩段中。编写程序,分别统计如下成绩段优优(=90)良良(80=score90)中中(70=score80)及格及格(60=score70)不及格不及格(a1,则交换;,则交换; 然然后比较第二个数与第三个数;后比较第二个数与第三个数; 依次类推,直至第依次类推,直至第n-1个数和第个数和第n个数比较为个数比较为止止第一趟排序过后,最大的数被安置在最后一个元素位置上;第一趟排序过后,最大的数被安置在最后一个元素位置上; (2)对前)对前n-1个数进行第二趟冒泡排序,结果使次最大的数被安置在第个数进行第二趟冒泡排序,结果使次最大的数

19、被安置在第n-1个元素位置;个元素位置; (3)重复上述过程,共经过)重复上述过程,共经过n-1趟冒泡排序后,排序结束。趟冒泡排序后,排序结束。 冒泡法在第一趟比较中要进行冒泡法在第一趟比较中要进行n-1次两两比较,在第次两两比较,在第j趟比较中要进行趟比较中要进行n-j次比较。次比较。冒泡排序第冒泡排序第1趟第趟第1次比较次比较65724189377554814966哪个大?要不要交换?哪个大?要不要交换?冒泡排序第冒泡排序第1趟第趟第2次比较次比较65724189377554814966哪个大?要不要交换?哪个大?要不要交换?冒泡排序第冒泡排序第1趟第趟第3次比较次比较6541728937

20、7554814966哪个大?要不要交换?哪个大?要不要交换?冒泡排序第冒泡排序第1趟第趟第4次比较次比较65893741727554814966哪个大?要不要交换?哪个大?要不要交换?冒泡排序第冒泡排序第1趟第趟第5次比较次比较65897541723754814966哪个大?要不要交换?哪个大?要不要交换?冒泡排序第冒泡排序第1趟第趟第6次比较次比较65895441723775814966哪个大?要不要交换?哪个大?要不要交换?冒泡排序第冒泡排序第1趟第趟第7次比较次比较65898141723775544966哪个大?要不要交换?哪个大?要不要交换?冒泡排序第冒泡排序第1趟第趟第8次比较次比较

21、65894941723775548166哪个大?要不要交换?哪个大?要不要交换?冒泡排序第冒泡排序第1趟第趟第9次比较次比较65896641723775548149哪个大?要不要交换?哪个大?要不要交换?冒泡排序第冒泡排序第1趟第趟第9次比较过后次比较过后65668941723775548149第第1趟比较结束,最大值元素趟比较结束,最大值元素“沉底沉底”冒泡排序第冒泡排序第2趟第趟第1次比较次比较6689723775548149哪个大?要不要交换?哪个大?要不要交换?6541冒泡排序第冒泡排序第2趟第趟第2次比较次比较6689413775548149哪个大?要不要交换?哪个大?要不要交换?6

22、572冒泡排序第冒泡排序第2趟第趟第3次比较次比较6689416575548149哪个大?要不要交换?哪个大?要不要交换?7237冒泡排序第冒泡排序第2趟第趟第4次比较次比较6689416537548149哪个大?要不要交换?哪个大?要不要交换?7275冒泡排序第冒泡排序第2趟第趟第5次比较次比较66894165378149哪个大?要不要交换?哪个大?要不要交换?727554冒泡排序第冒泡排序第2趟第趟第6次比较次比较66894165378149哪个大?要不要交换?哪个大?要不要交换?725475冒泡排序第冒泡排序第2趟第趟第7次比较次比较6689416537哪个大?要不要交换?哪个大?要不要

23、交换?7254758149冒泡排序第冒泡排序第2趟第趟第8次比较次比较4989416537哪个大?要不要交换?哪个大?要不要交换?7254758166冒泡排序第冒泡排序第2趟第趟第8次比较结束次比较结束49894165377254756681第第2趟比较结束,次最大值元素趟比较结束,次最大值元素“沉底沉底”冒泡排序第冒泡排序第3趟第趟第1次比较次比较49894165377254756681哪个大?要不要交换?哪个大?要不要交换?冒泡排序第冒泡排序第3趟第趟第2次比较次比较4989417254756681哪个大?要不要交换?哪个大?要不要交换?6537冒泡排序第冒泡排序第3趟第趟第3次比较次比较

24、49894137657254756681哪个大?要不要交换?哪个大?要不要交换?冒泡排序第冒泡排序第3趟第趟第4次比较次比较4989413765756681哪个大?要不要交换?哪个大?要不要交换?7254冒泡排序第冒泡排序第3趟第趟第5次比较次比较4989413765756681哪个大?要不要交换?哪个大?要不要交换?5472冒泡排序第冒泡排序第3趟第趟第6次比较次比较894137656681哪个大?要不要交换?哪个大?要不要交换?54727549冒泡排序第冒泡排序第3趟第趟第7次比较次比较894137654981哪个大?要不要交换?哪个大?要不要交换?54727566冒泡排序第冒泡排序第3趟

25、第趟第7次比较结束次比较结束89413765498154726675第第3趟比较结束,趟比较结束,3个大值元素个大值元素“沉底沉底”冒泡排序第冒泡排序第4趟第趟第1次比较次比较8965498154726675哪个大?要不要交换?哪个大?要不要交换?4137冒泡排序第冒泡排序第4趟第趟第2次比较次比较8965498154726675哪个大?要不要交换?哪个大?要不要交换?3741冒泡排序第冒泡排序第4趟第趟第3次比较次比较894981726675哪个大?要不要交换?哪个大?要不要交换?37416554冒泡排序第冒泡排序第4趟第趟第4次比较次比较894981546675哪个大?要不要交换?哪个大?

26、要不要交换?37416572冒泡排序第冒泡排序第4趟第趟第5次比较次比较8981546675哪个大?要不要交换?哪个大?要不要交换?3741657249冒泡排序第冒泡排序第4趟第趟第6次比较次比较8981544975哪个大?要不要交换?哪个大?要不要交换?3741657266冒泡排序第冒泡排序第4趟第趟第6次比较结束次比较结束89815449753741656672冒泡排序第冒泡排序第5趟第趟第1次比较次比较89815449753741656672哪个大?要不要交换?哪个大?要不要交换?冒泡排序第冒泡排序第5趟第趟第2次比较次比较89815449753741656672哪个大?要不要交换?哪个

27、大?要不要交换?冒泡排序第冒泡排序第5趟第趟第3次比较次比较89815449753741656672哪个大?要不要交换?哪个大?要不要交换?冒泡排序第冒泡排序第5趟第趟第4次比较次比较8981547537416672哪个大?要不要交换?哪个大?要不要交换?6549冒泡排序第冒泡排序第5趟第趟第5次比较次比较8981547537414972哪个大?要不要交换?哪个大?要不要交换?6566冒泡排序第冒泡排序第5趟比较结束趟比较结束89815475374149726566冒泡排序第冒泡排序第6趟第趟第1次比较次比较89815475374149726566哪个大?要不要交换?哪个大?要不要交换?冒泡排

28、序第冒泡排序第6趟第趟第2次比较次比较89815475374149726566哪个大?要不要交换?哪个大?要不要交换?冒泡排序第冒泡排序第6趟第趟第3次比较次比较8981753741726566哪个大?要不要交换?哪个大?要不要交换?5449冒泡排序第冒泡排序第6趟第趟第4次比较次比较8981753741723966哪个大?要不要交换?哪个大?要不要交换?5465冒泡排序第冒泡排序第6趟比较结束趟比较结束89817537417249665465冒泡排序第冒泡排序第7趟第趟第1次比较次比较89817537417249665465哪个大?要不要交换?哪个大?要不要交换?冒泡排序第冒泡排序第7趟第趟

29、第2次比较次比较8981753772665465哪个大?要不要交换?哪个大?要不要交换?4149冒泡排序第冒泡排序第7趟第趟第3次比较次比较8981753772664165哪个大?要不要交换?哪个大?要不要交换?4954冒泡排序第冒泡排序第7趟比较结束趟比较结束89817537726641654954没有元素交换,排序完成没有元素交换,排序完成2022年4月14日星期四71例例7.7程序程序#include #define SIZE 30void sort(int array,int n);int main() int aSIZE,n,i; printf(Input student numbe

30、r: ); scanf(%d,&n); /* 输入学生人数输入学生人数 */ printf(Input %d score: n,n); for(i=0; in; i+) scanf(%d,&ai); /* 输入成绩输入成绩 */ printf(n); sort(a,n); /* 冒泡法排序冒泡法排序 */ printf(The sorted score: n); /* 输出数据输出数据 */ for(i=0; in; i+) if(i%15=0) printf(n); printf(%4d ,ai); /* 输出排序后的成绩输出排序后的成绩 */ return(0);/* 冒泡法排序函数冒泡法

31、排序函数 */void sort(int array,int num) int i,j,t; for(j=0; jnum-1; j+) for(i=0; iarrayi+1) t=arrayi; arrayi=arrayi+1; arrayi+1=t; 2022年4月14日星期四72例例7.8 选择排序选择排序【例例7.8】用选择排序法对一个班用选择排序法对一个班30个学生的个学生的C语言语言成绩成绩按升序排名。按升序排名。 分析问题:分析问题: 选择法的思想是选择法的思想是将相邻的两个数进行比较,记录最小值的将相邻的两个数进行比较,记录最小值的下标,最后再将最小值与第一个数交换。下标,最后再

32、将最小值与第一个数交换。 选择法的排序过程选择法的排序过程如下:如下: (1)首先通过)首先通过n-1次比较,从次比较,从n个数中找出最小数的下标,个数中找出最小数的下标,通过下标找到对应的元素并与第一个数交换通过下标找到对应的元素并与第一个数交换第一趟选择排第一趟选择排序,结果最小的数被安置在第一个元素位置上;序,结果最小的数被安置在第一个元素位置上; (2)再通过)再通过n-2次比较,从剩余的次比较,从剩余的n-1个数中找出关键字个数中找出关键字次小的数据下标,将它与第二个数交换次小的数据下标,将它与第二个数交换第二趟选择排序;第二趟选择排序; (3)重复上述过程,共经过)重复上述过程,共

33、经过n-1趟排序后,排序结束。趟排序后,排序结束。 选择排序第选择排序第1趟第趟第1次比较次比较65724189377554814966哪个更小?哪个更小?0最小值元素下标最小值元素下标选择排序第选择排序第1趟第趟第2次比较次比较65724189377554814966哪个更小?哪个更小?0 2最小值元素下标最小值元素下标选择排序第选择排序第1趟第趟第3次比较次比较65724189377554814966哪个更小?哪个更小?2最小值元素下标最小值元素下标选择排序第选择排序第1趟第趟第4次比较次比较65724189377554814966哪个更小?哪个更小?2 4最小值元素下标最小值元素下标选择

34、排序第选择排序第1趟第趟第5次比较次比较65724189377554814966哪个更小?哪个更小?4最小值元素下标最小值元素下标选择排序第选择排序第1趟第趟第6次比较次比较65724189377554814966哪个更小?哪个更小?4最小值元素下标最小值元素下标选择排序第选择排序第1趟第趟第7次比较次比较65724189377554814966哪个更小?哪个更小?4最小值元素下标最小值元素下标选择排序第选择排序第1趟第趟第8次比较次比较65724189377554814966哪个更小?哪个更小?4最小值元素下标最小值元素下标选择排序第选择排序第1趟第趟第9次比较次比较657241893775

35、54814966哪个更小?哪个更小?4最小值元素下标最小值元素下标选择排序第选择排序第1趟比较后交换元素趟比较后交换元素657241893775548149664最小值元素下标最小值元素下标选择排序第选择排序第2趟第趟第1次比较次比较37724189657554814966哪个更小?哪个更小?1 2最小值元素下标最小值元素下标选择排序第选择排序第2趟第趟第2次比较次比较37724189657554814966哪个更小?哪个更小?2最小值元素下标最小值元素下标选择排序第选择排序第2趟第趟第3次比较次比较37724189657554814966哪个更小?哪个更小?2最小值元素下标最小值元素下标选择

36、排序第选择排序第2趟第趟第4次比较次比较37724189657554814966哪个更小?哪个更小?2最小值元素下标最小值元素下标选择排序第选择排序第2趟第趟第5次比较次比较37724189657554814966哪个更小?哪个更小?2最小值元素下标最小值元素下标选择排序第选择排序第2趟第趟第6次比较次比较37724189657554814966哪个更小?哪个更小?2最小值元素下标最小值元素下标选择排序第选择排序第2趟第趟第7次比较次比较37724189657554814966哪个更小?哪个更小?2最小值元素下标最小值元素下标选择排序第选择排序第2趟第趟第8次比较次比较377241896575

37、54814966哪个更小?哪个更小?2最小值元素下标最小值元素下标选择排序第选择排序第2趟比较后交换元素趟比较后交换元素377241896575548149662最小值元素下标最小值元素下标选择排序第选择排序第3趟第趟第1次比较次比较374172896575548149662哪个更小?哪个更小?最小值元素下标最小值元素下标选择排序第选择排序第3趟第趟第2次比较次比较374172896575548149662哪个更小?哪个更小?4最小值元素下标最小值元素下标选择排序第选择排序第3趟第趟第3次比较次比较374172896575548149664哪个更小?哪个更小?最小值元素下标最小值元素下标选择排

38、序第选择排序第3趟第趟第4次比较次比较374172896575548149664哪个更小?哪个更小?6最小值元素下标最小值元素下标选择排序第选择排序第3趟第趟第5次比较次比较374172896575548149666哪个更小?哪个更小?最小值元素下标最小值元素下标选择排序第选择排序第3趟第趟第6次比较次比较374172896575548149666哪个更小?哪个更小?8最小值元素下标最小值元素下标选择排序第选择排序第3趟第趟第6次比较次比较374172896575548149668哪个更小?哪个更小?最小值元素下标最小值元素下标选择排序第选择排序第3趟比较后交换元素趟比较后交换元素374172

39、896575548149668最小值元素下标最小值元素下标选择排序第选择排序第4趟第趟第1次比较次比较374149896575548172663哪个更小?哪个更小?4最小值元素下标最小值元素下标选择排序第选择排序第4趟第趟第2次比较次比较374149896575548172664哪个更小?哪个更小?最小值元素下标最小值元素下标选择排序第选择排序第4趟第趟第3次比较次比较374149896575548172664哪个更小?哪个更小?6最小值元素下标最小值元素下标选择排序第选择排序第4趟第趟第4次比较次比较374149896575548172666哪个更小?哪个更小?最小值元素下标最小值元素下标选

40、择排序第选择排序第4趟第趟第5次比较次比较374149896575548172666哪个更小?哪个更小?最小值元素下标最小值元素下标选择排序第选择排序第4趟第趟第6次比较次比较374149896575548172666哪个更小?哪个更小?最小值元素下标最小值元素下标选择排序第选择排序第4趟比较后交换元素趟比较后交换元素374149896575548172666最小值元素下标最小值元素下标选择排序第选择排序第5趟第趟第1次比较次比较374149546575898172664哪个更小?哪个更小?最小值元素下标最小值元素下标选择排序第选择排序第5趟第趟第2次比较次比较3741495465758981

41、72664哪个更小?哪个更小?最小值元素下标最小值元素下标选择排序第选择排序第5趟第趟第3次比较次比较374149546575898172664哪个更小?哪个更小?最小值元素下标最小值元素下标选择排序第选择排序第5趟第趟第4次比较次比较374149546575898172664哪个更小?哪个更小?最小值元素下标最小值元素下标选择排序第选择排序第5趟第趟第5次比较次比较374149546575898172664哪个更小?哪个更小?最小值元素下标最小值元素下标选择排序第选择排序第5趟比较后不用交换元素趟比较后不用交换元素374149546575898172664最小值元素下标最小值元素下标选择排序

42、第选择排序第6趟第趟第1次比较次比较374149546575898172665哪个更小?哪个更小?最小值元素下标最小值元素下标选择排序第选择排序第6趟第趟第2次比较次比较374149546575898172665哪个更小?哪个更小?最小值元素下标最小值元素下标选择排序第选择排序第6趟第趟第3次比较次比较374149546575898172665哪个更小?哪个更小?8最小值元素下标最小值元素下标选择排序第选择排序第6趟第趟第4次比较次比较374149546575898172668哪个更小?哪个更小?9最小值元素下标最小值元素下标选择排序第选择排序第6趟比较后交换元素趟比较后交换元素3741495

43、46575898172669最小值元素下标最小值元素下标选择排序第选择排序第7趟第趟第1次比较次比较374149546566898172756哪个更小?哪个更小?7最小值元素下标最小值元素下标选择排序第选择排序第7趟第趟第2次比较次比较374149546566898172757哪个更小?哪个更小?8最小值元素下标最小值元素下标选择排序第选择排序第7趟第趟第3次比较次比较374149546566898172758哪个更小?哪个更小?最小值元素下标最小值元素下标选择排序第选择排序第7趟比较后交换元素趟比较后交换元素374149546566898172758最小值元素下标最小值元素下标选择排序第选择

44、排序第8趟第趟第1次比较次比较374149546566728189757哪个更小?哪个更小?最小值元素下标最小值元素下标选择排序第选择排序第8趟第趟第2次比较次比较374149546566728189759哪个更小?哪个更小?最小值元素下标最小值元素下标选择排序第选择排序第8趟比较后交换元素趟比较后交换元素374149546566728189759最小值元素下标最小值元素下标选择排序第选择排序第9趟比较趟比较374149546566727589818哪个更小?哪个更小?9最小值元素下标最小值元素下标选择排序第选择排序第9趟比较后交换元素趟比较后交换元素374149546566727589819

45、最小值元素下标最小值元素下标2022年4月14日星期四127例例7.8程序程序#include #define SIZE 30void sort(int array,int num);int main() int aSIZE,i,n; printf(Input student number: ); scanf(%d,&n); /* 输入学生人数,输入学生人数,n要求小于要求小于SIZE */ printf(Input %d score: n,n); for(i=0; in; i+) scanf(%d,&ai); /* 输入成绩输入成绩 */ printf(n); sort(a,n); /* 选

46、择法排序选择法排序 */ printf(The sorted numbers: n); for(i=0; in; i+) printf(%d ,ai); /* 输出数据输出数据 */ return(0);/* 选择法排序函数选择法排序函数 */void sort(int array,int num) int i, j, k, t; for(i=0; inum-1; i+) k=i; for(j=i+1; jnum; j+) if(arrayjarrayk) k=j; if(i!=k) t=arrayi; arrayi=arrayk; arrayk=t; 指针的运算指针的运算 l 指针变量本身是

47、一个变量,可以参加某些运算。指针变量本身是一个变量,可以参加某些运算。l 但指针的本质是一个地址,其运算具有一些特别但指针的本质是一个地址,其运算具有一些特别的性质,的性质,不能用普通变量运算规则来作为指针运不能用普通变量运算规则来作为指针运算的规则算的规则。l 指针运算除了指针运算除了“&”和和“*”运算符之外,通常还有运算符之外,通常还有+、-、+、-和和关系运算关系运算。l 其中其中+、+代表指针前移,代表指针前移,-、-代表指针后移。代表指针后移。指针的赋值运算指针的赋值运算 l 在引用指针变量之前,一定要对其进行赋值在引用指针变量之前,一定要对其进行赋值,使其有明确,使其有明确的指向

48、。指针的赋值运算包括:的指向。指针的赋值运算包括:l 赋空值赋空值:使指针变量指向一个空值,这时指针变量不指向任何变量:使指针变量指向一个空值,这时指针变量不指向任何变量 在在stdio.h文件中定义了:文件中定义了: #define NULL 0 (用(用NULL表示表示0)。)。 定义定义int *p=NULL; 相当于相当于int *p; p=NULL;表示表示p不指向任何变不指向任何变量,而是指向地址为量,而是指向地址为0的内存单元,这时的内存单元,这时p称之为称之为空指针空指针。l 赋地址值赋地址值:将一个变量的地址值赋给一个指针变量将一个变量的地址值赋给一个指针变量,使该指针变量,

49、使该指针变量指向地址对应的变量,这时两个变量必须是一样的数据类型。如:指向地址对应的变量,这时两个变量必须是一样的数据类型。如:int a,*p; p=&a; l 赋指针变量值赋指针变量值:相同数据类型的指针变量可以相互赋值相同数据类型的指针变量可以相互赋值,这时,这时两个两个指针变量指向同一个变量的存储空间指针变量指向同一个变量的存储空间。如:。如:int a,*p,*q; p=&a; q=p; 这时,指针变量这时,指针变量p和和q都指向变量都指向变量a指针的自增自减运算指针的自增自减运算l 指针变量的自增自减运算指针变量的自增自减运算:对指针变量的自增:对指针变量的自增(+)自减()自减(

50、-)运算,表示使该指针变量指向后)运算,表示使该指针变量指向后一个变量或前一个变量。如:一个变量或前一个变量。如:int a,*p; 自增运算:自增运算:p+; +p; 自减运算:自减运算:p-; -p; l 两个指针变量相减运算两个指针变量相减运算:两个数据类型相同的指:两个数据类型相同的指针变量之间可以进行减法(针变量之间可以进行减法(-)运算,其差为整型)运算,其差为整型数据,表示两个指针变量地址之间能够存放的指数据,表示两个指针变量地址之间能够存放的指针变量所指的数据类型的数据个数。针变量所指的数据类型的数据个数。l 任何两个指针变量之间均不能进行加法运算任何两个指针变量之间均不能进行

51、加法运算。指针变量加(或减)一个整数的运算指针变量加(或减)一个整数的运算 l C语言规定,一个指针变量语言规定,一个指针变量p加(或减)一个整数加(或减)一个整数n并不是简单地将指并不是简单地将指针变量的原值加(或减)一个整数,而是将该指针变量的原值(是一针变量的原值加(或减)一个整数,而是将该指针变量的原值(是一个地址)和它指向的变量所占用的内存单元字节数相加(或减)。个地址)和它指向的变量所占用的内存单元字节数相加(或减)。l 如如p+n或或p-n(p是指针变量,是指针变量,n是整数),代表的地址计算是是整数),代表的地址计算是p+L*n或或p-L*n(L为指针变量所指向的数据类型所占内

52、存的字节数)。为指针变量所指向的数据类型所占内存的字节数)。l 如果有如果有int a,b,c,*p;,假定变量;,假定变量a、b、c连续分配内存空间,则连续分配内存空间,则指针加(减)法运算如图所示。指针加(减)法运算如图所示。3001p=&ap+1p+230033005468a=4b=6pc=84683001p=&ap-1p+130033005a=4b=6pc=8例例7.1 计算学生的平均成绩计算学生的平均成绩 程序实现程序实现解法一解法一#include #define N 15int main() int aN; /* 定义一维数组定义一维数组a存放存放15门课程成绩门课程成绩 */

53、int average, sum, i; for(i=0; iN; i+) scanf(%d, &ai); /* 给每门课程成绩赋值给每门课程成绩赋值 */ sum=0; /* 累加和变量累加和变量sum */ for(i=0; iN; i+) sum=sum+ai; /* 累加每个成绩值累加每个成绩值 */ average=sum/N; /* 求平均成绩求平均成绩 */ for(i=0; iN; i+) printf(%4d, ai); /* 输出每门课程成绩输出每门课程成绩 */ printf(nAverage=%dn, average); /* 输出平均成绩输出平均成绩 */程序实现程序

54、实现解法二解法二l 本例还可以使用函数方式来实现。可以定义一个本例还可以使用函数方式来实现。可以定义一个int add(int array,int n)函数来求函数来求15门课程成绩门课程成绩的总和,函数的返回值就是总和值。的总和,函数的返回值就是总和值。l 程序中程序中sum=add(a,N);语句实现函数的调用,函语句实现函数的调用,函数的返回值赋给数的返回值赋给sum变量。变量。l 主调函数中主调函数中sum=add(a,N);语句的语句的a表示数组名,表示数组名,作为实际参数传递给被调函数。作为实际参数传递给被调函数。l int add(int array,int n)函数定义中的函数

55、定义中的array表示表示需要传入数组的形参名。需要传入数组的形参名。 程序实现程序实现解法二(续)解法二(续)/* LT7_1A.c */#include #define N 15int add(int array,int n);int main() int aN; /* 定义一维数组定义一维数组a存放存放15门课程成绩门课程成绩 */ int average,sum,i; for(i=0;iN;i+) scanf(%d,&ai); /* 给每门课程成绩赋值给每门课程成绩赋值 */ sum=add(a,N); /* 累加每个成绩值并将函数的返回值总和赋给累加每个成绩值并将函数的返回值总和赋给

56、sum */ average=sum/N; /* 求平均成绩求平均成绩 */ for(i=0;iN;i+) printf(%4d,ai); /* 输出每门课程成绩输出每门课程成绩 */ printf(nAverage=%dn,average); /* 输出平均成绩输出平均成绩 */ return(0);本例程序涉及到一维数组的定义、初始化、引用、一维数组作本例程序涉及到一维数组的定义、初始化、引用、一维数组作函数参数等知识点。函数参数等知识点。/* 累加每个成绩值累加每个成绩值 */int add(int array,int n) int i,s; s=0; for(i=0;in;i+) s=

57、s+arrayi; return(s);程序实现程序实现解法三解法三l 本例程序还可以用指针来完成。本例程序还可以用指针来完成。l int *p; 语句定义了一个指针变量语句定义了一个指针变量p,它可以指向任何一个同,它可以指向任何一个同类型的变量,通过该指针变量可以访问其指向的对应变量类型的变量,通过该指针变量可以访问其指向的对应变量l p=a; 语句完成指针变量语句完成指针变量p指向数组变量指向数组变量a,这时,通过指针,这时,通过指针变量变量p就可以访问数组就可以访问数组a的各元素了。的各元素了。l for(;pa+N;p+) scanf(“%d”,p); 语句给每个数组元素赋语句给每个

58、数组元素赋值,值,p第第1次指向数组次指向数组a的第的第1个元素,通过个元素,通过p+使使p指向数组指向数组a的下一个元素。的下一个元素。l for(p=a;pa+N;p+) sum=sum+*p; 语句实现数组各元素语句实现数组各元素值的累加,值的累加,*p表示表示p当前所指向的数组元素值。当前所指向的数组元素值。 程序实现程序实现解法三(续)解法三(续)/* LT7_1B.c */#include #define N 15int main() int aN; /* 定义一维数组定义一维数组a存放存放15门课程成绩门课程成绩 */ int *p; /* 定义整型数据指针变量定义整型数据指针变

59、量 */ int average,sum,i; p=a; /* 整型指针变量整型指针变量p指向整型数组指向整型数组a */ for(;pa+N;p+) scanf(%d,p); /* 给每门课程成绩赋值给每门课程成绩赋值 */ sum=0; /* 累加和变量累加和变量sum */ for(p=a;pa+N;p+) sum=sum+*p; /* 累加每个成绩值累加每个成绩值 */ average=sum/N; /* 求平均成绩求平均成绩 */ for(p=a;pa+N;p+) printf(%4d,*p); /* 输出每门课程成绩输出每门课程成绩 */ printf(nAverage=%dn,a

60、verage); /* 输出平均成绩输出平均成绩 */ return(0);两个指针变量的关系运算两个指针变量的关系运算l 两个指针变量之间的关系运算是比较两个指针变量所指向两个指针变量之间的关系运算是比较两个指针变量所指向的地址关系,其运算符有的地址关系,其运算符有=、!=、=。l 比较运算结果为真(比较运算结果为真(1)或假()或假(0)。)。l p+、p-、+p、-p和和p-=n、p+=n、p=p+n、p=p-n(这(这里里n表示整型数据,表示整型数据,p为指针变量)等运算的结果仍为指针。为指针变量)等运算的结果仍为指针。 l 指针变量的加或减运算,只对具有连续存储单元的相同数指针变量的

温馨提示

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

评论

0/150

提交评论