c语言高手帮帮我!

2025-06-23 11:19:24
推荐回答(5个)
回答1:

你是文件操作不会吗?
“rt”      只读打开一个文本文件,只允许读数据
“wt”      只写打开或建立一个文本文件,只允许写数据
“at”      追加打开一个文本文件,并在文件末尾写数据
“rb”      只读打开一个二进制文件,只允许读数据
“wb”       只写打开或建立一个二进制文件,只允许写数据
“ab”       追加打开一个二进制文件,并在文件末尾写数据
“rt+”      读写打开一个文本文件,允许读和写
“wt+”      读写打开或建立一个文本文件,允许读写
“at+”      读写打开一个文本文件,允许读,或在文件末追加数 据
“rb+”      读写打开一个二进制文件,允许读和写
“wb+”      读写打开或建立一个二进制文件,允许读和写
“ab+”      读写打开一个二进制文件,允许读,或在文件末追加数据

FILE *file;
file=fopen("d:\\in.txt","wt");

char str[1000];
fputs(str);//str是字符串
fgets(str);
你这个是新定义一个类型,但你可以对其中一个个的数据进行保存都转为字符串

回答2:

#include 
#include 

#pragma pack(1)
typedef struct student{
char stuNo[10];
char name[20];
float score;
}STU_INFO;
#pragma pack()

//函数原型声明
void print_best_score(STU_INFO *stu,int n,FILE *fp);
void print_score_number(STU_INFO *stu,int n,FILE *fp);
void print_score_level(STU_INFO *stu,int n,FILE *fp);

int main()
{
FILE *fp_in,*fp_out;
int i,count;
char buff[64];
STU_INFO *stu;
if((fp_in=fopen("stuin.txt","r")) == NULL){
printf("Open file Error!\n");
exit(-1);
}
if((fp_out=fopen("stuout.txt","w")) == NULL){
printf("Open file Error!\n");
exit(-1);
}
//获取学生信息的数量,即有多少行数据信息
count=0;
while(fgets(buff,sizeof(buff),fp_in) != NULL){
count++;
}
//将文件指针重新定位到文件头
rewind(fp_in);
//动态内存分配
stu=(STU_INFO*)malloc(sizeof(STU_INFO)*count);
//将文本文件的内容读入到结构体数组中
i=0;
while(!feof(fp_in)){
fscanf(fp_in,"%s%s%f",stu[i].stuNo,stu[i].name,&stu[i].score);
i++;
}
//显示成绩最高的人的学号、姓名和成绩(如果有相同的人要全部显示)
printf("显示成绩最高的人的学号、姓名和成绩如下:\n");
print_best_score(stu,count,fp_out);
//显示平均成绩、高于、低于和等于平均成绩的人数
printf("\n显示平均成绩、高于、低于和等于平均成绩的人数:\n");
print_score_number(stu,count,fp_out);
//显示成绩等级
printf("显示成绩为优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)的人数和所占百分比:\n");
print_score_level(stu,count,fp_out);
//释放动态分配的内存空间并关闭文件
free(stu);
fclose(fp_in);
fclose(fp_out);
return 0;
}

