㈠ 用c语言创建一个二维数组a[m][n],要求m,n从键盘输入
#include <stdio.h>
#include <malloc.h>
#include <time.h>
#include <stdlib.h>
int main()
{
int m,n;
int** a;
int i,j;
printf("输入m和n,空格分隔:");
scanf("%d%d",&m,&n);
a=(int**)malloc(sizeof(int*)*m);
for(i=0;i<m;i++)
{
a[i]=(int*)malloc(sizeof(int)*n);
}
srand(time(0));
printf("随机填充数组如下:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
a[i][j]=rand()%100;
printf("%-4d",a[i][j]);
}
printf("\n");
}
for(i=0;i<m;i++)
free(a[i]);
free(a);
return 0;
}
㈡ c语言输入m个字符串到二维数组中,并假设每一个字符串的长度均小于n,
#include <stdio.h>
#include"string.h"
#defineM5
#defineN31
intmain(void){
chars[M][N],i,j,k,t[N];
printf("Inputsomestrings... ");
for(i=0;i<M;scanf("%30s",s[i++]));
for(i=0;i<M;i++){
for(k=i,j=k+1;j<M;j++)
if(strcmp(s[k],s[j])>0)
k=j;
if(k-i){
strcpy(t,s[k]);
strcpy(s[k],s[i]);
strcpy(s[i],t);
}
printf("%s ",s[i]);
}
return0;
}
㈢ c语言 输入一个m*n整形的二维数组,对其每行求和,和单独存放在一个一维数组中
m,n 输入后,动态分配 2维数组 a, 和存放 每行和 的 1维数组 b.
然后输入 m*n个 整形数据,最后输出 每行和。
#include <stdio.h>
int main(){
int **a; // a[m][n] or a[NR][NC]
int *b;
int NR,NC;
int i,j;
printf("input number of rows m:\n");
scanf("%d",&NR);
printf("input number of cols n:\n");
scanf("%d",&NC);
a = (int **) malloc(sizeof(int *) * NR);
for (j=0;j<NR;j++){
a[j] = (int *) malloc(sizeof(int) * NC);
}
b = (int *) malloc(sizeof(int *) * NR);
printf("input 2-d array data, %d rows %d colums:\n",NR,NC);
for (j=0;j<NR;j++) for (i=0;i<NC;i++) scanf("%d",&a[j][i]);
for (j=0;j<NR;j++){
b[j]=0;
for (i=0;i<NC;i++) b[j]=b[j]+a[j][i];
}
printf("sum of each line:\n");
for (j=0;j<NR;j++) printf("%d ",b[j]);
return 0;
}
例如:
input number of rows m: 3
input number of cols n: 4
input 2-d array data, 3 rows 4 colums:
1 2 3 4
5 6 7 8
9 10 11 12
sum of each line:
10 26 42
㈣ C语言中,如何手动输入二维数组
C语言中,如何手动输入二维数组?c语言的数组是非常重要的内容,特别是二维数组的内容,所以今天就由小编来为大家介绍c语言怎么创建一个二维数组。
工具原料c语言电脑
方法/步骤分步阅读
1
/6
第一首先在电脑上打开c语言编程软件。
然后创建项目。
2
/6
第二然后导入stdio.h和stdlib包。
再加入malloc包。
3
/6
第三然后定义五个参数。
再创建其中两个参数的空间。
4
/6
第四然后用for语句进行循环。
再用scanf语句进行接收输入到二维数组。。
5
/6
第五然后用两个for语言循环。
再输出二维数组的数值。
6
/6
第六然后用printf语句进行数据输出分格。
这样一个二维数组就创建成功了。
注意事项
个人经验,仅供参考。
内容仅供参考并受版权保护
扩展内容:
二维数组:
二维数组本质上是以数组作为数组元素的数组,即“数组的数组”,类型说明符 数组名[常量表达式][常量表达式]。二维数组又称为矩阵,行列数相等的矩阵称为方阵。对称矩阵a[i][j] = a[j][i],对角矩阵:n阶方阵主对角线外都是零元素。
二维数组A[m][n],这是一个m行,n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标从p到m+p,列下标从q到n+q,按“行优先顺序”存储时则元素a[i][j]的地址计算为:LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t,按“列优先顺序”存储时,地址计算为:LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) * m + (i − p)) * t,存放该数组至少需要的单元数为(m-p+1) * (n-q+1) * t 个字节。
㈤ C语言编程,如何自动生成一个二维数组
程序主要通过malloc函数动态生成数组,srand和rand函数配合生成随机数据,代码如下,
//程序功能,实现自定义m*n二维数组,随机生成给定范围max-min的数组元素
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
{
int i=0,j=0;
int m=0,n=0;//数组维数
int max=0,min=0;//数组数据范围
int **p=NULL;//二维指针,存放m*n个元素
int tmp;
printf("请输入数组维数m和n:");
scanf("%d %d",&m,&n);
printf("请输入数组元素最大最小值max和min:");
scanf("%d %d",&max,&min);
if(max<min)//保证max大于min
{
tmp=max;
max=min;
min=max;
}
p=(int**)malloc(m*sizeof(int*));//先分配m个一维指针
if(NULL==p)
exit(1);
for (i = 0; i < n ; i++)
{
p[i] = (int*)malloc(n*sizeof(int));//为m个一维指针分配n个整型大小的空间
if (NULL==p[i])
exit(1);
}
srand(time(NULL));
for(i=0;i<m;i++)
for(j=0;j<n;j++)
p[i][j]=rand()%(max-min+1)+min;
printf("%d*%d二维数组为:\n",m,n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%d\t",p[i][j]);
printf("\n");
}
for (i = 0; i < n; i++)
{
free(p[i]);
p[i]=NULL;
}
free(p);
p=NULL;
}
void *malloc( size_t size );如果分配成功则返回指向被分配内存的指针,指针指向一个大小为size的内存空间;如果错误发生返回NULL。
一般srand和rand配合使用产生伪随机数序列。rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand根据这个种子的值产生一系列随机数。如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的。srand(unsigned seed)通过参数seed改变系统提供的种子值,从而可以使得每次调用rand函数生成的伪随机数序列不同,从而实现真正意义上的“随机”。通常可以利用系统时间来改变系统的种子值,即srand(time(NULL)),可以为rand函数提供不同的种子值,进而产生不同的随机数序列。
㈥ C语言 如何动态创建二维数组
这样的方法可行,不过要是题目要求输入m和n,然后再定义二维数组a[m][n],那就行不通了。
你可以这样做:(以int型为例)
int **a;
int m,n,i;
scanf("%d%d",&m,&n);
a=(int**)malloc(m*sizeof(int*)); /*malloc函数在stdlib.h里面,用的时候加入这个头文件*/
for(i=0;i<m;i++)
a[i]=(int*)malloc(n*sizeof(int));
/*这样以后你就可以把a当作二维数组a[m][n]来用了。。
㈦ c语言如何动态创建二维数组
既然是动态创建,那么,所创建的二维数组的行、列数应该具有“普适”性,即,应由“用户”确定二维数组的规模。这是有难度的。因为,二维数组要牵扯行指针,且需要固定每行的列元素个数,用这种思路就没有办法达到“普适”。
为此,必须清醒地知道,所谓二维数组,其元素在内存中依然是以一维的方式存放的。说实话,二维数组本质上是不存在的。
既然如此,那么,“构造”一个所谓的二维数组,只要能提供足够实用的函数(工具)操作这个二维数组就可以了。
综上,接受由用户决定的二维数组行、列值,申请一个一维数组的空间,按照二维数组方式进行定位和操作就可以了。
为简便起见,我用如下定义,你可以更改里面的类型,以适应自己的需要:
typedef int USER_TYPE;
// 定义一个控制二维数组(矩阵)的“控制头”,由三个成员组成
typedef struct MATRIX
{
USER_TYPE *data; // 真正用来存储二维数组元素的空间
int Row; // 二维数组行数
int Col; // 二维数组列数
}MATRIX;
MATRIX *initMatrix(int row, int col); // 初始化二维数组
USER_TYPE getElementAt(MATRIX matrix, int i, int j); // 取得指定下标的元素
void setElementAt(MATRIX matrix, int i, int j, USER_TYPE val); // 给指定下标的元素赋值
void destroyMatrix(MATRIX *matrix); // 销毁二维数组
void destroyMatrix(MATRIX *matrix)
{
free(matrix->data);
free(matrix);
}
void setElementAt(MATRIX matrix, int i, int j, USER_TYPE val)
{
matrix.data[i*matrix + j] = val;
}
USER_TYPE getElementAt(MATRIX matrix, int i, int j)
{
return matrix.data[i*matrix.Col + j];
}
MATRIX *initMatrix(int row, int col)
{
MATRIX *mp;
mp = (MATRIX *)malloc(sizeof(MATRX));
mp->data = (USER_TYPE *)malloc(sizeof(USER_TYPE) * row * col);
mp->Row = row;
mp->Col = col;
return mp;
}
把上面的函数当成工具,完成二维数组初始化、赋值、取值等一系列操作,如果需要比较,还需要编写比较的函数。
㈧ 急急!!!如何用c语言输入和输出一个二维数组
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[2][2];
int i,j;
for (i=0;i<2;i++)
{
for (j=0;j<2;j++)
{
scanf("%d ",&a[i][j]);
}
}
for(i=0;i<2;i++)
for(j=0;j<2;j++)
printf("%d",a[i][j]);
return 0;
}
运行成功
㈨ c语言怎么创建二维数组
int a[m][n];//就表示一个m行n列的整型二维数组
在c语言中数组的下标是从0开始的所以,数组a的元素个数可以表示为:a[0][0]-a[m-1][n-1]
例如:
#include<stdio.h>
intmain()
{
inta[3][2],i,j;//定义一个3行2列的整型二维数组a
for(i=0;i<3;i++)//依次给二维数组赋值
for(j=0;j<2;j++)
scanf("%d",&a[i][j]);
printf(" ");
for(i=0;i<3;i++){//输出二维数组
for(j=0;j<2;j++)
printf("%d",a[i][j]);
printf(" ");
}
return0;
}
/*
运行结果:
12
34
45
12
34
45
*/
㈩ C语言如何建立一个二维数组
刚刚看错了,原来是C语言,这样就好了.
输入m,n
int m,n;
int i,j;
scanf("%d%d",&m,&n);
int **mm=(int**)malloc(m*sizeof(int*));
for(i=0;i<m;i++)
mm[i]=(int*)malloc(n*sizeof(int));
这就建了一个二维数组mm[m][n]了.
使用时,就直接mm[i][j]就可以了.
先输入行数m,列数n
然后输入一个m*n的矩阵
然后输出这个矩阵.
#include <stdio.h>
#include <malloc.h>
void main() {
int m,n;
int i,j;
scanf("%d%d",&m,&n);
int **mm=(int**)malloc(sizeof(m*sizeof(int*)));
for(i=0;i<m;i++)
mm[i]=(int*)malloc(sizeof(n*sizeof(int)));
for(i=0;i<m;i++) {
for(j=0;j<n;j++)
scanf("%d",&mm[i][j]);
}
for(i=0;i<m;i++) {
for(j=0;j<n;j++)
printf("%d ",mm[i][j]);
printf("\n");
}
}