c语言,学校作业,写了一半发现写不下去了
题目描述某班级期末考试有三门课程;语文、数学和英语。班级共有n名学生。
请统计并输出各科分数分档和总平均分档表。
分档以10分为一档,0分不统计。及(0-10]、(10-20]、...、(90-100]共十档。
输入
首先是班级人数n(n<100)
然后n行,每行3个整数,表示语文、数学和英语的成绩。(没有0分)
输出
依次输出语文、数学、英语和总平均分档表。
每行一个分档表,依次是(0-10]、(10-20]、...、(90-100]的人数
样例输入
6
89 73 32
30 35 89
18 69 57
55 44 82
2 16 75
29 31 23
样例输出
1,1,2,0,0,1,0,0,1,0
0,1,0,2,1,0,1,1,0,0
0,0,1,1,0,1,0,1,2,0
0,0,1,1,1,1,2,0,0,0
#include <stdio.h>
int main()
{
int n,i,j,sum1,sum2,sum3,sum4,jun1,jun2,jun3,jun4,yu,shu,ying;
sum4=0;
sun1=0;
sum2=0;
sum3=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d%d%d\n",&yu,&shu,&ying);
sum1=sum1+yu;
sum2=sum2+shu;
sum3=sum3+ying;
sum4=sum1+sum2+sum3+sum4;
jun4=sum/3;
for(j=0;j<i;j++)
{
我就写到这 本帖最后由 jackz007 于 2020-11-21 13:08 编辑
你的样例没看懂,一共 3 们功课,应该输出 3 行分档表啊,为什么是 4 行,多出来的一行是什么?
#include <stdio.h>
int main(void)
{
int d = {0} , e = {0} , i , j , m ;
scanf("%d" , & m) ;
for(i = 0 ; i < m ; i ++) scanf("%d%d%d" , & d , & d , & d) ;
for(i = 0 ; i < m ; i ++) for(j = 0 ; j < 3; j ++) if(d) e[(d - 1) / 10] ++ ;
for(i = 0 ; i < 3 ; i ++) {
printf("%d" , e) ;
for(j = 1 ; j < 10 ; j ++) printf(",%d" , e) ;
printf("\n") ;
}
}
编译、运行实况
D:\00.Excise\C>g++ -o x x.c
D:\00.Excise\C>x
6
89 73 32
30 35 89
18 69 57
55 44 82
2 16 75
29 31 23
1,1,2,0,0,1,0,0,1,0
0,1,0,2,1,0,1,1,0,0
0,0,1,1,0,1,0,1,2,0
D:\00.Excise\C>
样例输出的第 4 行究竟是什么? jackz007 发表于 2020-11-21 12:49
你的样例没看懂,一共 3 们功课,应该输出 3 行分档表啊,为什么是 4 行,多出来的一行是什么?
...
第四行是三门课平均分的分档 本帖最后由 jackz007 于 2020-11-22 13:57 编辑
邪念波 发表于 2020-11-22 10:02
第四行是三门课平均分的分档
与样例一模一样的答案来了
#include <stdio.h>
int main(void)
{
int d = {0} , e = {0} , i , j , k , m, s ;
scanf("%d" , & m) ;
for(i = 0 ; i < m ; i ++) scanf("%d%d%d" , & d , & d , & d) ;
for(i = 0 ; i < m ; i ++) for(j = 0 ; j < 3; j ++) if(d) e[(d - 1) / 10] ++ ;
for(i = 0 ; i < m ; i ++) {
for(j = k = s = 0 ; j < 3 ; j ++) {
if(d) {
s += d ;
k ++ ;
}
}
e ++ ;
}
for(i = 0 ; i < 4 ; i ++) {
printf("%d" , e) ;
for(j = 1 ; j < 10 ; j ++) printf(",%d" , e) ;
printf("\n") ;
}
}
编译、运行实况:
D:\0002.Exercise\C>g++ -o x x.c
D:\0002.Exercise\C>x
6
89 73 32
30 35 89
18 69 57
55 44 82
2 16 75
29 31 23
1,1,2,0,0,1,0,0,1,0
0,1,0,2,1,0,1,1,0,0
0,0,1,1,0,1,0,1,2,0
0,0,1,1,1,1,2,0,0,0
D:\0002.Exercise\C>
但是,这个代码统计的结果是存在问题的,比如,平均 90 分本应该被纳入 (80 , 90] 分数段,却被错误地纳入 (90 , 100] 分数段;如果平均分恰好是 100 分的话将无法纳入统计,因为下标是 10,数组下标已经越界了。本例中,有一个平均成绩 60 分,按规则,显然应该被归入 (50 , 60] 分数段,而在样例中,却被错误地归入 (60 , 70] 分数段,从而导致样例平均分的统计结果出现错误。
所以,真正正确的代码和样例应该是下面这个样子:
#include <stdio.h>
int main(void)
{
int d = {0} , e = {0} , i , j , k , m, s ;
scanf("%d" , & m) ;
for(i = 0 ; i < m ; i ++) scanf("%d%d%d" , & d , & d , & d) ;
for(i = 0 ; i < m ; i ++) for(j = 0 ; j < 3; j ++) if(d) e[(d - 1) / 10] ++ ;
for(i = 0 ; i < m ; i ++) {
for(j = k = s = 0 ; j < 3 ; j ++) {
if(d) {
s += d ;
k ++ ;
}
}
e[(s / k - 1) / 10] ++ ; // 这一行不同
}
for(i = 0 ; i < 4 ; i ++) {
printf("%d" , e) ;
for(j = 1 ; j < 10 ; j ++) printf(",%d" , e) ;
printf("\n") ;
}
}
编译、运行实况
D:\0002.Exercise\C>g++ -o x x.c
D:\0002.Exercise\C>x
6
89 73 32
30 35 89
18 69 57
55 44 82
2 16 75
29 31 23
1,1,2,0,0,1,0,0,1,0
0,1,0,2,1,0,1,1,0,0
0,0,1,1,0,1,0,1,2,0
0,0,1,1,1,2,1,0,0,0
D:\0002.Exercise\C>
页:
[1]