為什么輸出都是0啊 代碼有沒有錯 求大佬指點
#include<stdio.h>
int main()
{
int M,N;
scanf("%d%d",&M,&N);
int a[M][N],b[N]={0},i,j,sum;
for(i=0;i<=M-1;i++)
for(j=0;j<=N-1;j++)
scanf("%d",&a[i][j]);
for(i=0;i<=M-1;i++)
{
for(j=0;j<=N-1;j++)
b[j]=b[j]+a[i][j];
}
for(i=0;i<=M-1;i++)
for(j=0;j<=N-1;j++)
sum+=a[i][j];
for(j=0;j<=N-1;j++)
printf("%.2f\n",b[j]/M);
printf("%.2f\n",sum/(M*N));
return 0;
}
uj5u.com熱心網友回復:
定義陣列 只能用常量指定緯度的大小你可以用malloc動態申請記憶體
int **arr = (int**)malloc(sizeof(int)*M*N);
arr[i][j] ----- *(*(arr+i)+j)
uj5u.com熱心網友回復:
你先隨便輸出一個位置的陣列看看是否成功錄入uj5u.com熱心網友回復:
你先隨便輸出一個位置的陣列看看是否成功錄入uj5u.com熱心網友回復:
總的來說,你的程式存在以下幾個問題:1、程式中int a[M][N]、int b[N]的定義方式不合法,你的這種方式只能針對M,N是常量的時候才適用,當M,N是變數的時候,不能這樣定義陣列,而需要動態申請記憶體,可以用malloc或者new來申請,但是new容易造成記憶體泄露,所以最好還是用malloc:,具體的實作方式在程式代碼中有詳細表明,這里就不細說;
2、程式中sum沒有初始化,因為sum會進入sum+=a[i][j]的運算中,如果沒有初始化,會產生一個隨機值,這個是很多學者不經意會犯錯的地方!一定要記住!
3、輸出平均分數的方式有問題,printf("%.2f\n",b[j]/M),因為C語言中的除法/和數學上的除法有所區別,程式中的兩個整數相除,得到的是商,它是整數,值為數學意義上的商的整數部分,所以當b[j]小于M的時候,得到的永遠是0,因此需要改為b[j]*1.0/M的方式得到帶有小數的商。注意,如果只是單純的以float型輸出數字是不會得到正確的值,這種方式只是純粹的改變值的顯示方式而已!這個也是很多學者會忽略的一個問題,也是很常見的問題,一定要學好基礎知識!!!可以看看這篇文章,對你有所幫助!https://blog.csdn.net/weixin_43956598/article/details/90062550


附上修改后的程式,錯誤的地方有標注:
#include<stdio.h>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main() {
int M,N;
int i,j,sum;
scanf("%d%d",&M,&N);
//int a[M][N],b[N]= {0};//這種定義陣列的方式嚴格說不正確
//當陣列的維度是一個變數的時候,最好用動態申請空間的方式,如下:
int *b=(int*)malloc(sizeof(int)*N);//動態申請長度為N的一維陣列b
//動態申請二維陣列
int **a=(int **)malloc(sizeof(int*)*M);//先申請M行的空間
for(i=0; i<=M-1; i++) //對于每一行動態申請
a[i]=(int*)malloc(sizeof(int)*N);
for(i=0; i<=N-1; i++) //對陣列b進行初始化
b[i]=0;
for(i=0; i<=M-1; i++)
for(j=0; j<=N-1; j++)
scanf("%d",&a[i][j]);
for(i=0; i<=M-1; i++) {
for(j=0; j<=N-1; j++) {
b[j]=b[j]+a[i][j];
}
}
sum=0;//變數一定要初始化,否則會產生亂數
for(i=0; i<=M-1; i++)
for(j=0; j<=N-1; j++)
sum+=a[i][j];
for(j=0; j<=N-1; j++)
printf("%.2f\n",b[j]*1.0/M);//注意當結果有可能是小數的時候,一定要用乘以1.0的方式來得到數學意義上的值,否則當分母大于分子的時得到的值永遠是0,因此C語言中的/除法得到的是商。
printf("%.2f\n",sum*1.0/(M*N));
return 0;
}
uj5u.com熱心網友回復:
int a[M][N],b[N]={0},i,j,sum;貌似很新的編譯器,可以支持這種寫法,聽說是新的C++標準。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/35840.html
標籤:基礎類
上一篇:可以到哪里購買現成代碼
下一篇:救救孩子吧
