访问多维数组的行和列

如何解决访问多维数组的行和列

如何访问多维数组的行和列。我想创建一个函数来读取多维数组的行和列。例如,row = 0 输出{7.5,7.0,6.3,0.8,0.5,1.2,2.3,3.5,4.3,5.0,5.5,6.7},第 2 列输出{6.3,6.5,6.2,5.8,5.0}

int main ()
{
    float Rainfall_amounts[5][12] = {
        {7.5,6.7},{8.3,7.2,1.5,1.6,2.0,3,4.38,4,5.3,6.0},{7.7,7.3,0.9,1.8,1.3,2.8,3.8,5,5.9},{7.0,1.1,3.4,4.0,5.2,{8.2,6.1,4.5,6.7}
    return 0;
}

解决方法

既然是初始化的,[5]中的Rainfall_amounts[5][12]可以省略; [] 和编译器会弄清楚。如果您想在不更改常量的情况下添加更多年份,这是一种很好的做法。稍后,可以使用静态 sizeof 以编程方式确定以字节为单位的大小。 cdecl may be helpful 找出如何使用 sizeof 来计算单个元素的大小。

此代码使用不鼓励使用函数或结构的用例;一个人只想打印一次。还有许多其他同样有效的考虑因素。

#include <stdio.h>

int main(void) {
    const float rainfall_amounts[][3] = {
        {7.5,7.0,6.3},{8.3,7.2,6.5}
    };
    const size_t years = sizeof rainfall_amounts / sizeof *rainfall_amounts,months = sizeof *rainfall_amounts / sizeof **rainfall_amounts;
    size_t i;

    /* Row 1. */
    for(i = 0; i < months; i++) {
        printf("%s%.1f",i ? "," : "",rainfall_amounts[1][i]);
    }
    printf(".\n");

    /* Column 1. */
    for(i = 0; i < years; i++) {
        printf("%s%.1f",rainfall_amounts[i][1]);
    }
    printf(".\n");

    return 0;
}

fprintf 手册页说“.#”是“在基数字符之后出现的位数”。 "%s" 在除第一个之外的每个之前插入一个 ","。

,

如何编码的示例如下所示。

请注意,有许多不同(和更好)的方法,如何做到这一点。无论如何,它是有效的,它应该给你一个关于你能做什么的想法。

评论(个人喜好):

  • 我会考虑将矩阵存储为 C 中的向量,例如 向量包括第一列 0,后跟列 1,后跟 第 2 列,...(在下面的 m=5 和 n=12 的情况下,这意味着向量 [60])。
  • 然后,您只需通过向量[row+m*column] 访问 [row,column] 条目。
  • 接下来,我会考虑将向量(将保存矩阵)定义为指针,并动态分配其大小(使用 malloc)。
#include <stdio.h>

void print_row_or_col(int m,int n,float matrix[m][n],int row,int col,int choose){
   int i;
   if(choose==0) // print row   
   {
      if(!(row<m) || row==-1) return; // return if row exceeds size
      for(i=0;i<n;i++) printf("%.1f ",matrix[row][i]);  
   }
   if(choose==1) // print column
   {
      if(!(col<n) || col==-1) return; // return if col exceeds size
      for(i=0;i<m;i++) printf("%.1f ",matrix[i][col]);     
   }
   printf("\n");
}

int main ()
{
    float Rainfall_amounts[5][12] = {
        {7.5,6.3,0.8,0.5,1.2,2.3,3.5,4.3,5.0,5.5,6.7},6.5,1.5,1.6,2.0,3,4.38,4,5.3,6.0},{7.7,7.3,6.2,0.9,1.8,1.3,2.8,3.8,5,5.8,5.9},{7.0,1.1,3.4,4.0,5.2,{8.2,6.1,4.5,6.7}};
           
    print_row_or_col(5,12,Rainfall_amounts,-1,0);
    print_row_or_col(5,2,1);   
    return 0;
}
Output:
7.5 7.0 6.3 0.8 0.5 1.2 2.3 3.5 4.3 5.0 5.5 6.7 
6.3 6.5 6.2 5.8 5.0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?