c读取txt学生成绩并排序
㈠ 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
*/