初识C语言 DAY11 【二维数组】

文章目录

  • 前言
  • 一、二维数组是什么?
  • 二、二维数组的定义
  • 数组的访问
  • 二维数组的初始化
  • 练习1:一个学习小组有 5 个人,每个人有三门课的考试成绩。==求全组各科的平均成绩和总平均成绩。==
    • 可能出现的错误
  • 如果您发现文章有错误请与我留言,感谢


前言


一、二维数组是什么?

一维数组只有一个下标,称为一维数组,其数组元素也称为单下标变量。
顾名思义,二维数组有两个下标。

也可以理解为二维数组代表着两个维度,横轴和纵轴,像一个矩阵。

int str[i][j];

i代表行,j代表列

比如说写一个成绩单,就可以使用二维数组。

初识C语言 DAY11 【二维数组】_第1张图片
例如语文成绩80:

str [0][0] = 80;

二、二维数组的定义

  • 类型说明符 数组名 [常量表达式 1] [常量表达式 2];
int a[6][6];// 6*6 6行6列
char b[5][4];// 5*4 5行4列
double c[8][6];// 8*6 8行6列

在 C语言中,二维数组是按行排列的,即按行顺序存放,先存放 a[0] 行,再存放 a[1] 行,接着存放 a[2] 行。每行有 3 个元素,也是其依次存放的。

可以想象成这样:
初识C语言 DAY11 【二维数组】_第2张图片

  • 当然,多维数组在内存中的存放依然是线性的。
    多维数组可以理解成数组的嵌套。
    初识C语言 DAY11 【二维数组】_第3张图片

数组的访问

二维数组元素的引用一般形式如下:

  • 数组名[下标][下标];
    说明:二维数组的下标可以是 整形常量 或 整形表达式。
a[4][3];//访问的是a数组中5行4列的元素
b[0][0];//访问的是b数组中1行1列的元素
c[2][4];//访问的是a数组中3行5列的元素

这里是引用

注意:不管是 行下标 还是 列下标,其中的索引值都是从 0 开始的。
注意:和一维数组是一样的,我们都需要注意下标越界的问题。

下标变量和数组说明在形式中有些相似,但这两者具有完全不同的含义。数组说明的方括号中给出的是某一维的长度,即可取下标的最大值;而数组元素中的下标是该元素在数组中的位置标识。前者只能是常量,后者可以是常量,变量或表达式。

二维数组的初始化

因为二维数组在内存中的存放是线性的,因此可以将所有数值放入花括号内

例如:

int a[3][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} };

将他形象的打印下来:

#define _CRT_SECURE_NO_WARNINGS
#include
#include 
#include 
int main()
{
		int a[3][4] = { {1,2,3,4},
		{5,6,7,8},
		{9,10,11,12} };
		int  i, j;
		for (i = 0; i < 3; i++)
		{
			for (j = 0; j < 4; j++)
			{
				printf(" %d ", a[i][j]);
			}
			putchar('\n');
		}
	return 0;
}

运行如下

初识C语言 DAY11 【二维数组】_第4张图片
注:在 putchar(‘\n’)和printf(“\n”)的效果是一样的。但一个是单引号,一个是双引号

二维数组也可以对部分元素初始化。

未赋值的元素自动取"0"值。

#define _CRT_SECURE_NO_WARNINGS
#include
#include 
#include 
int main()
{
	int a[3][4] = { {1},{5},{9} };
		int  i, j;
		for (i = 0; i < 3; i++)
		{
			for (j = 0; j < 4; j++)
			{
				printf(" %d", a[i][j]);
			}
			putchar('\n');
		}
	return 0;
}

输出如下
初识C语言 DAY11 【二维数组】_第5张图片

如果希望整个二维数组初始化为0,在大括号内写一个0即可。

int a[3][4] = {0}

C99也增加了一种新的特性:指定初始化 的元素。这样就可以对某个指定元素进行初识化赋值,而未被初始化的元素依旧是0

int a[3][3] = {[0][0] = 1,[1][1] = 2,[2][2] = 3}

如果对全部元素赋值,那么第一维的长度可以不给出。例如:

int arr[][3] = {{1,2,3},{2,3,4},{3,4,5}};

注意:行 是可以进行省略的,但是 列 不能进行省略。

这里是引用

练习1:一个学习小组有 5 个人,每个人有三门课的考试成绩。求全组各科的平均成绩和总平均成绩。

#define _CRT_SECURE_NO_WARNINGS 
#include 
int main()
{
	int i, j;     //二维数组下标
	int sum = 0;  //当前科目的总成绩
	int average;  //总平均分
	int v[3];     //各科平均分
	int a[3][5];  //用来保存每个同学各科成绩的二维数组,三门学科,五个同学。
	printf("请输入各科学生的成绩:\n");
	for (i = 0; i < 3; i++)
	{
		printf("\n一门学科输入5次成绩\n");
		if (i == 0)
			printf("数学学科:");
		if (i == 1)
			printf("语文学科:");
		if (i == 2)
			printf("英语学科:");
		for (j = 0; j < 5; j++)
		{
			scanf("%d", &a[i][j]);  //输入每个同学的各科成绩
			sum += a[i][j];			//计算当前科目的总成绩(sum)
		}
		v[i] = sum / 5;  // 当前科目的平均分,用总的成绩除以5
		sum = 0;	     // 把当前科目总成绩清0,为下一次计算做准备
	}
	average = (v[0] + v[1] + v[2]) / 3;
	printf("\n数学平均分: % d\n语文平均分 : % d\n英语平均分 : % d\n", v[0], v[1], v[2]);
	printf("平均分: %d\n", average);
	return 0;
}

运行如下

初识C语言 DAY11 【二维数组】_第6张图片

可能出现的错误

想把平均分打印在学科分的下面,但是运行起来有问题。大佬们帮忙改改。

#define _CRT_SECURE_NO_WARNINGS
#include 
int main()
{
	int i, j;
	int ayerage;
	int sum = 0;
	int a[3][5];
	int v[3];
	for (i = 0; i < 3; i++)
	{
		printf("请输入学科成绩5次\n");
		if (i == 0)
			printf("数学成绩:");
		if (i == 1)
			printf("语文成绩:");
		if (i == 2)
			printf("英语成绩:");
		for (j = 0; j < 5; j++)
		{
			scanf("%d", a[i][j]);
			sum += a[i][j];
			v[i] = sum / 5;
				   if (i == 0)
				   printf("\n数学平均分:%d\n",v[i]);
			   if (i == 1)
				   printf("\n语文平均分:%d\n", v[i]);
			   if (i == 2)
				   printf("\n英语平均分:%d\n", v[i]);
		 }
		sum = 0;
    }
	sum += v[i];
	average = sum / 3;
	printf("\n总平均分为:%d", average);
   return 0;
}

如果您发现文章有错误请与我留言,感谢

你可能感兴趣的:(c语言,学习,开发语言)