如何解决访问多维数组的行和列
如何访问多维数组的行和列。我想创建一个函数来读取多维数组的行和列。例如,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 举报,一经查实,本站将立刻删除。