| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 596 人关注过本帖
标题:给个题目大家练练。c高手都来看看,求程序简洁明了~
只看楼主 加入收藏
w7815115
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-6-2
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
给个题目大家练练。c高手都来看看,求程序简洁明了~
设计一个程序,对某个班(最多40人)的学生成绩进行统计。
要求实现如下功能。
1)    输入每个学生的学号及五门课的成绩。
2)    计算每人的平均分及增总分
3)    按总分从高到低排名次,并输出每个学生的学习情况。
4)    指定某门课程(键入课程号),输出成绩在85分以上(含85分),且总分在前10名的学生学习情况。
5)    输出含不及格(小于60分)成绩的学生的学习情况。
具体要求如下:
(1)    每个功能为一个独立的函数。
(2)    输入之前要有提示。
(3)    程序尽量简明、规范。
方法提示:
要在主函数中定义以下几个数组:
num[40] 整型数组,依次存放学生学号。
a[40][7] 实型数组,每个存放一个学生的五门课程(课程为1,2,3,4,5)的成绩、平均分、总分。
Order[40] 整型数组,按名次存放学生情况的输入序号,如order[i]存放第i+1名学生情况的输入序号。
主函数可依次调用下面五个功能函数。
(1)    input(num,a)
这个函数逐个输入学生的学号及五门课程的成绩,输入格式为:
学号,课程成绩1——5课程成绩
其中学号依次赋给num数组,五门课程成绩依次赋给a数组的前5列。输入过程直到学号为负或人数超过40人为止。
(2)    count(a)
此函数计算每个学生的平均分及总分,并依次存放在数组a的最后两列。
(3)    sort(a,order)
这个函数按总分从高到低排名次,并按名次输出每个学生的学习情况。在排名时,不交换数组a中的元素,而用数组order来记录名次,即 order[i]中存放第i+1名学生情况在数组num与a中的位置(行号)。为了按名次输出各学生的情况,需要依次从数组order中取出学生情况在数组num与a中的行号,然后输出数组num与a的该行元素。
(4)    serch1(num,a,order)
这个函数对指定的某门课程,输出85分以上且总分在前10名的学生学习情况。
(5)    serch2(num,a)
这个函数输出不及格成绩的学生学习情况。

[ 本帖最后由 w7815115 于 2013-6-2 22:34 编辑 ]
搜索更多相关主题的帖子: 学生 
2013-06-02 22:32
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1506
专家分:9241
注 册:2010-3-16
收藏
得分:5 
现在作业贴越来越有想法了。呵呵。
2013-06-02 23:13
蓝天时代
Rank: 2
等 级:论坛游民
帖 子:30
专家分:47
注 册:2013-4-25
收藏
得分:5 
#include<stdio.h>
#define N  80
#define M  10
struct student
{
int num;
float score[5];
float aver;
float sum;
};

//输入成绩
void input(struct student stu[])
{
int i;
printf("输入:学号 成绩:\n 号  a  b   c  d  e\n");
for(i=0;i<N;i++)
{
scanf("%d%f%f%f%f%f",&stu[i].num,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].score[3],&stu[i].score[4]);
stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3]+stu[i].score[4];
stu[i].aver=stu[i].sum/5.0;
}
}
 //按总分高到低排列
struct student *cont(struct student stu[])
{
struct student sty;
int i,j;
for(j=0;j<N-1;j++)    //冒泡法排序
for(i=0;i<N-1-j;i++)
if(stu[i].sum<stu[i+1].sum)
{ sty=stu[i];   stu[i]=stu[i+1];  stu[i+1]=sty;  }

return (stu);
}


//打印
void print1(struct student stu[])
{
int i;
for(i=0;i<N;i++)
printf("学号:%d   a: %.1f   b: %.1f   c: %.1f  d: %.1f  e: %.1f  总分:%.1f  平均:%.1f\n",stu[i].num,stu[i].score[0],
       stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].sum,stu[i].aver);
}

//指定某门课程 分析
void serch1(struct student stu[])
{   
    int i,m;
    char h;
    printf("请输入要查85分以上的科目(a b c d e)\n");
    getchar();          //清除缓存
    scanf("%c",&h);    printf("您查的是 %c 课成绩.\n",h);
    switch(h)
    {
        case 'a': m=0; break;
        case 'b': m=1; break;
        case 'c': m=2; break;
        case 'd': m=3; break;
        case 'e': m=4; break;
    default: printf("输入错误\n");break;
    }
for(i=0;i<=M;i++)
if(stu[i].score[m]>=85)
printf("学号:%d  a: %.1f   b: %.1f   c: %.1f  d: %.1f  e: %.1f  总分:%.1f  平均成绩:%.1f\n",stu[i].num,stu[i].score[0],
       stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].sum,stu[i].aver);

}

//六十分以下的 分析
void serch2(struct student stu[])
{
int i,j,k=1;
printf("分数少于60而不及格的有:\n");
for(i=0,k=1;i<N;i++)
for(j=0;j<5,k==1;j++)
{
if(stu[i].score[j]>60) continue;
{printf("学号:%d   a: %.1f   b: %.1f   c: %.1f  d: %.1f  e: %.1f  总分:%.1f  平均:%.1f\n",stu[i].num,stu[i].score[0],
       stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].sum,stu[i].aver);
 k=0;}
}
}



main()
{
struct student *p ,*q,stu[N];
p=stu;
input(p);
q=cont(p);
//print1(q);
//serch1(q);
serch2(q);
}
这个我写的,好像不太好,大家看看;
2013-06-03 13:35
我叫沃恩
Rank: 12Rank: 12Rank: 12
来 自:Asia
等 级:贵宾
威 望:10
帖 子:1234
专家分:3865
注 册:2013-3-29
收藏
得分:5 
以下是引用apull在2013-6-2 23:13:30的发言:

现在作业贴越来越有想法了。呵呵。

呵呵,,,,,

因为我是菜鸟,所以应该被骂! 细节+坚持=成功!
2013-06-03 13:40
快速回复:给个题目大家练练。c高手都来看看,求程序简洁明了~
数据加载中...
 
   



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

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