void print_best_score(STU_INFO *stu,int n,FILE *fp)
{
float best;
int i;
best=stu[0].score;
//先得到成绩最高分数
for(i=1;i if(stu[i].score > best){
best=stu[i].score;
}
}
for(i=0;i if(stu[i].score == best){
printf("%s %s %.2f\n",stu[i].stuNo,stu[i].name,stu[i].score);
//同时将显示结果保存到文件中
fprintf(fp,"%s %s %.2f\n",stu[i].stuNo,stu[i].name,stu[i].score);
}
}

void print_score_number(STU_INFO *stu,int n,FILE *fp)
{
int i,ave_count,higher_count,lower_count;
float sum,ave;
for(i=0,sum=0;i sum+=stu[i].score;
ave=sum/n;
printf("average score: %.2f\n",ave);
//将平均成绩写入到文件
fprintf(fp,"\naverage score: %.2f\n",ave);
ave_count=higher_count=lower_count=0;
for(i=0;i if(stu[i].score < ave)
lower_count++;
else if(stu[i].score == ave)
ave_count++;
else
higher_count++;
}
printf("higher_count: %d\n",higher_count);
fprintf(fp,"higher_count: %d\n",higher_count);
printf("lower_count: %d\n",lower_count);
fprintf(fp,"lower_count: %d\n",lower_count);
printf("ave_count: %d\n\n",ave_count);
fprintf(fp,"ave_count: %d\n\n",ave_count);
}

void print_score_level(STU_INFO *stu,int n,FILE *fp)
{
int i,excellent_count,good_count,mid_count,pass_count,fail_count;
float excellent_per,good_per,mid_per,pass_per,fail_per;
excellent_count=good_count=mid_count=pass_count=fail_count=0;
for(i=0;i if(stu[i].score>=90 && stu[i].score<=100)
excellent_count++;
else if(stu[i].score>=80 && stu[i].score<90)
good_count++;
else if(stu[i].score>=70 && stu[i].score<80)
mid_count++;
else if(stu[i].score>60 && stu[i].score<70)
pass_count++;
else
fail_count++;
}
excellent_per=(1.0*excellent_count/n)*100;
good_per=(1.0*good_count/n)*100;
mid_per=(1.0*mid_count/n)*100;
pass_per=(1.0*pass_count/n)*100;
fail_per=(1.0*fail_count/n)*100;
printf("excellent_student: %d  %.2f%%\n",excellent_count,excellent_per);
printf("good student: %d  %.2f%%\n",good_count,good_per);
printf("mid_student: %d  %.2f%%\n",mid_count,mid_per);
printf("pass_student: %d  %.2f%%\n",pass_count,pass_per);
printf("fail_student: %d  %.2f%%\n",fail_count,fail_per);
//写入文件
fprintf(fp,"excellent_student: %d  %.2f%%\n",excellent_count,excellent_per);
fprintf(fp,"good student: %d  %.2f%%\n",good_count,good_per);
fprintf(fp,"mid_student: %d  %.2f%%\n",mid_count,mid_per);
fprintf(fp,"pass_student: %d  %.2f%%\n",pass_count,pass_per);
fprintf(fp,"fail_student: %d  %.2f%%\n",fail_count,fail_per);
}

//stuin.txt文件内容如下:

1001 stuname1 89
1002 stuname2 78
1003 stuname3 60
1004 stuname4 59
1005 stuname5 96
1006 stuname6 93
1007 stuname7 48
1008 stuname8 86
1009 stuname9 76
1010 stuname10 64
1011 stuname11 72
1012 stuname12 77
1013 stuname13 81
1014 stuname14 66
1015 stuname15 83
1016 stuname16 65
1017 stuname17 96
1018 stuname18 62

运行结果截图如下:


//stuout.txt文件内容如下:

1005 stuname5 96.00
1017 stuname17 96.00

average score: 75.06
higher_count: 10
lower_count: 8
ave_count: 0

excellent_student: 3  16.67%
good student: 4  22.22%
mid_student: 4  22.22%
pass_student: 4  22.22%
fail_student: 3  16.67%

回答3:

文件操作:
“rt”只读打开一个文本文件,只允许读数据
“只写打开或建立一个文本文件,只允许写数据
“at”      追加打开一个文本文件,并在文件末尾写数据
“rb”      只读打开一个二进制文件,只允许读数据
“wb”       只写打开或建立一个二进制文件,只允许写数据
“ab”       追加打开一个二进制文件,并在文件末尾写数据
“rt+”      读写打开一个文本文件,允许读和写
“wt+”      读写打开或建立一个文本文件,允许读写
“at+”      读写打开一个文本文件,允许读,或在文件末追加数 据
“rb+”      读写打开一个二进制文件,允许读和写
“wb+”      读写打开或建立一个二进制文件,允许读和写
“ab+”      读写打开一个二进制文件,允许读,或在文件末追加数据
FILE *file;
file=fopen("d:\\in.txt","wt");
char str[1000];
fputs(str);//str是字符串
fgets(str);
你这个是新定义一个类型,但你可以对其中一个个的数据进行保存都转为字符串

回答4:

#include "stdio.h"
#include "stdlib.h"
typedef struct stutttt
{ /*定义结构体*/
char name[50];
char num[50];
double score;
}stu;
stu student,s[1000];
int n;
double max;
double average;
char fileI[20] = "stuin.txt";
char fileO[20] = "stuout.txt";
int cmp( const void * a, const void * b )
{
if(((stu*)a)->score < ((stu*)b)->score) return 1;
else return -1;
}

void Sort()
{
qsort(s,n,sizeof(stu),cmp);
}

void Pnt()
{
int i;
for(i=0;i {
printf("%s %s %.0lf\n",s[i].num,s[i].name,s[i].score);
}
printf("\n");
}

void Read()
{
n = 0;
FILE *fp;
if((fp=fopen(fileI,"r"))==NULL)
{ /*以只读打开文件*/
printf("cannot open file");
getchar();
exit(0);
}
while( fscanf(fp,"%s%s%lf\n",s[n].num,s[n].name,&s[n].score)!=EOF /* 从文件读*/ )
{
n++;
}
fclose(fp);
}

void Solve()
{
int i;
int h=0,e=0,l=0;
int m90_100 = 0,m80_89 = 0, m70_79 = 0,m60_69=0,m0_59=0;
char sss[81] = "";/*"--------------------------------------------------------------------------------";*/
FILE * fp;
if((fp=fopen(fileO,"w"))==NULL)
{ /*以只读打开文件*/
printf("cannot open file");
getchar();
exit(0);
}
average = 0;
max = 0;
for(i=0;i {
if( s[i].score > max ) max = s[i].score;
average += s[i].score;
}
average /= n;
puts("最高分的人:");
fputs("最高分的人:\n",fp);
for(i=0;i {
if( s[i].score < average ) l++;
else if( s[i].score > average ) h++;
else e++;

if( s[i].score>=90 ) m90_100++;
else if( s[i].score>=80 ) m80_89 ++;
else if( s[i].score>=70 ) m70_79 ++;
else if( s[i].score>=60 ) m60_69 ++;
else m0_59 ++;

if( s[i].score < max ) continue;
printf("%s %s %.0lf\n",s[i].num,s[i].name,s[i].score);
fprintf(fp,"%s %s %.0lf\n",s[i].num,s[i].name,s[i].score);
}
printf("\n");
fprintf(fp,"\n");
printf("平均成绩:%lf\n",average);
printf("高于平均 %d 人\n",h);
printf("等于平均 %d 人\n",e);
printf("低于平均 %d 人\n",l);
fprintf(fp,"平均成绩:%lf\n",average);
fprintf(fp,"高于平均 %d 人\n",h);
fprintf(fp,"等于平均 %d 人\n",e);
fprintf(fp,"低于平均 %d 人\n",l);
puts("");
fputs("",fp);
printf("优秀(90~100) %d 人数, 百分比;%%%lf\n",m90_100,100.0*m90_100/n);
printf("优秀(80~89 ) %d 人数, 百分比;%%%lf\n",m80_89 ,100.0*m80_89 /n);
printf("优秀(70~79 ) %d 人数, 百分比;%%%lf\n",m70_79 ,100.0*m70_79 /n);
printf("优秀(60~69 ) %d 人数, 百分比;%%%lf\n",m60_69 ,100.0*m60_69 /n);
printf("优秀(00~50 ) %d 人数, 百分比;%%%lf\n",m0_59 ,100.0*m0_59 /n);
fprintf(fp,"优秀(90~100) %d 人数, 百分比;%%%lf\n",m90_100,100.0*m90_100/n);
fprintf(fp,"优秀(80~89 ) %d 人数, 百分比;%%%lf\n",m80_89 ,100.0*m80_89 /n);
fprintf(fp,"优秀(70~79 ) %d 人数, 百分比;%%%lf\n",m70_79 ,100.0*m70_79 /n);
fprintf(fp,"优秀(60~69 ) %d 人数, 百分比;%%%lf\n",m60_69 ,100.0*m60_69 /n);
fprintf(fp,"优秀(00~50 ) %d 人数, 百分比;%%%lf\n",m0_59 ,100.0*m0_59 /n);
fclose(fp);
printf("\n结果已经写入文件%s\n",fileO);
}

main( )
{
int i;
Read();
Solve();
/* printf("来自文件的数据:\n");*/
/* Pnt();*/
/* Sort();*/
/* printf("按分数降序排序后的数据:\n");*/
/* Pnt();*/
getchar();
}

回答5:

i