19一维数组冒泡排序_第1页
19一维数组冒泡排序_第2页
19一维数组冒泡排序_第3页
19一维数组冒泡排序_第4页
19一维数组冒泡排序_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、项目项目3 3:学生总评成绩的统计与排序:学生总评成绩的统计与排序 涉及到的知识点如下:涉及到的知识点如下:单元一:单元一:whilewhile语句的流程以及应用语句的流程以及应用单元二:单元二:do-whiledo-while语句的流程以及应用语句的流程以及应用单元三:单元三:forfor语句的流程以及应用语句的流程以及应用单元四:单元四:breakbreak、continuecontinue语句的应用语句的应用单元五:循环结构的嵌套练习单元五:循环结构的嵌套练习单元六:分支、循环结构的综合应用单元六:分支、循环结构的综合应用单元七:一维数组的定义及应用单元七:一维数组的定义及应用单元八:二

2、维数组的定义及应用单元八:二维数组的定义及应用单元九:学生总评成绩统计与排序的实现单元九:学生总评成绩统计与排序的实现单元七:一维数组的定义及应用单元七:一维数组的定义及应用 第一个问题是:输入第一个问题是:输入100个学生的个学生的“c程序设计程序设计”课程的成绩,将这课程的成绩,将这100个分数从个分数从小到大输出。小到大输出。 第二个问题是输入第二个问题是输入100个学生的个学生的“c程程序设计序设计”课程的期中和期末成绩,算出总评课程的期中和期末成绩,算出总评成绩,总评成绩为成绩,总评成绩为“30%期中成绩期中成绩+70%期末成绩期末成绩”,计算总评成绩的分数,计算总评成绩的分数段情况

3、。段情况。 整型整型基本类型:基本类型: 实型实型 字符型字符型 、 枚举类型枚举类型 数组类型数组类型 构造类型:构造类型: 结构体类型结构体类型 公用体类型公用体类型指针类型指针类型空类型空类型c语言的数据类型什么构造类型?什么构造类型? 所谓构造类型是指由基本类型数据按所谓构造类型是指由基本类型数据按一定的规则组成的,是用户自己按规则定一定的规则组成的,是用户自己按规则定义的,数组是构造类型之一。义的,数组是构造类型之一。什么是数组?什么是数组? 在数学中我们学过数列、矩阵的概念,在数学中我们学过数列、矩阵的概念,数列通常表示为:数列通常表示为:a a1 1 、a a2 2 、a a3

4、3、. .、a an n 矩阵通常表示为:矩阵通常表示为:a11a12a13a14a21a22a23a2424在在c c语言中表示数列和矩阵的方法是:语言中表示数列和矩阵的方法是:数组:数组:a0a0、a1a1、a2a2、a3a3、a4a4、a5a5 b0 b0、b1 b1 、 b2、b3、b4 c00 、c01 、c10 、c11 d111 、f2234其中其中 a,b,c,d,fa,b,c,d,f :称为数组名。称为数组名。 方括号中的数方括号中的数:称为下标:称为下标下标是一个数时,也就是数列,称为一下标是一个数时,也就是数列,称为一维数组。维数组。下标是两个数时,也就是矩阵,称为二下标

5、是两个数时,也就是矩阵,称为二维数组。还有三维数组、四维数组等。维数组。还有三维数组、四维数组等。 例如:有五名学生的一组学号:例如:有五名学生的一组学号:1212、1313、1414、1515、1616 int num5;num0= 12; num1= 13;num2= 14;num3= 15; num4= 16; int a,b,c,d,e;a= 12; b= 13;c= 14; d= 15; e= 16; 单元七:一维数组的定义及应用单元七:一维数组的定义及应用7.1 7.1 一维数组的定义一维数组的定义 数组是具有相同数据类型的变量集,并拥数组是具有相同数据类型的变量集,并拥有共同的名

