CKP_1998 发表于 2020-3-13 13:08:50

奇怪的问题,二维数组无法赋值了?

#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

ba21 发表于 2020-3-13 14:45:57

先看下面代码,再查你的为什么没成功。
#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;
}

CKP_1998 发表于 2020-3-13 15:01:35

ba21 发表于 2020-3-13 14:45
先看下面代码,再查你的为什么没成功。

天啊!十分感谢!调试时只想着结果没想到,忘了初始化了{:10_266:}{:10_266:}{:10_266:}

sunrise085 发表于 2020-3-13 15:02:41

因为你的第二个函数中,在求和的时候,没有给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;
}

CKP_1998 发表于 2020-3-13 15:03:33

sunrise085 发表于 2020-3-13 15:02
因为你的第二个函数中,在求和的时候,没有给sum(i)赋初值,因此所求的分数和不一定是对的。

谢谢指正!{:10_257:}
页: [1]
查看完整版本: 奇怪的问题,二维数组无法赋值了?