當前位置:首頁 » 考試成績 » c讀取txt學生成績並排序

c讀取txt學生成績並排序

發布時間: 2020-12-07 09:39:30

㈠ c語言,怎樣讀取txt中的數據,並排序,急急!

從文件里把數據都讀出來,然後排序,然後輸出. 如果很想學習源代碼,可以看看sort的源代碼.

㈡ C語言程序設計 從文件中讀取學生成績按要求處理後按文件輸出

#include"stdio.h"
#include<stdlib.h>
structstu{//定義一個個人信息結構體
charstuid[13],name[20],g[3];//ID號、姓名、性別
intscore;//成績
};
intmain(intargc,char*argv[]){
FILE*fp,*fq;//讀文件指針fp和創建文件指針fq
structstu*p,t;//結構體指針p和變數t
inti,j,k,n,a,b,c,d;//abcd為四級變數
fq=fopen("stu2.txt","w");//創建一個寫文件stu2.txt
//打開讀文件stu1.txt並判斷讀寫文件是否打開成功
if(!fq||(fp=fopen("stu1.txt","r"))==NULL){
printf("Openthefilefailure,exit... ");//不成功則提示並退出
return0;
}
//檢測一下文件中存儲了多少個學生的信息並記入變數n
for(n=0;fscanf(fp,"%s%s%s%d",t.stuid,t.name,t.g,&t.score),!feof(fp);n++);
if((p=(structstu*)malloc(sizeof(t)*n))==NULL){//按n大小動態申請內存空間
printf("Applicationmemoryfailure,exit... ");//申請失敗則提示退出
return0;
}
rewind(fp);//讀文件指針恢復到文件開頭
for(a=b=c=d=i=0;i<n;i++){//讀取n個學生信息並依次存入動態數組中
fscanf(fp,"%s%s%s%d",p[i].stuid,p[i].name,p[i].g,&p[i].score);
if(p[i].score>=90&&p[i].score<=100)//同時按成績級別分別統計人數
a++;
elseif(p[i].score>=80&&p[i].score<=89)
b++;
elseif(p[i].score>=70&&p[i].score<=79)
c++;
else
d++;
}
fclose(fp);//讀取完畢關閉文件
//向文件輸出級別結果
fprintf(fq,"優:%g良:%g中:%g差:%g ",a/(n+0.0),b/(n+0.0),c/(n+0.0),d/(n+0.0));
//同時輸出到屏幕以便檢查
printf("優:%g良:%g中:%g差:%g ",a/(n+0.0),b/(n+0.0),c/(n+0.0),d/(n+0.0));//不想屏顯則刪除此行
for(i=0;i<n;i++){//對n個學生按成績降序排序並輸出到文件及屏幕
for(k=i,j=k+1;j<n;j++)
if(p[k].score<p[j].score)
k=j;
if(i!=k)
t=p[k],p[k]=p[i],p[i]=t;
//輸出到文件
fprintf(fq,"%s%s%s%d ",p[i].stuid,p[i].name,p[i].g,p[i].score);
//輸出么屏幕
printf("%s %s %s %d ",p[i].stuid,p[i].name,p[i].g,p[i].score);//不想屏顯則刪除此行
}
free(p);//釋放所申請的內在空間
fclose(fq);//關閉寫文件
return0;
}

運行結果:

註:文件都在當前目錄下

㈢ C語言編程,打開文件C:\\score.txt,讀出十個數,從小到大進行排序後,再寫入該文件中

稍微簡單一點了,思路大概是這樣:
FILE *fp;
int a[10];
fp = fopen("c:\\score.txt", "r");
sscanf(fp, "%d %d %d %d", &a[0], &a[1],&a[2],&a[3]);
然後冒泡等排除就搞定了,這是思路,希專望屬能幫助到你

㈣ 如何用c語言讀取txt中每行中特定位置的數字並按照行來排序並輸出到用

這個可以考慮通過文件內存映射來操作,直接將txt文檔映射到內存中,進行相應的函數實現即可。

㈤ C語言:讀出文本文件3.txt中的整數,然後對這些數據按從大到小的順序排序後存入另一個文本文文件

仙以圖方式打開指定的文件,把文件當中的數據都讀入到一個數組中,然後進行排序,排完序以後再把排好序的數組輸出到另外一個文件中。最後關閉指定的文件

