奇怪的问题,二维数组无法赋值了?
#include <stdio.h>#defineM 100
#defineN 10
void InputStuArray(int (*Stu), int m, int n)
{
int i, j;
for (i = 0; i < m; i++)
{
printf("请输入第%d个学生的%d门成绩:\n", i+1, n);
for (j = 0; j < n; j++)
{
scanf("%d", *(Stu+i)+j);
}
}
}
void SumAndAverage(int (*Stu), int *sum,int *ave ,int m, int n)
{
int i, j;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
*(sum + i) += *(*(Stu + i) + j);
}
*(ave + i) = *(sum + i) / n;
printf("\n");
}
}
void OutputStuArray(int *sum, int *ave, int m)
{
int i;
for (i = 0; i < m; i++)
{
printf("第%d个学生的成绩\nsum->%d\naverage->%d", i+1,
*(sum + i),
*(ave + i));
printf("\n");
}
}
int main(void)
{
intm, n;
int Stu, sum, ave;
printf("输入m个学生 (最多为30人):");
scanf("%d", &m);
printf("输入n门课程 (最多为5门)的成绩:");
scanf("%d", &n);
InputStuArray(Stu, m, n);
SumAndAverage(Stu, sum, ave, m, n);
OutputStuArray(sum, ave, m);
return 0;
}
请问为什么对Stu这个数组键入数值时,总是无法成功?
运行出现以下
warning: passing argument 1 of ‘SumAndAverage’ from incompatible pointer type 先看下面代码,再查你的为什么没成功。
#include <stdio.h>
#defineM 100
#defineN 10
void InputStuArray(int (*Stu), int m, int n)
{
int i, j;
for (i = 0; i < m; i++)
{
printf("请输入第%d个学生的%d门成绩:\n", i+1, n);
for (j = 0; j < n; j++)
{
scanf("%d", *(Stu+i)+j);
}
}
}
void OutputStuArray(int (*Stu), int m, int n)
{
int i, j;
for (i = 0; i < m; i++)
{
printf("请输入第%d个学生的%d门成绩:\n", i+1, n);
for (j = 0; j < n; j++)
{
printf("%d\n", *(*(Stu+i)+j));
}
}
}
int main(void)
{
intm, n;
int Stu, sum, ave;
printf("输入m个学生 (最多为30人):");
scanf("%d", &m);
printf("输入n门课程 (最多为5门)的成绩:");
scanf("%d", &n);
InputStuArray(Stu, m, n);
OutputStuArray(Stu, m, n);
return 0;
} ba21 发表于 2020-3-13 14:45
先看下面代码,再查你的为什么没成功。
天啊!十分感谢!调试时只想着结果没想到,忘了初始化了{:10_266:}{:10_266:}{:10_266:} 因为你的第二个函数中,在求和的时候,没有给sum(i)赋初值,因此所求的分数和不一定是对的。
#include <stdio.h>
#defineM 100
#defineN 10
void InputStuArray(int (*Stu), int m, int n)
{
int i, j;
for (i = 0; i < m; i++)
{
printf("请输入第%d个学生的%d门成绩:\n", i+1, n);
for (j = 0; j < n; j++)
{
scanf("%d", *(Stu+i)+j);
}
}
}
void SumAndAverage(int (*Stu), int *sum,int *ave ,int m, int n)
{
int i, j;
for (i = 0; i < m; i++)
{
*(sum + i)=0; //给分数和赋初值,目的是清除该存储单元的原有内容,以确保该值为0。
for (j = 0; j < n; j++)
{
*(sum + i) += *(*(Stu + i) + j);
}
*(ave + i) = *(sum + i) / n;
printf("\n");
}
}
void OutputStuArray(int *sum, int *ave, int m)
{
int i;
for (i = 0; i < m; i++)
{
printf("第%d个学生的成绩\nsum->%d\naverage->%d", i+1,
*(sum + i),
*(ave + i));
printf("\n");
}
}
int main(void)
{
intm, n;
int Stu, sum, ave;
printf("输入m个学生 (最多为30人):");
scanf("%d", &m);
printf("输入n门课程 (最多为5门)的成绩:");
scanf("%d", &n);
InputStuArray(Stu, m, n);
SumAndAverage(Stu, sum, ave, m, n);
OutputStuArray(sum, ave, m);
return 0;
} sunrise085 发表于 2020-3-13 15:02
因为你的第二个函数中,在求和的时候,没有给sum(i)赋初值,因此所求的分数和不一定是对的。
谢谢指正!{:10_257:}
页:
[1]