首页 > 代码库 > 第十次作业

第十次作业

 1.有5名学生,每名学生有语文、数学和外语3门课的考试成绩。编程统计各学生的总分和平均分以及所有学生各科的平均分。要求成绩在程序中初始化,结果以表格的形式输出。

#include <stdio.h>
#define M 5
#define N 3
void inscore(int score[M][N]);
//void outscore(int score[M][N]);
void insum(int score[M][N],int sum[M]);
void outsum(int sum[],int n);
void inmus(int score[M][N],int mus[M]);
double ave(int sum[M],double gerenaver[M]);
double aver(int mus[M],double gekeaver[M]);
int main()
{
    int score[M][N],sum[M],mus[M];
    int i,g;
    double gerenaver[M],gekeaver[N];
    inscore(score);
//    outscore(score);
    insum(score,sum);
//    outsum(sum,M);
    ave(sum,gerenaver);
    inmus(score,mus);
    aver(mus,gekeaver); 
    printf("\t数学\t英语\t语文\t总分\t平均分\n");
    for(i=0;i<M;i++)
    {
        printf("学生%d",i+1);
        for(g=0;g<N;g++)
        {
            printf(" \t %d ",score[i][g]);
        }
        printf("\t  %d\t  %.2f",sum[i],gerenaver[i]);
        printf("\n");
    }
    printf("平均分");
    for(i=0;i<N;i++)
    {
        printf("\t %.2f",gekeaver[i]);
    }
    return 0;
}

void inscore(int score[M][N])   //???? 
{
    int i,g;
    for(i=0;i<M;i++)
    {
        printf("请输入第%d个学生的成绩:\n",i+1);
        for(g=0;g<N;g++)
        {
            scanf("%d",&score[i][g]);
        }
    }
}/*
void outscore(int score[M][N])
{
    int i,g;
    for(i=0;i<M;i++)
    {
        for(g=0;g<N;g++)
        {
            printf("%4d",score[i][g]);
        }
    }
}*/

void insum(int score[M][N],int sum[M])    //?????? 
{
    int i,g;
    for(i=0;i<M;i++)
    {
        sum[i]=0;
        for(g=0;g<N;g++)
        {
            sum[i]=sum[i]+score[i][g];
        }
    }
}/*
void outsum(int sum[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%d",sum[i]);
    }
}*/
double ave(int sum[M],double gerenaver[M])        //????? 
{
    int i;
    for(i=0;i<M;i++)
    {
        gerenaver[i]=(double)sum[i]/3;
    }
}
void inmus(int score[M][N],int mus[M])    //?????? 
{
    int i,g;
    for(i=0;i<N;i++)
    {
        mus[i]=0;
        for(g=0;g<M;g++)
        {
            mus[i]=mus[i]+score[g][i];
        }
    }
}
double aver(int mus[M],double gekeaver[M])        //????? 
{
    int i,g;
    for(i=0;i<N;i++)
    {
        gekeaver[i]=0;
        gekeaver[i]=(double)mus[i]/5;    
    }
}



/* 
double aver(int mus[M],double gekeaver[M])        //????? 
{
    int i,g;
    for(i=0;i<N;i++)
    {
        gekeaver[i]=0;
        for(g=0;g<M;g++)
        {
            gekeaver[i]=(double)mus[i]/5;    
        } 
    }
}*/

技术分享

2.求任意方阵每行、每列、两对角线上元素之和

#include <stdio.h>
#define M 3
#define N 3
int main()
{
    int i,g,square[M][N],sumM[M],sumN[N],sumz=0,sumy=0;
    printf("请输入九个数:\n");
    for(i=0;i<M;i++)
    {
        for(g=0;g<N;g++)
        {
            scanf("%d",&square[i][g]);
        }
    }
    for(i=0;i<M;i++)
    {
        sumM[i]=0; 
        sumN[i]=0; 
        for(g=0;g<N;g++)
        {
            sumM[i]+=square[i][g];
            sumN[i]+=square[g][i];
        }
    }
    printf("\n"); 
    for(i=0;i<M;i++)
    {
        printf("方阵第%d行和为%d\n",i+1,sumM[i]);
    }
    printf("\n"); 
    for(i=0;i<M;i++)
    {
        printf("方阵第%d列和为%d\n",i+1,sumN[i]);
    }
    for(i=0,g=0;i<M,g<N;i++,g++)
    {
        sumz+=square[i][g];
    }
    printf("\n"); 
    printf("方阵左上到右下的对角线上的数和为%d\n",sumz);
    for(i=0,g=N-1;i<M,g>=0;i++,g--)
    {
        sumy+=square[i][g];
    }
    printf("方阵右上到左下的对角线上的数和为%d\n",sumy);
    return 0;
}

技术分享

 

实验总结:

1:二维数组,sum[i][g]进行行列运算时,注意i和g的位置。实验一在做各科平均分时就把i和g弄反了,结果各科平均分算出来是一个数。

2:

  double ave(int sum[M],double gerenaver[M]);
  ave(sum,gerenaver);

3:函数若无返回值,且在下次函数中要用到,则要将其带入新函数中
4:矩阵两对角线和相等......

第十次作业