#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#define MAX 1
#define OVERFLOW -2
#define OK 0
//顺序表
typedef struct {
char number[20];
char name[20];
double mathscore;
double englishscore;
double computerscore;
double averscore;
}student;
typedef struct{
student *elem;//指向数据元素的基地址
int length;//线性表的当前长度
}SqList;// 构造空的顺序表 L,顺序表初始化
int InitList(SqList *L)
{
L->elem=(student *)malloc(sizeof(student)*MAX); //malloc 函数开辟存储空间
if(!L->elem)
exit(OVERFLOW);
L->length=0;
return OK;
}
//录入
void luru(SqList &s){
printf("请输入学生人数:");
int n;
scanf("%d", &n);
s.length+=n;//方便后续数据直接插入,顺序表长度直接增加
for (int i = 0; i < n; i++)
{
printf("输入第%d个学生的信息:\n",i+1);
printf("学号:");
scanf("%s", &s.elem[i].number);
printf("姓名: ");
scanf("%s", &s.elem[i].name);
printf("数学成绩为:");
scanf("%lf",&s.elem[i].mathscore);
printf("英语成绩为:");
scanf("%lf",&s.elem[i].englishscore);
printf("计算机成绩为:");
scanf("%lf",&s.elem[i].computerscore);
printf("---------------------------------------\n");
}
}
//定义函数向文件输入学生的数据
void shuchu(SqList &s,FILE *fp){
int i;
if((fp=fopen("input.dat","w"))==NULL){
printf("不能打开文件!\n");
return ;
}
//挨个遍历加入文件
for(i=0;i<s.length;i++){
fprintf(fp,"学号:%s\t姓名:%s\t数学成绩:%.1lf\t英语成绩:%.1lf\t计算机成绩:%.1lf\t平均分:%.1lf\n",
s.elem[i].number,s.elem[i].name,s.elem[i].mathscore,
s.elem[i].englishscore, s.elem[i].computerscore, s.elem[i].averscore);
}
fclose(fp);//关闭文件,释放缓存
}
//对每个科目的成绩进行排序 ,从大到小
//数学
void mathsort(SqList &s,FILE *fp11){
student temp;
int i,j;
if((fp11=fopen("数学成绩排序.dat","w"))==NULL){
printf("不能打开文件!\n");
return ;
}
for(i=0;i<s.length;i++){
s.elem[i].averscore=(s.elem[i].computerscore+s.elem[i].englishscore+s.elem[i].mathscore)/3;
}
for(i=0;i<s.length-1;i++){
for(j=0;j<s.length-1-i;j++){
if(s.elem[j].mathscore<s.elem[j+1].mathscore){
temp=s.elem[j];
s.elem[j]=s.elem[j+1];
s.elem[j+1]=temp;
}
}
}
printf("数学排序:\n");
fprintf(fp11,"数学排序:\n");
for(i=0;i<s.length;i++){
fprintf(fp11,"学号:%s\t姓名:%s\t数学成绩:%.1lf\t\n",
s.elem[i].number,s.elem[i].name,s.elem[i].mathscore);
printf("学号:%s\t姓名:%s\t数学成绩:%.1lf\t\n",
s.elem[i].number,s.elem[i].name,s.elem[i].mathscore);
}
fclose(fp11);
}
//英语
void englishsort(SqList &s,FILE *fp12){
student temp;
int i,j;
if((fp12=fopen("英语成绩排序.dat","w"))==NULL){
printf("不能打开文件!\n");
return ;
}
for(i=0;i<s.length;i++){
s.elem[i].averscore=(s.elem[i].computerscore+s.elem[i].englishscore+s.elem[i].mathscore)/3;
}
for(i=0;i<s.length-1;i++){
for(j=0;j<s.length-1-i;j++){
if(s.elem[j].englishscore<s.elem[j+1].englishscore){
temp=s.elem[j];
s.elem[j]=s.elem[j+1];
s.elem[j+1]=temp;
}
}
}
printf("英语排序:\n");
fprintf(fp12,"英语排序\n");
for(i=0;i<s.length;i++){
fprintf(fp12,"学号:%s\t姓名:%s\t英语成绩:%.1lf\t\n",
s.elem[i].number,s.elem[i].name,s.elem[i].englishscore);
printf("学号:%s\t姓名:%s\t数学成绩:%.1lf\t英语成绩:%.1lf\t\n",
s.elem[i].number,s.elem[i].name,s.elem[i].mathscore,
s.elem[i].englishscore, s.elem[i].computerscore, s.elem[i].averscore);
}
fclose(fp12);
}
//计算机
void computersort(SqList &s,FILE *fp13){
student temp;
int i,j;
if((fp13=fopen("计算机成绩排序.dat","w"))==NULL){
printf("不能打开文件!\n");
return ;
}
for(i=0;i<s.length;i++){
s.elem[i].averscore=(s.elem[i].computerscore+s.elem[i].englishscore+s.elem[i].mathscore)/3;
}
for(i=0;i<s.length-1;i++){
for(j=0;j<s.length-1-i;j++){
if(s.elem[j].computerscore<s.elem[j+1].computerscore){
temp=s.elem[j];
s.elem[j]=s.elem[j+1];
s.elem[j+1]=temp;
}
}
}
printf("计算机排序:\n");
fprintf(fp13,"计算机排序:\n");
for(i=0;i<s.length;i++){
fprintf(fp13,"学号:%s\t姓名:%s\t计算机成绩:%.1lf\t\n",
s.elem[i].number,s.elem[i].name, s.elem[i].computerscore);
printf("学号:%s\t姓名:%s\t计算机成绩:%.1lf\n",
s.elem[i].number,s.elem[i].name, s.elem[i].computerscore);
}
fclose(fp13);
}
//定义函数average,向文件输入学生的各科平均成绩
void average(SqList s,FILE *fp2)
{
int i,j;
student temp;
if((fp2=fopen("平均成绩排序.dat","w"))==NULL){
printf("不能打开文件!");
return ;
}
for(i=0;i<s.length;i++){
s.elem[i].averscore=(s.elem[i].computerscore+s.elem[i].englishscore+s.elem[i].mathscore)/3;
}
for(i=0;i<s.length-1;i++){
for(j=0;j<s.length-1-i;j++){
if(s.elem[j].averscore<s.elem[j+1].averscore){
temp=s.elem[j];
s.elem[j]=s.elem[j+1];
s.elem[j+1]=temp;
}
}
}
printf("按平均分排序:\n");
fprintf(fp2,"按平均分排序:\n");
for(i=0;i<s.length;i++){
fprintf(fp2,"学号:%s\t姓名:%s\t数学成绩:%.1lf\t英语成绩:%.1lf\t计算机成绩:%.1lf\t平均分:%.1lf\n",
s.elem[i].number,s.elem[i].name,s.elem[i].mathscore,
s.elem[i].englishscore, s.elem[i].computerscore, s.elem[i].averscore);
printf("学号:%s\t姓名:%s\t数学成绩:%.1lf\t英语成绩:%.1lf\t计算机成绩:%.1lf\t平均分:%.1lf\n",
s.elem[i].number,s.elem[i].name,s.elem[i].mathscore,
s.elem[i].englishscore, s.elem[i].computerscore, s.elem[i].averscore);
}
fclose(fp2);
}
//成绩分段
int fenduan(double x){
if(x<60) return 0;
else if(60<=x&&x<70) return 1;
else if(70<=x&&x<80) return 2;
else if(80<=x&&x<90) return 3;
else if(90<=x&&x<=100) return 4;
}
//成绩分析,输出求出各门课程的平均成绩、最高分、最低分、不及格人数、
//60~69 分人数、70~79 分人数、80~89 分人数、90 分以上人数
void fenxi(SqList &s){
double math_result[10],english_result[10],computer_result[10];
for(int i=0;i<=9;i++){
math_result[i]=0;
english_result[i]=0;
computer_result[i]=0;
}
math_result[6]=s.elem[0].mathscore;
english_result[6]=s.elem[0].englishscore;
computer_result[6]=s.elem[0].computerscore;
math_result[7]=s.elem[0].mathscore;
english_result[7]=s.elem[0].englishscore;
computer_result[7]=s.elem[0].computerscore;
for ( int i = 0; i < s.length; i++)
{
//每科总成绩
math_result[0]+=s.elem[i].mathscore;
english_result[0]+=s.elem[i].englishscore;
computer_result[0]+=s.elem[i].computerscore;
//分数段统计
//数学
int q1=fenduan(s.elem[i].mathscore);
switch (q1)
{
case 0:
math_result[1]=math_result[1]+1;
break;
case 1:
math_result[2]=math_result[2]+1;
break;
case 2:
math_result[3]=math_result[3]+1;
break;
case 3:
math_result[4]=math_result[4]+1;
break;
case 4:
math_result[5]=math_result[5]+1;
}
//英语
int q2=fenduan(s.elem[i].englishscore);
switch (q2)
{
case 0:
english_result[1]=english_result[1]+1;
break;
case 1:
english_result[2]=english_result[2]+1;
break;
case 2:
english_result[3]=english_result[3]+1;
break;
case 3:
english_result[4]=english_result[4]+1;
break;
case 4:
english_result[5]=english_result[5]+1;
break;
}
//计算机
int q3=fenduan(s.elem[i].computerscore);
switch (q3)
{
case 0:
computer_result[1]=computer_result[1]+1;
break;
case 1:
computer_result[2]=computer_result[2]+1;
break;
case 2:
computer_result[3]=computer_result[3]+1;
break;
case 3:
computer_result[4]=computer_result[4]+1;
break;
case 4:
computer_result[5]=computer_result[5]+1;
break;
}
//最大最小值
if(s.elem[i].mathscore>math_result[6]){
math_result[6]=s.elem[i].mathscore;
}
if(s.elem[i].englishscore>english_result[6]){
english_result[6]=s.elem[i].englishscore;
}
if(s.elem[i].computerscore>computer_result[6]){
computer_result[6]=s.elem[i].computerscore;
}
if(s.elem[i].mathscore<math_result[7]){
math_result[7]=s.elem[i].mathscore;
}
if(s.elem[i].englishscore<english_result[6]){
english_result[7]=s.elem[i].englishscore;
}
if(s.elem[i].computerscore<computer_result[7]){
computer_result[7]=s.elem[i].computerscore;
}
}
//平均分
math_result[0] = math_result[0] / s.length;
english_result[0] = english_result[0] / s.length;
computer_result[0] = computer_result[0] / s.length;
printf("数学课的平均分为:%.1lf\n",math_result[0]);
printf("数学课分数不及格人数为:%.lf\n",math_result[1]);
printf("数学课分数在60~69的人数为:%.lf\n",math_result[2]);
printf("数学课分数在70~79的人数为:%.lf\n",math_result[3]);
printf("数学课分数在80~89的人数为:%.lf\n",math_result[4]);
printf("数学课分数在90~100的人数为:%.lf\n",math_result[5]);
printf("数学课分数最高为:%.1lf\n",math_result[6]);
printf("数学课分数最低为:%.1lf\n",math_result[7]);
printf("英语课的平均分为:%.1lf\n",english_result[0]);
printf("英语课分数不及格人数为:%.lf\n",english_result[1]);
printf("英语课分数在60~69的人数为:%.lf\n",english_result[2]);
printf("英语课分数在70~79的人数为:%.lf\n",english_result[3]);
printf("英语课分数在80~89的人数为:%.lf\n",english_result[4]);
printf("英语课分数在90~100的人数为:%.lf\n",english_result[5]);
printf("英语课分数最高为:%.1lf\n",english_result[6]);
printf("英语课分数最低为:%.1lf\n",english_result[7]);
printf("计算机课的平均分为:%.1lf\n",computer_result[0]);
printf("计算机课分数不及格人数为:%.lf\n",computer_result[1]);
printf("计算机课分数在60~69的人数为:%.lf\n",computer_result[2]);
printf("计算机课分数在70~79的人数为:%.lf\n",computer_result[3]);
printf("计算机课分数在80~89的人数为:%.lf\n",computer_result[4]);
printf("计算机课分数在90~100的人数为:%.lf\n",computer_result[5]);
printf("计算机课分数最高为:%.1f\n",computer_result[6]);
printf("计算机课分数最低为:%.1f\n",computer_result[7]);
}
//学号查找
void xuehao(SqList &s,char key[]){
int count=0;
for(int i=0;i<s.length;i++){
s.elem[i].averscore=(s.elem[i].computerscore+s.elem[i].englishscore+s.elem[i].mathscore)/3;
}
for ( int i = 0; i < s.length; i++)
{//是否匹配
if (strcmp(s.elem[i].number,key) == 0)
{
printf("第%d个学生:\n学号:%s\n姓名:%s\n数学成绩:%.1lf\n英语成绩:%.1lf\n计算机成绩:%.1lf\n平均分:%.1lf\n",
i+1,s.elem[i].number,s.elem[i].name,s.elem[i].mathscore,
s.elem[i].englishscore, s.elem[i].computerscore, s.elem[i].averscore);
count=1;
}
}
if(count==0){
printf("查找的学生不存在\n");
}
}
//姓名查找
void xingming(SqList &s,char ch[]){
int flag=0,count;
char num[20];
for(int i=0;i<s.length;i++){
s.elem[i].averscore=(s.elem[i].computerscore+s.elem[i].englishscore+s.elem[i].mathscore)/3;
}
for ( int i = 0; i < s.length; i++)
{
if (strcmp(s.elem[i].name,ch) == 0)
{
flag = flag+1;
count=i;
}
}
//避免重名,学号不会重复
if(flag>1){
printf("出现重名,请输入待查找同学学号:\n");
scanf("%s",&num);
xuehao(s,num);
}
else if(flag==1){
printf("第%d个学生:\n学号:%s\n姓名:%s\n数学成绩:%.1lf\n英语成绩:%.1lf\n计算机成绩:%.1lf\n平均分:%.1lf\n",
count+1,s.elem[count].number,s.elem[count].name,s.elem[count].mathscore,
s.elem[count].englishscore, s.elem[count].computerscore, s.elem[count].averscore);
}
else{
printf("查找的学生不存在!\n");
}
}
![](https://profile-avatar.csdnimg.cn/default.jpg!4)
错哪了啊,在哪里加主函数main啊
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 快乐鹦鹉 2023-06-16 12:00关注
首先是main,不是mian
其次,main返回类型用int,不要用void
int main()
{
}本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 纯C++ 简单图色对比 灵敏度低的问题
- ¥15 麒麟ARM机器安装chromium浏览器
- ¥15 grbl 限位开关初始遮挡怎么处理?
- ¥15 输入网址无法跳转,如何解决?(关键词-CONNECT)
- ¥15 kubekey离线安装k8s及kubesphere报错
- ¥15 avalonia开发海康SDK怎么在linux实现预览?
- ¥15 keil5运行结果报错如下该怎么办
- ¥300 New-API新增渠道调试
- ¥20 zookeeper单服务器集群搭建,2888和2890端口没有监听
- ¥15 电梯与AGV小车,modbus转HTTP ,.