C语言中如何取二维数组的一行(一列)?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中如何取二维数组的一行(一列)?相关的知识,希望对你有一定的参考价值。

就像在Matlab中A(:,3)表示A矩阵的第三行一样,C语言中有没有类似的表示方法?

没有简单的函数或表示方法,只能使用循环输出或者使用数组中的值。

#include <stdio.h>

int main()

int a[3][3]=1,2,3,4,5,6,7,8,9;

int b[3],n=3;

printf("输出第三行:\\n ");

for(int i=0;i<3;i++)

b[i]=a[n-1][i];printf("%d ",b[i]);

数组b中存储的就是第n行的数据。

扩展资料:

数组的使用规则:

1.可以只给部分元素赋初值。当 中值的个数少于元素个数时,只给前面部分元素赋值。例如:static int a[10]=0,1,2,3,4;表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。

2.只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:static int a[10]=1,1,1,1,1,1,1,1,1,1;而不能写为:static int a[10]=1;请注意:在C、C#语言中是这样,但并非在所有涉及数组的地方都这样,数据库是从1开始。

3.如不给可初始化的数组赋初值,则全部元素均为0值。

4.如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。例如:static int a[5]=1,2,3,4,5;可写为:static int a[]=1,2,3,4,5;动态赋值可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合scanf函数逐个对数组元素赋值。

参考资料:

百度百科-数组

参考技术A

C语言中的数组实质是指针,比如一个数组是char c[32],那么你就可以将它看做是一个用malloc函数进行过分配内存的char *c,数组是指针的特殊形式。

而多维数组的实质是指向指针的指针,比如一个多维数组是char c[3][32],可以将它看做进行过分配内存的char **c。

知道了这点,就知道如何得到某一行了。

int main(int argc, const char * argv[])

    //声明一个二维数组
    char c [3][32];
    //分别输入三行数据
    sprintf(c[0], "第一行");
    sprintf(c[1], "第二行");
    sprintf(c[2], "第三行");
    //打印
    for (int a=0; a<=2; a++) 
        //用”c[a]“就可以表示第a行的字符串数组
        printf("%s\\n",c[a]);
    
    return 0;

输出得到结果:

第一行

第二行

第三行

追问

谢谢回答!能不能举个数字的例子,比如二维数组A=1,2,3,4;如何把A的第一行给B,使得B=1,2。谢谢!

追答

老老实实的用:

int A[2][2] = 1,2,3,4;
int B[2];
for (int a=0; a<=1; a++) 
    B[a] = A[0][a];

来将A的第一行给B吧。或者试实际情况,自己写一个用来处理这种情况的函数。

因为字符数组用得是最多的,C语言提供了许多用于处理字符串的函数,比如strlen、strcpy、sprintf等等,其他类型就需要自己努力了。

追问

好吧,看来只能这样了。谢谢!

本回答被提问者采纳
参考技术B

1、用fgets函数可以读取文件中某行的数据,某列数据就必须一个一个读入每行的第几个字符,再存入到一个字符串当中。

2、例程:

#include<stdio.h>
#include<string.h>
void main()

  char a[100],b[100],c[100];
  int i=3,j=4,k=0;    //第三行,第四列
  FILE *fp = fopen("data.txt","r");
  while(fgets(c,100,fp))    //读入每行数据
    i--;
    if(i==0) strcpy(a,c);    //读到第三行数据
    b[k++]=c[j-1];        //把每行的那列字符拷到b中
  
  b[k]=0;
  printf("第%d行数据:%s\\n",i,a);
  printf("第%d列数据:%s\\n",j,b);
  fclose(fp);

参考技术C C语言中的数组实质是指针,比如一个数组是char c[32],那么你就可以将它看做是一个用malloc函数进行过分配内存的char *c,数组是指针的特殊形式。
而多维数组的实质是指向指针的指针,比如一个多维数组是char c[3][32],可以将它看做进行过分配内存的char **c。
知道了这点,就知道如何得到某一行了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

int main(int argc, const char * argv[])

//声明一个二维数组
char c [3][32];
//分别输入三行数据
sprintf(c[0], "第一行");
sprintf(c[1], "第二行");
sprintf(c[2], "第三行");
//打印
for (int a=0; a<=2; a++)
//用”c[a]“就可以表示第a行的字符串数组
printf("%s\n",c[a]);

return 0;


输出得到结果:

第一行

第二行

第三行

二维数组中的查找

题目描述

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
 

解法

取左下角或右上角,例如取右上角,与目标数对比,如果大于目标数横坐标减一,如果小于纵坐标加一。

以上是关于C语言中如何取二维数组的一行(一列)?的主要内容,如果未能解决你的问题,请参考以下文章

在C语言中如何用把二维数组中的一行贼给一维数组?

怎么把一个二维数组写入一行数据库中?

C语言 如何将一个二维数组的值全部替换成另一个二维数组

vba中怎么选取二维数组中的某一行或某一列?

VC中如何将一个二维数组的值赋给另一个二维数组?只能用一行。

二维数组取第一列第一行。组成十字