111.從鍵盤輸入一個字符串,將其中的小寫字母全部轉換成大寫字母,然後輸出到一個磁盤文件"file.txt"中保存,輸入的字符串以“!”結束。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char ch;
FILE *fp;
if((fp=fopen("file.txt","w"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
while((ch=getchar())!='!')
{
if(ch>='a'&&ch<='z') //小寫字母轉換成大寫字母
ch=ch-32;
fputc(ch,fp); //存入文件中
putchar(ch); //輸出到屏幕上
}
putchar('\n');
fclose(fp);
return 0;
}
運行結果:
112.有兩個磁盤文件“A”和“B”,各放一行字母,今要求把這兩個文件中的信息合併(按字母順序排列),輸出到一個新文件“C”中去
#include <stdio.h>
#include <stdlib.h>
int main()
{
char a[100],ch,temp;
int i,j,k;
FILE *fp1,*fp2,*fp3;
if((fp1=fopen("file1.txt","r"))==NULL) //將文件file1中的字母存放到數組a中
{
printf("can't open file!\n");
exit(0);
}
i=0;
while((ch=fgetc(fp1))!=EOF) //若用!feof(fp1),後面會多複製空格,所以不能用
{
a[i++]=ch;
putchar(ch);
}
fclose(fp1);
if((fp2=fopen("file2.txt","r"))==NULL) //將文件file2中的字母存放到數組a中
{
printf("can't open file!\n");
exit(0);
}
while((ch=fgetc(fp2))!=EOF)
{
a[i++]=ch;
putchar(ch);
}
fclose(fp2);
a[i]='\0';
for(j=0; j<i-1; j++) //進行冒泡排序
for(k=0; k<i-1-j; k++)
{
if(a[k]>a[k+1])
{
temp=a[k];
a[k]=a[k+1];
a[k+1]=temp;
}
}
printf("\n%s",a);
if((fp3=fopen("file3.txt","w"))==NULL) //將數組a中的字母存到文件file3中
{
printf("can't open file!\n");
exit(0);
}
for(j=0; j<i; j++)
fputc(a[j],fp3);
fclose(fp3);
putchar('\n');
return 0;
}
運行結果:
113.有5個學生,每個學生有3門課程的成績,從鍵盤輸入學生數據(包括學號、姓名,3門課程成績),計算出平均成績,將原有數據和計算出的平均分數存放在磁盤文件“stud”中。
#include <stdio.h>
#include <stdlib.h>
#define N 3
struct Student //學生結構體
{
long num;
char name[15];
float score[3];
float avg;
} stud[N];
int main()
{
int i,j;
float sum;
FILE *fp;
for(i=0; i<N; i++) //從鍵盤輸入數據
{
sum=0;
scanf("%ld %s ",&stud[i].num,stud[i].name);
for(j=0; j<3; j++)
{
scanf("%f",&stud[i].score[j]);
sum+=stud[i].score[j];
}
stud[i].avg=sum/3.0;
}
if((fp=fopen("stud.txt","w"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
for(i=0; i<N; i++) //寫入文件stud.txt中
{
if(fwrite(&stud[i],sizeof(struct Student),1,fp)!=1)
printf("File write error!\n");
}
fclose(fp);
if((fp=fopen("stud.txt","r"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
printf("打印文件數據:\n");
for(i=0; i<N; i++) //從文件stud.txt中讀出數據
{
fread(&stud[i],sizeof(struct Student),1,fp);
printf("%ld %s ",stud[i].num,stud[i].name);
for(j=0; j<3; j++)
printf("%.2f ",stud[i].score[j]);
printf("%.2f\n",stud[i].avg);
}
fclose(fp);
return 0;
}
運行結果:
114.將上例“stud”文件中的學生數據,按平均成績進行排序處理,將已排好序的學生存入一個新文件“stud_sort”中。
#include <stdio.h>
#include <stdlib.h>
#define N 3
struct Student //學生結構體
{
long num;
char name[15];
float score[3];
float avg;
} stud[N];
int main()
{
int i,j;
FILE *fp;
struct Student temp;
if((fp=fopen("stud.txt","r"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
printf("stud.txt文件中已有數據:\n");
for(i=0; i<N; i++) //從文件stud.txt中讀出數據
{
fread(&stud[i],sizeof(struct Student),1,fp);
printf("%ld %s ",stud[i].num,stud[i].name);
for(j=0; j<3; j++)
printf("%.2f ",stud[i].score[j]);
printf("%.2f\n",stud[i].avg);
}
fclose(fp);
for(i=0; i<N-1; i++) //進行冒泡排序
for(j=0; j<N-i-1; j++)
if(stud[j].avg>stud[j+1].avg)
{
temp=stud[j];
stud[j]=stud[j+1];
stud[j+1]=temp;
}
if((fp=fopen("stud_sort.txt","w"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
for(i=0; i<N; i++) //寫入stud_sort.txt文件中
{
if(fwrite(&stud[i],sizeof(struct Student),1,fp)!=1)
printf("File write error!\n");
}
fclose(fp);
if((fp=fopen("stud_sort.txt","r"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
printf("stud_sort.txt文件中的數據:\n");
for(i=0; i<N; i++) //從文件stud_sort.txt中讀出數據
{
fread(&stud[i],sizeof(struct Student),1,fp);
printf("%ld %s ",stud[i].num,stud[i].name);
for(j=0; j<3; j++)
printf("%.2f ",stud[i].score[j]);
printf("%.2f\n",stud[i].avg);
}
fclose(fp);
return 0;
}
運行結果:
115.將上例已排序的學生成績進行插入處理。插入一個學生的3門課程成績,程序先計算新插入學生的平均成績,然後將它按成績高低插入,插入後建立一個新文件。
#include <stdio.h>
#include <stdlib.h>
#define N 3
struct Student //學生結構體
{
long num;
char name[15];
float score[3];
float avg;
} stud[N+1];
int main()
{
int i,j;
FILE *fp;
struct Student temp;
float sum=0;
scanf("%ld %s ",&stud[3].num,stud[3].name);//輸入一個學生的數據
scanf("%f %f %f",&stud[3].score[0],&stud[3].score[1],&stud[3].score[2]);
sum=stud[3].score[0]+stud[3].score[1]+stud[3].score[2];
stud[3].avg=sum/3.0;
if((fp=fopen("stud_sort.txt","r"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
for(i=0; i<N; i++) //從文件stud_sort.txt中讀出數據
fread(&stud[i],sizeof(struct Student),1,fp);
fclose(fp);
for(i=0; i<N; i++) //進行冒泡排序
for(j=0; j<N-i; j++)
if(stud[j].avg>stud[j+1].avg)
{
temp=stud[j];
stud[j]=stud[j+1];
stud[j+1]=temp;
}
if((fp=fopen("stud_sort1.txt","w"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
for(i=0; i<N+1; i++) //寫入stud_sort1.txt文件中
{
if(fwrite(&stud[i],sizeof(struct Student),1,fp)!=1)
printf("File write error!\n");
}
fclose(fp);
if((fp=fopen("stud_sort1.txt","r"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
printf("讀出stud_sort1.txt文件中的數據:\n");
for(i=0; i<N+1; i++) //讀出stud_sort1.txt文件中的數據
{
fread(&stud[i],sizeof(struct Student),1,fp);
printf("%ld %s ",stud[i].num,stud[i].name);
for(j=0; j<3; j++)
printf("%.2f ",stud[i].score[j]);
printf("%.2f\n",stud[i].avg);
}
fclose(fp);
return 0;
}
運行結果:
116.有一磁盤文件“Employee”,內放職工的數據。每個職工的數據包括職工姓名、職工號、性別、年齡、住址、工資、健康狀況、文化程度。今要求將職工名、工資的信息單獨抽出來另建一個簡明的職工工資文件。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 3
struct Employee //職工結構體
{
long num;
char name[15];
char sex;
int age;
char addr[20];
int salary;
char health[8];
char clas[10];
} employee[N];
struct Emp //簡潔職工結構體
{
char name[15];
int salary;
} emp[N];
int main()
{
FILE *fp;
int i;
printf("輸入職工詳細信息:\n");
for(i=0; i<N; i++) //鍵盤輸入職工詳細信息
scanf("%ld %s %c %d %s %d %s %s",&employee[i].num,employee[i].name,&employee[i].sex,&employee[i].age,employee[i].addr,&employee[i].salary,employee[i].health,employee[i].clas);
if((fp=fopen("employee.txt","w"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
for(i=0; i<N; i++) //寫入employee.txt文件中
{
if(fwrite(&employee[i],sizeof(struct Employee),1,fp)!=1)
printf("File write error!\n");
}
fclose(fp);
if((fp=fopen("employee.txt","r"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
for(i=0; i<N; i++) //讀出employee.txt文件中的數據,並傳數據
{
fread(&employee[i],sizeof(struct Employee),1,fp);
strcpy(emp[i].name,employee[i].name);
emp[i].salary=employee[i].salary;
}
fclose(fp);
if((fp=fopen("emp.txt","w"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
for(i=0; i<N; i++) //將數據寫入emp.txt文件中
{
if(fwrite(&emp[i],sizeof(struct Emp),1,fp)!=1)
printf("File write error!\n");
}
fclose(fp);
if((fp=fopen("emp.txt","r"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
printf("打印簡略職工信息:\n");
for(i=0; i<N; i++) //讀出emp.txt文件中的數據
{
fread(&emp[i],sizeof(struct Emp),1,fp);
printf("%s %d\n",emp[i].name,emp[i].salary);
}
fclose(fp);
return 0;
}
運行結果:
117.從上題“職工工資文件”中刪去一個職工的數據,再存回原文件。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 3
struct Emp //簡潔職工結構體
{
char name[15];
int salary;
} emp[N];
int main()
{
FILE *fp;
int i,j;
char n[15]; //要刪除的職工的名字
printf("輸入職工工資文件數據:\n");
for(i=0; i<N; i++) //鍵盤輸入職工工資文件數據
scanf("%s %d",emp[i].name,&emp[i].salary);
if((fp=fopen("emp.txt","w"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
for(i=0; i<N; i++)
{
if(fwrite(&emp[i],sizeof(struct Emp),1,fp)!=1)
printf("File write error!\n");
}
fclose(fp);
if((fp=fopen("emp.txt","r"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
printf("讀出職工工資文件數據:\n");
for(i=0; i<N; i++) //讀出emp.txt文件中的數據
{
fread(&emp[i],sizeof(struct Emp),1,fp);
printf("%s %d\n",emp[i].name,emp[i].salary);
}
fclose(fp);
printf("輸入要刪除的職工的名字:\n"); //進行刪除
scanf("%s",n);
for(i=0; i<N; i++)
if(strcmp(emp[i].name,n)==0)
break;
for(j=i+1; j<N; j++)
{
strcpy(emp[j-1].name,emp[j].name);
emp[j-1].salary=emp[j].salary;
}
if((fp=fopen("emp.txt","w"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
for(i=0; i<N-1; i++) //將前N-1個數據寫入emp.txt文件中
{
if(fwrite(&emp[i],sizeof(struct Emp),1,fp)!=1)
printf("File write error!\n");
}
fclose(fp);
if((fp=fopen("emp.txt","r"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
printf("讀出刪除後的職工工資文件數據:\n");
for(i=0; i<N-1; i++) //讀出emp.txt文件中的數據
{
fread(&emp[i],sizeof(struct Emp),1,fp);
printf("%s %d\n",emp[i].name,emp[i].salary);
}
fclose(fp);
return 0;
}
運行結果:
118.從鍵盤輸入若干行字符(每行長度不等),輸入後把它們存儲到一磁盤文件中。再從該文件中讀入這些數據,將其中小寫字母轉換成大寫字母后,在屏幕上輸出。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int flag=1,i;
char c,str[80];
FILE *fp;
if((fp=fopen("text.txt","w"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
while(flag==1) //逐次輸入字符串
{
printf("Input string:");
gets(str);
fprintf(fp,"%s",str);
fprintf(fp,"\n");
printf("Continue?");
c=getchar();
if(c=='N'||c=='n')
flag=0;
getchar();
}
fclose(fp);
if((fp=fopen("text.txt","r"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
printf("讀取文件中的字符串,將小寫字母轉換成大寫字母\n");
while(fscanf(fp,"%s",str)!=EOF) //讀取字符串
{
for(i=0; str[i]!='\0'; i++)
if(str[i]>='a'&&str[i]<='z')
str[i]-=32;
printf("%s\n",str);
}
fclose(fp);
return 0;
}
運行結果: