#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
#include <conio.h>
void fillPin2D(int n ,int my2DArray[][n]);
void showPin2D(int n ,int my2DArray[][n]);
float findMeanLine(int n ,int my2DArray[][n]);
float findMeanCol(int n ,int my2DArray[][n]);
void showPinDouble1D(int n,float avgLine[n]);
int findDSum(int n ,int my2DArray[][n]);
int main(int argc,char *argv[])
{
srand( time(NULL) );
int n;
printf ("give a number higher than five (5)nn");
scanf ("%d",&n);
while (n <= 5)
{
printf ("give a number higher than five (5)nn");
scanf ("%d",&n);
}
printf("n");
int my2DArray[n][n];
float avgLine[n],avgCol[n];
//填充数组/////
fillPin2D (n, my2DArray);
//显示数组/////
showPin2D(n, my2DArray);
printf("nn");
//每行平均值/////
avgLine[n] = findMeanLine(n, my2DArray);
//显示平均每行/////showPinDouble1D (n, avgLine);
//平均每Col/////
avgCol[n] = findMeanCol(n ,my2DArray);
//显示平均每栏/////
showPinDouble1D(n,avgCol);
//添加2条对角线/////
int sumD;
sumD = findDSum(n ,my2DArray);
printf ("sumD = %d",sumD);
return 0;
}
void fillPin2D(int n ,int my2DArray[][n])
{
int row,col;
for (row=0 ; row <n ; row++)
for (col=0 ; col<n ; col++)
my2DArray[row][col] = rand()%10 + 1;
}
void showPin2D(int n ,int my2DArray[][n])
{
int row,col;
for (row=0 ; row <n ; row++)
{
for (col=0 ; col<n ; col++)
{
printf ("%d ",my2DArray[row][col]);
}
printf ("n");
}
}
float findMeanLine(int n ,int my2DArray[][n])
{
int sumRow=0;
int row,col;
float avgLine[n];
for (row=0; row <n ; row++)
{
sumRow=0;
for (col=0 ; col < n ; col++)
{
printf("%lun", sizeof(my2DArray));
printf("%dn",my2DArray[row,col]);
//checking value of my2DArray[row,col]
sumRow+=my2DArray[row,col];
//[Warning] assignment makes integer from pointer without a cast
}
avgLine[row]=(float)sumRow/n;
}
return avgLine[n];
}
void showPinDouble1D(int n,float avgLine[])
{
printf("avg = ");
int a;
for (a=0 ; a < n ; a++)
{
printf(" %f ",avgLine[a]);
}
printf("n");
}
float findMeanCol(int n ,int my2DArray[][n])
{
int row,col;
float avgCol[n];
for (col=0 ; col < n ; col++)
{
int sumCol=0;
for (row=0; row < n ; row++)
{
printf("%dn",my2DArray[row,col]);
//检查my2array [row,col]的值sumCol + = my2DArray[行,坳];
//[警告]赋值使未强制转换的指针变成整数
}
avgCol[col]=(float)sumCol/n;
}
return avgCol[n];
}
int findDSum(int n ,int my2DArray[][n])
{
int row,col,sumD=0;
double avgCol[n];
for (col=0 ; col < n ; col++)
{
int sumCol=0;
for (row=0; row < n ; row++)
{
if (row==col)
{
sumD+=my2DArray[row][col];
}
else if (n-row-1 == col)
{
sumD+=my2DArray[row][col];
}
}
}
return sumD;
}
findMeanLine
和findMeanCol
函数无效。
似乎你正试图从函数返回一个数组,但函数的返回类型是float
,例如
float findMeanLine(int n ,int my2DArray[][n]);
同样,你可能不会从函数返回具有自动存储时间的局部数组,因为它在退出函数后将不再存活。
这句话
printf("%lun", sizeof(my2DArray));
没有多大意义,因为它总是输出指针的大小。
printf("%dn", my2DArray[row,col]);
在表达式my2DArray[row,col]
中,括号中使用逗号操作符。看来你是指my2DArray[row][col]
。
返回语句
return avgLine[n];
您试图返回索引为n的数组中不存在的元素。有效的索引范围是[0, n )
。
void findMeanLine(int n, int my2DArray[][n], float avgLine[]);
,其中第三个形参将指定一个在函数调用方声明的具有n
元素的数组。
函数会像
一样被调用findMeanLine(n, my2DArray, avgLine);
或
findMeanCol(n, my2DArray, avgCol);
公立小学查看您的代码,我可以假设您认为可以将一个数组赋值给另一个数组,例如
avgCol[n] = findMeanCol(n, my2DArray);
但是,数组没有赋值操作符。而且表达式avgCol[n]
是数组avgCol
中不存在的元素。