C Programming学习笔记【谭浩强老师编】(第六章利用数据批量处理数据)01 数组

在这里插入图片描述



一、一维数组

(1) 数组是一组有序数据的集合。数组中各数据的排列是有一定规律的,下标代表数据在数组中的序号。
(2) 用数组名和下标即可唯一地确定数组中的元素。
(3) 数组中的每一个元素都属于同一个数据类型。
在这里插入图片描述

1.定义一维数组

类型说明符 数组名[常量表达式]
在这里插入图片描述

2.引用一维数组

数组名[下标]
int a[10];
//前面有int,这是定义数组,指定数组包含10个元素

t=a[6];
//这里的a[6]表示引用a数组中序号为6的元素

举例:
对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出。

#include<stdio.h>
int main()
{
	int i,a[10];
	for(i=0; i<=9;i++)	//对数组元素a[0]~a[9]赋值
		a[i]=i;
	for(i=9;i>=0;i--)	//输出a[9]~a[0]共10个数组元素
		printf("%d ",a[i]);
	printf("\n");
	return 0;
}


3.一维数组的初始化

在这里插入图片描述

4.一维数组程序举例

(1)用数组来处理求Fibonacci数列问题

#include <stdio.h>
int main()
{
	int i;
	int f[20]={1,1};				//对最前面两个元素f[0]和f[1]赋初值1
	for(i=2;i<20;i++)
		f[i]=f[i-2]+f[i-1];		//先后求出f[2]~f[19]的值
	for(i=0;i<20;i++)
	{
		 if(i%5==0) printf("\n"); 	//控制每输出5个数后换行
		 printf("%12d",f[i]);		//输出一个数
	}
	printf("\n");
	return 0;
}

(2)有10个数,要求对它们按由小到大的顺序排列。
排序算法:起泡(冒泡)排序法
在这里插入图片描述

#include <stdio.h>
int main()
{
	int a[10];
	int i,j,t;
	printf("input 10 numbers :\n");
	for (i=0;i<10;i++)
		scanf("%d",&a[i]);
	printf("\n");
	for(j=0;j<9;j++)			//进行9次循环,实现9趟比较
		for(i=0;i<9-j;i++)		//在每一趟中进行9-j次比较
			if(a[i]>a[i+1])		//相邻两个数比较 
				{t=a[i];a[i]=a[i+1];a[i+1]=t;}
	printf("the sorted numbers :\n");
	for(i=0;i<10;i++)
		printf("%d ",a[i]);
	printf("\n");
	return 0;
}

在这里插入图片描述

二、二维数组

1.定义二维数组

二维数组常称为矩阵(matrix)。把二维数组写成行(row)和列(column)的排列形式,可以有助于形象化地理解二维数组的逻辑结构。

类型说明符 数组名[常量表达式][常量表达式]
在这里插入图片描述float a[3][4], b[5][10];
//定义a为3×4(3行4列)的数组,b为5×10(5行10列)的数组

2.二维数组的储存

C语言中,二维数组中元素排列的顺序是按行存放的
在这里插入图片描述
用矩阵形式(如3行4列形式)表示二维数组,是逻辑上的概念,能形象地表示出行列关系。而在内存中,各元素是连续存放的,不是二维的,是线性的。

在这里插入图片描述

3.引用二维数组

数组名[下标] [下标]
在引用数组元素时,下标值应在已定义的数组大小的范围内。

严格区分在定义数组时用的a[3][4]和引用元素时的a[3][4]的区别。前者用a[3][4]来定义数组的维数和各维的大小,后者a[3][4]中的3和4是数组元素的下标值,a[3][4]代表行序号为3、列序号为4的元素(行序号和列序号均从0起算)。

4.二位数组的初始化

在这里插入图片描述

5.二维数组程序举例

1.将一个二维数组行和列的元素互换,存到另一个二维数组中。

#include <stdio.h>
int main()
{
	int a[2][3]={{1,2,3},{4,5,6}};
	int b[3][2],i,j;
	printf("array a:\n");
	for(i=0;i<=1;i++)			//处理a数组中的一行中各元素
	{
		for (j=0;j<=2;j++)		//处理a数组中某一列中各元素
		{
			printf("%5d",a[i][j]);	//输出a数组的一个元素
			b[j][i]=a[i][j];	//将a数组元素的值赋给b数组相应元素
		}
		printf("\n");
	}
	printf("array b:\n");				//输出b数组各元素
	for(i=0;i<=2;i++)				//处理b数组中一行中各元素
	{
		for(j=0;j<=1;j++)			//处理b数组中一列中各元素
			printf("%5d",b[i][j]);		//输出b数组的一个元素
		printf("\n");
	}
	return 0;
}

2.有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。
在这里插入图片描述

#include <stdio.h>
int main()
{	int i,j,row=0,colum=0,max;
	int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};		//定义数组并赋初值
	max=a[0][0];								//先认为a[0][0]最大
	for(i=0;i<=2;i++)
		for(j=0;j<=3;j++)
		if(a[i][j]>max)					//如果某元素大于max,就取代max的原值
		{	max=a[i][j];
			row=i;					//记下此元素的行号
			colum=j;					//记下此元素的列号
		}
	printf("max=%d\nrow=%d\ncolum=%d\n",max,row,colum);
	return 0;
}

三、多维数组

float a[2][3][4]; //定义三维数组a,它有2页,3行,4列

float a[2][3][4];在内存中的排列顺序为:
a[0][0][0] → a[0][0][1] → a[0][0][2] → a[0][0][3] → a[0][1][0] → a[0][1][1] → a[0][1][2] → a[0][1][3] → a[0][2][0] → a[0][2][1] → a[0][2][2] → a[0][2][3] → a[1][0][0] → a[1][0][1] → a[1][0][2] → a[1][0][3] → a[1][1][0] → a[1][1][1] → a[1][1][2] → a[1][1][3] → a[1][2][0] → a[1][2][1] → a[1][2][2] → a[1][2][3]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值