2012-12-10

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

#include <stdio.h>
#define M 5   //五名学生
#define N 3   //三门课程
void sumscore(int score[M][N],int sum[]);    //每个学生成绩和
void average(int score[M][N],double ave[]);     //每个人平均分
void average1(int score[M][N],double ave[]);   //各科成绩求平均 
int main()
{
    int score[M][N]={{90,88,98},{88,77,99},{79,89,97},{66,55,78},{97,66,79}},i,j,sum[M]={0};
    double ave[M]={0},ave1[N]={0};
    sumscore(score,sum);
    average(score,ave);
    average1(score,ave1);
    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(j=0;j<N;j++)
    {
        printf("\t%.2f",ave1[j]);
    }
    printf("\n");
    return 0;
}

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;
    }
}
void average1(int score[M][N],double ave[M])    //各科成绩求平均 
{
    int j,i,sum2;
    for(i=0;i<N;i++)
    {    
        sum2=0;
        for(j=0;j<M;j++)
        {
            sum2+=score[i][j];
        }
        ave[i]=(double)sum2/M;
    }
}

 

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

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

#include <stdio.h>
#define N 100
int main()
{
    int arr[N][M],i,j,n,sum1=0,sum2=0,sum=0,sum3=0;
    printf("请输入行列\n");
    scanf("%d%d",&n,&n);
    for(i=0;i<n;i++)
    {
        printf("请输入第%d行数字\n",i+1);
        for(j=0;j<n;j++)
        {
            scanf("%d",&arr[i][j]);
        }
    }
    for(i=0;i<n;i++)
    {
        sum=0;
        for(j=0;j<n;j++)
        {
            sum+=arr[i][j];
        }
        printf("第%d行的和为%d\n",i+1,sum);
    }
    for(j=0;j<n;j++)
    {
        sum3=0;
        for(i=0;i<n;i++)
        {
            sum3+=arr[i][j];
        }
        printf("第%d列的和为%d\n",j+1,sum3);
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;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.    二维数组虽然称作二维,但在计算机中存储时是一维的

posted @ 2016-12-10 17:06  333路亚  阅读(198)  评论(6编辑  收藏  举报