c -警告赋值在没有强制类型转换的情况下从指针生成整数.float findMeanLine(int n,int my2


#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;
}

findMeanLinefindMeanCol函数无效。

似乎你正试图从函数返回一个数组,但函数的返回类型是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中不存在的元素。

相关内容

  • 没有找到相关文章

最新更新