实验五
task1_1.c
#include<stdio.h> #define N 5 #define M 80 typedef struct { char name[M]; char author[M]; }Book; int main() { Book x[N]= { {"一九八四","乔治·奥威尔"}, {"美丽新世界","赫胥黎"}, {"昨日的世界","斯蒂芬·茨威格"}, {"万历十五年","黄仁宇"}, {"一只特立独行的猪","王小波"} }; int i; FILE *fp; fp=fopen("data1.txt","w"); if(fp==NULL) { printf("fail to open file\n"); return 1; } for(i=0;i<N;i++) { fprintf(fp,"%-20s\t%-20s\n",x[i].name,x[i].author); printf("%-20s\t%-20s\n",x[i].name,x[i].author); } fclose(fp); return 0; }
task1_2.c
#include<stdio.h> #define N 5 #define M 80 typedef struct { char name[M]; char author[M]; }Book; int main() { Book x[N]; int i; FILE *fp; fp=fopen("data1.txt","r"); if(fp==NULL) { printf("fail to open file\n"); return 1; } for(i=0;i<N;++i) { fscanf(fp,"%s %s\n",x[i].name,x[i].author); printf("%-20s\t%-20s\n",x[i].name,x[i].author); } fclose(fp); return 0; }
因为x[i].name和x[i].author是字符串
task2_1.c
#include<stdio.h> #define N 5 #define M 80 typedef struct { char name[M]; char author[M]; }Book; int main() { Book x[N]={{"一九八四","乔治·奥威尔"}, {"美丽新世界","赫胥黎"}, {"昨日的世界","斯蒂芬·茨威格"}, {"万历十五年","黄仁宇"}, {"一只特立独行的猪","王小波"} }; int i; FILE *fp; fp=fopen("data2.dat","wb"); if(fp==NULL) { printf("fail to open file\n"); return 1; } fwrite(x,sizeof(Book),N,fp); fclose(fp); return 0; }
是,是
task2_2.c
#include<stdio.h> #define N 5 #define M 80 typedef struct { char name[M]; char author[M]; }Book; int main() { Book x[N]; int i; FILE *fp; fp=fopen("data2.dat","rb"); if(fp==NULL) { printf("fail to open file\n"); return 1; } fread(x,sizeof(Book),N,fp); for(i=0;i<N;++i) printf("%-20s\t%-20s\n",x[i].name,x[i].author); fclose(fp); return 0; }
task3_2.c
#include<stdio.h> int main() { FILE *fin; char ch; int n=0; fin=fopen("data3_1.txt","r"); if(fin==NULL) { printf("fail to open data3_1.txt\n"); return 1; } while(!feof(fin)) { ch=fgetc(fin); if(ch!='\r'&&ch!='t'&&ch!=' ') n++; } printf("data3_1.txt中共包含字符数:%d\n",n); fclose(fin); return 0; }
task5.c
#include<stdio.h> #include<string.h> #include<stdlib.h> #define N 10 typedef struct { long int id; char name[20]; float objective; float subjective; float sum; char level[10]; }STU; void input(STU s[],int n); void output(STU s[],int n); void process(STU s[],int n); int main() { STU stu[N]; printf("从文件读入%d个考生信息:准考证号,姓名,客观题得分(<=40),操作题得分(<=60)\n",N); input(stu,N); printf("\n对考生信息进行处理:计算总分,确定等级\n"); process(stu,N); printf("\n打印考生完整信息,并保存到文件中"); output(stu,N); return 0; } void input(STU s[],int n) { int i; FILE *fin; fin=fopen("examinee.txt","r"); if(fin==NULL) { printf("fail to open file\n"); exit(0); } while(!feof(fin)) { for(i=0;i<n;i++) fscanf(fin,"%ld %s %f %f",&s[i].id,s[i].name,&s[i].objective,&s[i].subjective); } fclose(fin); } void output(STU s[],int n) { FILE *fout; int i; printf("\n"); printf("准考证号\t姓名\t\t客观题得分\t操作题得分\t总分\t\t等级\n"); for(i=0;i<n;i++) printf("%5ld\t%-10s\t%5.2f\t\t%5.2f\t\t%5.2f\t%-10s\n",s[i].id,s[i].name,s[i].objective,s[i].subjective,s[i].sum,s[i].level); fout=fopen("result.txt","w"); if(!fout) { printf("fail to open or create result.txt\n"); exit(0); } fprintf(fout,"准考证号\t姓名\t客观题得分\t\t操作题得分\t\t总分\t等级\n"); for(i=0;i<n;i++) fprintf(fout,"%-5ld\t%-10s\t%5.2f\t\t%5.2f\t\t%5.2f\t%-10s\n",s[i].id,s[i].name,s[i].objective,s[i].subjective,s[i].sum,s[i].level); fclose(fout); } void process(STU s[],int n) { int i,j,k=n; for(i=0;i<n;i++) s[i].sum=s[i].objective+s[i].subjective; for(i=0;i<n-1;i++) for(j=0;j<n-i-1;j++) if(s[j].sum<s[j+1].sum) { s[k]=s[j]; s[j]=s[j+1]; s[j+1]=s[k]; } for(i=0;i<n;i++) { if(i<n*(0.1)) strcpy(s[i].level,"优秀"); else if(i>=n*(0.1)&&i<n*(0.5)) strcpy(s[i].level,"合格"); else strcpy(s[i].level,"不合格"); } }
task6.c
#include<stdio.h> #include<stdlib.h> #include<time.h> #define N 5 #define M 80 typedef struct { long no; char name[80]; char class[80]; }STU; void process(STU s[],int n,int m,STU t[]); int main() { STU stu[M],randlist[N]; int i; FILE *fin,*fout; fin=fopen("list.txt","r"); if(fin==NULL) { printf("fail to open list.txt\n"); return 1; } while(!feof(fin)) { for(i=0;i<M;i++) fscanf(fin,"%ld %s %s",&stu[i].no,stu[i].name,stu[i].class); } fclose(fin); process(stu,N,M,randlist); for(i=0;i<N;i++) printf("%ld\t%-10s\t\t%10s\n",randlist[i].no,randlist[i].name,randlist[i].class); fout=fopen("lucky.txt","w"); if(fout==NULL) { printf("fail to open lucky.txt\n"); return 1; } for(i=0;i<N;i++) fprintf(fout,"%ld\t%-10s\t\t%10s\n",randlist[i].no,randlist[i].name,randlist[i].class); fclose(fout); return 0; } void process(STU s[],int n,int m,STU t[]) { int i,j,k=0; srand((int)time(0)); for(i=0;i<n;i++) { j=rand()%80; t[k]=s[j]; ++k; } }