当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

济南大学:《C语言程序设计》课程教学资源(PPT课件)第七章 数组(袁宁)

资源类别:文库,文档格式:PPT,文档页数:35,文件大小:587KB,团购合买
引言 7.1 一维数组的定义和引用 7.2 二维数组的定义和引用 7.3 字符数组
点击下载完整版文档(PPT)

第七章数组 ■引言 71一维数组的定义和引用 72二维数组的定义和引用 ■73字符数组

1 第七章 数组 ◼ 引言 ◼ 7.1 一维数组的定义和引用 ◼ 7.2 二维数组的定义和引用 ◼ 7.3 字符数组

数组的引入 引言 为了便于处理一批类型相同的数据,引入了数组类型 例:某班有40名学生,求该班成绩的平均分 #include 这种方法只能求所有学生的总成绩, void main( 而不能保留住每个学生的成绩。 f int j, sum, S; 假设现在要求保存每个学生的成绩, float ave 那就不能只使用一个变量s了, sum=0 而需要40个变量,但这样一来输入、 for(j=1;j<=40;j++) scanf“%d”)&s);输出、计算都会变得繁琐在这种 sum=sumS 情况下,我们可以使用数组类型, 说明一个含有40个元素的数组,每个 ave=sum/40; 数组元素存放一个成绩,成绩的输入 printf(ave=%or”,ave);输出、计算都可通过循环来实现 2

2 一、数组的引入 引言 为了便于处理一批类型相同的数据,引入了数组类型 这种方法只能求所有学生的总成绩, 而不能保留住每个学生的成绩。 假设现在要求保存每个学生的成绩, 那就不能只使用一个变量s了, 而需要40个变量,但这样一来输入、 输出、计算都会变得繁琐. 在这种 情况下,我们可以使用数组类型, 说明一个含有40个元素的数组,每个 数组元素存放一个成绩,成绩的输入、 输出、计算都可通过循环来实现 例:某班有40名学生,求该班成绩的平均分 #include void main( ) { int j , sum , s ; float ave ; sum=0; for(j=1; j<=40 ; j++) { scanf(“%d”,&s); sum=sum+s; } ave=sum/40 ; printf(“ave=%f”,ave); }

#include 二、数组的概念 void main( 1.数组:由具有相同类型的 f int j, sum, S40 float ave 9 固定数量的元素组成的结构 sum=0 2.数组元素:每一个数组元素 for(j=0;j<=39;j++) 都是一个变量,为了与一般 scanf(“%d,&sj;的变量相区别,我们称数组 sum=sum+sj; 元素为下标变量 ave=sum/40 3.下标变量在数组中的位置 printf((“ave=%f”;avel);序号称下标 下标变量的数据类型称为 下标类型(或元素类型) 3

3 二、数组的概念 1.数组:由具有相同类型的 固定数量的元素组成的结构 2.数组元素:每一个数组元素 都是一个变量,为了与一般 的变量相区别,我们称数组 元素为下标变量 3.下标变量在数组中的位置 序号称下标 下标变量的数据类型称为 下标类型(或元素类型) #include void main( ) { int j , sum , s[40] ; float ave ; sum=0; for(j=0; j<=39 ; j++) { scanf(“%d”,&s[j]); sum=sum+s[j]; } ave=sum/40; printf(“ave=%f”,ave); }

