第十次作业

一、实验内容      

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

#include<stdio.h>
int sum(double a[5][5],int m);
double average(double a[5][5],int m);
double average1(double a[5][5],int m);
int main()
{
	int i,j,n;
	double a[5][5]={{68,69,61},{78,75,98},{60,79,97}};
	for(i=0;i<=5;i++)
	{
		a[i][3]=sum(a,i);
		a[i][4]=average(a,i);
	}
	printf("\t语文\t数学\t英语\t总分\t平均分\n");
	for(i=0;i<=5;i++)
	{
		for(j=0;j<5;j++)
		{
			printf("\t%.2lf",a[i][j]);
		}
		printf("\n");
	}
	printf("平均分\n");
	for(i=0;i<3;i++)
	{
		printf("\t%.2lf",average1(a,i));
	}
	return 0;
}
int sum(double a[5][5],int m)
{
	int i,sum=0;
	for(i=0;i<3;i++)
	{
		sum+=a[m][i];
	}
	return sum;
}
double average(double a[5][5],int m)
{
	return sum(a,m)/3.0;
}
double average1(double a[5][5],int m)
{
	int n,sum=0;
    for(n=0;n<5;n++)
	{
		sum+=a[n][m];
	}
	return sum/5.0;
}

  

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

#include<stdio.h>
#include<stdlib.h>
#define N 10
int main()
{
    int i,j,m=0,n,sum;
	double a[N][N];
	printf("输入方阵行数:\n");
	scanf("%d",&n);
	for(i=0;i<n;i++)//每行求和
	{
		for(j=0;j<n;j++)
		{
			m++;
			a[i][j]=m;
			printf("%3d",m);
		}
		printf("\n");
	}
	for(i=0;i<n;i++)
	{
		sum=0;
		for(j=0;j<n;j++)
		{
			sum+=a[i][j];
		}
		printf("第%d行元素的和为%d\n",i+1,sum);
	}
	for(i=0;i<n;i++)//每列求和
	{
		sum=0;
		for(j=0;j<n;j++)
		{
			sum+=a[j][i];
		}
		printf("第%d列的元素合为%d:\n",i+1,sum);
	}
	sum=0;
	for(i=0;i<n;i++)
	{
		sum+=a[i][j];
		j--;
	}
	printf("对角线上的元素和为%d\n",sum);
	return 0;
}

  

   二、实验总结

1.二维数组声明函数形参,可以省略第一维数组的长度,不能省略第二维数组的长度。

2.表格的输出使用\t,表示水平制表位。

3.向函数传递数组,数组作为函数的参数,不能在[]中给出数组的大小,必须用另一个参数来传入数组大小。

4.第一道题思路输入五位同学的三科成绩,分别应用循环,循环嵌套对三科成绩汇总,每位同学三科求平均,每科五位同学求平均,分别输出,优化代码;第二道题方阵问题,首先二维数组表示的方阵长宽相等,输入方阵行数,那么整个方阵就已得出,输入数字分别每行求和,每列求和,对角线求和,输出,注意循环语句,大括号的使用。

posted @ 2016-12-10 14:50  小北ML  阅读(242)  评论(3编辑  收藏  举报