第十次作业
一、实验内容
1.有5名学生,每名学生有语文、数学和外语3门课的考试成绩。编程统计各学生的总分和平均分以及所有学生各科的平均分。要求成绩在程序中初始化,结果以表格的形式输出。
#include<stdio.h> #define N 5 #define M 5 int main() { int sum=0,i,j; double average1[5]={0},average2[5]={0},score[N][M]={{87,78,97},{86,72,79},{68,96,85},{74,83,95},{86,75,69}}; printf("\t语文\t数学\t英语\t总分\t平均分\n"); for(i=0;i<5;i++) { sum=0; for(j=0;j<5;j++) { sum=sum+score[i][j]; } score[i][3]=sum; } for(i=0;i<3;i++) { sum=0; for(j=0;j<5;j++) { sum=sum+score[i][j]; } average1[i]=(double)sum/5; sum=score[i][3]; } printf("\n"); for(i=0;i<5;i++) { sum=0; for(j=0;j<3;j++) { sum=sum+score[i][j]; } average2[i]=(double)sum/3; sum=score[i][3]; } for(i=0;i<5;i++) { printf("\n"); for(j=0;j<4;j++) { printf("\t%.2f",score[i][j]); } printf("%d",score[i][3]); printf("\t%.2f",average2[i]); } printf("\n"); for(i=0;i<3;i++) { printf("\t%.2f",average2[i]); } return 0; }
2.求任意方阵每行、每列、两对角线上元素之和。
#include<stdio.h> #define N 4 #define M 4 void readNum(int num[N][M]); void sumHorizontal(int num[N][M]); void sumStand(int num[N][M]); void sumXie1(int num[N][M]); void sumXie2(int num[N][M]); int main() { int i,j,num[N][M]; printf("请输入数组数据:"); for(i=0;i<N;i++) { for(j=0;j<M;j++) { scanf("%d",&num[i][j]); } } for(i=0;i<N;i++) { for(j=0;j<M;j++) { printf("%d",num[i][j]); printf("\n"); } } readNum(num); sumHorizontal(num); sumStand(num); sumXie1(num); printf("\t"); sumXie2(num); return 0; } void readNum(int num[N][M]) { int i,j; for(i=0;i<N;i++) { for(j=0;j<M;j++) { printf("%2d",num[i][j]); } printf("\n"); } } void sumHorizontal(int num[N][M]) { int i,j,sum; for(i=0;i<N;i++) { sum=0; for(j=0;j<M;j++) { sum+=num[i][j]; } printf("第%d行元素之和为%d\n",i+1,sum); } } void sumStand(int num[N][M]) { int i,j,sum; for(j=0;j<M;j++) { sum=0; for(i=0;i<N;i++) { sum+=num[i][j]; } printf("第%d列元素之和为%d\n",j+1,sum); } } void sumXie1(int num[N][M]) { int i,j,sum; sum=0; for(i=0;i<N;i++) { for(j=0;j<M;j++) { if(i==j) { sum+=num[i][j]; } } } printf("左上到右下的对角线的和为%d",sum); } void sumXie2(int num[N][M]) { int i,j,sum; sum=0; for(i=0;i<N;i++) { for(j=0;j<M;j++) { if(i==M-1) { sum+=num[i][j]; } } } printf("右上到左下的对角线的和为%d",sum); }
二、实验总结
1、为了程序的通用性,可以使用#define预处理宏定义命令;
2、第一个程序本来使用的五行三列的二维数组,但是就要写两个并列的小循环,为了程序的简洁改用五行五列;
3、注意数组不要越界;
4、变量赋初值问题;
5、for循环时各个表达式之间用分号隔开。