当前位置: 首页 > 知识库问答 >
问题:

我想加两个不同的矩阵,然后告诉你哪一个是最大的

呼延化
2023-03-14

嗨,我正在写一个程序,生成两个矩阵,然后告诉哪一个是大的。但我的问题是我不知道怎么加。程序说i和j不是在output3函数中声明的,而是在其他函数中声明的。我想我可能在格式化方面有问题,但我是新来的,所以我不太知道如何正确地编写代码。我该怎么解决这个?多谢了。

#include<cstdio>
#include<cstdlib>
#include <ctime>
#define maxM 4
#define maxN 4
#define maxX 4
#define maxY 4
int tabel1[maxM][maxN];
int tabel2[maxX][maxY];
int sum[maxM][maxN];
int n, m, x, y;
void input1(){
n=4;
m=4;
for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            tabel1[i][j] = rand() % 100;
        }
    }
}

void input2(){
    x = 4;
    y = 4;
    for ( int i = 0; i < x; i++)
    {
        for (int j = 0; j < y; j++)
        {
            tabel2[i][j] = rand() % 100;
        }
    }
}
void output1(){
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++){
            printf("%8d", tabel1[i][j]);
        }
        for (int j = 0; j < n; j++){
        printf("\n");
    }
    }
}
void output2(){
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++){
            printf("%8d", tabel2[i][j]);
        }
        for (int j = 0; j < n; j++){
        printf("\n");
    }
    }
}
void output3(){
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++) {
            sum[i][j] = tabel1[i][j] + tabel2[i][j];
        }
        printf("%8d", sum[i][j]);
    }
}
main(){
    srand((unsigned)time(0));
    printf("First:\n");
    input1();
    output1();
    printf("Second:\n");
    input2();
    output2();
    print("Added up:\n");
    output3();
}

共有1个答案

汝志
2023-03-14

我猜你对C++有点陌生,因为你用了很多C的特性。我改进了您的代码,使它更像C++,并修正了错误。

#include<iostream> //iostream is the c++ equivalent for getting characters from input and putting output.
//#include<cstdlib>
#include <ctime>
#define maxM 4 //next time, maybe don't use macros in c++. I would recommend using "const int MaxM = 4;" or something like that.
#define maxN 4
#define maxX 4
#define maxY 4
int tabel1[maxM][maxN];
int tabel2[maxX][maxY];
int sum[maxM][maxN];
int n, m, x, y;

using namespace std; 

void input1() {
    n = 4;
    m = 4;
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            tabel1[i][j] = rand() % 100;
        }
    }
}

void input2() {
    x = 4;
    y = 4;
    for (int i = 0; i < x; i++)
    {
        for (int j = 0; j < y; j++)
        {
            tabel2[i][j] = rand() % 100;
        }
    }
}
void output1() {
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++) {
            cout<< tabel1[i][j]; // "<<" means put into cout, and cout is Console OUTput 
        }
        for (int j = 0; j < n; j++) {
            cout << endl; //or \n
        }
    }
}
void output2() {
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++) {
            cout<<tabel2[i][j]; //again, use cout, not printf()
        }
        for (int j = 0; j < n; j++) {
            cout << endl; //or /n
        }
    }
}
void output3() {
    int temp;
    for (int i = 0; i < m; i++) { //you forgot to define i and j, remember to put int before them
        for (int j = 0; j < n; j++) {
            sum[i][j] = tabel1[i][j] + tabel2[i][j];
            temp = j;
        }
        // original code here: cout<<sum[i][j]; j was outside the loop, so it was out of scope
        cout << sum[i][temp]; //this is new code
    }
}
int main() { //you forgot to put int main, and only had main. C++ does not allow this.
    srand((unsigned)time(0));
    cout << "First:\n";
    input1();
    output1();
    cout << "Second:\n";
    input2();
    output2();
    cout<<"Added up:\n";
    output3();
    return 0;
}

在两个for循环中,您只将i=0;...,因此编译器不知道ij是什么类型。另外,在另一个循环中,sum[i][j]j的for循环之外,因此编译器不知道j是什么。我通过创建变量temp来解决这个问题,将j的值存储temp中,并执行sum[I][temp]。另外,在C++中,我们使用cout而不是printf()(在iostreams上读取)。最后,在main()中,您忘记将int作为main()的返回类型(这在C++中是必需的)。

此外,在C++中,我将避免使用宏,而尝试执行类似const int的操作。如果你必须使用宏,至少让它们都是大写的。

你的代码现在起作用了!

 类似资料:
  • 我有22个矩阵,行数相等(即691个),列数不同(即22-25个)。我必须在每个矩阵中添加对应于同一行、同一列的值,从而得到一个维度为691*25的矩阵。 每个矩阵都是带有数值的双矩阵。如何将这两个矩阵相加,得到第三个矩阵的维数为691*25。因为fullanno2短三列,所以对于这些列,生成的矩阵将只有来自第一个矩阵的值。 我的方法是:使用colname的setdiff来获取较小矩阵中不存在的列

  • 我有一个数据集,它有4列/属性和150行。我想用最小最大规范化来规范化这个数据。到目前为止,我的代码是: 这里,和返回全局最小值和最大值。因此,这段代码实际上对2D矩阵中的所有值应用最小-最大规范化,以便全局最小值为0,全局最大值为1。 然而,我想对每一列分别执行相同的操作。具体来说,2D矩阵的每一列都应该独立于其他列进行最小-最大规格化。 我尝试使用只是使用和,但得到的错误说矩阵维度必须一致。

  • 产出: 在文件include from/usr/include/C++/4.8/IOStream:39:0、from proy3.cpp:2:/usr/include/C++/4.8/ostream:548:5:注意:模板std::basic_ostream&std::operator<<(std::basic_ostream&,const无符号char*)操作符<<(Basic_ostream&

  • 我在3D矩阵(MATLAB)中识别两个最大值的位置时遇到了问题。假设我有矩阵输出,如下所示: 对于第一个,我想确定第一行的值最高。但是我需要两个索引位置,在本例中,和。这与另一个相同。 我已经搜索了这么多,但由于我在MATLAB方面很差,我找不到解决这个问题的方法。 请一定要帮我。如果我不需要使用for循环来获得所需的输出,那就更好了。

  • 我是java新手,我创建了两个arraylists,然后在while循环中向用户请求一个数字,一旦我从第1点和第2点获得了所需数量的数字。我将arrayllists转换为数组。我需要比较两个点阵,然后将最低点的缺失数字设置为零。例如 点1=(12,123,123,435,6756,667)//6个数字 点 2=(23,13,35)//3 个数字 点 3=(23,13,35,0,0,0)//新数组替

  • 在电子游戏《动物穿越:新视野》中,村民们被个性和爱好组织起来。这8种性格分别是: 正常的懒惰的姐妹傲慢的脾气暴躁的运动员快活的自鸣得意的 这6项爱好分别是: 教育时尚健身音乐自然演奏 创建一个程序,允许用户创建他们自己的动物穿越村民。用户应该能够输入一个名字,之后程序会为该村民随机选择一个爱好和个性: 请输入村民姓名: Betsy Betsy很傲慢,很自然 该程序应该将兴趣爱好和个性都存储在列表中