不知道為什么,傳參到avr函式里的時候只能算2個值,求教大佬看看解答
會不會是//標記點 那個地方寫錯了啊
#include"stdio.h" //算各種平均分
#define Pnum 3 //person
#define Snum 3 //subject
float avr(float data[])
{
float sum = 0;
int i = 0;
do {
sum += data[i++];
} while (i == sizeof(data) / (sizeof(float))); //標記點
return sum / i;
}
//int Max(float* data)
int main()
{
float stu[Pnum],gra[Snum], list[Pnum][Snum];
int i, j;
//輸入
for (i = 0; i < Pnum; i++) {
for (j = 0; j < Snum; j++) {
scanf_s("%f",(*(list+i)+j));
}
}
//列印
for (i = 0; i < Pnum; i++) {
for (j = 0; j < Snum; j++) {
printf("%-6.1f", *(*(list + i) + j));
if (j == Snum - 1) {
printf("\n");
}
}
}
for (i = 0; i < Pnum; i++) {
for (j = 0; j < Snum; j++) {
gra[j] = list[i][j];//每個學生的成績單
}
printf("第%d位學生的平均分為:%-5.2f\n",i+1,avr(gra));
}
for (j = 0; j < Snum; j++){
for (i = 0; i < Pnum; i++) {
stu[i] = list[i][j];
}
printf("第%d門課的平均分為:%-5.2f\n", j + 1, avr(stu));
}
return 0;
uj5u.com熱心網友回復:
是寫錯了。寫作陣列名的形參實際是個兼容型別的指標,sizeof得到的是指標尺寸,陣列大小要么另外引數傳進來,要么全域陣列進來,要么把陣列封裝在結構變數里傳進來。
uj5u.com熱心網友回復:
按樓主的思路,修改如下,供參考:#include <stdio.h>
#define Pnum 3 //person
#define Snum 3 //subject
float avr(float data[],int num) //函式增減一個引數
{
float sum = 0;
int i = 0;
do {
sum += data[i++];
} while(i < num); //==sizeof(data)/(sizeof(float))); //標記點
return sum/i;
}
//int Max(float* data)
int main(int argc, char* argv[])
{
float stu[Pnum],gra[Snum], list[Pnum][Snum];
int i, j;
//輸入
for (i = 0; i < Pnum; i++) {
for (j = 0; j < Snum; j++) {
scanf("%f",(*(list+i)+j));
}
}
//列印
for (i = 0; i < Pnum; i++) {
for (j = 0; j < Snum; j++) {
printf("%-6.1f", *(*(list + i) + j));
if (j == Snum - 1) {
printf("\n");
}
}
}
for (i = 0; i < Pnum; i++) {
for (j = 0; j < Snum; j++) {
gra[j] = list[i][j];//每個學生的成績單
}
printf("第%d位學生的平均分為:%-5.2f\n",i+1,avr(gra,Snum));
}
for (j = 0; j < Snum; j++){
for (i = 0; i < Pnum; i++) {
stu[i] = list[i][j];
}
printf("第%d門課的平均分為:%-5.2f\n",j+1,avr(stu,Pnum));
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/230828.html
標籤:新手樂園
下一篇:c++怎么使用指標容器