㈥ 用c語言如何讀入並使文本文件按某一列排序輸出

你可以醬紫:

#include<stdio.h>

intmain(void)
{
FILE*p;//文件指針
charch[1000];//1000你可以改滴~
inti=0;

p=fopen("","r");//第一個字元串是你文件路徑,路徑中的要寫成\,文件名必須帶後綴內
if(!p)//如果文容件打開失敗,fopen返回NULL(0)
{
printf("打開文件失敗! ");
exit(-1);
}
while(ch[i-1]!=EOF||i=1000)//EOF為文件尾(endoffile)
{
ch[i]=getc(p);//向p指向的流中讀一個字元,並將文件指針後移一位,返回值為讀到的字元的ASCII碼
i++;
}
//下面你就可以對數組處理了
//或者你可以處理一行,讀一行.但是我不知道你想咋處理,就這樣寫了

return0;
}

㈦ c語言,讀取txt文件中的數字並排序,然後輸出到另外一個txt文件中。急,在線等

//測試代碼前,請准備好1.txt文件並編輯好要排序的內容保存在程序運行目錄
//然後運行測試,程序運行後輸出文件2.txt會放在當前目錄
#include<stdio.h>
#include<string.h>

//插入排序法
voidinsertion_sort(chara[],intn)
{
inti,j,v;
for(i=1;i<n;i++)
{
for(v=a[i],j=i-1;j>=0&&v<a[j];j--)
a[j+1]=a[j];
a[j+1]=v;
}
}

voidmain()
{
charstr[1024];
FILE*stream;

//讀文件
stream=fopen("1.txt","r");
if(!stream)return;
fscanf(stream,"%s",str);
fclose(stream);


//排序
insertion_sort(str,strlen(str));

//寫到文件
stream=fopen("2.txt","w");
if(!stream)return;
fprintf(stream,"%s",str);
fclose(stream);

//顯示結果
printf("%s ",str);
}

㈧ c語言讀文本,文本是關於學生成績的結構體,然後讀入另一個文件並且按照總分輸出

要理解一個程序的執行過程,首先要理解什麼是編譯器。我們用C語言寫的程序,計算機只能識別機器語言(二進制指令),計算機並不能理解。因此,必須 將C語言轉換為機器語言。編譯器就是用來實現這一功能的。編譯器將源代碼文件按照一定的對應規則映射程計算機能夠識別的二進制指令。

一般程序的執行過程:

程序先由程序員編輯創建並保存在硬碟上,源程序在機器上表現為01組成的位序列,8個位一個位元組,每個位元組表示一個文本字元,它是以ascii碼的形式表示的。只由ascii字元組成的文件叫做文本文件,所有其他的叫做二進制文件。

為了讓機器能夠識別並運行程序,每條語句必須被轉為低級機器語言指令,然後將指令按照可執行目標程序的格式打包,並以二進制磁碟文件的形式存放起來。以c程序為例,轉換過程大致分為預處理,編譯,匯編,鏈接四個步驟。下面進行詳細解釋。

預處理器根據以字元#開頭的命令修改原始的c程序,比如#include<stdio.h>告訴預處理器讀取系統頭文件stdio.h的內容,並把它直接插入程序文本中,將#define的變數替換等等,結果得到了另一個c程序,通常以.i作為文件擴展名。

編譯器將文本文件hello.i翻譯成hello.s,它包含了一個匯編語言程序。匯編語言程序中的每條語句都以一種標準的文本格式確切的描述一條低級機器語言指令。

匯編器將匯編程序翻譯為機器語言指令,把這些指令打包成可重定位目標程序(relocateble object program)的格式,並把結果保存在hello.o中。hello.o文件是二進制文件,因為他的位元組編碼是機器語言指令而不是ascii碼。如果用文本編輯器打開hello.o會看到一堆亂碼。

鏈接階段,比如hello中用到了printf函數,這是標准c庫的函數,存在於一個名為printf.o的單獨編譯好的目標文件中,這個文件必須以某種方式合並到我們編譯好的的目標文件中。鏈接器(ld)程序負責處理這種合並,結果得到hello文件,它是可執行目標文件,可以被載入到內存中,由系統執行。

