早教吧作业答案频道 -->其他-->
函数编程练习学生成绩统计(一维数组)从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:(1)统计不及格人数并打印不
题目详情
函数编程练习
学生成绩统计(一维数组)
从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:
(1)统计不及格人数并打印不及格学生名单;
(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单;
(3)以直方图方式统计各分数段的学生人数及所占的百分比。形式如下:
分数段 学生人数 图形
<60 3(10%) ***
60-69 8(…) ********
70-79 7(…) *******
80-89 8(…) ********
>=90 4(…) ****
会的帮一下,记得用函数!
谢谢,不过不用结构更好
学生成绩统计(一维数组)
从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:
(1)统计不及格人数并打印不及格学生名单;
(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单;
(3)以直方图方式统计各分数段的学生人数及所占的百分比。形式如下:
分数段 学生人数 图形
<60 3(10%) ***
60-69 8(…) ********
70-79 7(…) *******
80-89 8(…) ********
>=90 4(…) ****
会的帮一下,记得用函数!
谢谢,不过不用结构更好
▼优质解答
答案和解析
这回改了一下,把结构去掉了。
#include
#include
#define NUM 30
char student_name[NUM][10];
int student_flag[NUM];
int student_grade[NUM];
int totle=0;
void UnderLine();/*统计不及格人数并打印不及格学生名单*/
void UpLine();/*统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单*/
void Figure();/*以直方图方式统计各分数段的学生人数及所占的百分比*/
int main()
{
int i=0;
int choice;
printf("输入学生姓名和成绩(中间用空格隔开):\n");
for(i=0;i {
scanf("%s",student_name[i]);
scanf("%d",&student_grade[i]);
if(student_grade[i]==-1)
break;
}
totle=i;
printf("选择功能:\n【0】退出\n【1】统计不及格人数并打印不及格学生名单\n");
printf("【2】统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单\n");
printf("【3】以直方图方式统计各分数段的学生人数及所占的百分比\n");
while(1)
{
scanf("%d",&choice);
switch(choice)
{
case 0:
exit(0);
break;
case 1:
UnderLine();
printf("请选择:");
break;
case 2:
UpLine();
printf("请选择:");
break;
case 3:
Figure();
printf("请选择:");
break;
}
}
return 0;
}
void UnderLine()
{
int i,cnt=0;
for(i=0;i {
if(student_grade[i]<60)
{
cnt++;
student_flag[i]=1;
}
}
printf("不及格人数:\t%d\n【名单及分数】\n",cnt);
for(i=0;i {
if(student_flag[i]==1)
printf("%s\t%d\n",student_name[i],student_grade[i]);
}
}
void UpLine()
{
int i,cnt=0;
double avg=0;
for(i=0;i avg+=student_grade[i];
avg/=totle;
printf("平均分:\t%.2f\n",avg);
for(i=0;i {
if(student_grade[i]>=avg){
student_flag[i]=2;
cnt++;
}
}
printf("在全班平均分及平均分之上的学生人数:\t%d\n【名单及分数】\n",cnt);
for(i=0;i {
if(student_flag[i]==2)
printf("%s\t%d\n",student_name[i],student_grade[i]);
}
}
void Figure()
{
int cnt1=0,cnt2=0,cnt3=0,cnt4=0,cnt5=0;
int i;
for(i=0;i {
if(student_grade[i]<60)
{
student_flag[i]=1;
cnt1++;
}
else if(student_grade[i]>=60&&student_grade[i]<70)
{
student_flag[i]=2;
cnt2++;
}
else if(student_grade[i]>=70&&student_grade[i]<80)
{
student_flag[i]=3;
cnt3++;
}
else if(student_grade[i]>=80&&student_grade[i]<90)
{
student_flag[i]=4;
cnt4++;
}
else if(student_grade[i]>=90)
{
student_flag[i]=5;
cnt5++;
}
}
printf("分数段\t学生人数\t图形\n");
printf("<60\t%d(%.2f%%)\t",cnt1,(double)100*cnt1/totle);
for(i=0;i printf("\n");
printf("60-69\t%d(%.2f%%)\t",cnt2,(double)100*cnt2/totle);
for(i=0;i printf("\n");
printf("70-79\t%d(%.2f%%)\t",cnt3,(double)100*cnt3/totle);
for(i=0;i printf("\n");
printf("80-89\t%d(%.2f%%)\t",cnt4,(double)100*cnt4/totle);
for(i=0;i printf("\n");
printf(">=90\t%d(%.2f%%)\t",cnt5,(double)100*cnt5/totle);
for(i=0;i printf("\n");
}
#include
#include
#define NUM 30
char student_name[NUM][10];
int student_flag[NUM];
int student_grade[NUM];
int totle=0;
void UnderLine();/*统计不及格人数并打印不及格学生名单*/
void UpLine();/*统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单*/
void Figure();/*以直方图方式统计各分数段的学生人数及所占的百分比*/
int main()
{
int i=0;
int choice;
printf("输入学生姓名和成绩(中间用空格隔开):\n");
for(i=0;i
scanf("%s",student_name[i]);
scanf("%d",&student_grade[i]);
if(student_grade[i]==-1)
break;
}
totle=i;
printf("选择功能:\n【0】退出\n【1】统计不及格人数并打印不及格学生名单\n");
printf("【2】统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单\n");
printf("【3】以直方图方式统计各分数段的学生人数及所占的百分比\n");
while(1)
{
scanf("%d",&choice);
switch(choice)
{
case 0:
exit(0);
break;
case 1:
UnderLine();
printf("请选择:");
break;
case 2:
UpLine();
printf("请选择:");
break;
case 3:
Figure();
printf("请选择:");
break;
}
}
return 0;
}
void UnderLine()
{
int i,cnt=0;
for(i=0;i
if(student_grade[i]<60)
{
cnt++;
student_flag[i]=1;
}
}
printf("不及格人数:\t%d\n【名单及分数】\n",cnt);
for(i=0;i
if(student_flag[i]==1)
printf("%s\t%d\n",student_name[i],student_grade[i]);
}
}
void UpLine()
{
int i,cnt=0;
double avg=0;
for(i=0;i
avg/=totle;
printf("平均分:\t%.2f\n",avg);
for(i=0;i
if(student_grade[i]>=avg){
student_flag[i]=2;
cnt++;
}
}
printf("在全班平均分及平均分之上的学生人数:\t%d\n【名单及分数】\n",cnt);
for(i=0;i
if(student_flag[i]==2)
printf("%s\t%d\n",student_name[i],student_grade[i]);
}
}
void Figure()
{
int cnt1=0,cnt2=0,cnt3=0,cnt4=0,cnt5=0;
int i;
for(i=0;i
if(student_grade[i]<60)
{
student_flag[i]=1;
cnt1++;
}
else if(student_grade[i]>=60&&student_grade[i]<70)
{
student_flag[i]=2;
cnt2++;
}
else if(student_grade[i]>=70&&student_grade[i]<80)
{
student_flag[i]=3;
cnt3++;
}
else if(student_grade[i]>=80&&student_grade[i]<90)
{
student_flag[i]=4;
cnt4++;
}
else if(student_grade[i]>=90)
{
student_flag[i]=5;
cnt5++;
}
}
printf("分数段\t学生人数\t图形\n");
printf("<60\t%d(%.2f%%)\t",cnt1,(double)100*cnt1/totle);
for(i=0;i
printf("60-69\t%d(%.2f%%)\t",cnt2,(double)100*cnt2/totle);
for(i=0;i
printf("70-79\t%d(%.2f%%)\t",cnt3,(double)100*cnt3/totle);
for(i=0;i
printf("80-89\t%d(%.2f%%)\t",cnt4,(double)100*cnt4/totle);
for(i=0;i
printf(">=90\t%d(%.2f%%)\t",cnt5,(double)100*cnt5/totle);
for(i=0;i
}
看了 函数编程练习学生成绩统计(一...的网友还看了以下:
求直线L:(X-3)/2=(Y-1)/3=Z+1绕直线{X=2,Y=3}旋转一周所产生旋转面方程复 2020-06-25 …
关于:半球/一球(0.5/1)让球方平或负全输,赢一球赢一半,赢两球全赢.这种情况下,我买的是不让 2020-07-04 …
输入一个3位数,计算该数各位上的数字之和,如果在[1,12]之内,则输出对应的月份,否者输出*** 2020-07-29 …
一、用列举发表示下列集合.1.方程x^2=4的解集;2.方程x^2-2x-3=0;3.你本学期所学 2020-08-01 …
2.输血原则(1)基本原则:安全输血应以输为原则。(2)异型输血①在没有同型血可输而且情况紧急时,任 2020-11-03 …
下图是一个简单的数值运算程序.(1)当输入x的值为-4时,输出的数值为多少?(2)若输入x的值为3时 2020-11-20 …
描述输入x(x为整数),求函数值函数定义如下:F(x)=xx小于3F(x)=F(x/3)*2x大于等 2020-11-28 …
英语翻译1:你的内容正在等待审核2:你发布的太快了,请先休息一会儿3:请输入内容4:请输入必填项5: 2020-12-05 …
某电站与用户的距离为10km,输送的电功率为6×104kW,输电电压为3×105V,输电线的电阻每米 2020-12-05 …
执行如图所示的程序框图,正确的是()A.若输入a,b,c的值依次为1,2,3,则输出的值为5B.若输 2020-12-15 …