急急急!!!c语言编程题

题目:一、 试编写一个程序,建立一个学生成绩文件(30名学生),每名同学的信息包括学号、姓名和英语、数学、计算机三门课程的成绩。分别将所有同学的信息存放到顺序文件中,学生的数据信息通过键盘录入。
二、 打开上题所建立的顺序文件,从中读取同学的信息,并利用冒泡排序法按总成绩从大到小的顺序显示所有同学的学号、姓名和英语、数学、计算机和总分这6项内容。
功能、程序结构、布局、适当的注释。
保存为源文件

# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>

struct Student
{
int S_number; //学号
char Name[10]; //姓名
float E_score; //英语分数
float M_score; //数学分数
float C_scorer; //计算机分数
};

int main(void)
{
FILE *pFile = fopen("学生原始数据.txt", "wb"); //文件指针,指向系统创建的学生原始数据.txt文本
FILE *fp = fopen("学生排序后数据.txt", "wb"); //同文件指针一样
struct Student * pArr;
struct Student t;
int len, i, j;

printf("输入要建立的多少学生: ");
scanf("%d", &len);
pArr = (struct Student *)malloc(len * sizeof(struct Student)); //动态分配内存

//输入学生数据
for (i = 0; i < len; i++)
{
printf("请输入第 %d 个学生的信息:\n", i+1);
printf("姓名是: ");
scanf("%s", pArr[i].Name);
printf("学号是: ");
scanf("%d", &pArr[i].S_number);
printf("英语分数: ");
scanf("%f", &pArr[i].E_score);
printf("数学分数: ");
scanf("%f", &pArr[i].M_score);
printf("计算机分数: ");
scanf("%f", &pArr[i].C_scorer);
}

//把学生数据输出到文本里(文件名:学生原始数据.txt),默认的是本地目录
fprintf(pFile, "输出学生信息:\r\n");
for (i = 0; i < len; i++)
{
fprintf(pFile, "第 %d 个学生信息:\r\n", i+1);
fprintf(pFile, "姓名是: %s\r\n", pArr[i].Name);
fprintf(pFile, "学号是: %d\r\n", pArr[i].S_number);
fprintf(pFile, "英语分数: %.2f\r\n", pArr[i].E_score);
fprintf(pFile, "数学分数: %.2f\r\n", pArr[i].M_score);
fprintf(pFile, "计算机分数: %.2f\r\n\r\n", pArr[i].C_scorer);
}
fclose(pFile); //关闭文件

//对学生的的成绩进行排序。
for(i=0; i<len-1; ++i)
{
for(j=0; j<len-1-i; ++j)
{
if( (pArr[j].C_scorer + pArr[j].E_score + pArr[j].M_score) <
(pArr[j+1].C_scorer + pArr[j+1].E_score + pArr[j+1].M_score))
{
t = pArr[j];
pArr[j] = pArr[j+1];
pArr[j+1] = t;
}
}

}

//把排序好的学生数据输出到文本里(学生排序后数据.tx),默认的是本地目录
fprintf(fp, "输出排序后的学生信息:\r\n");
for (i = 0; i < len; i++)
{
fprintf(fp, "第 %d 个学生信息:\r\n", i+1);
fprintf(fp, "姓名是: %s\r\n", pArr[i].Name);
fprintf(fp, "学号是: %d\r\n", pArr[i].S_number);
fprintf(fp, "英语分数: %.2f\r\n", pArr[i].E_score);
fprintf(fp, "数学分数: %.2f\r\n", pArr[i].M_score);
fprintf(fp, "计算机分数: %.2f\r\n", pArr[i].C_scorer);
fprintf(fp, "总分数: %.2f\r\n\r\n", pArr[i].E_score+pArr[i].M_score+pArr[i].C_scorer);
}
fclose(fp); //关闭文件

printf("\n\n");

free(pArr); //释放内存

return 0;

}

这是一份写好的,但是它在Turbo C上不能运行,显示有错误,哪位好心人能帮忙修改一下,使它能在Turbo C调试成功

我做了修改,用Turbo C编译和运行都没有问题。请留意看。
# include <stdio.h>
#include <string.h>
# include <malloc.h>
# include <stdlib.h>

struct Student
{
int S_number; //学号
char Name[10]; //姓名
float E_score; //英语分数
float M_score; //数学分数
float C_scorer; //计算机分数
};