6、字。有共同的名字。 从概念上来说,数组是一组变量,这组变量从概念上来说,数组是一组变量,这组变量应该满足下列条件:应该满足下列条件:(1) 具有有相同的名字具有有相同的名字(2) 具有相同的数据类型具有相同的数据类型(3) 在存储器中连续存放在存储器中连续存放 每个数组在使用之前都需要定义。每个数组在使用之前都需要定义。定义数组的语法是:定义数组的语法是: 数据类型说明符数据类型说明符 数组名数组名 数组长度数组长度; 注意:数组长度只能是常量。注意:数组长度只能是常量。 定义数组中元定义数组中元素的取值类型素的取值类型定义数组定义数组中元素的中元素的个数个数 数组中的每个成员称为数组的一个数

7、组中的每个成员称为数组的一个“数组单元数组单元”,保存在其中的数据值称,保存在其中的数据值称为为“数组元素数组元素”,数组对象的整体有一,数组对象的整体有一个名称,这个名称表示整个数组。个名称,这个名称表示整个数组。例如:例如:int data5; 说明整型数组说明整型数组datadata,有,有5 5个元素。个元素。float b10,c20; 说明单精度浮点型数组说明单精度浮点型数组b b,有,有1010个元素;单个元素;单精度浮点型数组精度浮点型数组c c,有,有2020个元素。个元素。char string20; 说明字符型数组说明字符型数组stringstring,有,有2020个元

8、素。个元素。 一维数组在内存的存储形式:一维数组在内存的存储形式:一组变量200202204206208num 1213141516num0num1num2num3num4int num5;num0= 12; num1= 13;num2= 14;num3= 15; num4= 16; 注意:注意:(1 1) 数组的数据类型定义的是每个数组元素的数组的数据类型定义的是每个数组元素的取值类型。对于一个数组来说,所有数组元素取值类型。对于一个数组来说,所有数组元素的数据类型应该都是相同的。的数据类型应该都是相同的。(2 2) 数组名要符合用户定义字的书写规则,也数组名要符合用户定义字的书写规则,也就

9、是与普通变量一样。就是与普通变量一样。(3 3) 在在c c语言的一个函数中,数组名不能与本函语言的一个函数中,数组名不能与本函数的其它变量名同名。数的其它变量名同名。(4 4)数组长度不能是变量,也不能是或包含变)数组长度不能是变量,也不能是或包含变量的表达式,可以是常量或常量表达式。并且量的表达式,可以是常量或常量表达式。并且常量表达式应是整型数,不能是小数常量表达式应是整型数,不能是小数 。程序段一:程序段一:#define size 5main() int asize,bsize+10; /*正确正确 */ 程序段二:程序段二:main() int n=5; int datan; /*

10、错误错误 */7.2 7.2 一维数组的引用一维数组的引用 引用数组单元的一般形式为:引用数组单元的一般形式为: 数组名数组名 下标下标 数组下标从数组下标从0 0开始,可以是整型变量或整型开始,可以是整型变量或整型表达式,但不能是浮点型的变量或浮点型表表达式,但不能是浮点型的变量或浮点型表达式;并且下标不能大于达式;并且下标不能大于 数组长度数组长度-1-1,因,因为超过部分没有被定义过,是不能正确使用为超过部分没有被定义过,是不能正确使用的。的。 例如:例如:data4、datai+j、datai+都是合都是合法的引用方式。法的引用方式。 v数组必须先定义,后使用数组必须先定义,后使用v只

11、能逐个引用数组元素只能逐个引用数组元素,不能一次引用整个数组不能一次引用整个数组其中:下标可以是常量、变量或表达式,但最终值必须其中:下标可以是常量、变量或表达式,但最终值必须是整型数。是整型数。例例 int a10; scanf(“%d”,a) ; ( ) 必须必须 int a10; for(j=0;j10;j+) scanf(“%d”, &aj);l在数组的定义中:在数组的定义中:数组长度必须是整型常量,例如数组长度必须是整型常量,例如 int a100; 也就是说在定义数组的个数的时候必须给定元素的也就是说在定义数组的个数的时候必须给定元素的个数。下面的定义不正确:个数。下面的定

