當前位置:首頁 » 編程語言 » c語言如何在排序函數中輸出名次
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言如何在排序函數中輸出名次

發布時間: 2023-03-26 20:20:37

c語言編程:輸出成績排名

#include <stdio.h>
int main()
{
int i,j,temp,a[100]={0},ranking=0,n;
printf("請輸入學生數:\n");
scanf("%d",&n);
printf("請輸入學生成績:\n");
for (i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
//對成績排序
for (i=0;i<n;i++)
{
for (j=i+1;j<n;j++)
{
if (a[i]<a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
printf("成績由高到低順序排序:\n");
for (i=0;i<n;i++)
{
++ranking;
if ((a[i]==a[i-1]))
{
ranking=ranking-1;
}
printf("%d:%d\n",a[i],ranking);
}
printf("\n");
return 0;
}

⑵ C語言 學生成績排序 按學生的序號輸入 n 名學生的成績,按照分數由高到低的順序輸出學生的名次、序號和成績

#include<stdio.h>
#include<malloc.h>
typedefstructstudent
{
intid;
intscore;
structstudent*next;
}STU;
intstuIndex;

voidinputStuInfo(STU*stuHead);//輸入學生信息
voidorderStuInfo(STU*stuHead);//按照分數高到低順序重組鏈表
voidprintStuInfo(STU*stuHead,intflag);//列印學生信息。參數flag=0:正常列印鏈表信息。flag!=0:列印排序後的名次信息
intmain()
{
STU*stuHead=(STU*)malloc(sizeof(STU));
stuHead->next=NULL;
stuIndex=1;
inputStuInfo(stuHead);
printf("--列印原始輸入的鏈表!-- ");
printStuInfo(stuHead,0);
printf("--開始按分數降序排列!-- ");
orderStuInfo(stuHead);
printf("--鏈表按降序重組完成!-- ");
printf("--列印降序排序的鏈表!-- ");
printStuInfo(stuHead,1);
return0;
}
voidorderStuInfo(STU*stuHead)
{
STU*stuSave1=NULL,*stuSave2=NULL,stuSave3;
stuSave1=stuHead;
while(stuSave1->next!=NULL)//冒泡排序
{
stuSave2=stuSave1->next;
while(stuSave2->next!=NULL)
{
if(stuSave1->next->score<stuSave2->next->score)//交換成員值,保留原鏈表指針值
{
stuSave3=*(stuSave1->next);
stuSave1->next->id=stuSave2->next->id;
stuSave1->next->score=stuSave2->next->score;
stuSave2->next->id=stuSave3.id;
stuSave2->next->score=stuSave3.score;
}
stuSave2=stuSave2->next;
}
stuSave1=stuSave1->next;
}
}
voidprintStuInfo(STU*stuHead,intflag)
{
inti=1;
while(stuHead->next!=NULL)
{
if(flag==0)
printf("學生%d,成績%d ",stuHead->next->id,stuHead->next->score);
else
printf("第%d名,學生%d,成績%d ",i++,stuHead->next->id,stuHead->next->score);
stuHead=stuHead->next;
}
}
voidinputStuInfo(STU*stuHead)
{
intscore;
STU*stuNew=NULL,*stuTail=NULL;
while(1)
{
printf("輸入學生%d的成績:(輸入負數結束輸入)",stuIndex);
scanf("%d",&score);
if(score<0)
break;
stuNew=(STU*)malloc(sizeof(STU));
stuNew->score=score;
stuNew->id=stuIndex;
stuNew->next=NULL;
if(stuHead->next==NULL)
stuHead->next=stuNew;
else
stuTail->next=stuNew;
stuTail=stuNew;
stuIndex++;
}
}

⑶ 在c語言編程中 怎樣按名次輸出同學的姓名和學號

#include<stdio.h>
#include<malloc.h>
typedefstructstuInfo
{
intid;//學號
charname[10];//姓名
intscore;//成績
structstuInfo*next;
}STUINFO;
voidprintfStu(STUINFO*stuHead);//列印學生鏈表
voidinputInfo(STUINFO*stuHead);//輸入學生成績信息
voidorderByScore(STUINFO*stuHead);//按照成績名次排列。
intmain()
{
STUINFO*stuHead=(STUINFO*)malloc(sizeof(STUINFO));
stuHead->next=NULL;

inputInfo(stuHead);
printfStu(stuHead);
printf("按照名次排列,依次為:第一名、第二名、第三名。。。 ");
orderByScore(stuHead);
printfStu(stuHead);
}
voidprintfStu(STUINFO*stuHead)
{
printf("學號姓名成績 ");
while(stuHead->next!=NULL)
{
printf("%d%s%d ",stuHead->next->id,stuHead->next->name,stuHead->next->score);
stuHead=stuHead->next;
}
}
voidinputInfo(STUINFO*stuHead)
{
intid;
STUINFO*stuTail=NULL;
STUINFO*stuNew=NULL;
while(1)
{
stuNew=(STUINFO*)malloc(sizeof(STUINFO));
printf("輸入學生的學號、姓名、成績(學號輸入負數結束輸入):");
scanf("%d",&id);
if(id<0)
break;
else
stuNew->id=id;
scanf("%s%d",stuNew->name,&stuNew->score);
stuNew->next=NULL;
if(stuHead->next==NULL)
stuHead->next=stuNew;
else
stuTail->next=stuNew;
stuTail=stuNew;
}
}
voidorderByScore(STUINFO*stuHead)
{
STUINFOstuSave;
STUINFO*stuCurrent=stuHead->next;
STUINFO*stuNext=NULL;
while(stuCurrent!=NULL)//冒泡排序,鏈表節點成員值交換,鏈表指針不變
{
stuNext=stuCurrent->next;
while(stuNext!=NULL)
{
if(stuCurrent->score<stuNext->score)
{
stuSave=*stuCurrent;
*stuCurrent=*stuNext;
*stuNext=stuSave;
stuNext->next=stuCurrent->next;
stuCurrent->next=stuSave.next;
}
stuNext=stuNext->next;
}
stuCurrent=stuCurrent->next;
}
}

⑷ C語言成績排完了,怎麼把名次、學號打出來

用二維數組,每行對應一個學生的信息。每行5個元素。
排完後按照元素索引值列印出學號和排名。

⑸ c語言編程,輸出10位同學的成績及其所對應的名次。(相同的成績及名次可以不重復輸出)

#include<stdio.h>
structstudent
{
charszName[100];
intscore;//成績

//等號重載
studentoperator=(student&st)
{
sprintf(szName,st.szName);

score=st.score;
return*this;
}
};

intmain()
{
constintstuCount=10;
studentstuArray[stuCount];

for(inti=0;i<stuCount;i++)
{
printf("請輸入第%d個學生的姓名成績 ",(i+1));
scanf("%s%d",
stuArray[i].szName,
&stuArray[i].score);
}

//排序
for(inti=0;i<stuCount;i++)
{
for(intj=0;j<stuCount-i-1;j++)
{
if(stuArray[j+1].score>stuArray[j].score)
{
studentstu=stuArray[j];
stuArray[j]=stuArray[j+1];
stuArray[j+1]=stu;
}
}
}

//列印
printf("名次 姓名 成績 ");

for(inti=0;i<stuCount;i++)
{
printf("%d %s %d ",(i+1),stuArray[i].szName,stuArray[i].score);
}

return0;
}

運行結果如下:

⑹ C語言成績排名次。

#include<stdio.h>
#include<stdlib.h>
typedefintunit;//可改為double型
intcmp(constvoid*a,constvoid*b)
{
unitA=*(unit*)a;
unitB=*(unit*)b;
if(A<B)return1;
if(A>B)return-1;
return0;
}
inti,j,k,m,n;
unit*data;
intmain()
{
scanf("%d",&n);//輸入人數
data=(unit*)malloc(n*sizeof(unit));
for(i=0;i<n;i++)
{
if(sizeof(unit)==sizeof(int))scanf("%d",&data[i]);
elseif(sizeof(unit)==sizeof(double))scanf("%lf",&data[i]);
}
qsort(data,n,sizeof(data[0]),cmp);
for(i=0;i<n;i++)
{
if(sizeof(unit)==sizeof(int))printf("%d",data[i]);
elseif(sizeof(unit)==sizeof(double))printf("%lf",data[i]);
}
}

從高到低排分數

⑺ c語言怎麼把100個人的名字按姓名排序輸出

1 將100個人的姓名,存到二維字元數組中
2 通過strcmp比較。 通過strcpy賦值。 對二維字元數組進行排序
3 輸出排序的結果。

排序中,除了比較和賦值與普通的整型數組排序不同外,其他的 都一樣。