当前位置: 首页 > article >正文

c/c++:二维数组,数组的行数和列数求法sizeof,数组初始化不同形式,5个学生,3门功课,求学生总成绩和功课总成绩

c/c++:二维数组,数组的行数和列数求法sizeof,数组初始化不同形式,5个学生,3门功课,求学生总成绩和功课总成绩

2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,此时学会c++的话,
我所知道的周边的会c++的同学,可手握10多个offer,随心所欲,而找啥算法岗的,基本gg
提示:系列c++学习的基础和高阶知识,用于公司生产实践中,实实在在的公司部署产品要用的,因为c++速度快,
而java和Python速度慢,自然往硬件里面部署算法啥的,都得用c++或者c,因此本科学的c很重要,后来的Python或者java就没有那么重要了,
c/c++系列文章:
【1】c++:c语言优缺点,visual studio2019如何新建项目,写hello world程序
【2】c/c++:gcc安装,gcc编译hello world文件,system函数调用系统命令,sleep函数
【3】linux下gcc的编译过程和功能,预处理,编译,汇编,链接,.c预处理为.i文件.s文件.o文件.exe文件
【4】c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键
【5】c/c++:数据类型,常量变量,标识符,有符号整型,无符号unsigned,字符类型,字符串类型,实数类型,浮点型,科学计数法
【6】c/c++:2进制、8进制、10进制、16进制和进制之间的转换,c语言输出匹配格式%
【7】c/c++:原码,反码,补码和常见的数据类型取值范围,溢出
【8】c/c++:类型限定符,printf输出格式,putchar,scanf,getchar
【9】c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
【10】c/c++:顺序结构,if else分支语句,do while循环语句,switch case break语句
【11】c/c++:for循环语句,分号不可省略,表达式可以省略,猜数字游戏,跳转语句continue,break,避免写goto
【12】c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法


文章目录

  • c/c++:二维数组,数组的行数和列数求法sizeof,数组初始化不同形式,5个学生,3门功课,求学生总成绩和功课总成绩
    • @[TOC](文章目录)
  • c/c++:二维数组
  • 二维数组怎么初始化
  • 5个学生,3门功课,求总成绩
  • 总结

c/c++:二维数组

一维数组的扩展集合
在这里插入图片描述
定义:
在这里插入图片描述


void f40(void)
{
	int arr[2][3] = {
		{2,5,8},
		{7,9,10}
	};//2行3列

	int a[3][5] = { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7} };//这种写法也行

	//打印是2层for循环
	int n = sizeof(arr) / sizeof(arr[0]);//这是行吧,arr[0]是0行的大小
	int m = sizeof(arr[0]) / sizeof(arr[0][0]);//1维数组的计算方法
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");//1行结束,回车
	}

}

int main(void)
{
	f40();

	system("pause");
	return 0;
}

在这里插入图片描述
整体的大小
就是sizeof(arr);
在这里插入图片描述



void f41(void)
{
	int arr[2][3] = {
		{2,5,8},
		{7,9,10}
	};//2行3列

	printf("数组整体大小:%d\n", sizeof(arr));//
	printf("数组1行的大小:%d\n", sizeof(arr[0]));//一个行的大小
	printf("行的个数:%d\n", sizeof(arr)/sizeof(arr[0]));//整体/一个行的大小=n行
	
	printf("数组1个元素的大小:%d\n", sizeof(arr[0][0]));//一个数的大小
	printf("列的个数:%d\n", sizeof(arr[0])/sizeof(arr[0][0]));//1行/一个元素大小=m列
}


int main(void)
{
	f41();

	system("pause");
	return 0;
}

在这里插入图片描述
数组的名字,也就是首个元素的地址
没问题的

`

void f42(void)
{
int arr[2][3] = {
{2,5,8},
{7,9,10}
};//2行3列

printf("数组整体地址:%x\n", arr);
printf("数组首个元素地址:%x\n", &arr[0][0]);//取地址别忘了

}

`在这里插入图片描述
我们看看首行的地址是

在这里插入图片描述
你可以看看,数组实际上也是连续存放在一个存储空间的
是一行一行存的

上面绿色0行存完,3个列放一起
然后是1行的3个列放一起
懂?
在这里插入图片描述

二维数组怎么初始化

行列可以指定,但是实际大小可以变少

其余元素初始化为0;


void f43(void)
{
	int arr[3][4] = {
		{2,5,8},
		{7,9,10}
	};//2行3列

		//打印是2层for循环
	int n = sizeof(arr) / sizeof(arr[0]);//这是行吧,arr[0]是0行的大小
	int m = sizeof(arr[0]) / sizeof(arr[0][0]);//1维数组的计算方法
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");//1行结束,回车
	}
}

