首页 > 代码库 > 2012-12-10

2012-12-10

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

#include <stdio.h>
#define M 5   //五名学生
#define N 3   //三门课程
void readscore(int score[M][N]);     //输入函数
void sumscore(int score[M][N],int sum[]);    //每个学生成绩和
void average(int score[M][N],int ave[]);     //每个人平均分
int main()
{
    int score[M][N]={0},i,j,sum[M]={0},sum2=0;
    double ave[M]={0},ave1[N]={0};
    readscore(score);
    sumscore(score,sum);
    average(score,ave);
    printf("\n  \t语文  \t数学  \t英语  \t总分  \t平均分\n");
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        {
            printf("\t%2d",score[i][j]);
        }
        printf("\t%2d",sum[i]);
        printf("\t%.2f",ave[i]);
        printf("\n");
    }
    printf("\n平均分");                //各科成绩平均分
    for(i=0;i<N;i++)
    {
        sum2=0;
        for(j=0;j<M;j++)
        {
            sum2+=score[i][j];
        }
        ave1[i]=(double)sum2/M;
        printf("\t%.2f",ave[i]);    
    }
    printf("\n");
    return 0;
}
void readscore(int score[M][N])     //输入函数
{
    int i,j;
    printf("请输入学生成绩\n");
    for(i=0;i<M;i++)
    {
        printf("请输入第%d个学生成绩\n",i+1);
        for(j=0;j<N;j++)
        {
            scanf("%d",&score[i][j]);
        }
    }
}
void sumscore(int score[M][N],int sum[])    //每个学生成绩和
{
    int i,j,sum1;
    for(i=0;i<M;i++)
    {
        sum1=0;
        for(j=0;j<N;j++)
        {
            sum1+=score[i][j];
        }
        sum[i]=sum1;
    }
}
void average(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+=score[i][j];
        }
        ave[i]=(double)sum/N;
    }
}

技术分享

总结:注意变量名和地址名不能相同     注意输出格式的控制    行列别搞混

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

#include <stdio.h>
#define N 100
#define M 100
int main()
{
    int arr[N][M],i,j,n,m,sum1=0,sum2=0;
    printf("请输入行列\n");
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++)
    {
        printf("请输入第%d行数字\n",i+1);
        for(j=0;j<m;j++)
        {
            scanf("%d",&arr[i][j]);
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            if(i==j)
            {
                sum1+=arr[i][j];
            }
            if(i+j==n-1)
            {
                sum2+=arr[i][j];
            }
        }
    }
    printf("对角线之和分别为%d   %d\n",sum1,sum2);
    return 0;
}

技术分享

总结:找规律对角线的坐标i和j相等   或者  相加=n-1,   不要忘记给sum赋初值

知识点总结:

1.    二维数组      数组名【下标】【下标】,注意:下标值应在已定义的数组大小的范围内

2.   可以省略数组第一维的长度,不能省略第二维的长度

3.   在一维数组的输入与输出时,用一层循环来实现,在二维数组的输入与输出时,用两层循环来实现,即用外层循环来控制行数,用内层循环来控制列数

4.    二维数组虽然称作二维,但在计算机中存储时是一维的

2012-12-10