include cstdlib 或 #include stdlib.h

成都創(chuàng)新互聯(lián)是專業(yè)的袁州網(wǎng)站建設(shè)公司,袁州接單;提供網(wǎng)站建設(shè)、網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行袁州網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
qsort(void* base, size_t num, size_t width, int(*)compare(const void* elem1, const void* elem2))
參數(shù)表
*base: 待排序的元素(數(shù)組,下標(biāo)0起)。
num: 元素的數(shù)量。
width: 每個(gè)元素的內(nèi)存空間大小(以字節(jié)為單位)。可用sizeof()測(cè)得。
int(*)compare: 指向一個(gè)比較函數(shù)。*elem1 *elem2: 指向待比較的數(shù)據(jù)。
比較函數(shù)的返回值
返回值是int類型,確定elem1與elem2的相對(duì)位置。
elem1在elem2右側(cè)返回正數(shù),elem1在elem2左側(cè)返回負(fù)數(shù)。
控制返回值可以確定升序/降序。
產(chǎn)生隨機(jī)數(shù)的函數(shù)也是rand(),不是rank().
#include?stdio.h
#include?stdlib.h
#include?string.h
#define?status?int?
#define?NAME?30?/*各類名稱字?jǐn)?shù)上限*/
#define?STU?100?/*學(xué)生人數(shù)上限*/
#define?SUB?10?/*課程數(shù)上限*/
typedef?struct?record?{
float?score;?/*成績(jī)分?jǐn)?shù)*/
}?record;
typedef?struct?student?{
int?id;?/*索引性質(zhì)的id*/
int?no;?/*學(xué)號(hào)*/
char?name[NAME];?/*姓名*/
record?scores[SUB];?/*各門課成績(jī)分?jǐn)?shù)*/
float?totalScore;?/*總分*/
float?averageScore;?/*平均分*/
int?ranking;?/*名次*/
}?student;
int?subNum?=?3;?/*課程數(shù)*/
char?subject[SUB][NAME]?=?{"數(shù)學(xué)","英語(yǔ)","計(jì)算機(jī)"};?/*課程名稱*/
/**********************以下為函數(shù)聲明**********************/
int?stuInfoEmpty?(student?stu[],?int?stuNum);?/*學(xué)生信息判空*/
status?inputStuInfo?(student?stu[],?int?stuIndex,?int?subNum);?/*錄入單個(gè)學(xué)生信息*/
status?inputAllStuInfo?(student?stu[],?int?*stuNum,?int?subNum);?/*錄入全部學(xué)生信息*/
status?calcStuInfo?(student?stu[],?int?stuIndex,?int?subNum);?/*計(jì)算處理單個(gè)學(xué)生信息*/
status?calcAllStuInfo?(student?stu[],?int?stuNum,?int?subNum);?/*計(jì)算處理全部學(xué)生信息*/
status?printStuInfo?(student?stu[],?int?stuIndex,?int?subNum,?int?inclRanking);?/*輸出單個(gè)學(xué)生信息*/
status?printAllStuInfo?(student?stu[],?int?stuNum,?int?subNum,?int?inclRanking);?/*輸出全部學(xué)生信息*/
status?descSort?(student?stu[],?int?stuNum,?int?subNum);?/*按總分降序排列并錄入名次*/
int?getCommand?(void);?/*輸入命令編號(hào)*/
status?printMeunText?(void);?/*打印菜單文本*/
status?runMeun?(student?stu[],?int?stuNum,?int?subNum);?/*調(diào)出菜單*/
/**********************以上為函數(shù)聲明**********************/
int?main?(void)?{
student?stu[STU]?=?{-1};?/*學(xué)生結(jié)構(gòu)體數(shù)組*/
int?stuNum;
int?i;
runMeun?(stu,?stuNum,?subNum);
return?0;
}
/*學(xué)生信息判空*/
/*為空返回1;不空返回0*/
int?stuInfoEmpty?(student?stu[],?int?stuNum)?{
int?i;
if?(stuNum?==?0)
return?1;
for?(i=0;?istuNum;?i++)
if?(stu[i].id?==?-1)
return?1;
return?0;
}
/*錄入單個(gè)學(xué)生信息*/
status?inputStuInfo?(student?stu[],?int?stuIndex,?int?subNum)?{
int?i;
scanf?("%d",stu[stuIndex].no);?/*學(xué)號(hào)*/
if?(stu[stuIndex].no?==?-1)?{?/*學(xué)號(hào)錄入-1以結(jié)束*/
stu[stuIndex].id?=?-1;
return?-1;?/*本次未錄入*/
}
scanf?("%s",stu[stuIndex].name);??/*姓名*/
for?(i=0;?isubNum;?i++)?{
scanf?("%f",stu[stuIndex].scores[i].score);
}?/*各門課成績(jī)分?jǐn)?shù)*/
for?(i=0;?isubNum;?i++)
if?(stu[stuIndex].scores[i].score100?||?stu[stuIndex].scores[i].score0)
return?0;?/*本次錄入錯(cuò)誤*/
return?1;?/*本次錄入成功*/
}
/*錄入全部學(xué)生信息*/
status?inputAllStuInfo?(student?stu[],?int?*stuNum,?int?subNum)?{
int?i,inputStatus,count;
puts?("======================================================");
puts?("錄入學(xué)生信息");
puts?("======================================================");
putchar?('\n');
if?(*stuNum!=0)?{
printf?("已有%d名學(xué)生信息!\n",*stuNum);
putchar?('\n');
puts?("繼續(xù)錄入以新增(學(xué)號(hào)錄入-1以結(jié)束)↓↓");
putchar?('\n');
}
else?{
puts?("請(qǐng)錄入學(xué)生信息(學(xué)號(hào)錄入-1以結(jié)束)↓↓");
putchar?('\n');
}
/*錄入信息之表頭*/
puts?("------------------------------------------------------");
printf?("\t\t學(xué)號(hào)\t姓名\t");
for?(i=0;?isubNum;?i++)
printf?("%s\t",subject[i]);
putchar?('\n');
puts?("------------------------------------------------------");
/*錄入信息*/
count=0;
i=*stuNum;
while?(1)?{
printf?("第%d名學(xué)生\t",i+1);
stu[i].id?=?i+1;
inputStatus?=?inputStuInfo?(stu,?i,?subNum);
if?(inputStatus==1)?{
i++;
count++;
}
else?if?(inputStatus==0)?{
putchar?('\n');
puts?("成績(jī)輸入錯(cuò)誤!請(qǐng)重新輸入↓");
continue;
}
else?if?(inputStatus==-1)
break;
}
*stuNum?+=?count;
puts?("------------------------------------------------------");
putchar?('\n');
putchar?('\n');
if?(count!=0)
printf?("本次%d名學(xué)生信息錄入完畢!即將返回主菜單。\n",count);
else
printf?("您本次未輸入學(xué)生信息!即將返回主菜單。\n");
putchar?('\n');
puts?("按任意鍵繼續(xù)...");
putchar?('\n');
fflush?(stdin);
getch?();
return?1;
}
/*計(jì)算處理單個(gè)學(xué)生信息*/
status?calcStuInfo?(student?stu[],?int?stuIndex,?int?subNum)?{
int?i;
stu[stuIndex].totalScore?=?stu[stuIndex].averageScore?=?0;
/*計(jì)算總分*/
for?(i=0;?isubNum;?i++)?{
stu[stuIndex].totalScore?+=?stu[stuIndex].scores[i].score;
}
stu[stuIndex].averageScore?=?stu[stuIndex].totalScore/subNum;?/*計(jì)算平均分*/
return?1;
}
/*計(jì)算處理全部學(xué)生信息*/
status?calcAllStuInfo?(student?stu[],?int?stuNum,?int?subNum)?{
int?i;
/*計(jì)算總分、平均分等*/?
for?(i=0;?istuNum;?i++)
calcStuInfo?(stu,?i,?subNum);
return?1;
}
/*輸出單個(gè)學(xué)生信息*/
status?printStuInfo?(student?stu[],?int?stuIndex,?int?subNum,?int?inclRanking)?{
int?i;
if?(inclRanking)
printf?("%d\t",stu[stuIndex].ranking);??/*名次*/
printf?("%d\t",stu[stuIndex].no);?/*學(xué)號(hào)*/
printf?("%s\t",stu[stuIndex].name);??/*姓名*/
for?(i=0;?isubNum;?i++)??/*各門課成績(jī)分?jǐn)?shù)*/
printf?("%.2f\t",stu[stuIndex].scores[i].score);
printf?("%.2f\t",stu[stuIndex].totalScore);??/*總分*/
printf?("%.2f\t",stu[stuIndex].averageScore);??/*平均分*/
putchar?('\n');
return?1;
}
/*輸出全部學(xué)生信息*/
status?printAllStuInfo?(student?stu[],?int?stuNum,?int?subNum,?int?inclRanking)?{
int?i;
if?(stuInfoEmpty?(stu,stuNum))?{
puts?("尚未錄入學(xué)生信息!即將返回主菜單。");
putchar?('\n');
puts?("按任意鍵繼續(xù)...");
putchar?('\n');
fflush?(stdin);
getch?();
return?0;?
}
puts?("======================================================");
puts?("全部學(xué)生信息");
puts?("======================================================");
putchar?('\n');
if?(inclRanking)
printf?("%d名學(xué)生信息如下,按總分由高到低排列名次?↓↓\n",stuNum);
else?
printf?("%d名學(xué)生信息如下?↓↓\n",stuNum);
putchar?('\n');
/*輸出信息之表頭*/
puts?("------------------------------------------------------");
if?(inclRanking)
printf?("名次\t");
printf?("學(xué)號(hào)\t");
printf?("姓名\t");
for?(i=0;?isubNum;?i++)
printf?("%s\t",subject[i]);
printf?("總分\t");
printf?("平均分\t");?
putchar?('\n');
puts?("------------------------------------------------------");
/*輸出信息*/
for?(i=0;?istuNum;?i++)
printStuInfo?(stu,?i,?subNum,?inclRanking);
puts?("------------------------------------------------------");
putchar?('\n');
putchar?('\n');
puts?("學(xué)生信息輸出完畢!即將返回主菜單。");
putchar?('\n');
puts?("按任意鍵繼續(xù)...");
putchar?('\n');
fflush?(stdin);
getch?();
return?1;
}
/*按總分降序排序、錄入名次并輸出*/
status?descSort?(student?stu[],?int?stuNum,?int?subNum)?{
int?i,j;
student?temp;
if?(stuInfoEmpty?(stu,stuNum))
return?0;
/*按總分降序*/
for?(i=0;?istuNum-1;?i++)
for?(j=0;?jstuNum-1-i;?j++)
if?(stu[j].totalScore??stu[j+1].totalScore)?{
temp?=?stu[j];
stu[j]?=?stu[j+1];
stu[j+1]?=?temp;
}
/*錄入名次*/
for?(i=0;?istuNum;?i++)
stu[i].ranking?=?i+1;?
return?1;
}
/*輸入命令編號(hào)*/
int?getCommand?(void)?{
int?key;?/*命令編號(hào)*/
printf("請(qǐng)輸入命令編號(hào)以開啟操作:");
scanf?("%d",key);
return?key;
}
/*打印菜單文本*/
status?printMeunText?(void)?{
puts?("======================================================");
puts?("學(xué)生信息管理");
puts?("------------------------------------------------------");
printf?("%4c\t功能詳情\n",'#');
puts?("------------------------------------------------------");
printf?("%4d\t輸入學(xué)生信息\n",1);
printf?("%4d\t按成績(jī)由高到低排序\n",2);
printf?("%4d\t退出\n",7);
puts?("======================================================");
putchar?('\n');
return?1;
}
status?runMeun?(student?stu[],?int?stuNum,?int?subNum)?{
int?key;
do?{
system("cls");?/*清屏*/
printMeunText?();?/*打印菜單文本*/
key?=?getCommand?();?/*輸入命令編號(hào)*/
putchar('\n');
switch?(key)?{
case?1:?system("cls");?inputAllStuInfo?(stu,?stuNum,?subNum);?calcAllStuInfo?(stu,?stuNum,?subNum);?break;
case?2:?system("cls");?descSort?(stu,?stuNum,?subNum);?printAllStuInfo?(stu,?stuNum,?subNum,?1);?break;
case?7:?puts("程序結(jié)束!\n");?break;
default:puts("輸入錯(cuò)誤,請(qǐng)重新輸入!\n\n\n按任意鍵繼續(xù)...");?getch?();?break;
}
}?while?(key!=7);
getch?();
return?1;
}
運(yùn)行結(jié)果
主菜單
錄入學(xué)生信息
排名次并輸出
這寫錯(cuò)了吧?
應(yīng)該是
int rank(int key,int a[])
用戶自定義的函數(shù),光看函數(shù)名和參數(shù)表,是不能確定其功能的,這是由編程者自己定義的。
照字面意思,是求key在a數(shù)組中的排名。
c語(yǔ)言中rank函數(shù)是自定義的函數(shù)吧?如果是的話,怎么用,還必須看這個(gè)函數(shù)是怎么定義的了。
int main(){
srand(time(0));
int i = 0;
scanf("%d",i);
i += rand()%7-3;//讓i加上一個(gè)-3到3的數(shù)……
printf("%d",i);
}
網(wǎng)站欄目:c語(yǔ)言中rank函數(shù),rank函數(shù)怎么用c語(yǔ)言
文章分享:http://chinadenli.net/article7/dsipoij.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、外貿(mào)建站、App設(shè)計(jì)、網(wǎng)站建設(shè)、網(wǎng)站策劃、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)