【问题标题】:Creating a function for a random number 2D array为随机数二维数组创建函数
【发布时间】:2016-08-03 09:50:18
【问题描述】:

所以,我有这段代码需要转换成函数:

int main(void)  {
    int i=0,seed;
    printf("\n\nEnter seed integer value: ");               
    scanf("%d", &seed);                         
    printf("\nSeed value is:%d\n\n",seed);                  
    srand(seed);



    int a[5][5];                                
    int x,y;
    printf("Matrix A:\n");
    for(x=0;x<5;x++)    {                       
        for(y=0;y<5;y++)    {
            a[x][y] = rand() %51 + (-25);               
            printf("%d  ",a[x][y]); }           
        printf("\n");   }
    printf("\n\n");

所以基本上,它会产生一个 2D 5x5 随机数数组。这很好用,但是我的下一个任务是在此代码中应用一个函数,函数名称为:

void generate_matrices(int a[5][5])

我尝试了多次,最接近成功的代码是:

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

void generate_matrices(int a[5][5]);

int main(void)  {
    int a, seed;
    printf("\n\nEnter seed integer value: ");               
    scanf("%d", &seed);
    srand(seed);
    printf("\nSeed value is:%d\n\n",seed);  

    generate_matrices(a);

    return 0;
}


void generate_matrices(int a[5][5]) {

    int y,z;
    printf("Matrix A:\n");
    for(y=0;y<5;y++)    {
        for(z=0;z<5;z++)    {
             a[y][z] = rand() %51 + (-25);  }   
    printf("%d  ",a[y][z]); }
    printf("\n");
    }

但这会返回错误,“预期为 'int(*)[5]' 但争论的类型为 'int'。

非常感谢所有/任何帮助。公平地说,我已经完成了 90% 的代码。这是我需要帮助的唯一一点,以便我可以将其应用于我的其余代码。

干杯!

【问题讨论】:

  • 您不能将数组作为变量发送。您需要发送一个指向其第一个元素 + 列大小 + 行大小的指针。或者干脆不发送!在该函数中创建它并在那里处理它

标签: c arrays function matrix random


【解决方案1】:

您已在此行中将 a 声明为单个整数 int a, seed;

当您使用generate_matrices(a); 调用函数时,您传递的是单个整数而不是指向数组的指针。 将您的声明行更改为int a[5][5], seed;

generate_matrices(a); 会将指向 5 * 5 数组中第一个元素的指针传递给函数。

你真的应该在main而不是函数中打印结果,然后你就会知道数组已经被修改并且可以在你的程序体中使用。

您使用了非常规的大括号 '}' 放置,这使得查看 for 循环的每个部分中的内容变得更加困难。 您将打印语句放在错误的位置 - 结果只打印了矩阵的一部分。

这是应该的(只是结果 - 主要):

printf("Matrix\n ");
for (y = 0; y < 5; y++) {
    for (z = 0; z < 5; z++) {
         printf("%d\t  ", a[y][z]);
    }
    printf("\n");
}

如果您使用int a[5][5] 并使用generate_matrices(a); 调用函数
一个函数void generate_matrices(int a[5][5]) {...} 编译没有错误

【讨论】:

  • 我明白了。然而,打印输出矩阵需要有另一个函数,函数 void generate_matrices(int a[5][5]);只是为了生成矩阵,那么我需要使用另一个函数 void print_matrix(int a[5][5]);因此,在我提出的第一组编码中,我(暂时)不考虑打印矩阵,我只是希望在编译代码时不会发生错误。
  • 一个函数void print_matrix(int a[5][5]){...}可以以同样的方式调用print_matrix(a);,并在其中放置打印代码。您还需要将种子值传递给 generate_matrix 函数,并使用它来生成随机数。
【解决方案2】:
#include<stdio.h>
#include<stdlib.h>

void modify(int b[5][5]);
int main()
{
    srand(4562);
    int i,j,arr[5][5];
    modify(arr);
    for(i=0;i<5;i++){
        for(j=0;j<5;j++){
            printf("%d  ",arr[i][j]=rand() %51 + (-26)); }
    }
    return 0;
}

void modify(int b[5][5])
{
    int i,j;
    for(i=0;i<5;i++) {
        for(j=0;j<5;j++) {
            b[i][j]; }
    }
}

所以这是我最接近完成它的一次。它产生我想要的元素数量,也在我想要的范围内。但是它没有产生我需要的 5x5 网格。我哪里出错了?

编辑:我现在不想要整洁,我只是想让程序按照我想要的方式运行,然后我会整理它。

编辑 2:没关系,意识到我没有包括的内容。现在很好。感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 2015-06-29
    相关资源
    最近更新 更多