12、义不正确: int n=5; int an; ( ) n不是常量,是变量。不是常量,是变量。 下面的写法也是正确的:下面的写法也是正确的: #define size 5 main( ) int asize,bsize+5; () 在数组的引用中:在数组的引用中: 下标可以是常量,可以是变量,对于上面的下标可以是常量,可以是变量,对于上面的例子,有例子,有: a0a99都可以用,还可以像如下这种方都可以用,还可以像如下这种方式用:式用:i=2; ai=34; ai+; ai-; a+i; a-i;7.37.3 一维数组元素值的输入与输出一维数组元素值的输入与输出例如例如 : main() int

13、 i , a10; for(i=0 ; i10 ; i+) scanf(“%d” , & ai ) ; for(i=0 ; i10 ; i+) printf (“%d ”, ai ) ; 一维数组元素的输入输入一维数组元素的输出输出例例 : :用数组方式读入用数组方式读入5 5个整数,并求和。个整数,并求和。#include stdio.h main() int i,data5,sum=0; printf(nplease enter 5 integer:); for (i=0;i5;i+) scanf(%d,&datai); for (i=0;i5;i+) sum=sum+da

14、tai; printf(sum is %dn,sum); 在语言中只能逐个地使用每个数组单元在语言中只能逐个地使用每个数组单元进行操作,而不能一次引用整个数组。进行操作,而不能一次引用整个数组。 例如,不能用例如,不能用printf(“%d”,data);来代替下来代替下面的语句:面的语句: for(i=0; i=4; i+) printf(%d,datai); 因为,因为,c语言规定数组名本身代表数组的首语言规定数组名本身代表数组的首地址。地址。printf(“%u”,data);语句输出的是数组的语句输出的是数组的首地址,而不是数组单元的内容。首地址,而不是数组单元的内容。 7.4 7.4

15、 一维数组的初始化一维数组的初始化 初始化是指在数组定义时给数组元素赋予初始化是指在数组定义时给数组元素赋予初值。初值。 一维数组初始化的一般形式是:一维数组初始化的一般形式是:数据类型说明符数据类型说明符 数组名数组名 数组长度数组长度=数值,数数值,数值,值,. . 数值数值 ; int data5=1,2,3,4,5; 注意:注意:(1 1) 允许初始化一部分元素,而不是全部。允许初始化一部分元素,而不是全部。 int data5=1,2;(2 2) 初始化数组时,允许省略数组的长度。初始化数组时,允许省略数组的长度。 int data=1,2,3,4,5; 与与int data5=1,

16、2,3,4,5;是完全等价的。是完全等价的。(3) 初始化数组时,不能对整个数组初始化。初始化数组时,不能对整个数组初始化。 例如,例如,int data5=1; l数组的初始化:数组的初始化:是指在定义数组的时候进行是指在定义数组的时候进行的,例如:的,例如:l int a 3=1,2,3; /* 初始化初始化 */l数组元素的赋值:数组元素的赋值: int a3; /* 定义整型数组定义整型数组 */ . a1=1; a2=2; /* 数组元素赋值数组元素赋值 */ a3=3例【例【1】学校举行知识竞赛,有】学校举行知识竞赛,有10个学生参个学生参赛,请协助老师编写一个程序把成绩打印出赛,

17、请协助老师编写一个程序把成绩打印出来。来。 解题步骤:解题步骤:1、定义一个一维数组存放成绩、定义一个一维数组存放成绩2、输出成绩。、输出成绩。7.4程序举例l代码实现#include”stdio.h”main()int i; int student10=90,78,67,98,34,56,75,80,50,92;for(i=0;i10;i+)printf(“%d”, studenti);l例【例【2】将例【】将例【1】中的】中的10个学生的竞赛成绩从键盘输个学生的竞赛成绩从键盘输入,计算出平均分,将平均分输出到屏幕上。入,计算出平均分,将平均分输出到屏幕上。l#include”stdio.h

18、” #define size 10 main() int i,studentsize,sum=0,avg;for(i=0;isize;i+) scanf(“%d”,&studenti);for(i=0;isize;i+)sum= sum+studenti;avg=sum/ size;printf(“the average is:%d”, avg);例例 3读读10个整数存入数组,找出其中最大值和最小值个整数存入数组,找出其中最大值和最小值步骤步骤:1. 输入输入:for循环输入循环输入10个整数个整数2. 处理处理:(a) 先令先令max=min=x0(b) 依次用依次用xi和和max

