为随机数2D数组创建函数

时间:2016-04-12 16:30:28

标签: c arrays function matrix random

所以,我有这个代码需要变成一个函数:

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");
    }

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

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

干杯!

2 个答案:

答案 0 :(得分:0)

您已在此行a

上将int a, seed;声明为单个整数

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

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

您应该在main而不是在函数中打印结果,然后您将知道该数组已被修改并可在程序正文中使用。

您使用了非常规的牙箍放置&#39;}&#39;这使得查看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]) {...}编译时没有错误

答案 1 :(得分:0)

#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:没关系,意识到我没有包含的内容。现在很好。谢谢你的帮助。