矩阵的标量积,C++

Scalar product of a matrix, C++

本文关键字:C++ 标量      更新时间:2023-10-16

这是我第一次使用C++,似乎遇到了一些困难。我的任务有以下语句:"如果矩阵 X 的行数和列数相同(即 X 是方阵),则找到主对角线元素与随机行 K(K<=N) 中的元素的标量乘积。

 #include <iostream.h>
int main(){
    int M,N,i,j;
    int X[20][20];
    do{cout<<"n Vavedete stoinost za M:"<<endl;cin>>M;}
    while(M<2||M>20);
    do{cout<<"n Vavedete stoinost za N:"<<endl;cin>>N;}
    while(N<2||N>20);
    for(i=0;i<M;i++)
        for(j=0;j<N;j++)
        {cout<<"n Vavedete element ot X["<<i<<"]["<<j<<"]="<<endl;cin>>X[i][j];}
        //usl.1.
        int k;
        if (i==j){
        cout<<"n ELementite na koi red da se umnojat s tezi na glavniq diagonal:"<<endl;cin>>k;
        k=k-1;
        int K[20];
        for(i=0;i<M;i++)
        for(j=0;j<M;j++){
            int SP=1;
            for(k=0;k<M;k++)
            SP+=X[i][j]*X[k][j];
            cout<<SP<<endl;}
        return 0;}
        }

你的算法有几件事:

  • 如果i == j,您可能不需要执行以下循环for(i=0;i<M;i++) for(j=0;j<M;j++){}来计算最终和(请参阅我在 O(N) 中执行的示例)

  • 输入行号K后,我不明白为什么要增加K

  • 在输入矩阵中的所有值之前,我可能会先检查该M == N

在我的相应代码下方:

#include <iostream.h>
int main(){
    int M,N,i,j;
    int X[20][20];
    do{cout<<"n Vavedete stoinost za M:"<<endl;cin>>M;}
    while(M<2||M>20);
    do{cout<<"n Vavedete stoinost za N:"<<endl;cin>>N;}
    while(N<2||N>20);
    //usl.1.
    int k;
    if (M==N)
    {
        for(i=0;i<M;i++)
            for(j=0;j<N;j++)
                {cout<<"n Vavedete element ot X["<<i<<"]["<<j<<"]="<<endl;cin>>X[i][j];}
        cout<<"n ELementite na koi red da se umnojat s tezi na glavniq diagonal:"<<endl;cin>>k;
        k=k-1;
        int SP=1;
        for(i=0;i<M;i++)
        {
            SP+=X[i][i]*X[k][i];
            cout<<SP<<endl;
        }
        return 1;
    }
    return 0;
}
如果你想用

随机行 K 的元素乘以对角线,那么为什么:

SP+=X[i][j]*X[k][j];

这只是将每个条目与镜像位置(沿对角线)中的条目相乘。这不是你所描述的。

你想要的是以下内容(伪)

k= random row number
for(column: columns){
  total += X(column,column)*X(row,column)
}

并且不要称您的桌子为"X"...不要。