一维数组课件《C语言程序设计》同步教学_第1页
一维数组课件《C语言程序设计》同步教学_第2页
一维数组课件《C语言程序设计》同步教学_第3页
一维数组课件《C语言程序设计》同步教学_第4页
一维数组课件《C语言程序设计》同步教学_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计

2023翻转课堂实用教程7.1一维数组1234导入数组导入案例数组的定义引用初始化存储方式知识点数组的使用案例案例分析练习数组的使用练习题导入案例(1)案例7.1.1:输入5个整数,分别表示5名应届毕业生的月薪,计算并输出这5名应届毕业生的平均月薪(小数点后保留2位小数)。解决步骤:(1)采用循环求和方式计算出总和,(2)然后除以个数就可以得到平均值。注意:在计算平均数时建议用实数类型保存和,这样在用和除以个数时得到的均值也是实数。导入案例(1)#include<stdio.h>intmain(){ inti,salary; doubleaverage,sum=0; for(i=0;i<5;i++){ scanf("%d",&salary); sum=sum+salary; } average=sum/5; printf("%.2f",average); return0;}输入数据:70008100750069007300输出数据:7360.00运行结果案例7.1.1程序代码导入案例(2)案例7.1.2:输入5个整数,分别表示5名应届毕业生的月薪,计算并输出这5名应届毕业生的平均月薪(小数点后保留两位小数),以及高于平均月薪的工资数。本例题要求输出所有大于平均月薪的工资数,此时就需要保存输入的所有月薪,等平均值月薪计算出来后,再将高于平均月薪的工资数输出。导入案例(2)intmain(){inti,salary1,salary2,salary3,salary4,salary5;doubleaverage,sum=0;scanf("%d",&salary1);scanf("%d",&salary2);scanf("%d",&salary3);scanf("%d",&salary4);scanf("%d",&salary5);sum=sum+salary1+salary2+salary3+salary4+salary5;average=sum/5;printf("平均月薪为:%.2f\n",average);printf("高于平均月薪的工资数为:");if(salary1>average)printf("%d\n",salary1);if(salary2>average)printf("%d\n",salary2);if(salary3>average)printf("%d\n",salary3);if(salary4>average)printf("%d\n",salary4);if(salary5>average)printf("%d\n",salary5);return0;}输入:70006500710068007000输出:平均月薪为:6880.00高于平均月薪的工资数为:700071007000运行结果案例7.1.2程序代码如果此时应届毕业生人数由5名变为10名、100名,如何解决?7.1.1一维数组知识点数组:若干相同类型的数据的集合数组中每一个数据叫做数组元素。元素均具有相同的数据类型,具有统一的变量名即数组名,并用不同编号来区分每个元素。数组的概念可以等同于班级中的小组,假如小组1有10名学生,为这10名学生依次编号为0、1、2...9,用小组1的0号学生、小组1的1号学生…小组1的9号学生就可以找到这10名学生。1、一维数组的定义一维数组的定义方式为:

数据类型名数组名[数组长度];举例://定义一个含有10个整型数据的数组arrayintarray[10];//定义一个含有20个双精度浮点型数据的数组numdoublenum[20];//定义一个含有30个字符型数据的数组strcharstr[30];7.1.1一维数组知识点每个元素的类型整型常量,指出元素个数,称为数组长度合法标识符在定义数组时,[]方括号中的数值是数组中元素的个数2、一维数组的引用一维数组中各个元素的引用方式:

数组名[元素的下标];7.1.1一维数组知识点(1) 先定义,再引用。(2) 数组中按照元素的顺序,从0开始为每个元素进行编号,这个编号称为下标,合理的下标取值依次为:0、1...(数组长度-1),分别对应着数组中第一个元素、第二个元素...最后一个元素。(3) 下标也可以为整型表达式,其取值范围为[0,数组长度-1],不在这个范围内的下标值为越界,越界会导致溢出。上溢或者下溢会导致程序出现不可预料的错误。(4) 只能逐个引用数组元素,不能一次性引用整个数组。对数组元素的引用是自由的,通过数组名和元素下标即可唯一确定一个数组元素。在引用时,[]方括号中数值给出了将要引用的元素的下标值。7.1.1一维数组知识点以下关于数组的说法,不正确的选项为:引用数组元素时,数组下标可以是整形常量或者整形表达式2、一维数组的引用一维数组中各个元素的引用方式:

数组名[元素的下标];7.1.1一维数组知识点举例: intarray[10];array[0]、array[1]、array[2]、array[3]、array[4]、array[5]、array[6]、array[7]、array[8]、array[9]

0

1

2

3

4

5

6

7

8

97.1.1一维数组知识点现定义了一维数组inta[4];关于数组元素的引用,正确的选项为:3、一维数组的初始化(1)在定义数组时初始化

