2023学年完整公开课版数组_第1页
2023学年完整公开课版数组_第2页
2023学年完整公开课版数组_第3页
2023学年完整公开课版数组_第4页
2023学年完整公开课版数组_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1.一个班级有10个学生,进行了一次考试,要求编写一个程序保存10个学生的语文成绩提出问题:2.一个公司委托我们编写一个程序统计该公司100个工作人员的年龄。3.如何从键盘输入100个字符然后按相反顺序输出?思考1分钟:这几个问题有什么特点,能否使用之前所学的定义变量的方式来处理这些数据?思考如果使用定义变量的方式来编写程序,那么上面的三个问题:1、10个学生的成绩需要定义10个float类型或int类型的变量2、100个员工的年龄需要定义100个int类型的变量3、输入100个字符需要定义100个char类型的变量如果我们使用定义变量的方式,写出来就会是这样:观察特点:1、多个变量2、相同数据类型为了方便处理这种情况,C语言提供了一种构造数据类型:

数组数组arrays第五章CONTENT数组的概念Theconceptofarrays01一维数组SingleDimensionalArray

二维数组DoubleDimensionalArray

数组作为函数参数Arraysasfunctionarguments目录04020305数组常用的算法Acommonalgorithmforarrays数组的概念Theconceptofarrays数组是具有相同类型的数据的顺序集合1数组可以在内存中连续存储多个元素什么是数组?010302一维数组多维数组二维数组第一维第二维第三维数组的类型一维数组SingleDimensionalArray

定义一维数组一维数组在内存的存放数组元素的引用一维数组的初始化一维数组的动态赋值和输出一维数组示例2定义一维数组int、char、float…数组的名称数组长度数组和变量一样,必须先定义后使用;定义一维数组的格式为:

类型说明符定义一个数组,就是一次性定义多个相同类型的变量。数组长度就是定义变量的个数,定义好后,将不能改变;数组名[常量表达式];例如:

类型数组名[长度];

含义:intnum[50]; //定义一个名为num,有50个元素的int型数组charstring[20];//定义一个名为string,有20个元素的char型数组定义一维数组定义数组的错误示例:intarray(10); intn=5;floatscore[n]; charstr[]; floatchar[10]; doublefnum[6];//定义一个名为fnum,有6个元素的double型数组//将[]写成()//数组的长度使用变量//省略数组长度//数组名不规范定义一维数组定义数组的注意事项:1、不能将[]写成(),如:inta[10];2、数组长度不能使用变量,只能用常量或常量表达式,如:floatf[5*10],intstr[10+10];3、定义数组时不能省略数组的长度4、数组名的命名规则同变量一样,由字母、数字或下划线组成,数字不能开头,如:charstring_1[50];测验回到之前的问题:1、一个班级有10个学生,进行了一次考试,要求编写一个程序保存10个学生的语文成绩。 floatstudent[10];2、编写一个程序统计该公司100个工作人员的年龄。 intage[100];3、从键盘输入100个字符然后按相反顺序输出。

charc[100];定义数组来表示上面3个问题中的数据。对比我们再来对比一下:左(定义数组)

右(定义变量)数组是具有相同类型的数据的顺序集合数组可以在内存中连续存储多个元素什么是数组?一维数组在内存的存放它真的可以吗?一维数组在内存的存放通过刚刚的视频,我们知道了:定义数组后,数组元素在内存中是按顺序连续存放数组名代表数组的首地址,即score的值与score[0]的地址值相同内存score数组高地址低地址12345score[0]score[1]score[2]score[3]score[4]数组元素序号intscore[5];score数组元素的引用---(数组元素就是变量)C语言中,不允许引用数组进行运算,只能引用数组元素基本形式:数组名[下标表达式];说明:下标表达式的值必须为整型下标从0开始,最大下标为数组长度减1[]是下标运算符,引用数组元素时根据数组首地址和下标计算出该元素的实际地址,然后取出该地址的内容如引用score[2]:计算2000+2*4=2008取出地址2008的内容87907786score[0]score[1]score[2]score[3]2000H2004H2008H200CH例如:inta[5];a[0]=20;a[4]=2*a[0];下标越界是大忌!inta[10];scanf("%d",&a[10]);/*下标越界*/编译程序不检查是否越界下标越界,将访问数组以外的空间,可能带来严重后果#include<stdio.h>intmain(){inta=1,c=2,b[5]={0},i;

printf("%p,%p,%p\n",b,&c,&a);

for(i=0;i<=8;i++){b[i]=i;printf("%d",b[i]); }printf("\nc=%d,a=%d,i=%d\n",c,a,i);return0; }b[0]b[1]b[2]b[3]b[4]caib[8]123456084044484c5054585c6064686c7运行程序或单步执行观察变量变化情况可以看到,变量c和a的值因数组越界而被悄悄破坏了一维数组的初始化初始化:在定义数组时给数组元素赋初值形式:数据类型数组名称[数组长度]={数值列表}在定义数组时,对全部数组元素赋初值:例如:inta[5]={0,1,2,3,4};此时也可省略数组长度例如:inta[]={0,1,2,3,4};//只写inta[];是错误的在定义数组时,对部分数组元素赋初值:例如:inta[5]={0,1,2};//数组其余元素自动赋0当初值的个数多于数组元素个数时,编译出错例如:inta[5]={0,1,2,3,4,5};一维数组的动态赋值和输出只能逐个对数组元素进行操作(字符数组例外)一般一维数组的处理用一重循环来实现,用循环变量的值对应数组元素的下标动态赋值方法:inta[10],i;输入第3个数组元素:scanf("%d",&a[2]);输入整个数组元素:for(i=0;i<10;i++)scanf("%d",&a[i]);输出方法:输出第1个数组元素:printf("%d",a[0]);输出整个数组元素:for(i=0;i<10;i++)printf("%d",a[i]

);一维数组示例【例1】

输入10个整数,输出它们的和,并逆序打印这些数#include<stdio.h>#defineN10//数组程序推荐该用法intmain(){inti,sum=0,data[N];for(i=0;i<N;i++){scanf("%d",&data[i]);sum=sum+data[i];}printf("Sum=%d\n",sum);for(i=N-1;i>=0;i--)printf("%d",data[i]);printf("\n");return0;}一维数组示例【例2】用数组来求Fibonacci数列前20项#include<stdio.h>#defineN20intmain(){inti,f[N]={1,1};for(i=2;i<N;i++)f[i]=f[i-2]+f[i-1];for(i=0;i<N;i++){if(i%4==0)printf("\n");printf("%6d",f[i]);}printf("\n");return0;}

1

(n=1)Fn=1

(n=2)Fn-2+Fn-1

(n≥3)Fibonacci数列:1,1,2,3,5,8,13,21,

温馨提示

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

评论

0/150

提交评论