⑴ 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語言成績排名次。
#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]);
}
}
從高到低排分數
⑶ 截止到2021年世界編程語言排行榜中C語言處在什麼位置
排名第三的位置。2021年世界編程語言C語言排行榜(java被python超越,位居第三)。
⑷ 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語言中排名怎麼搞
C語言用struct實現,把信息包含在同一個struct裡面就可以了,每個struct對應一個學生。然後你建立一個N維struct數組即可。
或者C++用類實現。
再普通一些,用鏈表,把所有數據通過指針項定位進行綁定。
⑹ C語言N名同學,排成一排,有多少中排列方法
這個問題需要拆解成兩個部分解決:
1.n個同學排成一排的數學解
2.將上面數學解或者數學過程轉化為程序代碼
於是:
對於第1部分:
這個是一個全排列問題,解為n的階乘,表示為:n!=1*2*3...*n
如果沒學過,稍微解釋一下為什麼:
n個人排一排,那麼顯然肯定是n個位置,我們順序來看,第一個位置:可以隨便放n個人中任何一個,所以n種可能;第二個位置:前面已經放了一個人,也就總共只有n-1個人了,所以只能n-1種可能...到最後一個位置,只剩下最後一個人了,所以只有最後1種可能;
那麼上面乘起來就是n!種情況了
於是第二個部分,實現n!
顯然需要遞歸或者循環,看學過哪個吧~
下面只寫核心部分,聲明就略了
result表示結果,建議考慮用long或者更大位數的,階乘很可怕,結果數值很大
循環(for為例):
for(int i=1;i<=n;i++){
result*=i;
}
遞歸
主函數調用:Func(n);
函數聲明:
long Func(int value){
if(value==1)
return 1;
else
return value*Func(value-1);
}
⑺ 為什麼C語言在最新的排行榜上排第一
開始學習不在於多,而在於精.
初學者不要過多停留在語言與工具的表面.學習一門能深入底層的語言,最好的選擇是:匯編,C,C++.我感覺C/C++足以,匯編用於調試和嵌入匯編就可以了.我選擇的是C語言,因為它入門簡單,深入難,需要數據結構和演算法支持,這樣能更好的學習數據結構和演算法.
初學者不要使用Java,VC++的MFC,VB,那樣會很危險的.如果無深入底層,停留在語言表面過久,不利於初學者未來的發展和繼續學習.對! 你可以用JAVA編程,你可以用MFC做出東西,你也可以用VB程序.但是一些比較底層的東西你一點都不知道,連匯編的調試也不懂,程序BUG在那裡也不知道.那永遠只是一個熟練使用錘子的工人,難道你不想成為建築工程師嗎?樓房是你構思的,圖紙是你畫的,而不是建造樓房中的一個不起眼的埋頭工作的工人.
深入底層學習大概: C/C++ ->數據結構->編譯原理
數字電路和匯編語言->計算機組成原理
操作系統->Linux內核
自己再動手寫一個比較簡單的內核.
為什麼要學習內核.why?因為內核是一個學習軟體工程最好的摸版,有很多技巧,技術,是C/C++課本上無法學到的,這主要是把理論知識總結起來.為什麼要自己寫一個簡單的操作系統內核,大家也知道,沒有什麼比實踐更容易理解.等你把簡單的內核完成的時候,你的計算機組成原理,操作系統,Linux內核, 數據結構,C語言,匯編會得到一個更深層次的理解.
這些東西,是那些只能玩玩 VB,VC++,JAVA的低級程序員能理解的嗎?這就是為什麼有些高級程序員,只要看看的VB的書,不用兩三天就能掌握的原因.你叫java程序員來試一下.
所以說,成為了高手,基礎打牢靠了,學什麼都簡單.比起你今年學個java,明年又學個VC++.最後沒有一樣能學好.不如把時間用來打好基礎.
希望各位能給未來的軟體產業作出貢獻. 希望大家多多支持Linux和開源軟體.
我也是一名正在學習中的大一新生.我之所以能有這樣的思想,真的沒有什麼好好奇的.那是我從以前的各位大師身上吸取的思想.我也正在為成為高手而努力.
想為成為高手而努力,就不要把時間浪費在打游戲,打牌,彈吉他等一些事情上了,我們計算機學院的學生都是網游成風,我真為他們擔心,更為中國未來軟體的產業擔心.
⑻ 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語言為什麼在計算機應用語言排名第一
你這么說是不準確的。看在哪方面的應用了,有些方面它當然是不如一些特殊的語言的。每種語言都有自己的優點和缺點。
⑽ c語言 學生成績排名
#include<stdio.h>
voidsetList(int*a,intlen);
voidprintfList(int*a,intlen);
voidpxList(int*a,intlen);
voidinsertList(int*a,intlen);
voidfanList(int*a,intlen);
intmain()
{
inta[11];//1.定義一個數組a[11],用以存放學生的成績。
setList(a,10);//2.從鍵盤輸入10個學生成績。
pxList(a,10);//3.採用選擇法,將學生成績按照從高到低進行排序。
printfList(a,10);
insertList(a,10);//4.再輸入一個學生的成績,將此成績按照排序規律插入原學生成績數組。
printfList(a,11);
fanList(a,11);//5.將排好序的成績單進行反序存放,即原來是從高到低,現在改為從低到高排列
printfList(a,11);
return0;
}
voidsetList(int*a,intlen)//輸入
{
inti;
printf("請輸入%d個學生成績
",len);
for(i=0;i<len;i++)
scanf("%d",&a[i]);
}
voidprintfList(int*a,intlen)//列印數組
{
inti;
printf("
---列印數組---
");
for(i=0;i<len;i++)
printf("%d",a[i]);
}
voidpxList(int*a,intlen)//選擇排序
{
inti,j;
printf("
---從大到小排序---
");
for(i=0;i<len-1;i++)
for(j=i+1;j<len;j++)
if(a[i]<a[j])
{
a[j]^=a[i];
a[i]^=a[j];
a[j]^=a[i];
}
}
voidinsertList(int*a,intlen)//插入數組
{
printf("
---插入數組---
");
printf("輸入要插入的數:");
scanf("%d",&a[len]);
pxList(a,11);
}
voidfanList(int*a,intlen)//數組反向存儲
{
int*p0,*p1;
p0=a;
p1=&a[len-1];
while(p0<p1)
{
*p0^=*p1;
*p1^=*p0;
*p0^=*p1;
p0++;
p1--;
}
}