三下五除二带你初学C语言(8)——数组篇

数组:用来存储和处理同一种数据类型的对象
好处:使用数组可以为一组相同类型的变量起一个名字,这样可以大幅度的减少代码的开发量,同时可为处理复杂问题提供解决方法。
学习数组从以下方面开始研究:
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");
}

在这里插入图片描述
数组基本知识完毕,加油加油鸭!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值