C 需要使用一些函数查找和打印2D数组行的平均值吗
所以我试图制作一个程序,用随机数创建一个2d数组,然后用函数打印出来 之后,我需要打印出2d数组中每一行的平均值,所以我想我将创建另一个数组并输入每一行的平均值,然后打印名为C 需要使用一些函数查找和打印2D数组行的平均值吗,c,arrays,C,Arrays,所以我试图制作一个程序,用随机数创建一个2d数组,然后用函数打印出来 之后,我需要打印出2d数组中每一行的平均值,所以我想我将创建另一个数组并输入每一行的平均值,然后打印名为avgLine[]的平均数组 这段代码不会返回任何错误,但是当我在打印2d数组后尝试运行它时,程序崩溃了,我需要帮助使它正常工作 #include <stdio.h> #include <stdlib.h> #define nmax 100 //creates a 2d array and fill
avgLine[]
的平均数组
这段代码不会返回任何错误,但是当我在打印2d数组后尝试运行它时,程序崩溃了,我需要帮助使它正常工作
#include <stdio.h>
#include <stdlib.h>
#define nmax 100
//creates a 2d array and fills it with random numbers//
void fillPin2D(int n,int p[][nmax]){
int i,j;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
p[i][j]=rand() % 11;
}
}
}
//prints out the 2d array//
void showPin2D(int n,int p[][nmax]){
int i,j;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%d ",p[i][j]);
}
printf("\n"); }
}
//finds the average for every row and inserts it in a new array called avgLine[]//
void findMeanLine(int n,int p[][nmax]){
int sum,i,j;
double avg,avgLine[i];
for(i=0;i<n;i++){
sum=sum+p[i][nmax];
for(j=0;j<n;j++){
}
}
avg=sum/n;
avgLine[i]=avg;
}
//prints out the avgLine array//
int showPinDouble1D(int n,double avgLine[]){
int i;
for(i=0;i<n;i++){
printf("%lf",avgLine);
}
}
main(){
int n,i;
//here is a check so the program accepts integers > 5//
do{
printf("Give integer n > 5 : ");
scanf("%d",&n);
}while (n<5);
int p[n][nmax];
fillPin2D(n,p);
printf("p = \n");
showPin2D(n,p);
findMeanLine(n,p);
double avgLine[i];
printf("p = \n");
showPinDouble1D(n,avgLine);
system("Pause");
}
#包括
#包括
#定义nmax 100
//创建二维数组并用随机数填充//
void fillPin2D(int n,int p[][nmax]){
int i,j;
对于(i=0;i而言,发布的代码中存在多个错误,大多数错误可由编译器检测到,具有适当的警告级别(例如,请参阅诊断),并且源于对内存分配和作用域变量生存期的误解
制作一个用随机数创建二维数组的程序
在检索大小n
之后,(这里我将忽略OP的方法),数组声明为
int p[n][nmax]; // Where nmax was previously defined as 100
假设在下面的示例中,数组始终被视为平方矩阵,那么最好将可变长度数组声明为
int p[n][n];
在这种情况下,所有函数签名都必须更改为
// prints out the 2d array
void showPin2D(int n, int p[][n]) { /* ... */ }
// ^
然而,主要的问题是计算平均值。在main
中,声明了一个大小未知的数组,并将其传递给打印它的函数
double avgLine[i]; // Where 'i' has an undetermined value, beeing uninitialized.
但在函数findMeanLine
中,它从未被初始化或修改,其中以某种方式使用了同名的局部变量
void findMeanLine(int n,int p[][nmax]) {
int sum,i,j; // Uninitialized variables, their values are undeterminated
double avg, avgLine[i]; // Both are local, invisible to the outside
for(i=0;i<n;i++) {
sum=sum+p[i][nmax]; // It shouldn't be here and `nmax` is wrong
for(j=0;j<n;j++) { // It literally does nothing
}
}
avg = sum / n; // Useless
avgLine[i] = avg; // Now 'i' is equal to `n`, so this would be an out of bounds access
}
联机编译器给出一些错误:您应该尝试修复它们double avgLine[i];
此处i
未初始化。启用所有编译器警告并读取它们。avgLine[i]=avg;
此行应位于for循环内。另外sum=sum+p[i][nmax
这是未定义的行为请注意,生成的程序集为postedfindMeanLine
函数启用了优化:avg
和avgLine
都是局部变量,它们不会超出其作用域。
// in main:
// ...
double avgLine[n];
findMeanLine(n, p, avgLine);
showPinDouble1D(n, avgLine);
// ...
// Finds the average for every row and inserts it in a new array called 'avgLine'
void findMeanLine(int n,int p[][n], avgLine[])
{
for(int i = 0; i < n; i++)
{
// The average of every line, so reset the sum every time...
int sum = 0;
for(int j = 0; j < n; j++)
{
sum += p[i][j];
// ^^^
}
avgLine[i] = (double)sum / n; // We want a real division, not an integer one.
}
}