【问题标题】:C program to multiply a matrix by a scalarC程序将矩阵乘以标量
【发布时间】:2021-01-17 22:03:16
【问题描述】:

我是 C 的初学者,我想制作一个程序,通过用户提供的标量输入计算随机矩阵。我认为要么我应该更改scalar() 的第二部分和整个print(),要么只是重写matrix() 以使int 轻松通过。我的错误在scalar() 中,在for 循环中。我的第一个函数创建、随机化并打印出 4x3 矩阵。我的第二个函数应该从用户那里获取数字并将矩阵乘以它并打印出来。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

#define ROW 4
#define COLUMN 3

int matrix[ROW][COLUMN];

void creatematrix() {
    unsigned short i, j;
    srand(time(0));
    for (i = 0; i < ROW; i++) {
        for (j = 0; j < COLUMN; j++) {
            matrix[ROW][COLUMN] = rand() % 22 - 11;
            printf("%d Macierz przed pomnozeniem przez skalar: \n",
                   matrix[ROW][COLUMN]);
        }
        printf("\n");
    }
}

void scalar() {
    int scalar, i, j;
    printf("Wprowadz dowolny numer do mnozenia macierzy: ");
    scanf("%d", &scalar);
    for (i = 0; i < ROW; i++) {
        for (j = 0; j < COLUMN; j++) {
            matrix[ROW][COLUMN] = scalar * matrix[ROW][COLUMN];
            printf("%d ", matrix[ROW][COLUMN]);
        }
    }
}

int main() {
    creatematrix();
    scalar();
    return 0;
}

输出:

-2 Macierz przed pomnozeniem przez skalar:
-9 Macierz przed pomnozeniem przez skalar:
-7 Macierz przed pomnozeniem przez skalar:

-2 Macierz przed pomnozeniem przez skalar:
-6 Macierz przed pomnozeniem przez skalar:
-8 Macierz przed pomnozeniem przez skalar:

-11 Macierz przed pomnozeniem przez skalar:
-4 Macierz przed pomnozeniem przez skalar:
-6 Macierz przed pomnozeniem przez skalar:

-3 Macierz przed pomnozeniem przez skalar:
7 Macierz przed pomnozeniem przez skalar:
-7 Macierz przed pomnozeniem przez skalar:

Wprowadz dowolny numer do mnozenia macierzy: 4
-28 -112 -448 -1792 -7168 -28672 -114688 -458752 -1835008 -7340032 -29360128 -117440512
Process returned 0 (0x0)   execution time : 6.421 s
Press any key to continue.

【问题讨论】:

  • 目前代码是否存在具体问题?请描述促使您发布此问题的任何错误或不正确行为。
  • 我认为你应该做的第一件事就是编译
  • edit 给出确切的错误并提出具体问题。关于 SO 的问题需要比“任何建议?”更具体。
  • 出于同样的原因,SO 也不是推荐书籍的地方。 SO 是用于问答,而不是用于讨论意见、建议、建议等。
  • 嗯,#define ROW 不是变量声明,所以当然不能赋值和递增

标签: c matrix random scalar


【解决方案1】:

初始化和更新矩阵元素的语句不正确:你使用matrix[ROW][COLUMN]而不是matrix[i][j]

这是修改后的版本:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define ROWS    4
#define COLUMNS 3

int matrix[ROWS][COLUMNS];

void creatematrix(void) {
    int i, j;
    srand(time(0));
    for (i = 0; i < ROWS; i++) {
        for (j = 0; j < COLUMNS; j++) {
            matrix[i][j] = rand() % 22 - 11;
        }
    }
}

void scalar(void) {
    int scalar, i, j;
    printf("Wprowadz dowolny numer do mnozenia macierzy: ");
    if (scanf("%d", &scalar) != 1)
        return;
    for (i = 0; i < ROWS; i++) {
        for (j = 0; j < COLUMNS; j++) {
            matrix[i][j] *= scalar;
        }
    }
}

void print(void) {
    int i, j;
    for (i = 0; i < ROWS; i++) {
        for (j = 0; j < COLUMNS; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    printf("\n");
}

int main() {
    creatematrix();
    print();
    scalar();
    print();
    return 0;
}

【讨论】:

  • 改后只输出0。
  • 你是个传奇。现在它可以工作了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2011-04-08
相关资源
最近更新 更多