一個求二維陣列每行平均值的程式
#include <stdio.h>
#include <string.h>
float average(int *x,int l,int j)
{
int i;
float s=0.0;
for(i=0;i<l;i++)
{
s=s+*(x+4*j+i);
}
s=s/l;
return s;
}
int main()
{
int h,l,a[20][20],i,j;
printf("輸入陣列的行數:");
scanf("%d",&h);
printf("輸入陣列的列數:");
scanf("%d",&l);
printf("輸入陣列:\n");
for(i=0;i<h;i++)
for(j=0;j<l;j++)
scanf("%d",a[i]+j);
for(i=0;i<h;i++)
{
printf("第%d行的平均值為:%f\n",i+1,average(*a,l,i));
}
return 0;
}
運行結果
uj5u.com熱心網友回復:
s=s+*(x+4*j+i);為什么是4*j
應該是20吧
uj5u.com熱心網友回復:
二維陣列不是可以這樣表示嗎
uj5u.com熱心網友回復:
d ij =*(d(0)+4*i+j)
uj5u.com熱心網友回復:
是可以這樣表示,但是每行長度是20,要把4改成20
uj5u.com熱心網友回復:
s=s+*(x+4*j+i);
為什么是4*j
應該是20吧
二維陣列不是可以這樣表示嗎
1L說的沒錯,你這個二維陣列的是固定20*20,你只是沒用完,只用到了3*2,但不代表每一行只有2個元素,也就是說每一行還是20個元素,只是你只用到了每一行的2個元素,所以你計算每行的第一個元素的地址的時候,相對偏移距離還是要用20
其實沒必要這么把問題復雜還,沒每次給average傳引數的時候,直接傳每行的首地址就可以了
float average(int *x,int l) //去掉j引數
{
int i;
float s=0.0;
for(i=0;i<l;i++)
{
s=s+*(x+i);
}
s=s/l;
return s;
}
int main()
{
int h,l,a[20][20],i,j;
printf("輸入陣列的行數:");
scanf("%d",&h);
printf("輸入陣列的列數:");
scanf("%d",&l);
printf("輸入陣列:\n");
for(i=0;i<h;i++)
for(j=0;j<l;j++)
scanf("%d",a[i]+j);
for(i=0;i<h;i++)
{
printf("第%d行的平均值為:%f\n",i+1,average(a[i],l)); //直接傳每行的首地址
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/55023.html
標籤:C語言
上一篇:GO語言規范