数据类型名数组名[数组长度]={元素初值表};7.1.1一维数组知识点在定义数组时,根据元素初值表中给出的元素的个数,分三种情况为数组进行初始化:①元素初值表给出所有元素值②元素初值表只给出部分元素值③没有元素初值表3、一维数组的初始化(1)在定义数组时初始化

数据类型名数组名[数组长度]={元素初值表};7.1.1一维数组知识点①元素初值表给出所有元素值赋值的原则为:将初始表中给出的初值依次赋值给全部数组元素。举例:intarray[10]={1,2,3,4,5,6,7,8,9,10};等价于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。若对所有元素赋值,可以省略数组长度,但不建议省略元素初值表中的初值个数不能超过数组长度。3、一维数组的初始化(1)在定义数组时初始化

数据类型名数组名[数组长度]={元素初值表};7.1.1一维数组知识点②元素初值表只给出部分元素值赋值的原则为:将初始表中给出的初值依次赋值给数组元素,其余元素自动赋值为0。举例:intnum[10]={1,2,3};等价于num[0]=1,num[1]=2,num[2]=3,num[3]~num[9]均为0。如何给全部元素赋初值为0intnum[10]={0};3、一维数组的初始化(1)在定义数组时初始化

数据类型名数组名[数组长度]={元素初值表};7.1.1一维数组知识点③没有元素初值表分两种情况:普通数组intgrade[10];//动态数组,所有元素的值是一个随机值。定义时加上static关键字的静态数组staticintgrade[10];//若没有对静态数组元素赋初值,所有元素自动被赋初值0。3、一维数组的初始化(2)在定义数组后,单独对数组元素赋值7.1.1一维数组知识点赋值的原则为:此时需要挨个为数组元素赋值。举例:①

intgrade[10];

grade[0]=80,grade[1]=90,grade[2]=85,grade[3]=75;

其他没有赋值的元素,其值为随机值。②for(i=0;i<10;i++) scanf("%d",&grade[i]);//是否正确?intscore[20];score[20]={80,90};4、一维数组的存储方式系统根据每个元素的数据类型、元素的个数在内存中分配一块连续的内存空间用于存放该数组。数组名便是这块连续内存空间的首地址/起始地址。7.1.1一维数组知识点举例

intarray[10]={1,2,3,4,5,6,7,8,9,10};4、一维数组的存储方式系统根据每个元素的数据类型、元素的个数在内存中分配一块连续的内存空间用于存放该数组。数组名便是这块连续内存空间的首地址/起始地址。7.1.1一维数组知识点举例

intarray[10]={1,2,3,4,5,6,7,8,9,10};内存单元下标01234567894、一维数组的存储方式系统根据每个元素的数据类型、元素的个数在内存中分配一块连续的内存空间用于存放该数组。数组名便是这块连续内存空间的首地址/起始地址。7.1.1一维数组知识点举例

intarray[10]={1,2,3,4,5,6,7,8,9,10};内存单元12345678910下标01234567894、一维数组的存储方式系统根据每个元素的数据类型、元素的个数在内存中分配一块连续的内存空间用于存放该数组。数组名便是这块连续内存空间的首地址/起始地址。7.1.1一维数组知识点举例

intarray[10]={1,2,3,4,5,6,7,8,9,10};数组引用a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]内存单元12345678910下标0123456789整形数据在内存中占4个字节,若首地址为80004、一维数组的存储方式系统根据每个元素的数据类型、元素的个数在内存中分配一块连续的内存空间用于存放该数组。数组名便是这块连续内存空间的首地址/起始地址。7.1.1一维数组知识点举例

inta[10]={1,2,3,4,5,6,7,8,9,10};数组引用a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]内存单元12345678910下标0123456789地址信息8000808480888092809681008104810881128116整形数据在内存中占4个字节,若首地址为8000案例分析一维数组的编程方法7.1.4分析一维世界中新冠病毒感染情况7.1.5在一系列数据中删除第k个数据演示数组中每个元素的赋值和输出方法演示查找某个数据,并删除数组中元素的方法。下标作为循环变量,采用循环结构对数组进行操作巧用数组下标,简化问题解决。演示下标的其他用处,如坐标点。7.1.2一维数组案例分析7.1.3放射加密方法对一系列数据进行加密案例7.1.3:用放射加密方法对一系列数据进行加密,并输出加密后的数据。要求:输入10个数据,保存到数组中,并采用放射加密法对每个数据进行加密,最后输出加密后的10个数据。加密的公式:加密后数据=(7*数据+21)%26。问题分析:定义整型数组num保存这10个数据,数组长度定为10,定义i作为数组的下标,并将数组的下标i作为循环变量,通过循环变量i从0变到n-1,来逐个访问数组中的a[0]到a[n-1],并对其进行相应的操作。7.1.2一维数组案例分析#include<stdio.h>#defineN10/*定义符号常量N为10,后续代码N的地方*/intmain(void){inti;/*i既作为数组下标,又作为循环变量*/intnum[N]={50,34,40,68,60,45,39,47,51,30};for(i=0;i<N;i++){num[i]=(7*num[i]+21)%26;

}