int main(void)
{
FILE *pFile = fopen("学生原始数据.txt", "wb"); //文件指针,指向系统创建的学生原始数据.txt文本
FILE *fp = fopen("学生排序后数据.txt", "wb"); //同文件指针一样
struct Student * pArr;
struct Student t;
int len, i, j;
char *str;
int num;
float fnum;

printf("输入要建立的多少学生: ");
scanf("%d", &len);
pArr = (struct Student *)malloc(len * sizeof(struct Student)); //动态分配内存

//输入学生数据
for (i = 0; i < len; i++)
{
printf("请输入第 %d 个学生的信息:\n", i+1);
printf("姓名是: ");
scanf("%s", str); strcpy(pArr[i].Name, str);
printf("学号是: ");
scanf("%d", &num); pArr[i].S_number = num;
printf("英语分数: ");
scanf("%f", &fnum); pArr[i].E_score = fnum;
printf("数学分数: ");
scanf("%f", &fnum); pArr[i].M_score = fnum;
printf("计算机分数: ");
scanf("%f", &fnum); pArr[i].C_scorer = fnum;
}

//把学生数据输出到文本里(文件名:学生原始数据.txt),默认的是本地目录
fprintf(pFile, "输出学生信息:\r\n");
for (i = 0; i < len; i++)
{
fprintf(pFile, "第 %d 个学生信息:\r\n", i+1);
fprintf(pFile, "姓名是: %s\r\n", pArr[i].Name);
fprintf(pFile, "学号是: %d\r\n", pArr[i].S_number);
fprintf(pFile, "英语分数: %.2f\r\n", pArr[i].E_score);
fprintf(pFile, "数学分数: %.2f\r\n", pArr[i].M_score);
fprintf(pFile, "计算机分数: %.2f\r\n\r\n", pArr[i].C_scorer);
}
fclose(pFile); //关闭文件

//对学生的的成绩进行排序。
for(i=0; i<len-1; ++i)
{
for(j=0; j<len-1-i; ++j)
{
if( (pArr[j].C_scorer + pArr[j].E_score + pArr[j].M_score) <
(pArr[j+1].C_scorer + pArr[j+1].E_score + pArr[j+1].M_score))
{
t = pArr[j];
pArr[j] = pArr[j+1];
pArr[j+1] = t;
}
}

}

//把排序好的学生数据输出到文本里(学生排序后数据.tx),默认的是本地目录
fprintf(fp, "输出排序后的学生信息:\r\n");
for (i = 0; i < len; i++)
{
fprintf(fp, "第 %d 个学生信息:\r\n", i+1);
fprintf(fp, "姓名是: %s\r\n", pArr[i].Name);
fprintf(fp, "学号是: %d\r\n", pArr[i].S_number);
fprintf(fp, "英语分数: %.2f\r\n", pArr[i].E_score);
fprintf(fp, "数学分数: %.2f\r\n", pArr[i].M_score);
fprintf(fp, "计算机分数: %.2f\r\n", pArr[i].C_scorer);
fprintf(fp, "总分数: %.2f\r\n\r\n", pArr[i].E_score+pArr[i].M_score+pArr[i].C_scorer);
}
fclose(fp); //关闭文件

printf("\n\n");

free(pArr); //释放内存

return 0;

}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-12-28
利用V6.0C++编译运行没有一点问题
你痛Turbo C编译 由于2个程序软件有不同的地方,可能会导致运行出现问题
有一下2种问题:
1是以前你安装过这个Turbo C软件后没有删除干净就重新安装,有残留的文件,这时候你需要在注册表里删除信息。(具体怎么删除可以到百度上搜搜)
2是Tuber C运行的时候,它和V6.0C++有编译时的区别,所以会导致不同的结果,用Tuber C运行时最主要的就是i++和++i的不同,建议你把有自加自减的语句改成i+i=1这样的语句试试再编译运行
第2个回答  2011-12-28
安装过这个Turbo C软件后没有删除干净就重新安装,有残留的文件,这时候你需要在注册表里删除信息。(具体怎么删除可以到百度上搜搜)
2是Tuber C运行的时候,它和V6.0C++有编译时的区别,所以会导致不同的结果,用Tuber C运行时最主要的就是i++和++i的不同,建议你把有自加自减的语句改成i+i=1这样的语句试试再编译运行
第3个回答  2011-12-29
什么jiba玩意
相似回答