数组:用来存储和处理同一种数据类型的对象。
好处:使用数组可以为一组相同类型的变量起一个名字,这样可以大幅度的减少代码的开发量,同时可为处理复杂问题提供解决方法。
学习数组从以下方面开始研究:
1.一维数组
2.二维数组
一.一维数组
定义一般形式:
类型说明符 数组名[常量表达式];
例如:int code[5];
或者也可以采用宏定义的方式:
#define NUM 5
int code[NUM];
以上两种形式都正确定义了一个名称为code的整型数组,该数组含有5个变量,下标依次是:code[0]、code[1]、code[2]、code[3]、code[4]。
注:1.c语言中,数组的下标从0开始标记。
2.在定义数组元素数目时,此处要求括号当中一定要是常量,而不能是变量,但 是在定义数组后,使用该数组的元素时,下标可以是常量,也可以是变量,或者是表达式。
数组的地址:
数组的一个很重要的特点是:它在内存中占据一块连续的存储区域。对所有数组都适用。
数组初始化:
法一:先定义后初始化
int bz[3];
bz[0] = 2;
bz[1] = 3;
bz[2] = 4;
法二:在定义同时初始化
int bz[3] = {2,3,4};
一维数组的操作:
数组的特点是使用同一个变量名,不同的下标。因此可以使用循环控制数组下标的值来访问不同的数组元素。
//一维数组的输入和输出
#include<stdio.h>
#include<iostream>
using namespace std;
#define MAXGRADE 5
int main()
{
int code[MAXGRADE];
int i;
for (i = 0; i< MAXGRADE; i++)
{
printf("请输入第%d个数据:", i+1);
cin >> code[i];
}
for (i = 0; i<MAXGRADE; i++)
{
printf("code[%d]=%d\n", i, code[i]);
}
system("pause");
}
//一维数组的求和以及求平均值
#include<stdio.h>
#include<iostream>
using namespace std;
#define MAX 5
int main()
{
int code[MAX] = {1,2,3,4,5};
int sum = 0, i;
float avg;
for (i = 0; i < MAX; i++)
{
sum += code[i];
}
avg = sum / MAX;
printf("数组和=%d\n平均值=%f", sum, avg);
system("pause");
}
数组作为参数传递
如何把数组做为参数传递给函数?
用数组名作为参数进行传递
主函数中有整型数组定义:
int array[5];
调用函数的语句如下:
findMax(arry);
在使用数组名作为参数传递给函数findMax(),实参数据类型需要和形参数据类型一致才可以,所以可以这样定义findMax()函数的参数:
void findMax(int a[5]) 也可以去掉5 void findMax(int a[ ])
//求数组中元素的最大值
#include<stdio.h>
#include<iostream>
using namespace std;
#define fff 5
#define MAX -1
int max(int a[])
{
int t=MAX;
for (int i = 0; i < fff; i++)
{
if (a[i] > t)
t = a[i];
}
return t;
}
int main()
{
int a[5] = { 1,2,3,4,5 };
printf("最大值为:%d", max(a));
system("pause");
}
数组间函数的交换
//将一个数组逆序输出
#include<stdio.h>
#include<iostream>
using namespace std;
#define NUM 5
void inverseorder(int a[])
{
int i,t;
for (i = 0; i < NUM / 2; i++)
{
t = a[i];
a[i] = a[NUM -i - 1];
a[NUM-i-1] = t;
}
}
int main()
{
int j;
int a[NUM] = { 1,2,3,4,5 };
inverseorder(a);
for (j = 0; j < NUM ; j++)
{
cout << a[j] << endl;
}
system("pause");
}
用数组求素数
//输出1到100之间的所有素数
#include<stdio.h>
#include<iostream>
#include"math.h"
using namespace std;
#define NUM 101
int main()
{
int SUSHU[NUM];
int i, j,k=0;
for (i = 2; i < NUM; i++)
SUSHU[i] = i;
for (i = 2; i < sqrt(NUM); i++)
{
for (j = i + 1; j < NUM; j++)
{
if (SUSHU[i] != 0 && SUSHU[j] != 0)
if (SUSHU[j] % SUSHU[i] == 0)
SUSHU[j] = 0;
}
}
for (i = 2; i < NUM; i++)
{
if (SUSHU[i] != 0)
{
printf("%5d", SUSHU[i]);
k++;
if (k % 5 == 0)
printf("\n");
}
}
system("pause");
}
二维数组的定义
一般形式为:
类型说明符 数组名 [常量表达式] [常量表达式]
例:
int a[3][4] //定义a为3行4列的数组
二维数组的地址
数组是一块连续的存储区域,二维数组是按照“Z”型存储的,把它展开,等效于下图的线状形式,从左至右地址逐渐递增,每个单元格占4个字节(数组a是int类型)。
a[3][4]中:[1][2]=a[0][0]+24字节(1行*4列+2列)*4字节
二维数组初始化
与一维数组一样,二维数组初始化也有两种形式。
1.先定义再初始化
int a[3][4];
a[0][0]=1;
a[2][3]=9;
2.定义的同时初始化
int a[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };
或者:
省略行号
int a[ ][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };
int a[ ][4] = { 1,2,3,4,5,6,7,8,9,10,11,12};
二维数组的输入与输出
//二维数组的输入与输出
int a[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
printf( "%5d",a[i][j]);
}
}
求3*3数组的对角线之和
//求3*3数组的对角线之和
#include<stdio.h>
#include<iostream>
using namespace std;
#define NUM 3
int main()
{
int a[NUM][NUM] = { {1,2,3},{4,5,6},{7,8,9} };
int sum=0,i,j;
for (i = 0; i < NUM; i++)
{
for (j = 0; j < NUM; j++)
{
if (a[i][j] == a[j][i])
{
sum += a[i][j];
}
}
cout << sum;
system("pause");
}
将一个二维数组的行和列元素互换,存到另一个二维数组中
//将一个二维数组的行和列元素互换,存到另一个二维数组中
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
int a[2][3] = { {1,2,3},{4,5,6} }, b[3][2];
int i,j;
printf("a数组:\n");
for(i=0;i<2;i++)
{
for (j = 0; j < 3; j++)
printf("%-4d", a[i][j]);
printf("\n");
}
for (i = 0; i < 2; i++)
{
for (j = 0; j < 3; j++)
b[j][i] = a[i][j];
}
printf("b数组:\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 2; j++)
printf("%-4d", b[i][j]);
printf("\n");
}
system("pause");
}
杨辉三角
编写一个杨辉三角,存储到数组中,然后循环输出杨辉三角
//杨辉三角
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
int a[10][10];
int i, j;
for (i = 0; i < 10; i++)
{
a[i][0] = 1;
a[i][i] = 1;
}
for (i = 2; i < 10; i++)
{
for (j = 1; j <i; j++)
{
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
}
}
for (i = 0; i < 10; i++)
{
for (j = 0; j <= i; j++)
printf("%4d", a[i][j]);
cout << endl;
}
system("pause");
}
数组基本知识完毕,加油加油鸭!