2301_78734628 2023-06-16 11:50 采纳率: 100%
浏览 53
已结题

错哪了啊,在哪里加主函数main啊


#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");
    }
}

  • 写回答

3条回答 默认 最新

  • 快乐鹦鹉 2023-06-16 12:00
    关注

    首先是main,不是mian
    其次,main返回类型用int,不要用void
    int main()
    {
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月24日
  • 已采纳回答 6月16日
  • 创建了问题 6月16日

悬赏问题

  • ¥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 ,.