第十次作业
1.有5名学生,每名学生有语文、数学和外语3门课的考试成绩。编程统计各学生的总分和平均分以及所有学生各科的平均分。要求成绩在程序中初始化,结果以表格的形式输出。
# include <stdio.h> # include <stdlib.h> # define M 6 # define N 6 void average(float a[M][N]); int main() { int i,j,y,sum; float b[M][N]={{1,98,95,65},{2,94,67,50},{3,84,68,90,},{4,68,84,90},{5,97,68,89}}; printf("\tChinese\tmonth\tEnglish\tsum\tave\n"); average(b); for(i=0;i<6;i++) { for(j=0;j<6;j++) { if(j==5) { printf("%.2f\t",b[i][j]); } else if(i==5) { printf("ave\t"); for(y=1;y<=3;y++) { printf("%.2f\t",b[i][y]); } exit(0); } else { printf("%.0f\t",b[i][j]); } } printf("\n"); } return 0; } void average(float a[M][N]) { int i,j,sum; for(j=1;j<4;j++) { sum=0; for(i=0;i<5;i++) { sum+=a[i][j]; } a[5][j]=sum/5.0; } for(i=0;i<5;i++) { sum=0; for(j=1;j<4;j++) { sum+=a[i][j]; } a[i][4]=sum; a[i][5]=sum/3.0; } }
2.求任意方阵每行、每列、两对角线上元素之和。
# include <stdio.h> int main() { int m,i,j; printf("请输入方阵的行数\n"); scanf("%d",&m); double a[m][m],x,c[m],d[m],diagonal1,diagonal2; x=1; for(i=0;i<m;i++) { c[i]=0; d[i]=0; } for(i=0;i<m;i++) { for(j=0;j<m;j++) { a[i][j]=x++; } } for(i=0;i<m;i++) { for(j=0;j<m;j++) { c[i]+=a[i][j]; d[j]+=a[i][j]; if(i==j) { diagonal1+=a[i][j]; } if(i+j==m-1) { diagonal2+=a[i][j]; } } } for(i=0;i<m;i++) { printf("第%d行的和是%.0lf\n",i+1,c[i]); printf("第%d列的和是%.0lf\n",i+1,d[i]); } printf("两对角线的和分别为%.0lf,%.0lf",diagonal1,diagonal2); return 0; }
1.按照以下形式打印杨辉三角(要求输出10行)
杨辉三角形具有如下特点:(1)第一列和对角线上的元素都为1 (2)除第一列和对角线上的元素之外,其他元素的值均为前一行上的同列元素和前一列元素之和。
# include <stdio.h> int main() { int i,j,x,y,z,b,c,a[10][12]={0}; a[0][5]=1; y=1; z=4; for(i=0;i<10;i++) { for(j=1;j<11-i;j++) { if(j<11-i) { printf(" "); } } c=z; for(x=0;x<y;x++) { printf("%4d",a[i][c+1]); c++; } printf("\n"); y++; b=0; if(y%2==0) { for(x=0;x<y+1;x++) { a[i+1][z+b]=a[i][z-1+b]+a[i][z+b]; b++; } } else { z--; for(x=0;x<y+1;x++) { a[i+1][z+b]=a[i][z+b]+a[i][z+1+b]; b++; } } } return 0; }
2.猴子选大王
一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?
输入格式:输入在一行中给一个正整数N(≤1000)。
输出格式:在一行中输出当选猴王的编号。
# include <stdio.h> # define M 1000 int main() { int i,N,n,x,y,z,m,a[M]={0}; printf("请输入猴子的个数N(N<=1000):\n"); scanf("%d",&N); m=1; for(i=0;i<N;i++) { a[i]=m++; } n=0; y=1; do { for(i=0;i<N;i++) { if(a[i]!=-1) { if(y%3==0) { a[i]=-1; n++; } z=i; y++; } } }while(N-n!=0); printf("%d",z+1); return 0; }
实验总结:
1.在程序中使用数组时不能越界(超出数组的定义长度);
2.二维数组在输出时并不能自动换行,需要手动添加换行;
3.输出表格型数据适合用二维数组;
4.变量分为实参和形参,实参可以任意调用,但形参不行。