m0_74759683 2022-12-19 22:58 采纳率: 0%
浏览 27

请问我这个排序代码该怎么写啊

请问各位,这个排序该怎么写啊,我这为啥输出了这么多奇奇怪怪的东西

```c
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#define LEN sizeof(struct Student)
struct Student
{
char number[20]; //学号
char name[10]; //姓名
float Higher_mathematics;//高数
float C_programming_language;//C语言程序设计
float Sports;//体育
float English;//英语
float History_of_Chinese_Revolution;//中国革命史
float total;//总分
float average;//平均分
float credits;//学分
struct Student* next; //指向下一个数据的指针
}s[LEN];
struct Student* head = NULL;
struct Student* end = NULL;
void Menu()
{
void Menu();
void Add();
void View();
void ViewAll();
void rank();
void Statistics();
system("cls");
printf("\t\t\t============================================\n");
printf("\t\t\t| |\n");
printf("\t\t\t| 欢迎来到学生成绩管理系统 |\n");
printf("\t\t\t| |\n");
printf("\t\t\t|==========================================|\n");
printf("\t\t\t| 请选择要操作的命令 |\n");
printf("\t\t\t|------------------------------------------|\n");
printf("\t\t\t| |\n");
printf("\t\t\t| 1.录入学生信息 |\n");
printf("\t\t\t| 2.查找学生信息 |\n");
printf("\t\t\t| 3.显示全部学生信息 |\n");
printf("\t\t\t| 4.按学分排序 |\n");
printf("\t\t\t| 5.平均分各分段统计 |\n");
printf("\t\t\t| 6.退出系统 |\n");
printf("\t\t\t| |\n");
printf("\t\t\t============================================\n");
int choice;
loop:
scanf("%d",&choice);
switch (choice) {
case 1:
Add();
Menu();
case 2:
View();
Menu();
case 3:
ViewAll();
Menu();
case 4:
rank();
Menu();
case 5:
Statistics();
Menu();
case 6:
exit(0);
default:
printf("输入有误,请重新选择:");
goto loop;
}
}
//录入
void Add()
{
system("cls");
int count;
printf("请输入要录入信息的个数:");
scanf("%d",&count);
struct Student *s1,s2,temp;
s1=s2=(struct Student
)malloc(LEN);
if(head==NULL){
head = s1;
}else{
end->next = s1 ;
}
int i = 1,m = 0;
while(count>0){s1->credits=m ;
printf("请输入第%d位学生信息:\n",i++);
printf("学号:\n");
scanf("%s",&s1->number);
printf("姓名:\n");
scanf("%s",&s1->name);
printf("高等数学成绩:\n");
scanf("%f",&s1->Higher_mathematics);
printf("C语言程序设计成绩:\n");
scanf("%f",&s1->C_programming_language);
printf("体育成绩:\n");
scanf("%f",&s1->Sports);
printf("英语成绩:\n");
scanf("%f",&s1->English);
printf("中国革命史成绩:\n");
scanf("%f",&s1->History_of_Chinese_Revolution);
//学分
if(s1->Higher_mathematics>=60)
s1->credits+=5.0;
if(s1->C_programming_language>=60)
s1->credits+=3.5;
if(s1->Sports>=60)
s1->credits+=2.0;
if(s1->English>=60)
s1->credits+=3.0;
if(s1->History_of_Chinese_Revolution>=60)
s1->credits+=2.0;
s1->total=s1->Higher_mathematics+s1->C_programming_language+s1->Sports+s1->English+s1->History_of_Chinese_Revolution;//总分
s1->average=s1->total/5.0;//平均分
count--;
s2->next=s1;
s2=s1;
s1=(struct Student
)malloc(LEN);
printf("添加成功!\n");
system("pause");
system("cls");
}
s2->next= NULL;
end = s2;
printf("全部添加成功!\n");
system("pause");
}
//查找
void View()
{
system("cls");
struct Student *VS;
printf("输入要查询信息的学生学号:\n");
char num[10];
int flag=1;
scanf("%s",&num);
for(VS=head;VS!=NULL;){
if(strcmp(VS->number,num)==0){
printf("成功找到!\n");
printf("学号:%s\t姓名:%s\n",VS->number,VS->name);
printf("高数:%.2f\tC语言程序设计:%.2f\t体育:%.2f\t英语:%.2f\t中国革命史:%.2f总分:%.2f\t平均分:%.2f\t学分:%f\t",VS->Higher_mathematics,VS->C_programming_language,VS->Sports,VS->English,VS->History_of_Chinese_Revolution,VS->total,VS->average,VS->credits);
printf("\n");
flag=0;
break;
}
VS=VS->next;
}
if(flag){
printf("不好意思,未找到!\n");
}
system("pause");
}
//显示全部
void ViewAll()
{
system("cls");
struct Student *VA;
if(head!=NULL){
printf("所有学生成绩如下:\n");
printf("| 学 号 |姓 名|高数|C语言程序设计|体育|英语|中国革命史|总 分|均分|学分|\n");
for(VA=head;VA!=NULL;){
printf("%s %s ",VA->number,VA->name);
printf("%.1f\t %.1f\t%.1f\t%.1f\t%.1f\t%.1f\t%.2f\t%.1f\n",VA->Higher_mathematics,VA->C_programming_language,VA->Sports,VA->English,VA->History_of_Chinese_Revolution,VA->total,VA->average,VA->credits);
VA=VA->next;
}
}else{
printf("该系统中还未录入信息");
}
system("pause");
}
//统计
void Statistics()
{
system("cls");
int A=0,B=0,C=0,D=0,E=0;
struct Student *STA;
if(head!=NULL)
{
for(STA=head;STA!=NULL;)
{
if(STA->average<=100&&STA->average>=90)
A++;
if(STA->average<90&&STA->average>=80)
B++;
if(STA->average<80&&STA->average>=70)
C++;
if(STA->average<70&&STA->average>=60)
D++;
if(STA->average<60)
E++;
STA=STA->next;
}
printf("平均分在90到100的学生共%d个\n",A);
printf("平均分在80到90的学生共%d个\n",B);
printf("平均分在70到80的学生共%d个\n",C);
printf("平均分在60到70的学生共%d个\n",D);
printf("平均分不足60分的学生共%d个\n",E);
}else{
printf("该系统中还未录入信息");
}
system("pause");
}
//排序
void rank(struct Student s[],LEN)
{
system("cls");
Student temp;
int i,j,k;
for(i=0;i<LEN;i++)
{
for(j=0;j<LEN;j++)
{
if(s[j].credits > s[j+1].credits )
{
temp=*s[j];
*s[j]=*s[j+1];
*s[j+1]=temp;
}
}
}
printf("按学分排序后结果如下:\n");
for(k=0;k<LEN;k++)
{
printf("学号:%s\t姓名:%s",s[k].number,s[k].name);
printf("学分:%.2f\n",s[k].credits);
}
system("pause");
}
int main()
{
void Menu();
void Add();
void View();
void ViewAll();
void Statistics();
void rank();
Menu();
return 0;
}

```ase/static/image/mid/ask/177738164176119.jpg "#left")

  • 写回答

