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

下载本文档

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

文档简介

第九讲数组之一一维数组的定义及排序算法教学目的:理解数组与数组元素概念,掌握一维数组的定义与引用掌握常用排序算法主要内容:一、数组和数组元素二、一维数组的定义和使用三、一维数组的排序算法重点难点一、数组和数组元素已经学习的C语言基本数据类型:整型(short、int、long)实型(float、double、longdouble)字符型(char)空类型(void)后续学习C语言数据类型:枚举类型(属于基本类型)构造类型:数组、结构体、共同体指针类型所谓构造类型:由已存在的数据类型构造的(或自定义的)组合(或复合)数据类型。一、数组和数组元素数组:又称下标变量,是一组同类型的变量的有序的集合。数组中的每个变量称为数组的一个元素。可以用数组名称与数组的下标惟一地确定一个数组元素。例如:一个班有30个学生,用

s0,s1,s2,‥,s29

来表示30个学生的某科成绩,其中,s15就表示第16个学生的成绩。S是数组名,下标表示序号。在C语言中用s[15]表示s16,则s[15]为数组s的一个元素。数组包括一维数组和多维数组。数组元素是按下标递增的顺序存储的二、一维数组的定义与引用1、一维数组的定义类型说明数组名[常量表达式];可以是任何一种基本数据类型或构造类型。指定数组中所有元素的共同数据类型。空格[]数组名的命名规则同简单变量的命名规则指定数组元素的个数,又称数组长度。可以是直接常量或符号常量。必须是方括号!二、一维数组定义和使用a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]例如:inta[10];/*定义10个整型变量*/4字节charc[12];/*定义12个字符变量*/c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]c[10]c[11]1字节2、一维数组的引用

数组必须先定义后使用,而且只能引用数组元素,而不是整个数组。数组元素的表示:数组名[下标]定义时使用的名称可以使整型常量或整型表达式;注意数组元素下标从0开始。最后一个元素的下标是数组长度-1例1、定义一个名称为a并含有10个元素的整型数组,然后依次把1,2,3,…,10这10个数存入元素a[0],a[1],a[2],…,[9],最后求出这10个数的和。#include<stdio.h>main(){inta[10],s;a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;a[5]=6;a[6]=7;a[7]=8;a[8]=9;a[9]=10;s=a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7]+a[8]+a[9];printf(“a[0]+a[1]+…+a[9]=%d”,s);}数组与循环结合起来,可以有效地处理批量数据!#include<stdio.h>main(){inta[10],i,s=0;for(i=0;i<=9;i++)a[i]=i+1;

for(i=0;i<=9;i++)s=s+a[i];printf(“a[0]+a[1]+…+a[9]=%d”,s);}3、一维数组的初始化

对数组元素的初始化可以用下面4种方法:定义时赋初值如:inta[5]={0,1,2,3,4};只给一部分元素赋值如:inta[5]={0,1,2};

/*只对前三个元素赋值*/元素值全为0时的赋值如:inta[5]={0};缺省数组长度对全部元素赋值如:inta[]={0,1,2,3,4};

/*定义数组a,并对其中的元素赋值,赋5个值则长度为5*/

注意:如果对数组不赋初值,则数组元素取随机值,若数组定义为

static或外部存储类型,则在程序编译阶段会自动赋0值。#include<stdio.h>main(){inta[]={23,56,83,52,100,88,78,25,34},max,i;max=a[0];/*擂台初值*/for(i=1,i<=8;i++)/*循环*/if(a[i]>max)max=a[i];

/*让每个数与擂台上的数比较,大者留在擂台上*/printf(“最大值:%d”,max);}例2、利用数组求集合{23,56,83,52,100,88,78,25,34}的最大值。擂台2356835210088782534求最值的“擂台法”三、常用排序算法在程序设计中,排序的算法主要有冒泡法、选择法、插入法等。本节中主要通过利用一维数组来介绍冒泡法和选择法两种排序算法。1、冒泡法排序(以从小到大举例)冒泡法的基本思想:通过相邻两个数之间的比较和交换,使数值较小的逐渐从底部移向顶部,数值较大的逐渐从顶部移向底部。就像水底的气泡一样逐渐向上冒,故而得名。988888895555559444444922222290000009第1次第2次第3次第4次第5次结果第一趟比较

