高分求解C语言 综合设计 问题!!高手们帮帮忙啊!谢谢了先!

期末了,C考试要求做一个综合设计,希望各位高手不吝惜赐教!谢谢了先!
内容如下:
某班能级一共有学生N名,本学期一共选修了M门课程,设计一个成绩测评系统,功能要求如下:
逐一输入每个学生的成绩;
计算每个学生的总平均成绩,并按降序排序输出;
输入某个学生的学号,输出其各课考试情况;
对每门课按降序排序输出;
统计课程不同分数段的人数;

希望能具体一些 有具体程序步骤 配上思路更好 答案好再加分!!
由于我的上限是100分 先悬赏100!
我用的也是vc6.0
但就是不行啊 我觉得程序在哪里什么问题也没有的
=============================================
从下面第一行报错
struct student qq[100]; //定义结构体数组
for(i=0;i<n;i++) //初始化结构体

Compiling...
asd .c
d:\c-program\onhe\asd .c(103) : error C2143: syntax error : missing ';' before 'type'
d:\c-program\onhe\asd .c(107) : error C2065: 'qq' : undeclared identifier
d:\c-program\onhe\asd .c(107) : error C2109: subscript requires array or pointer type
d:\c-program\onhe\asd .c(107) : error C2115: '=' : incompatible types
执行 cl.exe 时出错.

asd .obj - 1 error(s), 0 warning(s)
====================================================
恩 在c++环境下完全正确,谢谢你们了 我自己在研究一下差别就好了 实在太感谢你们了
这个分么 我还是给写程序的这位大哥了 这个我也很尴尬 不过实在是感谢你们 二位都谢谢了 ,真诚的感谢

#include "stdio.h"
#include "string.h"
struct student
{
int number;
char name[10];
float math,chinese,english,average;

};
int tj[10]={0}; //储存各分数段人数
struct student input() //输入初始化结构体
{
//int i;
struct student p;
//for(i=0;i<=10;i++) p.name[i]='\0';
memset(p.name,0,10);
printf("number:"); scanf("%d",&p.number);
printf("name:"); scanf("%s",p.name);
printf("math:"); scanf("%f",&p.math);
printf("chinese:"); scanf("%f",&p.chinese);
printf("english:"); scanf("%f",&p.english);
p.average=(p.chinese+p.english+p.math)/3;
return p;
}

void chaxun(int n_0,int n,struct student *p) //查询 n_0是查询的学号 n是总人数,*p是输入结构体数组地址
{
int i;
for(i=0;i<n;i++)
if(p[i].number==n_0) //匹配学号,判断课程大小输出
{
if(p[i].math>=p[i].chinese&&p[i].chinese>=p[i].english)
printf("math:%.1f chinese:%.1f english:%.1f\n",p[i].math,p[i].chinese,p[i].english);
else if(p[i].math>=p[i].chinese&&p[i].english>p[i].chinese)
printf("math:%.1f english:%.1f chinese:%.1f\n",p[i].math,p[i].english,p[i].chinese);
else if(p[i].chinese>=p[i].math&&p[i].math>=p[i].english)
printf("chinese:%.1f math:%.1f english:%.1f\n",p[i].chinese,p[i].math,p[i].english);
else if(p[i].chinese>=p[i].math&&p[i].english>p[i].math)
printf("chinese:%.1f english:%.1f math:%.1f\n",p[i].chinese,p[i].english,p[i].math);
else if(p[i].english>=p[i].math&&p[i].math>=p[i].chinese)
printf("english:%.1f math:%.1f chinese:%.1f\n",p[i].english,p[i].math,p[i].chinese);
else
printf("english:%.1f chinese:%.1f math:%.1f\n",p[i].english,p[i].chinese,p[i].math);
i=n;
}

}
void show(struct student * p,int n) //降序输出,n是总人数,*p是输入结构体数组地址
{
int i,j,t;
struct student mid; //排序
for(i=0;i<n-1;i++)
{ t=i;
for(j=1;j<n;j++)
{ if(p[i].average<p[j].average)
t=j;
}
if(i!=t)
{
mid=p[j];
p[i]=p[j];
p[j]=mid;
}
}
for(i=0;i<n;i++) //输出

printf("number:%2d name:%s math:%.1f chinese:%.1f english:%.1f average:%.1f\n",(p+i)->number,(p+i)->name,(p+i)->math,(p+i)->chinese,(p+i)->english,(p+i)->average);
}

