#今天做了学校发的国庆大礼包,遇到了些问题,在此记录一下#
如何创建一个矩阵
首先,我们要了解什么是矩阵。
矩阵就是由n行m列个一一对齐的数字构成的数字方阵
例如
接下来,我们就可以考虑怎么通过编译在显示屏上输出矩阵。
我们可以通过for循环嵌套的方式(这是我遇到的第一个问题)进行,假如我们要输出一个3*3的有序矩阵且每行数字的宽度为6(如上图),我们可以先在外循环循环矩阵的行,在内循环循环矩阵的列,当内循环输出完3列数字之后,再跳到外循环换行后继续内循环,直到输出3*3的矩阵后停止。
代码示例
这是我编写代码遇到的第二个问题
#include<iostream>
using namespace std;
int main()
{
int rew, col;
int i = 0;
for (rew = 1; rew <= 3; rew++)//外循环为矩阵的行
{
for (col = 1; col <= 3; col++)//内循环为矩阵的列
{
i++;
cout << " " << i;//在这有一个错误
}
cout << endl;//内循环后,外循环输出换行————C++中endl为换行
}
return 0;
}
运行结果如下
现在看结果是正确的,但当矩阵换成4*4甚至更多时,矩阵中会出现两位数甚至3位数,这会导致矩阵元素不能一一对齐,就不能叫做矩阵
如图 是按照上面代码得到的4*4的矩阵
原因是代码
cout << " " << i;
是先输出5个空格再输出1个 数字来达到矩阵每行的数字宽度为6的要求,当数字为个位数时矩阵中各元素宽度刚好为6,而当数字为十位数或百位数时,这些数的宽度就变为了7或8,与前面个位数的宽度6不一致,所以会出现矩阵中元素对不齐/错位的情况。这时我们可以用到头文件<iomanip>下的setw()函数,它的作用是用来设置字符之间的宽度并使它们之间的宽度一致。比如,设setw(n),当输出值长度小于n时,则会在其左侧填补空格来达到n个字符的长度(简单点来说就是输出值右对齐);当输出值长度大于n时,则会按照它的实际长度输出。
最后,当我修改代码后
代码示例
#include<iomanip>
#include<iostream>
using namespace std;
int main()
{
int rew, col;
int i = 0;
for (rew = 1; rew <= 4; rew++)//外循环为矩阵的行
{
for (col = 1; col <= 4; col++)//内循环为矩阵的列
{
i++;
cout << setw(6) << i;//修改正确后 }
cout << endl;//内循环后,外循环输出换行————C++中endl为换行
}
return 0;
}
运行结果如下
输出一个矩阵完成
下面是我作业中的原题以及我的答案
#include<iomanip>
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int N, i, j;
int z = 0;
cin >> N;
if (N <= 10 && N >= 1)
{
for (i = 1; i <= N; i++)
{
for (j = 1; j <= N; j++)
{
z++;
cout <<setw(6)<< z ;
}
cout << endl;
}
}
return 0;
}
PS:如果想输出一个元素大小为100以内随机的矩阵可以这样做
将输出元素z改成rand()%100即
cout <<setw(6)<< rand()%100 ;
意思为输出10以内的随机数
当然,rand()%后面的数可以自己定义,可以是一个数也可以是一个范围
rand()%num1+num2意思为num1~num2的随机数