printf("放射加密后的数据为:\n");for(i=0;i<N;i++){printf("%d",num[i]);}return0;}放射加密后的数据为:72515325248121423运行结果案例7.1.3程序代码7.1.2一维数组案例分析案例7.1.4:分析一维世界中新冠病毒感染情况要求:从2019年12月开始,新冠病毒在全球传播开来,该病毒传染性极强,只要某人与携带了该病毒的感染者在活动范围内有交集,则有被感染的可能。为了简化运算,假设人生活在一维世界中,Ta到过的地方为一个区间[begin,end],其中0≤begin≤end≤200。假设有二个人,A、B,其中A为新冠病毒感染者,B为健康者,依次给出4个整数beginAendAbeginBendB,分别为这A、B二人的活动区间,请分析B是否有被感染的可能。7.1.2一维数组案例分析案例7.1.4:分析一维世界中新冠病毒感染情况问题分析:在一维世界中,人的活动范围为[0,200],共201个点,定义intmark[201]={0}来记录这201点是否为感染者的活动点。假设0≤i≤200,若mark[i]=0,表示i这个点不是感染者的活动点,若mark[i]=1,表示i这个点是感染者的活动点。7.1.2一维数组案例分析O感染者A的活动范围beginAendAmark[beginA]~mark[endA]赋值为1beginBendBB循环判断mark[beginB]~mark[endB]中的值是否有1的情况#include<stdio.h>intmain(){intn,m,i,j,flag=0;//flag为0表示未被感染intbeginA,endA,beginB,endB;intmark[201]={0};//用于在0到200这些坐标点标记scanf("%d%d%d%d",&beginA,&endA,&beginB,&endB);//标记A活动过的坐标点for(i=beginA;i<=endA;i++){mark[i]=1;

//表示i这个坐标点为A感染者的活动点。}for(j=beginB;j<=endB;j++){/*若j这个坐标点已经被标记为1,说明B的活动点j是A感染者活动的点*/if(mark[j]==1){flag=1;//可能被感染时flag置为1break;}}if(flag==1)//通过flag的值来判断B是否可能被感染printf("B有可能被感染!");elseprintf("B暂无可能被感染!");return0;}运行结果1:5068345B暂无可能被感染!运行结果2:23453490B有可能被感染!运行结果案例7.1.4程序代码数组的下标还可以有其他的含义,比如坐标点。解决某些实际问题时,好好利用下标,会简化问题的求解。7.1.2一维数组案例分析#include<stdio.h>intmain(){intn,m,i,j,flag=0;//flag为0表示未被感染intbeginA,endA,beginB,endB;intmark[201]={0};//用于在0到200这些坐标点标记scanf("%d%d%d%d",&beginA,&endA,&beginB,&endB);//标记A活动过的坐标点for(i=beginA;i<=endA;i++){mark[i]=1;

//表示i这个坐标点为A感染者的活动点。}for(j=beginB;j<=endB;j++){/*若j这个坐标点已经被标记为1,说明B的活动点j是A感染者活动的点*/if(mark[j]==1){flag=1;//可能被感染时flag置为1break;}}if(flag==1)//通过flag的值来判断B是否可能被感染printf("B有可能被感染!");elseprintf("B暂无可能被感染!");return0;}运行结果1:5068345B暂无可能被感染!运行结果2:23453490B有可能被感染!运行结果案例7.1.4程序代码数组的下标还可以有其他的含义,比如坐标点。解决某些实际问题时,好好利用下标,会简化问题的求解。7.1.2一维数组案例分析案例7.1.5:在一系列数据中删除第k个数据要求:输入10个整数,将其保存到数组中。再输入一个要删除数据的下标index(从0开始),若该index值合法(0~9),则将该位置的数据从数组中删除,不合法则不执行任何操作。问题分析:定义长度为10的arr数组来保存10个数据,i作为数组的下标,index来保存要删除数据的下标值,删除了该下标处的数据后,该位置后面的数据要往前移动。7.1.2一维数组案例分析#include<stdio.h>intmain(){intarr[10]={0};intindex,i;for(i=0;i<=9;i++)scanf("%d",&arr[i]);scanf("%d",&index);if(index>=0&&index<=9){//先输出最开始的数组printf("原始数组为:\n");for(i=0;i<=9;

温馨提示

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

评论

0/150

提交评论