C语言如何定义一个N行N列的二维数组任意输入数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言如何定义一个N行N列的二维数组任意输入数据相关的知识,希望对你有一定的参考价值。
在不知道N是几的情况下如何定义数组,如果随便定义一个int a[10000][10000]是不是浪费了空间,,求高手解惑
我可以肯定的告诉你,不可能在程序运行的时候决定一个二维数组的大小,因为数组的大小是在编译时就决定了的,不是在运行时,如果是一维的通过某些方法还可以办到,二维的就不可
能了,拿一维的来说:
polly@nowthen:~$ cat test.c
#include <stdio.h>
#include <stdlib.h>
struct test
int num;
int arr[0];
;
int main()
struct test *temp;
int n = 0;
scanf("%d", &n);
if(n > 0)
temp = (struct test*)malloc(sizeof(struct test)+n*sizeof(int));
temp->num = n;
int i = 0;
for(; i<temp->num; i++)
temp->arr[i] = i;
for(i=0; i<temp->num; i++)
printf("element %d = %d\\n", i, temp->arr[i]);
return 0;
polly@nowthen:~$ gcc -Wall test.c -o liu <---编译
polly@nowthen:~$ ./liu <---运行
9 <---输入数组维数
element 0 = 0
element 1 = 1
element 2 = 2
element 3 = 3
element 4 = 4
element 5 = 5
element 6 = 6
element 7 = 7
element 8 = 8
polly@nowthen:~$
就上面的C语言标准也是不支持的,多维数组的办不到,一维的也尽量少用。 参考技术A 对,数组下标是一个确定的值。但最好用define 定义数组下标,因为这样修改数组长度很方便 参考技术B 用malloc函数 参考技术C 1、一般情况下,题目会给出N不大于M,m不大于几的限制条件,此时只需这样定义即可 int a[N]M],其中N和M作为常数进行宏定义,比如#define N 5#define M 6 2、学到动态内存分配后,就不会有这样的担忧,需要时,可用malloc()函数在“堆”空间申请内存,该函数的原型是: void *malloc( size_t size );,功能是要求系统分配大小为size个字节的堆空间,注意到该函数的分会类型是void,通过强制类型转换即可获得需要的数据类型,比如int *p;p = (int *)malloc(30);如果申请成功,则返回该区域的首址,失败则返回NULL。
计算机二级-C语言-程序设计题-190119记录-求出一个二维数组每一列的最小值。
//编写一个函数:tt指向一个M行N列的二维数组,求出二维数组每列中最小的元素,并依次放入pp所指的一维数组中。二维数组中的数在主函数中赋予。
//重难点:求出的是每一列的最小值,这里要注意,学会简化代码,省去一些多余定义的变量。
1 #include <stdio.h> 2 #define M 3 3 #define N 4 4 void fun ( int tt[M][N], int pp[N] ) 5 { 6 //简化代码 7 int i, j;//不定义变量n,使用i即可。不定义min直接赋值给pp即可。 8 for (i = 0; i < N; i++)//注意这里i代表的列信息。 9 { 10 pp[i] = tt[0][i]; 11 for (j = 0; j < M; j++) if (tt[j][i] < pp[i]) pp[i] = tt[j][i];//for和if语句都只有一句,可以省略大括号。 12 } 13 /* int i, j, min,n=0; 14 for (i = 0; i < N; i++) 15 { 16 min = tt[0][i]; 17 for (j = 0; j < M; j++) 18 { 19 if (tt[j][i] < min) 20 min = tt[j][i]; 21 } 22 pp[n++] = min; 23 }*/ 24 } 25 main( ) 26 { 27 void NONO( ); 28 int t [ M ][ N ]={{22,45, 56,30}, 29 {19,33, 45,38}, 30 {20,22, 66,40}}; 31 int p [ N ], i, j, k; 32 printf ( "The original data is : \n" ); 33 for( i=0; i<M; i++ ){ 34 for( j=0; j<N; j++ ) 35 printf ( "%6d", t[i][j] ); 36 printf("\n"); 37 } 38 fun ( t, p ); 39 printf( "\nThe result is:\n" ); 40 for ( k = 0; k < N; k++ ) printf ( " %4d ", p[ k ] ); 41 printf("\n"); 42 NONO( ); 43 } 44 void NONO( ) 45 {/* 请在此函数内打开文件,输入测试数据,调用 fun 函数, 46 输出数据,关闭文件。 */ 47 int i, j, k, m, t[M][N], p[N] ; 48 FILE *rf, *wf ; 49 rf = fopen("in.dat","r") ; 50 wf = fopen("out.dat","w") ; 51 for(m = 0 ; m < 10 ; m++) { 52 for( i=0; i<M; i++ ){ 53 for( j=0; j<N; j++ ) 54 fscanf (rf, "%6d", &t[i][j] ); 55 } 56 fun ( t, p ) ; 57 for ( k = 0; k < N; k++ ) fprintf (wf, " %4d ", p[ k ] ) ; 58 fprintf(wf, "\n") ; 59 } 60 fclose(rf) ; 61 fclose(wf) ; 62 }
以上是关于C语言如何定义一个N行N列的二维数组任意输入数据的主要内容,如果未能解决你的问题,请参考以下文章
C语言试题四十六之将m行n列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。
C语言试题四十六之将m行n列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。
C语言试题二十三之编写一个函数void function(int tt[m][n],int pp[n]),tt指向一个m行n列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中
C语言试题二十三之编写一个函数void function(int tt[m][n],int pp[n]),tt指向一个m行n列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中