19、,min比较比较(循环循环) 若若maxxi,令令min=xi3. 输出输出:max和和min #include #define size 10main() int xsize,i,max,min; printf(enter 10 integers:n); for(i=0;isize;i+) printf(%d:,i+1);scanf(%d,&xi); max=min=x0; for(i=1;isize;i+) if(maxxi) min=xi; printf(maximum value is %dn,max); printf(minimum value is %dn,min);例例4

20、 4用数组方式解决用数组方式解决fibonaccifibonacci数列问题,求出数列问题,求出fibonaccifibonacci数列的前数列的前2020项存储在数组中,并将数项存储在数组中,并将数组内容输出。组内容输出。)3()2(12)1(1121nfffnfnfnnn分析:定义一个含有分析:定义一个含有20个元素的数组个元素的数组f ,即即 int f20 ; 其中其中 f0=1,f1=1, fn=fn-1+fn-2 (n2) 用一个循环结构:让循环变量用一个循环结构:让循环变量n从从 2到到 20 ,循环体为,循环体为 fn=fn-1+fn-2 #include stdio.hvoi

21、d main() int i,fib20=1,1; /*初始化初始化 */ printf(n); for (i=2;i20;i+) fibi=fibi-1+fibi-2; for (i=1;i=20;i+) printf(%10d,fibi-1); if (i%5=0) printf(n); /*换行,每行输出换行,每行输出5个个 */ 例例 5 5用冒泡法对用冒泡法对 8 8 个数从小到大排序个数从小到大排序排序过程:首先把排序过程:首先把8 8个数放到数组个数放到数组a8 a8 中。中。a0 =38a0 =38;a1=49a1=49;a2=65a2=65;a3=76a3=76;a4=13a

22、4=13;a5=27a5=27;a6=30a6=30;a7=97 a7=97 ;排序过程:首先把排序过程:首先把8 8个数放到数组个数放到数组a8 a8 中。中。a8=38,49,65,76,13,27,30,97a8=38,49,65,76,13,27,30,9713 27 30 38 49 65 76 9738 13 27 30 49 65 76 9738 49 13 27 30 65 76 9738 49 65 13 27 30 76 9738 49 65 76 13 27 30 9749 38 65 97 76 13 27 3038497697139727973097137676762

23、730136527653065131349493049273827383038n=1n=2n=3n=4n=5n=6 13 27 30 38 49 65 76 97n=73027下标到下标到n-1下标到下标到n-2下标到下标到n-3下标到下标到n-4下标到下标到n-5下标到下标到n-6下标到下标到n-71 1、假如有、假如有n n个数,则需要进行个数,则需要进行n-1n-1趟趟排序,决定最外层排序,决定最外层的循环的循环 for(i=1;i aj) 则交换则交换aj-1与与aj的值的值3、每一趟的到底比较多少次呢?、每一趟的到底比较多少次呢? 每一趟比较每一趟比较 j都是从都是从1循环到循环到n

24、-i,因此比较的次数,因此比较的次数 如下:如下: for(j=1;j aj) 则交换则交换aj-1与与aj的值的值 4 4、总的程序如下:、总的程序如下: for(i=1;i=n-1;i+) for(j=1;j aj) 则交换则交换aj-1与与aj的值的值 for(i=0;i=n-1;i+) /*输出排好序的数组输出排好序的数组*/ printf(“%d”,ai); 1、 从大到小排序从大到小排序 7,4,10,1,20,5,3,9;2、 输入输入10个整数,求出最小的数以及最小的数个整数,求出最小的数以及最小的数在数组中的下标。在数组中的下标。3、用初始化方法,把某学习小组、用初始化方法,把某学习小组10名学生的名学生的“c语言语言”成绩课程的考试成绩存储在数组中,成绩课程的考试成绩存储在数组中,再从键盘输入一个分数,查找该分数是否在数再从键盘输入一个分数,查找该分数是否在数组中,如果是,则输出它在数组中的下标。组中,如果是

温馨提示

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

评论

0/150

提交评论