第十次作业。
Posted T.X
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十次作业。相关的知识,希望对你有一定的参考价值。
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]; } } } 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; scanf("%d",&n); i=1,j=1,m=n; do { for(i=1;i<=n;i++) { if(a[i]!=-1) { j++; if((j-1)%3==0) { a[i]=-1; m--; } } } }while(m!=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。
7.减少判断和赋值,可以节省运行时间。
以上是关于第十次作业。的主要内容,如果未能解决你的问题,请参考以下文章