Ying~~ 2022-01-03 23:46 采纳率: 100%
浏览 48
已结题

代码写出来运行是乱码?改了好多次都不对(标签-C语言|关键词-#include)

用C语言代码实现对一份成绩单的排序(成绩单包过姓名,成绩,年龄,学号4个内容)要求能根据用户的需要(选择),提供4种排序模式:
1,成绩由大到小。
2,姓名首字母由A到Z
3,年龄由小到大
4,学号由小到大

下面是我写的程序,出错了的
#include <stdio.h>#include <stdlib.h>struct student{ char name[20]; float score; int age; int num;}; void mode1( struct student stu[],int n)//参考书上307页(比较模式一){ struct student temp;//定义变量temp,排序时交换以便使用 int i,j,k; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++ ) if(stu[j].score>stu[k].score)//两两比较成绩,由高到低排列 k=j; temp=stu[k];stu[k]=stu[i];stu[i]=temp;//进行交换比较 }} void mode2(struct student stu[],int n)//(比较模式二){ struct student temp;//定义变量temp,排序时交换以便使用 int i,j,k; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++ ) if(stu[j].name<stu[k].name)//两两比较姓名首字母,由A到Z排列 k=j; temp=stu[k];stu[k]=stu[i];stu[i]=temp;//进行交换比较 }} void mode3(struct student stu[],int n)//(比较模式三){ struct student temp;//定义变量temp,排序时交换以便使用 int i,j,k; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++ ) if(stu[j].age<stu[k].age)//两两比较年龄,由小到大排列 k=j; temp=stu[k];stu[k]=stu[i];stu[i]=temp;//进行交换比较 }} void mode4(struct student stu[],int n)//(比较模式四), int n=4;//定义变量n为学生人数4{ struct student temp;//定义变量temp,排序时交换以便使用 int i,j,k; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++ ) if(stu[j].num<stu[k].num)//两两比较学号数字大小,由小到大排列 k=j; temp=stu[k];stu[k]=stu[i];stu[i]=temp;//进行交换比较 }} int main(){ struct student stu[4]={{"zhangsan",65,18,211301}, {"qiqi",89.5,17,211302}, {"wanger",75.3,15,211303}, {"mazi",93.7,19,211304}};//定义结构体数组,我理解为填写学生信息 int m,i,n; scanf("%d",&m); for(i=0;i<n;i++) {printf("%8s %6.2f %d %d\n",stu[i].name,stu[i].score,stu[i].age,stu[i].num);} printf("\n"); if(m==1) mode1; else if(m==2) mode2; else if(m==3) mode3; else if(m==4) mode4; for(i=0;i<n;i++) {printf("%8s %6.2f %d %d\n",stu[i].name,stu[i].score,stu[i].age,stu[i].num);} return 0;}

  • 写回答

2条回答 默认 最新

  • 关注

    你题目的解答代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    struct student
    {
        char name[20];
        float score;
        int age;
        int num;
    };
    void mode1(struct student stu[], int n) //参考书上307页(比较模式一)
    {
        struct student temp; //定义变量temp,排序时交换以便使用
        int i, j, k;
        for (i = 0; i < n - 1; i++)
        {
            k = i;
            for (j = i + 1; j < n; j++)
                if (stu[j].score > stu[k].score) //两两比较成绩,由高到低排列
                    k = j;
            temp = stu[k];
            stu[k] = stu[i];
            stu[i] = temp; //进行交换比较
        }
    }
    void mode2(struct student stu[], int n) //(比较模式二)
    {
        struct student temp; //定义变量temp,排序时交换以便使用
        int i, j, k;
        for (i = 0; i < n - 1; i++)
        {
            k = i;
            for (j = i + 1; j < n; j++)
                if (strcmp(stu[j].name , stu[k].name) < 0) //字符串比较要用strcmp
                    k = j;
            temp = stu[k];
            stu[k] = stu[i];
            stu[i] = temp; //进行交换比较
        }
    }
    void mode3(struct student stu[], int n) //(比较模式三)
    {
        struct student temp; //定义变量temp,排序时交换以便使用
        int i, j, k;
        for (i = 0; i < n - 1; i++)
        {
            k = i;
            for (j = i + 1; j < n; j++)
                if (stu[j].age < stu[k].age) //两两比较年龄,由小到大排列
                    k = j;
            temp = stu[k];
            stu[k] = stu[i];
            stu[i] = temp; //进行交换比较
        }
    }
    void mode4(struct student stu[], int n) //(比较模式四),
    {
        struct student temp; //定义变量temp,排序时交换以便使用
        int i, j, k;
        for (i = 0; i < n - 1; i++)
        {
            k = i;
            for (j = i + 1; j < n; j++)
                if (stu[j].num < stu[k].num) //两两比较学号数字大小,由小到大排列
                    k = j;
            temp = stu[k];
            stu[k] = stu[i];
            stu[i] = temp; //进行交换比较
        }
    }
    int main()
    {
        struct student stu[4] = {{"zhangsan", 65, 18, 211301}, {"qiqi", 89.5, 17, 211302}, {"wanger", 75.3, 15, 211303}, {"mazi", 93.7, 19, 211304}}; //定义结构体数组,我理解为填写学生信息
        int m, i, n;
        n = 4;           // 定义变量n为学生人数4 这行放这里
        scanf("%d", &m);
        for (i = 0; i < n; i++)
        {
            printf("%8s %6.2f %d %d\n", stu[i].name, stu[i].score, stu[i].age, stu[i].num);
        }
        printf("\n");
        if (m == 1)
            mode1(stu,n);//函数要用()调用
        else if (m == 2)
            mode2(stu,n);
        else if (m == 3)
            mode3(stu,n);
        else if (m == 4)
            mode4(stu,n);
        for (i = 0; i < n; i++)
        {
            printf("%8s %6.2f %d %d\n", stu[i].name, stu[i].score, stu[i].age, stu[i].num);
        }
        return 0;
    }
    

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

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

报告相同问题?

问题事件

  • 系统已结题 1月12日
  • 已采纳回答 1月4日
  • 创建了问题 1月3日

悬赏问题

  • ¥15 hexo+github部署博客
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥100 H5网页如何调用微信扫一扫功能?