ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

程序改错——计算学生的总分和平均分

2021-12-14 22:03:08  阅读:176  来源: 互联网

标签:pScore int sum 改错 二维 score 总分 aver 平均分


极为隐蔽的错误:1.把二维数组的地址传给pScore指针时,不能用二维指针(没有定义)下标的方式来表示地址,而应该用列指针的方式i*n+j来计算地址。For example,不能用pScore[i][j]来表示score[i][j]的,而是应该用pScore[i*n+j](传给的是score的首地址)。

2.如果直接在main函数里给二维数组赋值,会出现错误的原因:因为二维数组score的列为5,而输入的n是小于5的。所以在输入的数据是保存在列为5的二维数组score中,当后面用指针*pScore指向二维数组score的时候,输入的地址pScore[i*n+j]表示在二维数组score里的顺序(还是5列)来的,for example:pScore[2*3+2]表示的是score[1*5+3],所以如果直接在main函数里给二维数组赋值的话,只需要把pScore[i*n+j]改成pScore[i*5+j]。所以还是建议用指针来给二维数组赋值。

我直接将用指针来给二维数组score赋值的代码是/*注释*/;

没有/*注释*/的是直接在main函数里给二维数组赋值的代码。

这也是我debug了许久才发现的错误原因,太累了(-'v'-)

#include <stdio.h>
#define STUD 30
#define COURSE 5
/*void Input(int *score,int m,int n);*/
void Total(int *pScore,int sum[], float aver[], int m, int n);
void Print(int *pScore,int sum[], float aver[], int m, int n);
int main(void)
{
    int i,j,m,n,score[STUD][COURSE],sum[STUD];
    float aver[STUD];
    printf("Enter the total number of students and courses:\n");
    scanf("%d%d",&m,&n);
    printf("Enter score:\n");
   /* Input(*score,m,n);*/
    for (i = 0; i < m; i++)
        for (j = 0; j < n; j++)
         scanf("%d", &score[i][j]);
    Total(*score,sum,aver,m,n);
    Print(*score,sum,aver,m,n);
    return 0;
}
/*void Input(int *pscore,int m,int n)
{
    int i,j;
    for (i=0;i<m;i++)
        for (j=0;j<n;j++)
            scanf("%d",&pscore[i*n+j]);
}*/
void Total(int *pscore,int sum[],float aver[],int m,int n)
{
    int i,j;
    for (i=0;i<m;i++)
    {
        sum[i]=0;
        for (j=0;j<n;j++)
            {
                sum[i]+=pscore[i*5+j];
                printf("sum:%5d\n",sum[i]);
            }
        aver[i]=(float)sum[i]/n;
        printf("aver:%6.1f\n",aver[i]);
    }
}
void Print(int *pscore,int sum[],float aver[],int m,int n)
{
    int i,j;
    for(i=0;i<m;i++)
    {
        for (j=0;j<n;j++)
            printf("%4d\t",pscore[i*5+j]);
        printf("%5d\t%6.1f\n",sum[i],aver[i]);
    }

}
 

标签:pScore,int,sum,改错,二维,score,总分,aver,平均分
来源: https://blog.csdn.net/weixin_63507313/article/details/121940406

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有