《语言第七讲学习.pptx》由会员分享,可在线阅读,更多相关《语言第七讲学习.pptx(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、4.1 数组的概念 数组:相同类型变量相同类型变量的的有序有序集合。有序表现在数组元素在内存中连续存放。主要集合。有序表现在数组元素在内存中连续存放。主要用于处理成批的数据。用于处理成批的数据。数组用一个名字作为标识。称为数组用一个名字作为标识。称为数组名。数组名。每个数组中包含有若干个数据,称为每个数组中包含有若干个数据,称为数组元素,数组元素,为区分各元素,每个元素有一个用整型表示的序号为区分各元素,每个元素有一个用整型表示的序号:下标下标。下标可有多个,。下标可有多个,其个数称为数组的其个数称为数组的维数维数。如:十个整型变量如:十个整型变量 k0,k1,k9一个下标一个下标数组名数组名
2、三个学生三门课程的成绩:三个学生三门课程的成绩:97.5 80.5 94.5 76.5 81.4 90.060.0 64.5 75.0 学号 0 1 20 1 2 课程 下标一:行下标一:行下标二:列下标二:列数组元素:数组元素:a11第1页/共18页4.2 一维数组一维数组4.2.1 一维数组的说明格式:type array1常量表达式常量表达式,arrayn常量表达式常量表达式;类型说明符,可加修饰说明。说明数组的类型。类型说明符,可加修饰说明。说明数组的类型。数组名,用标识符命名。数组名,用标识符命名。数组的下标,即数组元素的个数。数组的下标,即数组元素的个数。如:如:int a5,ye
3、ar10;float fScore36;当说明数组后,编译时系统会根据定义的类型分配连续的一段内存单元给数组当说明数组后,编译时系统会根据定义的类型分配连续的一段内存单元给数组的各元素。的各元素。a0a1a2a3a4 系统为整型数组分配的连续内存单元,系统为整型数组分配的连续内存单元,VC6.0中每个单元中每个单元占四个字节。首地址用数组名占四个字节。首地址用数组名a表示,即表示,即 a=&a0。注:数组的下标从0 0开始计算int a5第2页/共18页定义数组时,其维数不能用变量定义数组时,其维数不能用变量。如:int n=5,xn;或:int n=5;int xn;数组必须先说明后使用。编
4、译系统将根据说明,开辟内存单元,按特有的顺序和相应的类型为各元素分配内存单元。数组元素:定定义义数数组组后后,连连续续的的内内存存单单元元依依次次存存放放的的各各个个变变量量称称为为数数组组元元素素,它它具具有有相同的名称相同的名称,不同的下标不同的下标,可作为单个变量使用,故又称为:可作为单个变量使用,故又称为:下标变量。下标变量。格式:数组名数组名 下标下标 只能为整型常量或整型表达式。如:a5,ai+j,a2*2 均为合法的数组元素。均为合法的数组元素。在在同一个复合语句中,变量与数组不能同名。同一个复合语句中,变量与数组不能同名。如:int a;float a10;4.2.2 一维数组
5、元素的引用注意:第3页/共18页例例:数组元素的引用。数组元素的引用。#include void main(void)int i,a10;for(i=0;i=1;i-)printf(%3d,ai);程序运行结果:19 17 15 13 11 9 7 5 3 1 a0a1a2a3a4a5a6a7a8a9315791113151719i=0i=1i=2i=3i=4i=5i=6i=7i=8i=9C规定:只能逐个引用下标变量,不能一次引用整个数组。如上例:不能写成:不能写成:printf(“%3d”,a10);或:或:printf(%3d,a);第4页/共18页4.2.3 一维数组的初始化可用三种方法
6、给数组赋值:可用三种方法给数组赋值:赋值语句赋值语句 初始化初始化 动态赋值动态赋值 初始化所有元素 int a10=1,2,3,4,5,6,7,8,9,10;int a=0,2,4,6,8;初始化部分元素,其余元素自动赋为0。float fV 10=1.0,2.0,3.0;动态赋值:在程序执行过程中进行赋值在程序执行过程中进行赋值 初始化:定义数组的同时定义数组的同时,给数组元素赋值。编译阶段完成,不占运行时间。给数组元素赋值。编译阶段完成,不占运行时间。全部赋初值时,可以不指定长度。int x5=1,1,1,1,1所有值全部相等,也需逐个赋值。for(i=0;i10 i+)scanf(“%
7、d”,&ai);注意:循环输入以空格或回车分割数据。第5页/共18页例:求例:求 fibonacci 数列的前数列的前15项项#include main()int i;int f15=1,1;for(i=2;i15;i+)fi=fi-2+fi-1;for(i=0;i2 第6页/共18页4.2.4 一维数组的应用例例1:输入:输入10个数按从小到大的顺序排列个数按从小到大的顺序排列。这是数组中一个常用算法排序问题,排序是将一组随机排放的数按从小到大(升序)或从大到小(降序)重新排列。排序有冒泡法,选择法冒泡法,选择法。1,5,4,6,7,99,7,6,5,4,11,4,5,6,7,9降序降序升序
8、升序冒泡法思路:将相邻两个数ai和ai+1比较,将小数调到前头,第一轮比较下来,将最小值放入a0中(大数下沉,小数上浮),剩余的数再两两比较,小数调前头,第二轮比较下来,次小数放a1中,如此循环n-1次,则将10个数按从小到大分别存在a0,a2a9中。冒泡排序算法演示冒泡排序算法演示第7页/共18页排序程序排序程序 :#include void main(void)int i,j,a10=4,3,5,1,10,12,2,6,7,9,iTemp;for(i=0;i9;i+)for(j=i+1;j10;j+)if(aiaj)iTemp=a i;a i=a j;a j=iTemp;for(i=0;i
9、10;i+)printf(”%4d”,ai);外外层层循循环环i变变化化内内层层循循环环j变变化化比比较较交交换换第8页/共18页例2:求10个学生一门课程的平均分,并输出低于平均成绩 的分数。#include void main(void)float fScore10,aver=0;int i;for(i=0;i10;i+)scanf(%f,&fScorei);aver+=fScorei;aver/=10;for(i=0;i 10;i+)if(fScoreiaver printf(num=%d,score=%5.2fn,i+1,fScorei);说明数组说明数组。循环输入各元素的值并累加。循
10、环输入各元素的值并累加。循环判断条件,满足条件输出。循环判断条件,满足条件输出。第9页/共18页求120的阶乘的和(实验p2021 程序改错)。#includemain()int n,j;float s=0.0,t=1.0 for(n=1;n=20;n+)/*found*/s=1;for(j=1;j=n;j+)/*found*/t=t*n;/*found*/s+t=s;/*found*/printf(jiecheng=%dn,s);#include void main()double n,s=0,m=1;for(n=1;n=20;n+)m=m*n;s+=m;printf(%en,s);第10页
11、/共18页求 前n项的和#include void main()int s=1,i,n;float t=1,pi=0;scanf(“%d”,&n);for(i=3;i=2*n-1;i+=2)pi=pi+t;s=-s;t=s*1.0/i;printf(%en,pi);第11页/共18页4.3 多 维 数 组4.3.1 多维数组概念 在实际应用中,经常会遇到一些用多维索引的数据。如:四个学生三门课在实际应用中,经常会遇到一些用多维索引的数据。如:四个学生三门课的成绩。可以用下表表示:的成绩。可以用下表表示:92.580.591.099.083.590.070.066.060.078.056.059
12、.0 显然,该表的每一项需要有两个索引项。表现为数组的两个下标。超过一个下标显然,该表的每一项需要有两个索引项。表现为数组的两个下标。超过一个下标的数组称为的数组称为多维数组多维数组。行:代表某个学生行:代表某个学生列:代表某门课程列:代表某门课程 格式:type array 常量表达式常量表达式1常量表达式常量表达式n;n个个下下标标如:如:int b45;第12页/共18页4.3.2 二维数组的说明、存储和引用1.格式:type array 常量表达式常量表达式1常量表达式常量表达式2;2个下标如:如:int a23,b45;2.二维数组的存放顺序:int a33;a00 a01 a02a
13、10 a11 a12a20 a21 a22 排列顺序:先行后列。排列顺序:先行后列。a00a01a02a10a11a12a20a21a22下下标标为为0 0的的行行 总原则:最后一个下标先变化,变化一个周总原则:最后一个下标先变化,变化一个周期后,倒数第二个开始变化,期后,倒数第二个开始变化,如此类推。如此类推。a为数组在内存中为数组在内存中的首地址。的首地址。a=&a00int b234;内存中的排内存中的排列?列?二维数组可以看作一个矩阵。第13页/共18页 3.二维数组元素的引用 数组元素数组元素具备简单变量的一切性质具备简单变量的一切性质,可以作为表达式的运算对象,可以被赋值。引,可以
14、作为表达式的运算对象,可以被赋值。引用时,用时,只能引用数组元数。只能引用数组元数。格式:数组名数组名下标下标1 下标下标2例:例:#include main()int a33,i,j;for(i=0;i3;i+)for(j=0;j3;j+)scanf(%d,&aij);for(i=0;i3;i+)for(j=0;j3;j+)printf(%d ,aij);printf(“n);整型常量或整型表达式。第14页/共18页4.3.3 二维数组的初始化二维数组初始化的三种方式:二维数组初始化的三种方式:全部赋初值全部赋初值int a23=1,2,3,4,5,6 ;按行分段赋初值int b23=1,2
15、,3,4,5,6 ;部分赋初值部分赋初值int a23=1 ,2 ;赋值后赋值后 a:1 0 0 2 0 0int a23=1,2;对全部元素赋初值,第一维下标可以省略。对全部元素赋初值,第一维下标可以省略。int a 3=1,2,3,4,5,6;赋值后赋值后 a:1 2 0 0 0 0按内存顺序赋初值。省略第一维下标省略第一维下标第15页/共18页例:求44二维数组外围元素之和#includemain()int a44,i,j,sum;for(i=0;i=3;i+)for(j=0;j=3;j+)scanf(%d,&aij);sum=0;for(i=0;i=3;i+)for(j=0;j=3;j
16、+)sum=sum+aij;sum=sum-a11-a12-a21-a22;printf(“sum=%dn,sum);第16页/共18页思考题:思考题:1.1.C语言的数组名是一个常量还是一个变量?能否对它进行加、减或赋值运算语言的数组名是一个常量还是一个变量?能否对它进行加、减或赋值运算?2.2.10个整型变量和一个有个整型变量和一个有10个元素的整型数组在内存中有什么不同?个元素的整型数组在内存中有什么不同?作业题:作业题:P113 习题习题4 一、单项选择题一、单项选择题17。二、填空题二、填空题 15。三、运行程序题三、运行程序题 16。四、完善程序题四、完善程序题 1、2。五、程序设计题五、程序设计题1、2、3、4。第17页/共18页感谢您的观看!第18页/共18页