标题:跪求解决平均分输出错误问题!
只看楼主
润润编程
Rank: 1
来 自:广东省
等 级:新手上路
帖 子:20
专家分:0
注 册:2015-11-2
结帖率:85.71%
已结贴  问题点数:5 回复次数:2 
跪求解决平均分输出错误问题!
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
struct student //定义一个结构体类型student
{
int studentNo; //定义结构体类型成员studentNo
int score; //定义结构体类型成员score
};
typedef struct student Student;
void dayin(int z1);
void func2(Student*s);
int main(void)
{
int i = 0,k=0;//定义i,bujige(不及格),a6070(60至70分),a7080(70至80分),a8090(80至90分),a90(90分以上),k,number,j,以上初始值全为0,定义一个长度为30的数组bjg[](不及格数组)。
//定义pjf(平均分),zcj(总成绩),初始值为0


Student s[30];//定义长度为30的结构体数组 Student s[]
printf("从键盘输入一个班(全班最多不超过30人)\n");
for (i = 0, k = 0; i < 30; i++)//for循环
{
printf("请输入第%d个学生编号!\n", i + 1);//输出语句
scanf_s("%d", &(s[i].studentNo));//输入第i+1个学生编号,存放于结构体数组s[i].studentNo中
printf("请输入第%d个学生成绩\n", i + 1);//输出语句
scanf_s("%d", &(s[i].score));//输入第i+1个学生成绩,存放于结构体数组s[i].score中
if ((s[i].score) < 0)//当(s[i].score) < 0时
{
break;//跳出当前循环
}


}
func2(s);
system("pause");
return 0;
}
void func2(Student*s)
{
int i = 0, bujige = 0, a6070 = 0, a7080 = 0, a8090 = 0, a90 = 0, bjg[30], k = 0, number = 0, j = 0;//定义i,bujige(不及格),a6070(60至70分),a7080(70至80分),a8090(80至90分),a90(90分以上),k,number,j,以上初始值全为0,定义一个长度为30的数组bjg[](不及格数组)。
float pjf = 0, zcj = 0;//定义pjf(平均分),zcj(总成绩),初始值为0
for (int i = 0, k = 0; i < 30; i++)//for循环
{


if ((s[i].score) < 60 && (s[i].score) >= 0)//当(s[i].score) < 60 && (s[i].score)时
{
bujige++;//不及格人数自加一
bjg[k] = (s[i].studentNo);//把不及格学生编号赋值给big[k];
k++;//


}
else if ((s[i].score) >= 60 && (s[i].score) < 70) //当(s[i].score) >= 60 且(s[i].score) < 70时
{
a6070++;//60至70分人数自加一
}
else if ((s[i].score) >= 70 && (s[i].score) < 80)//当(s[i].score) >= 70 且(s[i].score)< 80时
{
a7080++;//60至70分的人数自加一
}
else if ((s[i].score) >= 80 && (s[i].score) < 90)//当(s[i].score) >= 80 且 (s[i].score)< 90 时
{
a8090++;//80至90分的人数自加一
}
else if ((s[i].score) >= 90 && (s[i].score) <= 100)//当(s[i].score) >= 90 且 (s[i].score) <= 100时
{
a90++;//90分以上的人数自加一
}
number++;//考试人数自加一
}
for (j = 0; j < number; j++)//for循环
{
zcj = zcj + (s[j].score);//求此科目考试人数的总成绩
pjf = zcj / number;//求平均分
}
int cgpj[30], c;//定义一个长度为30的cgpj[]数组(超过平均分),定义c
for (i = 0, c = 0; i < number; i++)//for循环,c的初始值为0
{
if ((s[i].score) >= pjf)//当(s[i].score) >= pjf时
{
cgpj[c] = (s[i].studentNo);//把(s[i].studentNo)的值赋值给cgpj[c]
c++;
}
}


printf("-------------------------------------------------------------\n");
printf("平均分为%.2f\n超过平均分有%d人\n不及格有%d人", pjf, c, bujige);//输出语句
printf("\n");//换行
printf("-------------------------------------------------------------\n");
printf("不及格学生编号:\n");//输出语句
for (i = 0; i < k; i++)//for循环
{
printf("%-5d", bjg[i]);//输出不及格的学生的编号


}
printf("\n");//换行
printf("-------------------------------------------------------------\n");
printf("超过平均分学生编号为:\n");//输出语句


for (i = 0; i < c; i++)//for循环
{
printf("%-5d", cgpj[i]);//输出超过平均分的编号


}
printf("\n");//换行
printf("-------------------------------------------------------------\n");
printf("%-12s%-12s%-12s\n", "分数段", "人数", "图形");//输出语句


printf("%6s", "<60");//输出字符窜
printf("%6d", bujige);//输出不及格的人数
printf("(%-5.1f%-5s)", (float)bujige / number * 100, "%");//输出不及格人数的百分比
dayin(bujige);//调用有参函数func
printf("%6s", "60-69");//输出字符串
printf("%6d", a6070);//输出60至70分的人数
printf("(%-5.1f%-5s)", (float)a6070 / number * 100, "%");//输出60至70分的百分比
dayin(a6070);//调用有参函数func
printf("%6s", "70-79");//输出字符串
printf("%6d", a7080);//输出70至80分的人数
printf("(%-5.1f%-5s)", (float)a7080 / number * 100, "%");//输出70到80分的百分比
dayin(a7080);//调用有参函数func
printf("%6s", "80-89");//输出字符窜
printf("%6d", a8090);//输出80至90分的人数
printf("(%-5.1f%-5s)", (float)a8090 / number * 100, "%");//输出80至90分的百分比
dayin(a8090);//调用有参函数func
printf("%6s", ">90");//输出字符串
printf("%6d", a90);//输出90分以上的人数
printf("(%-5.1f%-5s)", (float)a90 / number * 100, "%");//输出90分以上的百分比
dayin(a90);//调用有参函数func
printf("-------------------------------------------------------------\n");
}
void dayin(int z1) //有参函数,用来制作直方图
{
int i;
for (i = 0; i < z1; i++)//for循环
{
printf("*");//打印星号


}
printf("\n");//换行
}
搜索更多相关主题的帖子: 结构体 number include 
2015-12-10 22:52
文心边城
Rank: 2
等 级:论坛游民
威 望:2
帖 子:98
专家分:67
注 册:2005-12-13
得分:5 
因为你输入第6个学生的成绩s[5].score= -1 < 0  所以就 break;//跳出当前循环
而你代码中设置的全班人数是30,你只输了6个就终止了,但是算成绩还是按照你现有的6个学生的成绩加上其它24个学生的成绩,这24个学生的成绩由于没有输入是垃圾值,
所以你就得到一个垃圾的平均数了

会写c c++ java php JS AS vb python
2015-12-11 01:49
润润编程
Rank: 1
来 自:广东省
等 级:新手上路
帖 子:20
专家分:0
注 册:2015-11-2
得分:0 
回复 2楼 文心边城
谢谢!

编程破防线
2015-12-11 22:13



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-460101-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024675 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved