草庐IT

【C++入门】学习使用二维数组基本知识及用法详解

iecne 2023-04-08 原文



🧛‍♂️iecne个人主页:iecne的学习日志
💡每天关注iecne的作品,一起进步
💪一起学习,必看iecne
🐳希望大家多多支持🥰一起进步呀!


文章目录


一.定义方式

二维数组就是在一维数组上多加一个维度。
建议:以下三种定义方式,利用第二种更加直观,提高代码可读性

1.1 逐个定义

#include <iostream>
using namespace std;
int main()
{
       int arr[2][3];
       arr[0][0] = 1;
       arr[0][1] = 2;
       arr[0][2] = 3;
       arr[1][0] = 4;
       arr[1][1] = 5;
       arr[1][2] = 6;
       for (int i = 0; i < 2; i++)
       {
              for (int j = 0; j < 3; j++)
              {
                     cout << arr[i][j] << endl;
              }
       }
}

1.2 定义赋值

第二种就是在定义一个数组的时候直接开始赋值
具体如下

int arr2[2][3] =
       {
              {1,2,3},
              {4,5,6}
       };
       for (int i = 0; i < 2; i++)
       {
              for (int j = 0; j < 3; j++)
              {
                     cout << arr2[i][j] <<" ";
              }
              cout << endl;
       }

1.3 定义赋值*2


	   int arr3[2][3] = { 1,2,3,4,5,6 };
       for (int i = 0; i < 2; i++)
       {
              for (int j = 0; j < 3; j++)
              {
                     cout << arr3[i][j] <<" ";
              }
             cout << endl;
       }

这里输出的就是

1 2 3 4 5 6

大部分基本就是这样了


二.二维数组

比如定义一个三行四列的二维数组

这里我们就有12个可以储存数据
当然我们也可以不把0为开头,和一维数组同理哈

实际上可以这样比喻:一维数组是一列格子,二维数组就是一个长方形,每一个像素都是一个格子


三.基本样例

3.1 输入输出成绩

我们可以想想,若一个班有三个学生,每个学生需要学 语数英科 四门学科,也就是我们需要统计12门学科
那么我们应该如何模拟呢?

比如一个班有张三、李四、王五三个学生那么就应该这样:

#include <iostream>
using namespace std;
int main()
{
	int clas[3+5][4+5];

	return 0;
}

这里我们注意一下,定义一个数组的时候一定要多开 10或者5,但是至少要>1,否则可能越界,就是会超过我们数组,导致运行错误

所以我们直接开clas[8][9]即可

接下来我们输入

#include <iostream>
using namespace std;
int main()
{
	int clas[3+5][4+5];
	cout << "请输入张三的成绩";
	for (int i = 1; i <= 4; i++)
	{
		cin >> clas[1][i];
	}
	cout << "请输入李四的成绩";
	for (int i = 1; i <= 4; i++)
	{
		cin >> clas[2][i];
	}
	cout << "请输入王五的成绩";
	for (int i = 1; i <= 4; i++)
	{
		cin >> clas[3][i];
	}
	return 0;
}

接下来我们完成输出

#include <iostream>
using namespace std;
int main()
{
	int clas[3+5][4+5];
	cout << "请输入张三的成绩" << endl;
	for (int i = 1; i <= 4; i++)
	{
		cin >> clas[1][i];
	}
	cout << "请输入李四的成绩" << endl;
	for (int i = 1; i <= 4; i++)
	{
		cin >> clas[2][i];
	}
	cout << "请输入王五的成绩" << endl;
	for (int i = 1; i <= 4; i++)
	{
		cin >> clas[3][i];
	}
	cout << endl << "张三的成绩:" << endl;
	for (int i = 1; i <= 4; i++)
	{
		cout << clas[1][i] << " ";
	}
	cout << endl << "李四的成绩:" << endl;
	for (int i = 1; i <= 4; i++)
	{
		cout << clas[2][i] << " ";
	}
	cout << endl << "王五的成绩:" << endl;
	for (int i = 1; i <= 4; i++)
	{
		cout << clas[3][i] << " ";
	}
	return 0;
}

如此
我们就完成了三人四科的输入输出


3.2 比大小

比大小这块我们就需要再输入的时候改造改造,并且用到max函数和min函数

输入同理

#include <iostream>
using namespace std;
int main()
{
	int clas[3+5][4+5];
	cout << "请输入张三的成绩" << endl;
	for (int i = 1; i <= 4; i++)
	{
		cin >> clas[1][i];
	}
	cout << "请输入李四的成绩" << endl;
	for (int i = 1; i <= 4; i++)
	{
		cin >> clas[2][i];
	}
	cout << "请输入王五的成绩" << endl;
	for (int i = 1; i <= 4; i++)
	{
		cin >> clas[3][i];
	}

	return 0;
}

接下来我们定义三个s用来统计信息,并且再统计最大和最小

#include <iostream>
using namespace std;
int main()
{
	int clas[3+5][4+5];
	int s[3 + 5];
	cout << "请输入张三的成绩" << endl;
	for (int i = 1; i <= 4; i++)
	{
		cin >> clas[1][i];
		s[1] += clas[1][i];
	}
	cout << "请输入李四的成绩" << endl;
	for (int i = 1; i <= 4; i++)
	{
		cin >> clas[2][i];
		s[2] += clas[2][i];
	}
	cout << "请输入王五的成绩" << endl;
	for (int i = 1; i <= 4; i++)
	{
		cin >> clas[3][i];
		s[3] += clas[3][i];
	}
	int maxs = max({ s[1], s[2], s[3] });
	int mins = min({ s[1],s[2],s[3] });
	return 0;
}

最后输出完善

#include <iostream>
using namespace std;
int main()
{
	int clas[3+5][4+5];
	int s[3 + 5];
	cout << "请输入张三的成绩" << endl;
	for (int i = 1; i <= 4; i++)
	{
		cin >> clas[1][i];
		s[1] += clas[1][i];
	}
	cout << "请输入李四的成绩" << endl;
	for (int i = 1; i <= 4; i++)
	{
		cin >> clas[2][i];
		s[2] += clas[2][i];
	}
	cout << "请输入王五的成绩" << endl;
	for (int i = 1; i <= 4; i++)
	{
		cin >> clas[3][i];
		s[3] += clas[3][i];
	}
	int maxs = max({ s[1], s[2], s[3] });
	int mins = min({ s[1], s[2], s[3] });
	cout << "总分最好的是" << maxs;;
	cout << endl;
	cout << "总分最差的是" << mins;
	return 0;
}

但是如果s[]有多个一样就只能去重了,有多种方法比如用bool类标记输出或等……


总结

本节课主要是讲解了C++的教程,至此该课示例的思想博主已经真真切切彻彻底底分享完了,相信大家对这个逻辑有了一定的理解,大家可以自己动手敲敲代码,感受一下,包教包会。若有任何侵权和不妥之处,请私信于我,定积极配合处理,看到必回!!!

帅的人已然点赞收藏关注,而丑的人还在犹豫,被犹豫了,快三连吧!
原创不易,还希望各位大佬支持一下
点赞,你的认可是我创作的动力!
收藏,你的青睐是我努力的方向!
评论,你的意见是我进步的财富!


感谢每一个观看本篇文章的朋友,更多精彩敬请期待~( ̄▽ ̄~)~:
iecne的博客
若有任何侵权和不妥之处,请私信于我,定积极配合处理,看到必回!!!

有关【C++入门】学习使用二维数组基本知识及用法详解的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  7. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  8. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  9. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  10. ruby-on-rails - 在 Ruby 中循环遍历多个数组 - 2

    我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代

随机推荐