一、实验内容
1.实验要求.
有5名学生,每名学生有语文、数学和外语3门课的考试成绩。编程统计各学生的总分和平均分以及所有学生各科的平均分。要求成绩在程序中初始化,结果以表格的形式输出。
代码
#include<stdio.h> #define M 5 #define N 3 void readscore(int score[M][N]); int sumforstud(int score[M][N],int sum[]); double aveforstud(int score[M][N],double ave[]); double aveforcourse(int score[M][N],double ave[]); void readscore(int score[M][N]) { int i,j; for(i=0;i<M;i++) { for(j=0;j<N;j++) { switch(j) { case 0: printf("请输入第%d位学生的数学成绩 ",i+1); scanf("%d",&score[i][j]); continue; case 1: printf("请输入第%d位学生的语文成绩 ",i+1); scanf("%d",&score[i][j]); continue; case 2: printf("请输入第%d位学生的英语成绩 ",i+1); scanf("%d",&score[i][j]); continue; } } } } int sumforstud(int score[M][N],int sum[]) { int i,j; for(i=0;i<M;i++) { sum[i]=0; for(j=0;j<N;j++) { sum[i]=sum[i]+score[i][j]; } } } //每个学生的平均分 double aveforstud(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=sum+score[i][j]; } ave[i]=(double)sum/N; } } //各科平均分 double aveforcourse(int score[M][N],double ave[]) { int i,j,sum; for(j=0;j<M;j++) { sum=0; for(i=0;i<N;i++) { sum+=score[i][j]; } ave[j]=(double)sum/N; } } int main() { int score[M][N]; double ave[M]; int sum[M]; int i,j; readscore(score); sumforstud(score,sum); aveforstud(score,ave); printf("数学 语文 英语 总分 平均分 "); for(i=0;i<M;i++) { for(j=0;j<N;j++) { printf(" %d ",score[i][j]); } printf("%d ",sum[i]); printf("%.2lf ",ave[i]); printf(" "); } aveforcourse(score,ave); for(j=0;j<N;j++) { printf(" %.2lf ",ave[j]); } printf(" "); return 0; }
程序运行结果截图
2.实验要求
求任意方阵每行、每列、两对角线上元素之和。
代码
#include<stdio.h> #define M 5 #define N 5 int main() { int i,j,sum1=0,sum2=0,sum3=0,sum4=0,k; int a[M][N]; for(i=0;i<M;i++) { for(j=0;j<N;j++) { a[i][j]=j+1; printf(" %d",a[i][j]); } printf(" "); } for(i=0;i<M;i++) { sum1=0; for(j=0;j<N;j++) { sum1+=a[i][j]; } printf("第%d行的和为%d ",i+1,sum1); } for(j=0;j<N;j++) { sum2=0; for(i=0;i<M;i++) { sum2+=a[i][j]; } printf("第%d列的和为%d ",j+1,sum2); } for(i=0;i<M;i++) { for(j=0;j<N;j++) { if(i==j) { sum3+=a[i][j]; } } } for(i=M-1;i>=0;i--) { for(j=0;j<N;j++) { if(i+j==M-1) { sum4+=a[i][j]; } } } printf("两对角线的和分别为%d,%d",sum3,sum4); return 0; }
程序运行结果截图
附加题
1.实验要求
.按照以下形式打印杨辉三角(要求输出10行)
杨辉三角形具有如下特点:(1)第一列和对角线上的元素都为1 (2)除第一列和对角线上的元素之外,其他元素的值均为前一行上的同列元素和前一列元素之和。
代码
#include<stdio.h> #define M 10 #define N 10 int main() { int i,j,m,a[M][N]; for(i=0;i<N;i++) { for(j=0;j<=i;j++) { if(j==0||j==i) { a[i][j]=1; } else { a[i][j]=a[i-1][j-1]+a[i-1][j]; a[i][i-j]=a[i][j]; } } } for(i=0;i<N;i++) { for(m=9-i;m>0;m--) { printf(" "); } for(j=0;j<=i;j++) { printf("%4d",a[i][j]); } printf(" "); } return 0; }
截图
2.实验要求
猴子选大王
一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?
输入格式:输入在一行中给一个正整数N(≤1000)。
输出格式:在一行中输出当选猴王的编号。
输入样例:11
输出样例:7
代码
截图
二、实验总结
1.double类型变量输出时是%lf
2.二维函数必需要两层循环
3.注意数组的越界问题