gpt4 book ai didi

c - 将矩阵作为参数传递

转载 作者:行者123 更新时间:2023-11-30 17:04:50 24 4
gpt4 key购买 nike

我是c语言新手,我正在使用CUDA编译器。我想声明五个矩阵,从a[1][1]到a[5][5]。使用随机值初始化它们。打印这些值。我已经展示了我编写的整个代码。我遇到问题

  1. 将矩阵作为参数传递

  2. 初始化一个矩阵(应该是常量)

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

    void printMatrix(int **a, int rows, int cols)
    {
    for(int i=0; i<rows; i++){
    for (int j=0; j<cols; j++){
    printf("%d\t", a[i][j] );
    }
    printf("\n");
    }
    }

    int main() {
    int N;

    for (int n=0; n<=5; n++)
    N = n;
    int a[N][N];

    for(int i=0; i<N; i++)
    for (int j=0; j<N; j++){
    a[i][j] = rand() % 256;
    }

    printf("Matrix A\n");
    printMatrix(a, 10, 10);
    }
    }

    如果我在顶部定义 N,则效果很好。如果我这样做,我将无法使用 for 循环更改 N 值。我该如何纠正。

最佳答案

对于初学者来说,程序中有一个拼写错误。您省略了循环语句后的左大括号

for (int n=0; n<=5; n++)
^^^^
N = n;
int a[N][N];
//...

应该有

for (int n=0; n<=5; n++) {
^^^^
N = n;
int a[N][N];
//...

Array a 是一个可变长度数组。它的维度可能不等于 0。因此变量 n 必须从 1 开始,正如赋值中所写的

for (int n=1; n<=5; n++) {
^^^^

该函数调用

printMatrix(a, 10, 10);
^^ ^^

没有意义,因为数字 10 与数组没有任何共同点。

以及函数声明

void printMatrix(int **a, int rows, int cols);
^^^^^^^

无效。参数类型和参数类型之间不匹配,并且没有从一种类型到另一种类型的隐式转换。

该程序看起来像

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

void printMatrix( size_t rows, size_t cols, int a[][cols] )
{
for ( size_t i = 0; i < rows; i++ )
{
for ( size_t j = 0; j < cols; j++ ) printf( "%3d ", a[i][j] );
printf( "\n" );
}
}

int main( void )
{
const size_t N = 5;
const int UPPER_VALUE = 256;

srand( ( unsigned int )time( NULL ) );

for ( size_t n = 1; n <= N; n++ )
{
int a[n][n];

for ( size_t i = 0; i < n; i++ )
{
for ( size_t j = 0; j < n; j++ ) a[i][j] = rand() % UPPER_VALUE;
}

printf( "Matrix A[%zu][%zu]:\n", n, n );
printMatrix( n, n, a );
printf( "\n" );
}

return 0;
}

它的输出可能是

Matrix A[1][1]:
117

Matrix A[2][2]:
57 216
50 233

Matrix A[3][3]:
42 117 215
177 218 26
202 81 163

Matrix A[4][4]:
205 178 157 2
229 165 93 94
91 160 39 205
26 242 131 69

Matrix A[5][5]:
147 248 126 107 42
103 149 160 62 70
122 89 17 203 252
222 125 154 224 98
63 61 192 155 222

如果编译器不支持可变长度数组,那么您必须动态分配数组。例如

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

void printMatrix( int **a, size_t rows, size_t cols )
{
for ( size_t i = 0; i < rows; i++ )
{
for ( size_t j = 0; j < cols; j++ ) printf( "%3d ", a[i][j] );
printf( "\n" );
}
}

int main( void )
{
const size_t N = 5;
const int UPPER_VALUE = 256;

srand( ( unsigned int )time( NULL ) );

for ( size_t n = 1; n <= N; n++ )
{
int **a = malloc( n * sizeof( int * ) );

for ( size_t i = 0; i < n; i++ )
{
a[i] = malloc( n * sizeof( int ) );
for ( size_t j = 0; j < n; j++ ) a[i][j] = rand() % UPPER_VALUE;
}

printf( "Matrix A[%zu][%zu]:\n", n, n );
printMatrix( a, n, n );
printf( "\n" );

for ( size_t i = 0; i < n; i++ ) free( a[i] );
free( a );
}

return 0;
}

关于c - 将矩阵作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35548901/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com