6-1次以6个数为例的算法示意图:8555558444448222228000008第1次第2次第3次第4次结果第二趟比较

6-2次5444452222500005第1次第2次第3次结果第三趟比较

6-3次422240004第1次第2次结果2002第1次结果第四趟比较

6-4次第五趟比较

6-5次

算法结论:6个数需要比较5趟才可以完成排序,而在第一趟中比较6-1次,第二趟比较6-2趟…由此可以总结出若有n个数,则要进行n-1趟比较,在第i趟中比较n-i次。根据算法结论画出流程图如下:设n=10输入10个数给a[0]~a[9]i由0到8共执行9次循环进行9-i次比较真

a[j]和a[j+1]交换输出a[0]~a[9]a[j]>a[j+1]#include<stdio.h>#defineN10main(){inta[N],i,j,t;

printf("inputtennumber:\n");

for(i=0;i<N;i++)

scanf("%d",&a[i]);printf("\n");

for(i=0;i<N-1;i++)

for(j=0;j<N-1-i;j++){

if(a[j]>a[j+1])

{t=a[j];a[j]=a[j+1];a[j+1]=t;}}

printf("thesortednumber:\n");

for(i=0;i<N;i++)printf("%5d",a[i]);}程序假选择排序法的基本思想:(假设n=6)(1)、采用“擂台法”,首先以A[0]为“擂主”,从A[0],…,A[5]中找出最大的元素与A[0]交换。(2)、然后以A[1]为“擂主”,找出A[1]~A[5]中最大的元素与A[1]交换。(3)、依此类推以A[i]为“擂主”,找出A[i]~A[5]中最大的元素与A[i]交换。当i==5停止。(此时“擂主”左边所有元素均递减有序,而“擂主”为最后一个元素,故完成排序)2、选择法排序(以从大到小举例)974938137665134938977665以6个数为例的算法示意图:kj76kjjkjj139797

763813496549kjjjkj386597

76

65134938491397

76

65

49133897

76

65

49

38133813结果:第5轮:第4轮:第3轮:第2轮:第1轮:#defineN10main(){inti,j,k,t,a[N];printf("inputNnumbers:\n");

for(i=0;i<N;i++)

scanf(“%d”,&a[i]);/*输入N个数*/printf("\n");

for(i=0;i<N-1;i++)/*执行N-1轮比较*/{k=i;

for(j=i+1;j<N;j++)if(a[j]>a[k])/*遇到比当前元

k=j;素大的数,记下k*/if(k!=i){t=a[i];a[i]=a[k];a[k]=t;}}printf("thesortednumbers:\n");

for(i=0;i<N;i++)printf(“%3d”,a[i]);/*输出数组*/}输入10个数给a[0]~a[9]i=0i由0到8共执行9次循环k=ij=i+1

当j<N时真

假k=jj=j+1a[i]和a[k]交换i=i+1输出a[0]~a[9]a[j]>a[k]一维数组考点1、一维整型数组实现倒序。2、统计一维数组中满足条件的元素个数。3、随机给一维数组赋值,然后进行排序,输出最大几个元素的平均值或者最小几个元素的平均值。4、在已排序的数组中插入一个数据,保证数组的有序性。补充内容在程序中如果直接调用rand函数,第一次运行获得的是随机数,以后在运行该组数不会发生变化,这是因为计算机是严格按照某种规则执行,不可能灵活变化。那么要利用计算机产生真正随机数,就必须和srand一起用。

srand用法:srand(time(0))

如果想要产生一个范围内的随机数,比如10—99之间的正整数赋给变量a,就应该是a=rand()%(99-10+1)+10。随机函数rand()的使用方法随机函数用法举例:#include<stdio.h>#include<stdlib.h>#include<time.h>main(){ inta[3][4],

温馨提示

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

最新文档

评论

0/150

提交评论