假设用户输入一个整数"3",矩阵应该是3X3和一些随机数。例如:
8 0 2
6 3 4
5 7 1 我需要使用2D数组来完成它。
但我不知道该怎么做。这是我的代码,我现在该怎么办?
#include "stdafx.h"
#include "stdlib.h"
#include "time.h"
int _tmain(int argc, _TCHAR* argv[])
{
int num1, num2;
printf("enter a integer (3-9): ");
scanf("%d", &num1);
srand(time(NULL));
switch (num1)
{
case 3: num2 = (rand() % 8);
break;
case 4: num2 = (rand() % 15);
break;
case 5: num2 = (rand() % 24);
break;
case 6: num2 = (rand() % 35);
break;
case 7: num2 = (rand() % 48);
break;
case 8: num2 = (rand() % 63);
break;
case 9: num2 = (rand() % 80);
break;
}
printf("%d %d\n", num1, num2);
int s[][] = num1 * num1;
return 0;
}新更新
#include "stdafx.h"
#include "stdlib.h"
#include "time.h"
int _tmain(int argc, _TCHAR* argv[])
{
int num2 = 0;
int num=0, i, j;
int mtx[9][9] = {0};
while (num < 3 || num > 9) {
printf("Enter an integer (3-9): ");
scanf("%d", &num);
}
do
{
srand(time(NULL));
switch (num)
{
case 3: num2 = rand() % 8;
break;
case 4: num2 = rand() % 15;
break;
case 5: num2 = rand() % 24;
break;
case 6: num2 = rand() % 35;
break;
case 7: num2 = rand() % 48;
break;
case 8: num2 = rand() % 63;
break;
case 9: num2 = rand() % 80;
break;
}
for (i=0; i < num; ++i)
for (j=0; j < num; ++j)
mtx[i][j] = num2;
}
while ( num2 == num2);
for (i=0; i < num; ++i) {
for (j=0; j < num; ++j)
printf("%i ", mtx[i][j]);
printf("\n");
}
return 0;
}发布于 2009-12-16 19:12:43
首先,稍微简化一下您所写的内容:
#include "stdafx.h"
#include "stdlib.h"
#include "time.h"
int _tmain (int argc, _TCHAR* argv[]) {
int num=0, i, j; // Added initializers and loop counters
int mtx[9][9] = {0}; // Reserve enough space for the worst-case scenario
while (num < 3 || num > 9) { // Added input validation loop
printf("Enter an integer (3-9): ");
scanf("%d", &num);
}
srand(time(NULL));
// Loop through the matrix elements we want, filling each with a random number
for (i=0; i < num; ++i)
for (j=0; j < num; ++j)
mtx[i][j] = rand();
/* Do something with the matrix here (display it, etc) */
return 0;
}要像上面显示的那样显示矩阵,循环看起来几乎与填充数组的循环相同。
for (i=0; i < num; ++i) {
for (j=0; j < num; ++j)
printf("%i ", mtx[i][j]);
printf("\n");
}实际上,这些循环非常相似,如果您不需要对矩阵做任何事情,只需显示它,那么首先使用数组就没有意义了(只需使用第二个循环并将mtx[i][j]替换为rand())。
发布于 2009-12-16 16:28:34
我已经有一段时间没有使用c语言了,所以您可能需要使用下面的一些内容,但是基本概念应该适用。
#include "stdafx.h"
#include "stdlib.h"
#include "time.h"
int _tmain(int argc, _TCHAR* argv[])
{
int num1, num2;
/* This makes sure the number they enter is between 3 and 9 */
while (!(num>3)&(num<9)) {
printf("enter a integer (3-9): ");
scanf("%d", &num1);
}
srand(time(NULL));
int counter1 = num1;
int counter2 = num1;
int intArray[num1][num1]; /*Initialize array*/
while (counter1 > 0) {
while (counter2 > 0) {
intArray[counter1][counter2] = rand(); /*This will be your populated 2D array */
counter2--;
}
counter1--;
counter2 = num1;
}
return 0;
}发布于 2009-12-16 16:43:48
在C中有两种2D数组,尽管访问这两种数组的语法非常相似。一种方法是有一个连续的内存范围,为您保存所有的数组值,编译器将内存“折叠”成一个明显的多维形状:
int contiguous2DArray[3][4] = { 0, 1, 2, 3,
4, 5, 6, 7,
8, 9, 10, 11 };
int another2DArray[4][3] = { 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 };
int a3DArray[2][2][3] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
/* A series of true statements. */
contiguous2DArray[0][0] == 0;
contiguous2DArray[0][1] == 1;
contiguous2DArray[1][0] == 4;
another2DArray[0][0] == 12;
another2DArray[0][1] == 13;
another2DArray[1][0] == 15;
a3DArray[0][0][0] == 0;
a3DArray[0][0][1] == 1;
a3DArray[0][1][0] == 3;
a3DArray[1][0][0] == 6;除了最后一个数组大小之外,所有的数组大小都是该类型所必需的一部分。因为这些大小是在编译时知道的,所以编译器知道在增加索引时要跳过所需的数量。最后一个索引总是导致编译器在每次上升一个空格时跳过一个空格。第二,最后一个将跳过n,其中n是最后一个大小,第三个到最后一个将跳过m * n,其中m和n是最后两个大小。
正如您所看到的,由于在运行时大小不能改变,这种数组并不适合于一个数组,所有维度在运行时都可能有所不同。
对于这样的数组,您需要开始使用指向数组的指针数组,而不是连续内存的多维数组。
https://stackoverflow.com/questions/1915701
复制相似问题