C语言的二维数组

二维数组的内存情况

        二维数组在内存的存在形式,各个元素的地址是连续分布的,在前一个元素基础上加数组类型的长度(如int为4)

数组的定义和初始化

先定义再初始化

  • 数组的定义
//a[4][6] : 表示一个4行6列的二维数组
int a[4][6]; // 没有初始化,则是分配的内存垃圾值
  • 数组的初始化
int i, j;	
//全部初始化 0
for(i = 0; i < 4; i++) { //先遍历行
	for(j = 0; j < 6; j++) {//遍历列	
		a[i][j] = 0;
	}
}
  • 数组的遍历
a[1][2] = 1;
a[2][1] = 2;
a[2][3] = 3;
//输出二维数组
for(i = 0; i < 4; i++) {
	for(j = 0; j < 6; j++) {
		printf("%d ",  a[i][j]);
	}
	printf("\n");
}

//二维数组的内存布局
printf("\n二维数组a的首地址=%p", a);//00D3F9B8
printf("\n二维数组a[0]的地址=%p", a[0]);//00D3F9B8
printf("\n二维数组a[0][0]的地址=%p", &a[0][0]);//00D3F9B8
printf("\n二维数组a[0][1]的地址=%p", &a[0][1]);//00D3F9BC
//将二维数组的各个元素得地址输出
printf("\n");
for(i = 0; i < 4; i++) {
	printf("a[%d]的地址=%p  \n\n", i, a[i]);
	for(j=0; j < 6; j++) {
		printf("a[%d][%d]的地址=%p ", i, j , &a[i][j]);
	}
	printf("\n");
	printf("\n");
}	

 数组的直接初始化

数组练习

数组的灵活遍历并求总和

#include<stdio.h>

void main() {

	//用灵活的方式遍历数组
	int map[3][3] = { 0,0,1,1,1,1,1,1,3 };

	//遍历
	//先得到行
	int rows = sizeof(map) / sizeof(map[0]);
	//得到列
	int lens = sizeof(map[0]) / sizeof(int);
	int lens1 = sizeof(map[0]) / sizeof(map[0][0]);//一样的
	
	/*int i, j;
	for (i = 0; i < rows; i++) {
		
		for (j = 0; j < lens; j++) {
			printf("%d\t", map[i][j]);
		}
		printf("\n");
	}*/

	int i, j;
	int sum = 0;
	for (i = 0; i < rows; i++) {

		for (j = 0; j < lens; j++) {
			printf("%d\t", map[i][j]);
			sum += map[i][j];
		}
		printf("\n");
	}
	printf("二维数组的总和为%d",sum);
	getchar();
}

二维数组求平均成绩

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

void main() {
	/*
	 定义二维数组,用于保存三个班,
	 每个班五名同学成绩,并求出每个班级平均分、以及所有班级平均分
	*/

	double score[3][5]; 
	int rows, cols, i, j; 
    rows = sizeof(score) / sizeof(score[0]);
    cols = sizeof(score[0])/sizeof(double);
	//classTotalScore 各个班级总成绩 totalScore 所有学生成绩
	double totalScore = 0.0, classTotalScore = 0.0;
	for (i = 0; i < rows; i++ ) {
		for (j = 0; j < cols ; j++ ) {
			score[i][j] = 0.0; //初始化
		}
	}
	//遍历,给每个学生输入成绩
	for (i = 0; i < rows; i++ ) {
		for (j = 0; j < cols ; j++ ) {
			printf("请输入第 %d 个班的  第 %d 个 学生的成绩", i + 1, j + 1);
			scanf("%lf", &score[i][j]);
		}
	}
	//getchar();
	//显示下成绩情况
	for (i = 0; i < rows; i++ ) {
		for (j = 0; j < cols ; j++ ) {
			printf("%.2f ",score[i][j]);
		}
		printf("\n");
	}
	//统计各个班的总成绩,和所有学生的总成绩
	for (i = 0; i < rows; i++ ) {
		classTotalScore = 0.0; // 每次清0 
		for (j = 0; j < cols ; j++ ) {
			classTotalScore += score[i][j]; //累计每个班的总成绩
		}
		printf("\n第 %d 个班的平均成绩是 %.2f" , i+1,  classTotalScore/cols );
		totalScore += classTotalScore; //将该班级的总分,累计到 totalScore
	}
	printf("\n所有学生总成绩是  %.2f 平均成绩 %.2f" ,  totalScore, totalScore/(rows * cols));
	getchar();
	getchar();

}

二维数组的注意事项

  • 可以只对部分元素赋值,为赋值的元素为0.(但是刚初始化时,数组内存的值不确定)
  • 如果对全部元素赋值,那么第一维(行)的长度可以不给出
  • 二维数组可以看成是由一维数组嵌套而成的
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值