假设你在编写一个程序,要将100个整形数据存放在电脑上,闲的话,完全可以定义一百次int来存放,显然,我们写程序就要寻找简洁的方式来存放,那么,就引入数组。
数组就是一组具有相同类型的数据的有序集合,相同的一组数据可以理解为有限个相同类型的变量,并将这一组数据命一个名,我们把它叫做"数据名",有序集合可以理解为变量是有编号的,编号称为“下标”,各个变量称为“数组的元素”也称为“数组的长度”。
一:一般格式
类型说明符 数组名 [常量表达式]
其中,常量表达式包括常量和符号常量,注意一定不是变量,因为,c语言不允许动态定义数组的大小。
#include<stdio.h> int main() { int n; scanf("%d",&n); int b[n]; }
在一开始,n就是变量,不能去表示数组n的长度
若常量表达式是整型常量时
int n[6];//表示为整型数组n,有六个元素 //分别为n[0],n[1],n[2],n[3],n[4],n[5] //特别注意是没有n[6]
二:初始化一维数组
初始化赋值的一般格式为:
类型说明符 数组名[常量表达式]=[常量表达式1,常量表达式1,----常量表达式n];
说明:在{ }中的各数值即为各元素的初值
初始化的几种常见形式:
一:这几种形式是等价的
int b[4]={1,2,3,4}; int b[ ]={1,2,3,4}; int b[4];b[0]=1;b[1]=2;b[3]=3;b[4]=4;
二:可为部分元素赋值,当值的个数不够时,只为前面的元素赋值,后面的元素赋值就为零
int c[3]={1,2}; int c[3];c[0]=1;c[1]=2;c[2]=0;
三:初始化赋值的常见错误
//值的个数应该大于或等于元素的个数 int d[6]={1}; //改成 int d[6]={1,1,1,1,1,1};
//不能用变量来初始化值 int x=1,a[2]={1,x};
//不能用变量来初始化值 int x=1,a[2]={1,x}; int e[3]; e={1,2,3};//不能直接为数组名赋值 int e[3]; e[3]={1,2,3};//"={初值序列}"只能出现在赋值语句中,只限于数值的初始化 //改写为:int e[3]={1,2,3};
//两组数组不能直接执行赋值运算 //而数组的元素可以 int f[4]={1,2,3,4}; int g[4]; f=g; //改为: int f[4]={1,2,3,4}; int g[4]; f[0]=g[0];f[1]=g[1];f[2]=g[2];f[3]=g[3];
四:引用一维数组元素
首先,我们要知道,数组元素的引用与简单类型的使用是不同的的.
c语言的数组名实质上是数组的首地址,相当于我们的姓名,它是固定的常量.
不能对常量进行赋值,也就是说只能对数组的元素进行赋值,换言之,
我们不能利用数组名来整体引用一个数组,只能单个引用数组元素数组元素的一般格式为:
数组名 【下标】
int a[4]; a[0]='C';a[1]='S';a[2]='D';a[3]='N';
例一:
张三在本学期的法考成绩有七次,分别为:31,36,46,56,50,51,60,
请用数组的知识来保存七次成绩,以及输出小于六十的成绩#include<stdio.h> void main() { int i,a[7]; printf("请输入张三七次法考的成绩\n"); for(i=0;i<7;i++) scanf("%d",&a[i]);//循环语句为数组赋值 printf("\n"); printf("张三小于六十的成绩有:\n"); for(i=0;i<7;i++)//循环语句输出元素 if(a[i]<60) printf("%4d",a[i]); printf("\n"); }
上述例题可知,由于不能整体输入或输出数组,所以就逐个输入或输出数组里的元素。
我们用for语句来实现:for(i=0;i<7;i++) printf("%d",&a[i]); //等价于: scanf("%d %d %d %d %d% d% d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6]);
例二:
任意输入七个元素放在一组中,并将每个元素往后移动一位
再第七个元素放在第一个存储单位上#include<stdio.h> int main() { int num,a[7],i; printf("请输入七个数:\n"); for(i=0;i<7;i++) scanf("%d",&a[i]);//用for语句输入七个数据 num=a[6]; //将七个数据赋值给num printf("第一次结果:\n"); for(i=0;i<7;i++) { printf("第%d个元素:%d\n",i+1,a[i]);//用for语句依次输出七个元素 } for(i=6;i>=0;i--) { a[i]=a[i-1];//把前一个元素赋值给后一个元素 } a[0]=num;//将第一次结果的第七个数据的值赋值给第二次结果的第一个元素 printf("输出第二次结果:\n"); for(i=0;i<7;i++) { printf("第%d个元素:%d\n",i+1,a[i]);//用for语句输出第二次的七个元素的排序 } printf("\n"); return 0; }