在这里插入图片描述
所以,如果我们啥也不写也行


	int arr[3][4] = { 0 };//直接整体干为0

在这里插入图片描述
如果不写{}呢?
简单写
它自动给你排


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

在这里插入图片描述
这种不常见的

你可以不指定几行几列【那是一维数组】
二维数组必须写列!!!!!!!!!!!


	int arr[][3] = { 1,2,3,4,5,6};//数组必须执行列

在这里插入图片描述

	int arr[][3] = { 1,2,3,4};//数组必须执行列

在这里插入图片描述
最好是标准的定义

5个学生,3门功课,求总成绩

和java中的fori按回车,一样快捷

c语言中,for按tab,就可以处for循环,你改下size_t的类型和length的名字
在这里插入图片描述


void f44(void)
{
	/*
1 2 3
4 5 6
7 8 9
1 2 3
1 2 3
	*/
	int arr[5][3];//慢慢赋值
	int n = sizeof(arr) / sizeof(arr[0]);//行
	int m = sizeof(arr[0]) / sizeof(arr[0][0]);//列

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{//循环赋值也行的
			scanf("%d", &arr[i][j]);//挨个读取即可--这是算法中的第一步
			//在c++中是cin了,很简单
			//java中是in.next();
		}
	}

	//printArr(arr);//给它打印看看

	//回头再看函数
	//一个学生总成绩
	for (size_t i = 0; i < n; i++)
	{
		int sum = 0;
		for (size_t j = 0; j < m; j++)
		{
			sum += arr[i][j];//累计
		}
		printf("学生%d的成绩是:%d\n", i+1, sum);
	}

}

在这里插入图片描述

easy


void f44(void)
{
	/*
1 2 3
4 5 6
7 8 9
1 2 3
1 2 3
	*/
	int arr[5][3];//慢慢赋值
	int n = sizeof(arr) / sizeof(arr[0]);//行
	int m = sizeof(arr[0]) / sizeof(arr[0][0]);//列

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{//循环赋值也行的
			scanf("%d", &arr[i][j]);//挨个读取即可--这是算法中的第一步
			//在c++中是cin了,很简单
			//java中是in.next();
		}
	}

	//printArr(arr);//给它打印看看

	//回头再看函数
	//一个学生总成绩
	for (size_t i = 0; i < n; i++)
	{
		int sum = 0;
		for (size_t j = 0; j < m; j++)
		{
			sum += arr[i][j];//累计
		}
		printf("学生%d的成绩是:%d\n", i+1, sum);
	}

	//每个学科的总成绩?

	for (size_t i = 0; i < m; i++)
	{
		int sum = 0;
		for (size_t j = 0; j < n; j++)
		{
			sum += arr[j][i];//累计
		}
		printf("功课%d的总成绩是:%d\n", i + 1, sum);
	}
}

在这里插入图片描述
列上求和也行哦
反正好说
你遍历的时候先看行还是列,分清就行。


总结

提示:重要经验:

1)
2)学好c++,即使经济寒冬,手握10个大厂offer绝对不是问题!
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。


http://www.kler.cn/a/11726.html

相关文章:

  • 24/11/11 算法笔记 泊松融合
  • MYSQL隔离性原理——MVCC
  • 2024一带一路暨金砖国家技能发展与技术创新大赛 (高职组)【网络安全防护治理实战技能赛项】
  • 亚信安全新一代WAF:抵御勒索攻击的坚固防线
  • PHP实现身份证OCR识别API接口
  • HTTPS通信和TCP通信有什么不一样
  • Python操作MySQL就是这么简单
  • ROS开发之如何使用ICM20948 IMU模块?
  • Ubuntu20.04安装matlab2022b
  • 面试官在线点评4份留学生简历! 这些坑你中了几个?如何写项目描述才能被大厂发面试?转专业简历该咋写 | 还有优秀简历展示!
  • HTML—javaEE
  • 【无功优化】基于多目标差分进化算法的含DG配电网无功优化模型【IEEE33节点】(Matlab代码实现)
  • Redis 面试题总结
  • JWT 认证机制
  • 【cmake篇】选择编译器及设置编译参数
  • 四百元以内哪种耳机音质好?2023便宜音质好的蓝牙耳机推荐
  • Spring Cache
  • 优化Key顺序提升ClickHouse查询性能
  • 使用kubeadm方式搭建K8S集群
  • mulesoft MCIA破釜沉舟备考 2023.04.17.13
  • 网络基本概念
  • 华为 ADS 2.0 发布,城区智驾之战「白热化」
  • C++ std::cin
  • 无限制翻译软件-中英互译字数无限
  • 2023软件测试最难求职季,哪些测试技能更容易拿到offer?
  • 第十四届蓝桥杯C++省赛B组 补题(3 - 10)