1条回答 默认 最新

  • Huazie 全栈领域优质创作者 2022-12-19 23:04
    关注

    img

    给你贴个示例:

    
    // 从后往前冒泡
    void sort(int a[],int n)
    {
        int i,j,t,noswap;
        for(i=0;i< n-1; i++)
        {
            noswap=1;
            for(j=n-1;j>i;j--)
                if(a[j-1]>a[j])
                {
                    t=a[j-1];
                    a[j-1]=a[j];
                    a[j]=t;
                    noswap=0;
                }
            if(noswap)    
                break;
        }
    }
    
    // 从前往后冒泡
    void sort1(int a[],int n)
    {
        int i,j,t,noswap;
        for(i=0;i< n-1; i++)
        {
            noswap=1;
            for(j=0;j<n-1-i;j++)
                if(a[j+1]<a[j])
                {
                    t=a[j+1];
                    a[j+1]=a[j];
                    a[j]=t;
                    noswap=0;
                }
            if(noswap)  
                break;
        }
    }
    
    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 12月19日
  • 创建了问题 12月19日

悬赏问题

  • ¥15 如何在vue3中使用div标签时用background-image: url("'templates/demo/src/assets/医院名称.jpg'")页面不显示背景图片?
  • ¥15 运动会成绩管理系统的设计与实现
  • ¥15 matlab支持向量机使用错误
  • ¥99 利用C/C++语言,使用TCP/IP协议,编一个简易聊天程序
  • ¥15 如何使用python 实现对串口/dev/ttyUSB0进行上锁,使得该串口只能在一个python脚本中使用,其他脚本不能操作这个串口
  • ¥15 晶体塑性有限元——Damask求解
  • ¥30 设计一个图形用户界面来控制你机械臂的运动
  • ¥30 3d打印机无法识别到SD卡,如何解决?(相关搜索:格式化)
  • ¥15 前端返回pdf时不显示内容
  • ¥50 如何在不能联网影子模式下的电脑解决usb锁