C语言问题,输入MN构造M行N列的随机数组

#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,j,n=0;
printf("请输入m和n:");
scanf("%d%d",m,n);
int a[m][n];
for(i=1;i<=m;i++)
for(j=1;j<=n;j++,n++)
{
a[i][j]=rand()%10;
if(n%5==0)printf("\n");
printf("%d\t",a[i][j]);
}
printf("\n");
return 0;
}

请帮忙修改啦.....rand不会用,可以的话顺便讲讲,谢谢大神们了

第1个回答  2014-04-22
应该用动态数组

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

int main()
{
int i,j,n=0;
int m;
printf("请输入m和n:");

scanf("%d%d",&m,&n);

int *a;

a=new int[m*n];

for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
a[i*m+j]=rand()%10;
//if(n%5==0)printf("\n");
printf("%d\t",a[i*m+j]);
}
printf("\n");
}
delete [] a;
return 0;
}本回答被提问者和网友采纳
第2个回答  2014-04-22
不能这么定义数组int[m][n];

int m, n;
scanf("%d\n%d", &m, &n);

int ** retArray = new (int*)[m];
srand(time(0));
for (int i = 0; i < m; ++i)
{
retArray[i] = new int[n];

for (int j = 0; j < n; ++j)

{
retArray[i][j] = rand();

}

}追问

不太懂啊...定义二维数组是因为后面还有继续的....我想问我的哪里cuole

追答

int a[m][n]这叫静态数组,定义时要求m,n为数值常量(1,2等)或者const int型常变量(例:const int m = 10),而不能使用输入的方式,编译通不过。
我定义的也是二维数组啊。只不过是动态申请的动态数组。

追问

不行啊= =有错误,是完整的么

追答

完整代码

#include
#include
#include

int main()
{
int m, n;
scanf("%d\n%d", &m, &n);
int **retArray = (int**)malloc(sizeof(int*) * m);
srand(time(0));
for (int i = 0; i < m; ++i)
{
retArray[i] = (int*)malloc(sizeof(int) * n);

for (int j = 0; j < n; ++j)

{
retArray[i][j] = rand();

}

}

//release
for (int i = 0; i < m; ++i)
{
free(retArray[i]);
}
free(retArray);
return 1;
}
换成纯C语言的了,再编不过就追问吧。

第3个回答  2014-04-22
http://baike.baidu.com/link?url=FyqRptRBgvwa5WZNsBQnX7SNQk5rSls_Ea6Zptl4AvQzCzkgFeGn5LVdnEPRgYSLU9jYBcVH0UGTdRwTWBSGsq
里面有这么个例子
#include<time.h>
#include<stdlib.h>
#include<stdio.h>

voidmain()
{
inti,j;
srand((int)time(0));
for(i=0;i<10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf("%d",j);
}
}

调用rand()前先调用srand()来对rand()的起始值初始化