第10次作业

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

  

#include<stdio.h>
void scanfscore( int a[5][3] );
void ave(int a[5][3]);
int sum(int a[5][3],int i);
int main()
{
    int a[5][3],i,j,Sum;
    double average;
    scanfscore(a);
	printf("输入分数\n");
    printf("\t数学\t语文\t英语\t总分\t平均分\n");
    for(i=0;i<5;i++)
    {
        printf("学生%d\t",i+1);
        for(j=0;j<3;j++)
        {
            printf("%d\t",a[i][j]);
        }
        Sum=sum(a,i);
        average=(double)Sum/3;
        printf("%d\t%.2f\n",Sum,average);
    }

    printf("平均分\t");
    ave(a);
    return 0;
}
void scanfscore( int a[5][3])
{
    int i,j;
    for(i=0;i<5;i++)
    for(j=0;j<3;j++)
    {
        scanf("%d",&a[i][j]);
    }
}
void ave(int a[][3])
{
    int i,j,sum;
    double ave;
    for(j=0;j<3;j++)
    {
        for(i=0,sum=0;i<5;i++)
        {
            sum+=a[i][j];
        }
        ave=(double)sum/5;
        printf("%.2f\t",ave);
    }
}
int sum(int a[][3],int i)
{
    int j,Sum;
        for(j=0,Sum=0;j<3;j++)
        {
            Sum+=a[i][j];
        }
    return Sum;
}

  

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

  

# include<stdio.h>
# define N 5
int main()
{
	int i,j,n=1,sum,a[N][N]={0};
	for(i=0;i<N;i++)
	for(j=0;j<N;j++)
	{
		a[i][j]=n;
		n++;
		if(n%5==0)
		{
	       printf(" %3d",a[i][j]);
		}
	}
	printf("\n");
	for(j=0;j<N;j++)
	{
		sum=0;
		for(i=0;i<N;i++)
		{
			sum=sum+a[j][i];
		}
		printf("第%d行的和为%d\n",j+1,sum);
	}
	for(i=0;i<N;i++)
	{
		sum=0;
		for(j=0;j<N;j++)
		{
			sum=sum+a[j][i];
		}
		printf("第%d列的和为%d\n",i+1,sum);
	}
	sum=0;
	for(i=0;i<N;i++)
	{
		sum+=a[i][i];
	}
	printf("主对角线之和为%d\n",sum);
	sum=0;
	for(i=0;i<N;i++)
	{
		sum+=a[4-i][i];
	}
	printf("副对角线之和为%d\n",sum);
	return 0;
}

  

  

二.实验总结
1.数据类型 数组名[常量表达式][常量表达式]
2.二维数组:按行存放,线性存储 
3.在声明函数的二维数组形参时,可以省略第一维的长度,但不能省略数组第二维的长度
4.注意赋初值
5对角线分主对角线,副对角线

  

 

  

posted @ 2016-12-07 13:08  计科王翊宁  阅读(142)  评论(2编辑  收藏  举报