【问题标题】:User defined matrix in cc中的用户定义矩阵
【发布时间】:2014-03-06 04:02:06
【问题描述】:

我明天有一个项目要上 C 课,其中一部分是创建一个用户定义的矩阵。用户将输入矩阵有多少行和多少列,以及矩阵内的最小和最大数字。这些数字在用户定义的数字之间是随机的。输入所有内容后,应该显示矩阵。

它编译并运行,但除了显示一个随机数之外什么都不做。

这是我目前所拥有的:

    float GetUserInfo(){ //getting the user to define the size and values of the matrix

int nrows, ncol, min, max;
int matrix[50][50],i, j;

 printf("Please enter the number of rows and columns for the matrix:\n");
 printf("number of rows: ");
 scanf("%d", &nrows);
 printf("number of columns: ");
 scanf("%d", &ncol);

 printf("Now enter the min and max value:\n");
 printf("min value: ");
 scanf("%d", &min);
 printf("max value: ");
 scanf("%d", &max);


for(i=0;i<nrows;i++){
    for(j=0;j<ncol;j++){

    }
}

matrix[i][j]=rand();
printf("The matrix generated is:\n%d \t", matrix[i][j]);

return; 

}

【问题讨论】:

    标签: c


    【解决方案1】:

    您没有在循环内分配任何值。将matrix[i][j]=rand(); 移动到循环内。

    另外,您需要使用嵌套循环来打印矩阵值。

    要生成指定范围内的随机数,请使用matrix[i][j] = min + rand() * (max-min) / RAND_MAX;

    【讨论】:

    • 我不确定 OP 是否知道 malloc。他/她使用了硬编码的二维数组。
    • 我在网上看到过 malloc,但我们在课堂上没有介绍过它,我不确定它是如何工作的。
    【解决方案2】:

    这些行

    matrix[i][j]=rand();
    printf("The matrix generated is:\n%d \t", matrix[i][j]);
    

    在 for 循环之外,因此您只会显示一个随机值。将此行放在嵌套的 for 循环中

    matrix[i][j]=rand();
    

    并设置 rand() 函数的限制以生成介于最大值和最小值之间的数字。详情请见rand()

    【讨论】:

      【解决方案3】:

      在您使用rand() 之前,您需要使用srand() 为其播种以获得随机数,否则您将一遍又一遍地获得相同的数字:

      srand((int)time(NULL));
      

      其次.. 除非您错误地复制了代码,否则您会将数字放在循环之外

      for(i=0;i<nrows;i++){
          for(j=0;j<ncol;j++){
                             //<--| You wanted that matrix population placed in the loop 
          }                  //   |
      }                      //   |
                             //   |
      matrix[i][j]=rand();   // ---
      printf("The matrix generated is:\n%d \t", matrix[i][j]);  // move this line too
      

      还有一点,因为您在这里要求数字或行和列:

       printf("number of rows: ");
       scanf("%d", &nrows);
       printf("number of columns: ");
       scanf("%d", &ncol);
      

      但是您将数组大小硬编码为 50x50,您应该验证输入的 nrowsncol 在您的数组范围内,否则您将开始尝试访问不属于您的内存。


      最后一点,您要求在其中放置最大值和最小值,但您没有对 rand() 函数设置任何界限。有lots of examples on how to do this

      【讨论】:

        猜你喜欢
        • 2023-04-01
        • 2015-04-05
        • 2020-05-31
        • 2013-04-10
        • 1970-01-01
        • 1970-01-01
        • 2016-06-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多