71一维数组的定义和引用 维数组的定义 1.格式:类型标识符数组名[常量表达式}; 例:inta10; 2.说明 (1)数组名是用户定义的标识符, 101095a10 数组名表示了一个存储区的首地址 101280al1l (即第一个数组元素的地址) (2)数组长度:指数组中元素的个数 101466a(2 (3)数组元素的下标由零开始 数组a有10个元素:a0,a1…291102884a19 (4)常量表达式中不能包含变量, 常量表达式的值不能是实数

4 7.1 一维数组的定义和引用 一、 一维数组的定义 1. 格式 : 类型标识符 数组名 [ 常量表达式] ; 例: int a[10] ; 2. 说明 (1) 数组名是用户定义的标识符, 数组名表示了一个存储区的首地址 (即第一个数组元素的地址) (2) 数组长度 : 指数组中元素的个数 (3) 数组元素的下标由零开始 数组a 有10个元素: a[0] , a[1] … a[9] (4) 常量表达式中不能包含变量, 常量表达式的值不能是实数 84 : 66 80 1010 95 1012 1014 : 1028 a[0] a[1] a[2] : a[9]

数组元素的引用 1.引用形式:数组名[下标 101095a0 2.说明 101280a1 (1)下标可以是整型常量或整型表达式101466a21 如:a[,a2*3 101675a131 (2)数组定义为ia5,数组长度为510188414 而下标在0-4之内,即a01--2a14 注意:如果出现a51=72;编译时不会102072a151 指出错误,系统会将a4后下一个 存储单元赋值为2,但这样可能变量x的,实际上2是 会破坏数组以外其他变量的值不存在的如果执行了 a5|=72,会将x原有的 正确数据覆盖掉 5

5 二、 数组元素的引用 1. 引用形式 : 数组名[ 下标 ] 注意: 如果出现 a[5] = 72 ; 编译时不会 指出错误, 系统会将a[4]后下一个 存储单元 赋值为72, 但这样可能 会破坏数组以外其他变量的值 84 75 66 80 1010 95 1012 1014 1016 1018 a[0] a[1] a[2] a[3] a[4] 72 a[5] 1020 假设这个存储空间是 变量x的, 实际上a[5]是 不存在的, 如果执行了 a[5]=72, 会将x原有的 正确数据覆盖掉 2. 说明 (1) 下标可以是整型常量或整型表达式 如: a[1] , a[2*3] (2) 数组定义为int a[5] , 数组长度为5 而下标在0 ---- 4之内, 即a[0] ---- a[4]

、一维数组的初始化 1.概念:在定义一维数组时对各元素指定初始值称为 数组的初始化如:inta5]={1,3,5,7,9} 2.说明 (1)对数组的全体元素指定初值,初值用{}括起来,数据 之间用逗号分开.在这种情况下,可以不指明数组的 长度,系统会根据{}内数据的个数确定数组的长度 如:inta={1,3,5,7,9}; (2)对数组中部分元素指定初值(这时不能省略数组长度) 如:inta|5={1,3,5} (3)使数组中的全部元素初始值都为0 如:inta5={0,0,0,0,0} 更简单的写法:inta5|={0};

6 三、 一维数组的初始化 1. 概念 : 在定义一维数组时对各元素指定初始值称为 数组的初始化 如: int a[5] = { 1 , 3 , 5 , 7 , 9 } ; 2. 说明 (1) 对数组的全体元素指定初值, 初值用 { } 括起来, 数据 之间用逗号分开. 在这种情况下, 可以不指明数组的 长度, 系统会根据{ }内数据的个数确定数组的长度 如 : int a[ ] = { 1 , 3 , 5 , 7 , 9 } ; (2) 对数组中部分元素指定初值( 这时不能省略数组长度 ) 如 : int a[5] = { 1 , 3 , 5 }; (3) 使数组中的全部元素初始值都为 0 如: int a[5] = { 0 , 0 , 0 , 0 , 0 } ; 更简单的写法: int a[5]={ 0 } ;

例1:用数组求 fibonacci数列的前20个数 #include f[0]|1 void main() f2|=f10+l {inti,f20}={1,1}; for(i=2;i<20;i++) f122 f3=1]+f2 们i=i2+i1l;33 for(i=0;i<20;i++) f45 i14|=2|+3 if(i%4=0) f58 printf(\n” printf(%d”,fil); i196765

7 例1: 用数组求fibonacci数列的前20个数 #include void main( ) { int i , f[20]={1,1}; for ( i=2 ; i<20 ; i++) f[i]=f[i-2]+f[i-1]; for ( i=0; i<20 ; i++) { if ( i%4==0 ) printf(“\n”); printf(“%6d”, f[i] ); } } 1 1 0 0 0 0 : 0 f[0] f[1] f[2] f[3] f[4] f[5] : f[19] 2 3 5 8 6765 i=2 f[2]=f[0]+f[1] i=3 f[3]=f[1]+f[2] i=4 f[4]=f[2]+f[3]

例2:输入一个数据,在已知数组中查找是否有该数据 #include 9 yoid main 0 i int i,X inta[10={5,8,0,1,9,2,6,3,7,4} a input(“ n input a number:”); scanf(“%od”,&x); for(i=0;i<10;i++) if(x==ai) a5] printf("find!n”); 5801926374 a 6 break: a if(i==10) 8 printf("no find!n”);

8 例2: 输入一个数据,在已知数组中查找是否有该数据 5 8 0 1 9 2 6 3 7 4 x 9 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] #include void main() { int i , x ; int a[10]={ 5, 8, 0, 1, 9, 2, 6, 3, 7, 4 }; inputf (“\n input a number:”) ; scanf(“%d”, &x); for ( i=0 ; i<10 ; i++) if ( x==a[i] ) { printf(“find!\n”); break; } if ( i==10 ) printf(“no find!\n”); }

例3:用冒泡排序法对6个数进行排序(从小到大) 09 2 2 72541 725 254 a[2 3 7 579 4579 24579 5 9 初始状态第1轮第2轮第3轮第4轮第5轮 冒泡排序方法:依次比较相邻的两个数,将小数放前面, 大数放后面.n个数排序需要进行n-1轮比较,从第1轮到 第n-1轮,各轮的比较次数依次为:n-1次、n2次∴.1次

9 例3: 用冒泡排序法对6个数进行排序(从小到大) 9 7 2 5 4 1 a[0] a[1] a[2] a[3] a[4] a[5] 7 2 5 4 1 9 2 7 7 5 4 71 2 5 4 1 7 9 4 51 5 2 4 1 5 7 9 2 1 4 5 7 9 1 4 1 2 冒泡排序方法: 依次比较相邻的两个数,将小数放前面, 大数放后面. n个数排序需要进行n-1轮比较, 从第1轮到 第n-1轮, 各轮的比较次数依次为:n-1次、n-2次 … 1次 9 7 2 5 4 91 9 9 9 9 7 2 5 4 1 初始状态 第1轮 第2轮 第3轮 第4轮 第5轮 7

#include void main( 输入6个数据 i int a6, i, j for(i=0;i<6;i++) 用嵌套的for循环实现排序 scanf(“%od”,&al[il) 外层循环控制进行几轮比较 for(i=0;i<5;i++) 内层循环控制每一轮的比较次数 for(j=0;j<5-i;j++) if(a[jpalj+l) 如果前面的数大于后 i tall; 面的数,则进行交换 a[j=aj+1; a[j+1=t; 输出排序后的6个数据 for(i=0;i<6;i++) printf(0/",a[il) 10

10 #include void main( ) { int a[6] , i , j , t; for ( i=0 ; ia[j+1] ) { t=a[j] ; a[j]=a[j+1] ; a[j+1]=t ; } for ( i=0 ; i<6 ; i++) printf( “%3d”, a[i] ); } 输入6个数据 用嵌套的for循环实现排序 外层循环控制进行几轮比较 内层循环控制每一轮的比较次数 如果前面的数大于后 面的数,则进行交换 输出排序后的6个数据

点击下载完整版文档(PPT)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
共35页,可试读12页,点击继续阅读 ↓↓
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有