① c語言中排名問題
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#definestatusint
#defineNAME30/*各類名稱字數上限*/
#defineSTU100/*學生人數上限*/
#defineSUB10/*課程數上限*/
typedefstructrecord{
floatscore;/*成績分數*/
}record;
typedefstructstudent{
intid;/*索引性質的id*/
intno;/*學號*/
charname[NAME];/*姓名*/
recordscores[SUB];/*各門課成績分數*/
floattotalScore;/*總分*/
floataverageScore;/*平均分*/
intranking;/*名次*/
}student;
intsubNum=3;/*課程數*/
charsubject[SUB][NAME]={"數學","英語","計算機"};/*課程名稱*/
/**********************以下為函數聲明**********************/
intstuInfoEmpty(studentstu[],intstuNum);/*學生信息判空*/
statusinputStuInfo(studentstu[],intstuIndex,intsubNum);/*錄入單個學生信息*/
statusinputAllStuInfo(studentstu[],int*stuNum,intsubNum);/*錄入全部學生信息*/
statuscalcStuInfo(studentstu[],intstuIndex,intsubNum);/*計算處理單個學生信息*/
statuscalcAllStuInfo(studentstu[],intstuNum,intsubNum);/*計算處理全部學生信息*/
statusprintStuInfo(studentstu[],intstuIndex,intsubNum,intinclRanking);/*輸出單個學生信息*/
statusprintAllStuInfo(studentstu[],intstuNum,intsubNum,intinclRanking);/*輸出全部學生信息*/
statusdescSort(studentstu[],intstuNum,intsubNum);/*按總分降序排列並錄入名次*/
intgetCommand(void);/*輸入命令編號*/
statusprintMeunText(void);/*列印菜單文本*/
statusrunMeun(studentstu[],intstuNum,intsubNum);/*調出菜單*/
/**********************以上為函數聲明**********************/
intmain(void){
studentstu[STU]={-1};/*學生結構體數組*/
intstuNum;
inti;
runMeun(stu,stuNum,subNum);
return0;
}
/*學生信息判空*/
/*為空返回1;不空返回0*/
intstuInfoEmpty(studentstu[],intstuNum){
inti;
if(stuNum==0)
return1;
for(i=0;i<stuNum;i++)
if(stu[i].id==-1)
return1;
return0;
}
/*錄入單個學生信息*/
statusinputStuInfo(studentstu[],intstuIndex,intsubNum){
inti;
scanf("%d",&stu[stuIndex].no);/*學號*/
if(stu[stuIndex].no==-1){/*學號錄入-1以結束*/
stu[stuIndex].id=-1;
return-1;/*本次未錄入*/
}
scanf("%s",&stu[stuIndex].name);/*姓名*/
for(i=0;i<subNum;i++){
scanf("%f",&stu[stuIndex].scores[i].score);
}/*各門課成績分數*/
for(i=0;i<subNum;i++)
if(stu[stuIndex].scores[i].score>100||stu[stuIndex].scores[i].score<0)
return0;/*本次錄入錯誤*/
return1;/*本次錄入成功*/
}
/*錄入全部學生信息*/
statusinputAllStuInfo(studentstu[],int*stuNum,intsubNum){
inti,inputStatus,count;
puts("======================================================");
puts("錄入學生信息");
puts("======================================================");
putchar(' ');
if(*stuNum!=0){
printf("已有%d名學生信息! ",*stuNum);
putchar(' ');
puts("繼續錄入以新增(學號錄入-1以結束)↓↓");
putchar(' ');
}
else{
puts("請錄入學生信息(學號錄入-1以結束)↓↓");
putchar(' ');
}
/*錄入信息之表頭*/
puts("------------------------------------------------------");
printf(" 學號 姓名 ");
for(i=0;i<subNum;i++)
printf("%s ",subject[i]);
putchar(' ');
puts("------------------------------------------------------");
/*錄入信息*/
count=0;
i=*stuNum;
while(1){
printf("第%d名學生 ",i+1);
stu[i].id=i+1;
inputStatus=inputStuInfo(stu,i,subNum);
if(inputStatus==1){
i++;
count++;
}
elseif(inputStatus==0){
putchar(' ');
puts("成績輸入錯誤!請重新輸入↓");
continue;
}
elseif(inputStatus==-1)
break;
}
*stuNum+=count;
puts("------------------------------------------------------");
putchar(' ');
putchar(' ');
if(count!=0)
printf("本次%d名學生信息錄入完畢!即將返回主菜單。 ",count);
else
printf("您本次未輸入學生信息!即將返回主菜單。 ");
putchar(' ');
puts("按任意鍵繼續...");
putchar(' ');
fflush(stdin);
getch();
return1;
}
/*計算處理單個學生信息*/
statuscalcStuInfo(studentstu[],intstuIndex,intsubNum){
inti;
stu[stuIndex].totalScore=stu[stuIndex].averageScore=0;
/*計算總分*/
for(i=0;i<subNum;i++){
stu[stuIndex].totalScore+=stu[stuIndex].scores[i].score;
}
stu[stuIndex].averageScore=stu[stuIndex].totalScore/subNum;/*計算平均分*/
return1;
}
/*計算處理全部學生信息*/
statuscalcAllStuInfo(studentstu[],intstuNum,intsubNum){
inti;
/*計算總分、平均分等*/
for(i=0;i<stuNum;i++)
calcStuInfo(stu,i,subNum);
return1;
}
/*輸出單個學生信息*/
statusprintStuInfo(studentstu[],intstuIndex,intsubNum,intinclRanking){
inti;
if(inclRanking)
printf("%d ",stu[stuIndex].ranking);/*名次*/
printf("%d ",stu[stuIndex].no);/*學號*/
printf("%s ",stu[stuIndex].name);/*姓名*/
for(i=0;i<subNum;i++)/*各門課成績分數*/
printf("%.2f ",stu[stuIndex].scores[i].score);
printf("%.2f ",stu[stuIndex].totalScore);/*總分*/
printf("%.2f ",stu[stuIndex].averageScore);/*平均分*/
putchar(' ');
return1;
}
/*輸出全部學生信息*/
statusprintAllStuInfo(studentstu[],intstuNum,intsubNum,intinclRanking){
inti;
if(stuInfoEmpty(stu,stuNum)){
puts("尚未錄入學生信息!即將返回主菜單。");
putchar(' ');
puts("按任意鍵繼續...");
putchar(' ');
fflush(stdin);
getch();
return0;
}
puts("======================================================");
puts("全部學生信息");
puts("======================================================");
putchar(' ');
if(inclRanking)
printf("%d名學生信息如下,按總分由高到低排列名次↓↓ ",stuNum);
else
printf("%d名學生信息如下↓↓ ",stuNum);
putchar(' ');
/*輸出信息之表頭*/
puts("------------------------------------------------------");
if(inclRanking)
printf("名次 ");
printf("學號 ");
printf("姓名 ");
for(i=0;i<subNum;i++)
printf("%s ",subject[i]);
printf("總分 ");
printf("平均分 ");
putchar(' ');
puts("------------------------------------------------------");
/*輸出信息*/
for(i=0;i<stuNum;i++)
printStuInfo(stu,i,subNum,inclRanking);
puts("------------------------------------------------------");
putchar(' ');
putchar(' ');
puts("學生信息輸出完畢!即將返回主菜單。");
putchar(' ');
puts("按任意鍵繼續...");
putchar(' ');
fflush(stdin);
getch();
return1;
}
/*按總分降序排序、錄入名次並輸出*/
statusdescSort(studentstu[],intstuNum,intsubNum){
inti,j;
studenttemp;
if(stuInfoEmpty(stu,stuNum))
return0;
/*按總分降序*/
for(i=0;i<stuNum-1;i++)
for(j=0;j<stuNum-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;i<stuNum;i++)
stu[i].ranking=i+1;
return1;
}
/*輸入命令編號*/
intgetCommand(void){
intkey;/*命令編號*/
printf("請輸入命令編號以開啟操作:");
scanf("%d",&key);
returnkey;
}
/*列印菜單文本*/
statusprintMeunText(void){
puts("======================================================");
puts("學生信息管理");
puts("------------------------------------------------------");
printf("%4c 功能詳情 ",'#');
puts("------------------------------------------------------");
printf("%4d 輸入學生信息 ",1);
printf("%4d 按成績由高到低排序 ",2);
printf("%4d 退出 ",7);
puts("======================================================");
putchar(' ');
return1;
}
statusrunMeun(studentstu[],intstuNum,intsubNum){
intkey;
do{
system("cls");/*清屏*/
printMeunText();/*列印菜單文本*/
key=getCommand();/*輸入命令編號*/
putchar(' ');
switch(key){
case1:system("cls");inputAllStuInfo(stu,&stuNum,subNum);calcAllStuInfo(stu,stuNum,subNum);break;
case2:system("cls");descSort(stu,stuNum,subNum);printAllStuInfo(stu,stuNum,subNum,1);break;
case7:puts("程序結束! ");break;
default:puts("輸入錯誤,請重新輸入! 按任意鍵繼續...");getch();break;
}
}while(key!=7);
getch();
return1;
}
運行結果
主菜單
② c程序設計,提示rank函數未聲明,還有第二個和第三個else未配對,怎麼修改呢
#include<stdio.h>
intx=0,y=0,z=0;
voidrank(inta,intb,intc)
{
if(a>b)
{
if(a>c)
{
if(b>c)
{
//cba
x=a,y=b,z=c;
}
else
{
//bca
x=a,y=c,z=b;
}
}
else
{
//bac
x=c,y=a,z=b;
}
}
else
{
if(a<c)
{
if(b>c)
{
//a<c<b
x=b,y=c,z=a;
}
else
{
//a<b<c
x=c,y=b,z=a;
}
}
else
{
if(b>c)
{
//c<a<b
x=b,y=a,z=c;
}
else
{
//a<b<c
x=c,y=b,z=a;
}
}
}
}
intmain()
{
inta=0,b=0,c=0;
scanf("%d,%d,%d",&a,&b,&c);
rank(a,b,c);
printf("%d,%d,%d ",x,y,z);
}
③ c語言中rank函數怎麼用
c語言中rank函數是自定義的函數吧?如果是的話,怎麼用,還必須看這個函數是怎麼定義的了。
④ C語言中,如何生成身份證年份的隨機數(用rank()函數),並校驗身份證是否合法
最後4位數字中的前兩位表示當地派出所的編碼;
倒數第二位表示公民是男性還是女性(男性用單數,女性用雙數);
最後一位數字是一個隨機數,又稱為校驗碼。 用來檢驗身份證的正確性。校檢碼可以是0~9的數字,有時也用x表示。
⑤ c語言--有關學生的成績排名
小小我一般不搞這東西的,老生常談。看你那麼急,急人所難吧。程序已調試通過。
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define N 5
struct student
{
char num[6];
char name[8];
int score[4];
int All;
int rank;
} stu[5];
void input()
{
int i,m,j;
for(i=0;i<5;i++)
{ stu[i].All=0;
stu[i].rank=1;/* 名次預置初值 */
printf("\n請輸入第 %d個學生數據\n",i+1);
printf("學號: ");
scanf("%s",stu[i].num);
printf("姓名: ");
scanf("%s",stu[i].name);
for(j=0;j<4;j++)
{
printf("成績 %d:",j+1);
scanf("%d",&stu[i].score[j]);
stu[i].All=stu[i].All+stu[i].score[j];
}
}
printf("\n");
for(i=0;i<5;i++)
for(m=0;m<5;m++)
if(stu[i].All<stu[m].All)stu[i].rank++;
}
void print()/* stu[]是全局結構體變數,無需作為參數傳遞 ,函數無返回值聲明為void型,不聲明默認返回類型為int型 */
{
int i,j;
system("cls");/*為了增加可移植性,用這個代替clrscr(),因為clrscr()不是標准庫函數*/
for(i=0;i<60;i++)printf("-");
printf("\n");
printf("| 學號 | 姓名 | 數學 | 英語 | 計算機| 哲學 |\n");
for(i=0;i<5;i++)
{
for(j=0;j<60;j++)
printf("-");
printf("\n");
printf("| %5s | %10s ",stu[i].num,stu[i].name);
for(j=0;j<4;j++)
printf("| %3d ",stu[i].score[j]);
printf("|\n");
}
for(i=0;i<60;i++)printf("-");
}
void print1()
{
int i,j;
system("cls");
for(i=0;i<77;i++)printf("-");
printf("\n");
printf("| 學號 | 姓名 | 數學 | 英語 | 計算機| 哲學 | 總分 | 名次|\n");
for(i=0;i<5;i++)
{
for(j=0;j<77;j++)
printf("-");
printf("\n");
printf("| %5s | %10s ",stu[i].num,stu[i].name);
for(j=0;j<4;j++)
printf("| %3d ",stu[i].score[j]);
printf("| %5d |",stu[i].All);
printf(" %2d |\n",stu[i].rank);
}
for(i=0;i<77;i++)printf("-");
}
int main()
{
int i,j;
for(j=1;j<5;j++)
{
system("cls");
printf("Please select:\n");
printf("1: input data.\n");
printf("2: print original data.\n");
printf("3: print the sorted data.\n");
printf("4: exit.\n");
scanf("%d",&i);
switch(i)
{
case 1 : input(); break; /* input()函數根本沒有實參,沒有實參怎麼可以有形參勒?實參形參要對應哦,這里也不需要實參,下同 */
case 2 : print(); getch();break;
case 3 : print1();getch();break;
case 4 : break;
}
}
system("pause");
return 0;
}
/* 不要這樣寫: */
/* void input() */
/* struct student stu[]; */
/* 這不符合現在的ANSI的c99標准 ,現在被認為是錯誤的,要這樣寫 */
/* void input(struct student stu[]) 當然我說的是當需要傳遞參數的情況下 */
⑥ C語言游戲積分排序功能
把你的grade給改成int了,後面寫入mark.txt也改成直接寫int方便後面的讀取,加了一個排名函數你看看,完整的在下面。還有樓主程序還不完善,比如我要是兩次輸入時
abc
abcdddddddd
得到的正確率照樣是100%,可以繼續改改
#include <string.h>
#include <stdio.h>
#include<conio.h>
void rank(int grade)
{
FILE *p;
int a[50],i=0,j,n,temp,flag;
p=fopen("mark.txt","r");
if(!p)
{
return;
}
while(!feof(p))
{
fscanf(p,"%d",&a[i]);
i++;
}//數組a讀文件
n=i-1;//記錄排行榜人數
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;
}//從大到小排序
for(i=0;i<n;i++)if(a[i]==grade)
{
flag=i;
break;
}//記錄當前人員位置
printf("===Ranking List===\nRank\tGrades\n");
for(i=0;i<n;i++)
{
printf("%d\t%d%%",i+1,a[i]);
if(i==flag)printf("\tYour site");
printf("\n");
}//列印
fclose(p);
}
int main()
{
FILE *fp;
int grade;//建議設置int型
char c;
char correct_text[1000];/*聲明輸入要練習的內容*/
char typed_text[1000];/*聲明對照上行進行打字練習*/
int totallength;/*聲明內容長度*/
int typedlength;/*聲明輸入內容*/
int correctnum = 0;/*聲明初始准確數為0*/
int i;
printf(" ******************************\n");
printf(" *------歡迎進入打字練習------*\n");
printf(" ******************************\n");
printf("please input the correct text:\n");
scanf("%s",correct_text);/*輸入要練習的內容*/
printf("Now begin to test:\n");
scanf("%s",typed_text);
totallength = strlen(correct_text);/*得出輸入的字元長度*/
typedlength = strlen(typed_text);/*得出是練習的字元長度*/
for(i = 0;i < totallength && i < typedlength; i++)
{
if(correct_text[i] == typed_text[i])
{
correctnum ++;/*運用循環結構,對打字練習時輸 入的正確字元的個數自動加1*/
}
}
grade=correctnum*100/totallength;
printf("Your accuracy is %d%%",correctnum*100/totallength);/*得出練習的結果*/
fp=fopen("mark.txt","a");
fprintf(fp,"%d\n",grade);//建議文件直接寫入int型方便後面的讀入
fclose(fp);
printf("\nWanna see your ranking? y/n:");
c=getchar();//過濾回車
c=getchar();
if(c=='y'||c=='Y')rank(grade);
}
⑦ C語言學生成績排名
舉個例子,學生的成績依次為:7,5,6,3,8,排名初始化為1,2,3,4,5
根據你的程序:
經過第一次循環,即i=0;j=0時,程序排序依舊為7,5,6,3,8;排名為:1,3,2,5,4
如果在往下循環執行,第五名同學的最高成績「8」分,將永遠處於第4名;
所以,有錯誤。。。
修改建議:
可以參考排序,每次循環總能得到一個最大值,將此最大值所在結構體的排名rank賦值:
大概如下:
for(i=0;i<5;i++)
{
for(j=0;j<4-i;j++)
{
if(student[j].total>student[j+1].total)
{
//temp也是結構體,交換
temp = student[j];
student[j] = student[j+1];
student[j+1] = temp;
}
}
student[j].rank = i+1;
}
也可以用結構體指針,不需要每次交換,只需要標記下最大值,然後賦予名次~
⑧ c語言,int rank(int key,int []a)是什麼意思
這寫錯了吧?
應該是
int rank(int key,int a[])
用戶自定義的函數,光看函數名和參數表,是不能確定其功能的,這是由編程者自己定義的。
照字面意思,是求key在a數組中的排名。
⑨ c語言; int rank=4; int* y = (int*)malloc(4 * rank * rank);//這句是什麼意思
定義rank為整形數值為4,用malloc函數向內存申請存儲空間,所申請空間的長度為(4*rank*rank)所佔內存的長度,並將所申請的地址強制轉換為整形指針類型,並將其付給指針*y。