首页 > 代码库 > 第十次作业。
第十次作业。
1.有5名学生,每名学生有语文、数学和外语3门课的考试成绩。编程统计各学生的总分和平均分以及所有学生各科的平均分。要求成绩在程序中初始化,结果以表格的形式输出。
#include<stdio.h> #define N 5 #define M 3 int Sum(double a[][5],int m,int n); double Average(double a[][5],int m,int n); int main() { double score[N][M+2]={{90,69,78},{70,80,90},{90,90,90},{88,80,70},{66,77,88}}; int i,j; double average[M]={0}; for(i=0;i<N;i++) { score[i][3]=Sum(score,i,-1); score[i][4]=Average(score,i,-1); } for(i=0;i<M;i++) average[i]=Average(score,-1,i); printf("\t语文\t数学\t英语\t总分\t平均分\n"); for(i=0;i<N;i++) { for(j=0;j<M+2;j++) { printf("\t%.2lf",score[i][j]); } printf("\n"); } printf("平均分"); for(i=0;i<M;i++) { printf("\t%.2lf",average[i]); } return 0; } int Sum(double a[][5],int m,int n) { int i,sum=0; if(m==-1) for(i=0;i<N;i++) sum=sum+a[i][n]; else if(n==-1) for(i=0;i<M;i++) sum=sum+a[m][i]; return sum; } double Average(double a[][5],int m,int n) { double q; if(m==-1) q=(double)Sum(a,m,n)/N; else if(n==-1) q=(double)Sum(a,m,n)/M; return q; }
2.求任意方阵每行、每列、两对角线上元素之和。
#include<stdio.h> #define N 100 int main() { int i,j,n,nums[N][N]={0},a,sum[N][N]={0}; printf("请输入方阵宽度:\n"); scanf("%d",&n); a=1; for(i=0;i<n;i++) for(j=0;j<n;j++) nums[i][j]=a++; printf("方阵为:\n"); for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%4d",nums[i][j]); } printf("\n"); } a=0; for(i=0;i<n;i++) for(j=0;j<n;j++) sum[0][i]+=nums[i][j]; for(i=0;i<n;i++) for(j=0;j<n;j++) sum[1][i]+=nums[j][i]; for(i=0;i<n;i++) for(j=0;j<n;j++) { if(i==j) sum[2][0]+=nums[j][i]; if(i+j==n-1) sum[2][1]+=nums[j][i]; } for(i=0;i<n;i++) { printf("第%d行的元素和为%d\n",i+1,sum[0][i]); } for(i=0;i<n;i++) { printf("第%d列的元素和为%d\n",i+1,sum[1][i]); } printf("两条对角线上的元素和分别为%d,%d",sum[2][0],sum[2][1]); return 0; }
附加题
1.按照以下形式打印杨辉三角(要求输出10行)
杨辉三角形具有如下特点:(1)第一列和对角线上的元素都为1 (2)除第一列和对角线上的元素之外,其他元素的值均为前一行上的同列元素和前一列元素之和。
#include<stdio.h> #define N 10 int main() { int i,j,a[N][N]={0},q; 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(q=9-i;q>0;q--) { printf(" "); } for(j=0;j<=i;j++) { printf("%4d",a[i][j]); } printf("\n"); } return 0; }
2.猴子选大王
一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?
输入格式:输入在一行中给一个正整数N(≤1000)。
输出格式:在一行中输出当选猴王的编号。
输入样例:11
输出样例:7
此题可在pta网站注册提交测试。https://pta.patest.cn/pta/test/14/exam/4/question/808
#include<stdio.h> #define N 1001 int main() { int a[N]={0},i,n,j,m,index; printf("请输入一个正整数,范围不大于1000。\n"); scanf("%d",&n); while(n>1000||n<0) { printf("超出范围,请重新输入\n"); scanf("%d",&n); } i=1,j=1,m=n; while(1) { if(a[i]==-1) { i++; if(i>n) { i=1; } continue; } a[i]=j++; if(a[i]==3) { a[i]=-1; m--; if(m==1) break; j=1; } i++; if(i>n) { i=1; } } for(i=1;i<=n;i++) { if(a[i]!=-1) { index=i; break; } } printf("猴王是第%d号",index); return 0; }
实验总结:1.自定义函数里二维数组的形参,一定要定义列长度。
2.if判断里用x++,计算不满足条件,x++也会执行。
3.数组定义是最好初始化,不要越界。
4.并列判断是 if 和if ,不是if 、else if。
5.给二维数组赋值,需要循环嵌套,外循环控制行或列,内循环控制列或行。
6.将平均分放在存放成绩的数组里,需要将成绩的数组定义为double型,输出时不要忘记是%lf。
第十次作业。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。