c语言编程问题,求高手解答,还有几天就要交了,谢谢!题目是:对学生四门成绩分类排名(含总分)算法的设

2025-01-06 09:11:59
推荐回答(1个)
回答1:

以前写过一个类似的,今天修改了一下给你参考参考,应该能满足你的要求吧,支持一次运行重复选择排序关键字、重写数据、导出排序结果到文本文件等功能,不过算法可能不是很好,可以自己再修改修改,希望对你能有些帮助,另外请使用win-tc或者turbo c等纯c语言编辑器编译,c++的编译器会不支持里面的一些c语言的函数,代码如下

/*请使用win-tc或turbo c等纯c语言环境编译*/

/*dev c++或vc++不能识别程序中所用的某些c语言的函数*/

#include

#include

#include

main()

{

    int i,j,key,n,tem0,tem1,a[100][2];

    char b[5][10]={"chinese","English","chemistry","physics","total"};     /*名称数组*/

    struct stu                       /*定义结构体,包含学生姓名!成绩等星信息*/

    {

        char name[20];        /*姓名*/

        int course[5];    /*储存成绩*/

    };

    struct stu num[100];  /*预先定义100人,看具体情况*/

    time_t timep;         /*此处是为了获取当前时间*/

    struct tm *p;

    textbackground(2);   /*修改背景色*/

    textcolor(15);        /*修改文本颜色,使界面美观*/

    Y:                    /*标记跳转位置*/

    clrscr();             /*清屏,使颜色设置生效*/

    printf("How many students?  ");

    scanf("%d",&n);       /*n来记录总共的记录条数*/

    printf("----------------------------------------------------------------------"); /*打印一条分割线,使信息层次清晰*/

    printf("\nInput the infomation\n");

    printf("example:Jerry 85 78 92 81\n");

    printf("----------------------------------------------------------------------");

    printf("\nname   chinese   English   chemistry   physics\n"); /*此处为输入样例,姓名+四门成绩,中间空格隔开*/

    for(i=0;i

    {

        scanf("%s%d%d%d%d",&num[i].name,&num[i].course[0],&num[i].course[1],&num[i].course[2],&num[i].course[3]); /*存储数据*/

        num[i].course[4]=num[i].course[0]+num[i].course[1]+num[i].course[2]+num[i].course[3];

    }

    printf("----------------------------------------------------------------------\n");                 /*标记跳转位置*/

    X:

    printf("What do you want to sort by?\n1:chinese   2:English   3:chemistry   4:physics   5:total   ");  /*选择排序关键字*/

    scanf("%d",&key);

    for(i=0;i

    {

        a[i][0]=num[i].course[key-1];           /*引入中间二维数组a来实现排序,a[i][0]临时存储要排序的成绩,a[i][1]记录编号与之对应*/

        a[i][1]=i;

    }

    for(i=0;i

    {

        for(j=n-1;j>=i;j--)

        {

            if(a[j][0]>a[j-1][0])               /*最基本的冒泡法*/

            {

                tem0=a[j][0];       tem1=a[j][1];

                a[j][0]=a[j-1][0];  a[j][1]=a[j-1][1];

                a[j-1][0]=tem0;     a[j-1][1]=tem1;

            }

        }

    }

    printf("----------------------------------------------------------------------");

    printf("\nYou chose to sort by %s:\n",b[key-1]);  /*打印结果*/

    printf("----------------------------------------------------------------------");

    printf("\nranking  name   chinese   English   chemistry   physics  total\n");

    for(i=0;i

    {

        printf("%3d    %5s    %3d       %3d       %3d         %3d     %4d\n",i+1,num[a[i][1]].name,num[a[i][1]].course[0],num[a[i][1]].course[1],num[a[i][1]].course[2],num[a[i][1]].course[3],num[a[i][1]].course[4]);

    }

    printf("----------------------------------------------------------------------\n");

    Z:                /*标记跳转位置*/                                        /*经过冒泡之后a[i][1]存入的就是排序后的顺序了*/

    printf("What do want't to do now?\n1.Continue  2.Clear and continue  3.Export  4.New  5.Quit   ");

    scanf("%d",&tem0);   /*选择接下来要做什么1:继续选择其他关键字排序2:清屏之后继续排序3:导出当前数据到文本文件4:覆盖当前数据,输入一组新的数据5:退出*/

    printf("----------------------------------------------------------------------\n");

    if(tem0==1) goto X;  /*跳转到标记位置继续运行程序*/

    if(tem0==2)

    {   clrscr();    goto X;    }    /*清屏之后跳转到标记位置继续运行程序*/

    if(tem0==3)

    {

        FILE *fp = fopen("result.txt", "a");         /*以追加方式打开result.txt文件,如果不存在则创建*/

        if(!fp)

        {

        printf("\ncreate and open file failed\n");

        getch();

        return;

        }

        

        time(&timep);

        p=localtime(&timep);

        fprintf(fp,"----------------------------------------------------------------------\n");

        fprintf(fp,"%d-%02d-%02d ",(1900+p->tm_year),(1+p->tm_mon),p->tm_mday);    /*向文件内写入当前系统时间,格式如同2011-01-09 18:28:03*/

        fprintf(fp,"%02d:%02d:%02d     ",p->tm_hour,p->tm_min,p->tm_sec);

        fprintf(fp,"sort by %s:\n",b[key-1]);                                      /*向文件内写入当前排序数据*/

        fprintf(fp,"ranking name   chinese   English   chemistry   physics  total\n");

        for(i=0;i

        {

        fprintf(fp,"%3d    %5s    %3d       %3d       %3d         %3d     %4d\n",i+1,num[a[i][1]].name,num[a[i][1]].course[0],num[a[i][1]].course[1],num[a[i][1]].course[2],num[a[i][1]].course[3],num[a[i][1]].course[4]);

        }

        fprintf(fp,"----------------------------------------------------------------------\n");

        fprintf(fp,"\n");

        fclose(fp);

        printf("The data has been exported to RESULT.TXT Successfully!\n");

        printf("----------------------------------------------------------------------\n");

        goto Z;

    }

    if(tem0==4)

    {   clrscr();    goto Y;    }      /*清屏之后跳转到标记位置继续运行程序*/

}