void tongji_0(float a) //按分数计算人数
{

if(a>=90) {tj[9]++;}
else if(a>=80) tj[8]++;
else if(a>=70) tj[7]++;
else if(a>=60) tj[6]++;
else tj[5]++;
}

void tongji( struct student *p,int n) // 统计各分数段人数,输出,是总人数,*p是输入结构体数组地址
{

int i;
for(i=0;i<n;i++)
tongji_0(p[i].math);
printf("math:\n60以下%d\n60~70:%d\n70~80:%d\n80~90:%d\n90以上:%d\n",tj[5],tj[6],tj[7],tj[8],tj[9]);
for(i=5;i<10;i++) tj[i]=0;// tj清零
for(i=0;i<n;i++)
tongji_0(p[i].chinese);
printf("chinese:\n60以下%d\n60~70:%d\n70~80:%d\n80~90:%d\n90以上:%d\n",tj[5],tj[6],tj[7],tj[8],tj[9]);
for(i=5;i<10;i++) tj[i]=0;//tj清零
for(i=0;i<n;i++)
tongji_0(p[i].english);
printf("english:\n60以下%d\n60~70:%d\n70~80:%d\n80~90:%d\n90以上:%d\n",tj[5],tj[6],tj[7],tj[8],tj[9]);
}

void main()
{
int n,i,x,xh,a=1;
printf("total number of student:");
scanf("%d",&n);
struct student qq[100]; //定义结构体数组
for(i=0;i<n;i++) //初始化结构体
{
printf("number student %d\n",i+1);
qq[i]=input();

}

while(a)
{
printf("[1]按总平均成绩降序输出\n[2]按学号查询学生信息\n[3]统计不同课程分数段人数\n[4]退出\n");
printf("请输入1~4调用菜单:");
scanf("%d",&x);
switch(x)
{
case 1 : show(qq,n);break;
case 2 : printf("输入学号:");scanf("%d",&xh); chaxun(xh,n,qq); break;
case 3 : tongji(qq,n); break;
case 4 : a=0;break;
default: printf("请输入1~4\n"); break;
}

}

}
在vc6上编译的,程序我调试了好久有时第一个人的信息输出会出现乱码原因我也不知道,如果有高手知道的号麻烦指点下小弟!不胜感激!
我按楼上大哥的建议,另外我想用gets()代替可是 编译时程序运行时总是跳过name的输入,麻烦楼上再解释下。。
不好意思楼主,我在vc编译的时候没报错,我也不知道是怎么回事!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-12-02
根据你的要求就写就可以了,你哪里有问题啊??说出来看看.
先设计个结构体,来存放学生的各相关信息.
然后就是增删改查询.就是这些功能了,学生的话,都学的是谭浩强的那本书吧?和后面结构体的例子应该类似,参照那个就应该OK了.
==========================================
// printf("name:"); scanf("%s",p.name);p.name[10]='\0';
memset(p.name,0,10);
printf("name:"); scanf("%s",p.name);
//说明:数组长度是10的话,脚标最多到9还有,名字未必把所有的位都占满,所以,你在最后一位加0结束,会有问题.先把数组各位置0就OK了.
再引个头文件
#include <string.h>
======================================
我没试gets()这个,不过,根据你的描述,应该是你输入前一个数据的时候会产生一个多途的字符比如'\n'这样,这个字符被gets()给吸收了,就相当于gets()读的是这个字符了.你可以在gets()前加一个getchar(),或gets()来吸收这个字符试试看是否可以了.楼主的编不过去的报的错发出来看看.我在vs上也是能编过去的.不知道楼主用的是什么编译器??
======================================================
感觉楼主的环境应该是纯C的环境,楼上和我的都是C++的环境,C++和纯C多少会有些差别.应该就是这些差别导致的,
目前我手头上没有纯C的编译器.最近有点紧,楼主可以试试建个c++的环境试下代码看看好不好用?如果好用的话,再从c与c++的差别入手找一下.比如,c里面必须先将定义都一起声明好了,然后后面全是实现部分,而c++可以用到什么定义什么等等.先试试C++是不是好用吧。就是建文件的时候.c文件建成.cpp的那个。
相似回答