构造数据对象数组/结构类型/枚举类型/指针类型创新努力加油合作数组C语言基础顺序结构分支结构循环结构C语言程序的结构C语言程序的基本数据对象数据运算和表达式在程序中输入输出数据算法的表示顺序结构程序设计If语句If…else语句If语句嵌套Switch语句While语句Do…while语句For语句循环嵌套循环辅助语句合作沉稳学习成绩数组把具有相同类型的若干数据按有序的形式组织起来。这些有序排列的同类型数据的集合称为数组。组成数据的数据称为数组元素。数组可以分为数值数组、字符数组、指针数组、结构数组。目录1了解数组的基本概念,正确的定义一维数组234掌握一维数组初始化,会引用一维数组。了解字符数组和字符串数组的区别与联系。在程序中运用数组处理简单的问题。从键盘上输入若干学生的C语言成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。#includestdio.hmain(){floatcj,min,max=0;printf(请输入学生成绩,输入负数时结束:\n);scanf(%f,&cj);min=cj;while(cj=0){if(cjmax)max=cj;if(cjmin)min=cj;scanf(%f,&cj);}printf(“max=%f\nmin=%f”,max,min);}1、请问运行以上程序的时候,你输入了多少个学生的成绩?2、如果我想查看第三个学生的成绩怎么查看?3、如果我现在要输入40个学生的成绩,我应该怎么办?有没有其它办法解决呢?4、当我输入了40个学生成绩后,我想输出前面10个学生的成绩有没有什么办法实现?观察下面程序,该程序的功能是输入10个同学的成绩,计算平均成绩,然后完成表中提出的问题。#includeStdio.hmain(){floatk1,k2,k3,k4,k5,k6,k7,k8,k9,k10;floataver;printf(请输入10个学生成绩:\n);scanf(%f%f%f%f%f%f%f%f%f%f,&k1,&k2,&k3,&k4,&k5,&k6,&k7,&k8,&k9,&k10);aver=(k1+k2+k3+k4+k5+k6+k7+k8+k9+k10)/10.0;printf(平均值为%f,aver);}下面程序与上例做比较,该程序的功能是求10个学生的平均成绩,并回答问题。#includestdio.h#defineN10main(){intarray[N],i;floatave;floats=0;for(i=0;iN;i++)/*利用循环为数组输入10个成绩*/scanf(%d,&array[i]);for(i=0;iN;i++)/*利用循环求10个学生成绩的总和*/s=s+array[i];ave=s/10.0;printf(“theavgis%f,ave);}数组:数组就是一组有序的、连续的、类型相同的数据集合,这组数据具有相同的名字、不同的下标的变量。它是一个包含多个值的变量。一般格式:类型标识符数组名[整型常量表达式];例如:floatarray[10];数组元素:构成数组的数据。数组长度:数组元素的个数。下标:数组元素在数组中的位置序号,是一个从0开始的整型数据。下标变量:程序中通过下标变量来访问数组的元素。数组的维:在数组中确定数组元素所需下标个数。注意:1.下标变量在程序中又称为数组元素,下标的作用是指出某个数组元素在数组中的位置。2.下标可以是常量也可以是变量,但必须为整型。数组观察下面的C程序,找出数组定义的方法,数组元素的表示方法。#include″stdio.h″main(){floata[5];printf(请为数组输入5个数\n);scanf(%f%f%f%f%f,&a[0],&a[1],&a[2],&a[3],&a[4]);printf(“输出这5个数分别是%f,%f,%f,%f,%f,a[0],a[1],a[2],a[3],a[4]);}数组名后是用方括号,不能用圆括号。方括号中的表达式只能是整型常量表达式。C语言还规定:数组名代表数组在内存中的首地址,即array和&array[0]相当。C语言中,数组元素下标默认从0开始,数组元素相当于一个变量。C语言不允许对数组的大小做动态定义,如:intn;scanf(%d,&n);intarray[n];n是一个变量,在程序运行的过程中可以改变其值,C语言是不允许用变量来确定数组大小的,因为在编译时,C编译器不能根据已知数组大小分配内存空间。一维数组的定义格式类型标识符数组名[整型常量表达式];例如:intarray[10];含义:定义了一个数组,数组名为array,有10个元素,元素的类型均为整型。这10个元素名分别是:array[0]、array[1]、....、array[9]。。注意:下标表达式只能为整型表达式,可以为常量或者为变量,但不能是实型的变量,如:inta[10],b;floatn=2.0;b=a[n];该程序段中,数组元素的表示是错误的,C程序会自动将实型的数据转换为整型。上机对比下面这两个程序,分析数组元素的值各是多少?找出初始化数组的方法,为数组元素依次赋值的方法。程序1:#includestdio.hmain(){inta[10],I;for(I=0;I10;I++)a[I]=I;for(I=0;I10;I++)printf(a[%d]=%d,I,a[I]);}程序2:#includestdio.hmain(){intI;inta[10]={0,1,2,3,4,5,6,7,8,9};for(I=0;I10;I++)printf(a[%d]=%d\n,I,a[I]);}a[1]=1a[2]=2a[3]=3……a[9]=9a[1]=1a[2]=2a[3]=3……a[9]=9一个数组元素,实质上就是一个变量,它具有和相同类型单个变量一样的属性,可以对它进行赋值和参与各种运算。在C语言中,数组作为一个整体,不能参加数据运算,只能对单个的元素进行处理。初始化:在定义数组的同时指定数组元素的初始值。一维数组初始化的一般格式:类型标识符数组名[整型常量表达式]={初值表};利用循环完成对数组的赋值:给数组赋值实际上是给它的各个下标变量赋值,通常结合循环来完成:inta[10];for(i=0;i10;i++)a[i]=2*i;注意:1.数组是一个整体,不允许当作变量来赋值。2.数组元素可以当做变量来使用,可以直接使用“=”赋值。数组元素初始化:数组元素的引用:数组是用来存放类型相同的一组数据,怎么获得存放的这些数据呢?我们可以通过对数组元素的引用来完成。C语言规定:不能整体引用数值数组,只能逐个引用数组元素。元素引用方式:数组名[下标表达式]例如:a[0]=a[5]+a[7]-a[2*3]“下标表达式”可以是任何非负整型数据。观察运行结果,找出数组初始化时应注意的问题和规则。程序1:#includestdio.hmain(){inta[5]={1,2,3,4,5};intb[]={1,2,3,4,5};intI;for(I=0;I5;I++){printf(%d,a[I]);printf(%d,b[I]);}}1234512345a[0]a[1]a[2]a[3]a[4]12345b[0]b[1]b[2]b[3]b[4]12345程序2:#includestdio.hmain(){intc[10]={1,2,3,4,5};intI;for(I=0;I10;I++)printf(%d,c[I]);}1234500000c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]1234500000当程序不给数组指定初始值时,编译器做如下处理:①部分元素初始化,编译器自动为没有初始化的元素初始化为0。②数值数组如果只定义不初始化,编译器不为数组自动指定初始值,即初值为一些随机值(值不确定)。切记初始化数据的个数不能超过数组的长度。例如,下例是错误的:inta[3]={1,2,3,4,5};只有在进行带初始化的数组说明时才允许省略长度。在仅进行说明而没有初始化时,省略长度是错误的,因为编译器无法知道这个数组究竟有多大。数组部分元素初始化:一般初始化,例如:inta[10]={3,10,5,3,4,5,6,7,8,9};intarray[5]={2,3,4,5,6};其结果是给每一个数组元素都指定了初值。部分元素初始化,其余元素均为零。例如:inta[10]={7,8,9,67,54};仅给前5个元素赋初值,后5个元素初值为0。全部元素均初始化为1。inta[10]={1,1,1,1,1,1,1,1,1,1};不允许简写为inta[10]={1};或intb[10]={1*10};想一想,上述定义a和b数组后,初始化结果是什么?如果全部元素均指定初值,定义中可省略元素的个数。例如:inta[5]={9,28,3,4,5};可以写为:inta[]={9,28,3,4,5};一维数组的初始化应注意的问题:斐波拉契数:112358……/*输出前15个斐波拉契数*/#includestdio.hmain(){inta=1,b=1,n=2,c;printf(%d%d,a,b);while(n15){c=a+b;n++;printf(%d,c);a=b,b=c;}}数组:一组有序的、连续的、类型相同的变量的集合。一维数组的定义:类型标识符数组名[数组长度];floatcj[50];类型标识符:指定数组元素的数据类型(整型实型字符型)数组名:命名规则同用户自定义标识符相同。数组长度:必须是整型常量,必须为正数。上节回顾上节回顾数组元素:构成数组的数据。表示方法:变量名[下标]例:intcj[5];数组元素:cj[0],cj[1],cj[2],cj[3],cj[4]数组元素的下标从0开始,且必须是整型数组不能作为一个整体进行处理,只能对单个数组元素进行处理。数组占用空间:本例定义的为基本整型,每个数组元素占用2个字节,共5个数组元素,占用10个字节。上节回顾数组的3个特性:数组元素类型相同数组长度固定数组存储时占用连续的内存单元例:inta[5];a[0]、a[1]、a[2]、a[3]、a[4]数据类型均为基本整型数组的长度只能是51000100110021003100410051006a[0]a[1]a[2]a[3]a[4]上节回顾一维数组初始化一般格式:类型标识符数组名[长度]={初始值列表};例:inta[5]={0,1,2,3,4};数组元素的值:a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4利用循环完成对数组的赋值:例:inta[5],i;for(i=0;i5;i++)a[i]=i;数组元素的值:a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4把数组下标作为循环控制变量上节回顾一维数组初始化部分元素初始化,系统自动为没有初始值的数组元素初始化为0.例:inta[5]={1,3,5};a[0]=1,a[1]=3,a[2]=5,a[3]=0,a[4]=0定义数组时,不能省略数组长度,但全部数组元素赋初值时,可以不指定长度。例:inta[]={1,2,3,4,5};该数组的长度为5。注:初始值不能超过数组长度inta[3]={1,2,3,4,5};初始化错误初始值列表中各个初值只能为单个常量inta[5]={1*10};初始化错误上节回顾访问数组元素的一般格式:数组名[下标表达式]例:a[5]=5;a[7]=a[5]*2;a[6]=a[5]-2+a[7];a[0]=a[5]+a[7]-a[2*3]在程序中合理地使用数组从键盘上面任意输入10个数,正序和逆序输出。#includestdio.h#defineN10main(){inti,a[N];printf(请任意输入10个数\n);for(i=0;iN;i++)scanf(%d,&a[i]);printf(\n正序输出:);fo