轉換完成之後就是執行了。在unix系統中,shell是一個命令行解釋器,輸出一個提示符,等待用戶輸入然後執行命令。如果輸入的第一個單詞不是一個內置的shell命令,shell將其解釋為可執行文件,比如輸入./hello,它將載入並運行這個文件。hello在屏幕上輸出信息,然後終止。shell輸出一個提示符,等待下一個輸入的命令行。具體的過程為:初始時,shell執行它的指令,等待輸入。用戶輸入字元創「./hello」後,shell將字元逐一讀入寄存器,然後存放到存儲器中,敲回車鍵後,shell知道用戶結束命令輸入。然後shell執行一系列的指令來載入可執行的hello文件,將hello目標文件的代碼和數據從磁碟復制到主存,數據包含輸出的字元串"HELLO,WORLD "。一旦目標文件hello中的代碼和數據被載入到主存,處理器開始執行main的機器語言指令,將字元串從主存拷貝到寄存器,並輸出到屏幕上。

由於涉及大量的主存,磁碟,寄存器通信,故產生了cache等緩沖提高速度的設備,減少通信阻塞。

為了減少用戶的負擔,操作系統對計算機硬體資源進行了抽象,產生了進程,線程,虛擬地址等概念。進程是程序的一次執行,是操作系統分配資源的單位,多個進程是可以並發執行的,並發執行實際上每個時刻執行的還是一個進程,只不過進程間切換的速度比較快,給人的感覺是並發執行。操作系統為每個進程保存執行的狀態信息,稱為上下文,包括pc和寄存器文件當前值,主存內容等等。切換進程時,發生上下文切換。一個進程中可以有多個線程執行單元,每個線程都運行在進程的上下文中,共享同樣的代碼和數據,由於網路伺服器等應用對並行處理的需求越來越大,多線程模型也越來越重要。虛擬地址為每個進程提供了一個假象,即每個進程都在獨佔主存,每個進程看到的是一致的存儲器,稱為虛擬地址空間。虛擬地址空間是由大量的准確定義的區構成,linux從低地址到高地址依次為:程序代碼和數據;堆;共享庫;棧;內核虛擬存儲器。

㈨ C語言讀入txt文件後做學生成績排序,請求高手幫助

簡單排序而已,如果你課程設計一個成績管理系統,那這點問題肯定不足為道。

㈩ C語言題目,txt文件讀取成績,並求平均分

#include<stdio.h>
intmain(void)
{
//把data.txt放在同一個文件夾裡面
freopen("data.txt","r",stdin);
inti,j;
doublescore[3]={0.0};//三科最高分
doubleavg[3]={0.0};//三科均分

for(i=0;i<20;i++)
{
for(j=0;j<3;j++)
{
doubleindex;
scanf("%lf",&index);
if(index>score[j])
score[j]=index;
avg[j]+=index;
}
}
for(j=0;j<3;j++)
avg[j]/=20;

for(j=0;j<3;j++)
{
printf("第%d科,最高分:%.2f 平均分:%.2f ",j,score[j],avg[j]);
}
return0;
}

//數據:
/*
22.0097.0015.00
82.0042.0012.00
80.0035.0025.00
35.004.0016.00
17.0026.0064.00
35.0087.0063.00
9.0018.0086.00
24.0089.008.00
47.0041.004.00
99.0083.0016.00
57.005.0065.00
73.0039.0059.00
37.0020.0047.00
14.0055.003.00
83.0024.0029.00
99.0060.0069.00
62.0021.0087.00
0.0097.0028.00
9.0044.0069.00
13.0095.0052.00
*/

熱點內容
武漢大學學生會輔導員寄語 發布:2021-03-16 21:44:16 瀏覽:612
七年級學生作文輔導學案 發布:2021-03-16 21:42:09 瀏覽:1
不屑弟高考成績 發布:2021-03-16 21:40:59 瀏覽:754
大學畢業證會有成績單 發布:2021-03-16 21:40:07 瀏覽:756
2017信陽學院輔導員招聘名單 發布:2021-03-16 21:40:02 瀏覽:800
查詢重慶2018中考成績查詢 發布:2021-03-16 21:39:58 瀏覽:21
結業考試成績怎麼查詢 發布:2021-03-16 21:28:40 瀏覽:679
14中醫醫師資格筆試考試成績查分 發布:2021-03-16 21:28:39 瀏覽:655
名著賞析課程標准 發布:2021-03-16 21:27:57 瀏覽:881
北京大學商業領袖高端培訓課程 發布:2021-03-16 21:27:41 瀏覽:919