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

第十次作业

一、实验内容      

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

#include <stdio.h>
#define M 5
#define N 3
void readscore(int score[M][N]);
int sumforstud(int score[M][N],int sum[]);
double aveforstud(int score[M][N],double ave[]);
double aveforcourse(int score[M][N],double ave[]);
int main()
{
    int score[M][N];
    double ave[M];
    int sum[M];
    int i,j;
    readscore(score);
    sumforstud(score,sum);
    aveforstud(score,ave);
    printf("语文\t数学\t英语\t总分\t平均分\n");
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        {
            printf(" %d\t",score[i][j]);
        }
        printf("%d\t",sum[i]);
        printf("%.2f\t",ave[i]);
        printf("\n");
    }
    aveforcourse(score,ave);
    for(j=0;j<N;j++)
    {
        printf("%.2f\t",ave[j]);
    }
    printf("\n");
    return 0;
}
//输入 
void readscore(int score[M][N])
{
    int i,j;
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        {
            switch(j)
            {
                case 0:
                       printf("输入第%d个学生的语文成绩:\n",i+1);
                       scanf("%d",&score[i][j]);
                       continue;
        
                case 1:
                       printf("输入第%d个学生的数学成绩:\n",i+1);
                       scanf("%d",&score[i][j]);
                       continue;
                      
                case 2:
                       printf("输入第%d个学生的英语成绩:\n",i+1);
                       scanf("%d",&score[i][j]);
                       continue;
                       
            }
        }
    }
}
//每个学生的总分 
int sumforstud(int score[M][N],int sum[])
{
    int i,j;
    for(i=0;i<M;i++)
    {
        sum[i]=0;
        for(j=0;j<N;j++)
        {
            sum[i]=sum[i]+score[i][j];
        }
    }
}
//每个学生的平均分 
double aveforstud(int score[M][N],double ave[])
{
    int i,j,sum;
    for(i=0;i<M;i++)
    {
        sum=0;
        for(j=0;j<N;j++)
        {
            sum=sum+score[i][j];
        }
        ave[i]=(double)sum/N;
    }
}
//各科平均分 
double aveforcourse(int score[M][N],double ave[])
{
    int i,j,sum;
    for(j=0;j<N;j++)
    {
        sum=0;
        for(i=0;i<M;i++)
        {
            sum=sum+score[i][j];
        }
        ave[j]=(double)sum/M;
    }
}

 

技术分享

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

#include<stdio.h>
#define N 6
#define M 6
int main()
{
    int i,j,a[M][N],sum=0,diagonalsum1=0,diagonalsum2=0;
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        {
            a[i][j]=j+1;
            printf(" %d",a[i][j]);
        }
        printf("\n");
    }
    for(i=0;i<M;i++)
    {
        sum=0;
        for(j=0;j<N;j++)
        {
            sum=sum+a[i][j];
        }
        printf("每%d行的和为%d\n",i+1,sum);
    }
    for(j=0;j<N;j++)
    {
        sum=0;
        for(i=0;i<M;i++)
        {
            sum=sum+a[i][j];
        }
        printf("每%d列的和为%d\n",j+1,sum);
    }
    diagonalsum1=0;
    for(i=0;i<M;i++)
    for(j=0;j<N;j++)
    if(i+j==M)
    {
        diagonalsum1=diagonalsum1+a[i][j];
    }
    printf("对角线一的和为%d",diagonalsum1);
    diagonalsum2=0;
    for(i=0;i<M;i++)
    for(j=0;j<N;j++)
    if(i==j)
    {
        diagonalsum2=diagonalsum2+a[i][j];
    }
    printf("对角线二的和为%d",diagonalsum2);
    return 0;
}

技术分享

二:实验总结

1:再给sum赋初值时没有付对,没有弄清怎样来进行for循环;

2:二维数组要注意是两层循环;

3:在用函数写程序没有弄不清主函数下面写那些输入的一些变量

还需要再加强一下怎样用函数来写程序

第十次作业