1、单元5 构造类型程序设计——文件 源代码 SC 01 02 01 05 401 1.源代码编号 SC01020105401 2.源代码来源 单元5 构造类型程序设计 例5-21 3.问题描述 把从键盘输入的字符输出到文件。 4.程序代码 #include "stdio.h" #include "stdlib.h" void WriteChar (FILE *fp); int main() { FILE *fp; if((fp=fopen("file1.txt","w"))==NULL) { printf("不能打开file1.txt文件。\n
2、"); exit(0); } printf("请输入字符串:"); WriteChar(fp); fclose(fp); return 0; } void WriteChar(FILE *fp) { char ch; while((ch=getchar())!='\n') fputc(ch,fp); } SC 01 02 01 05 402 1.源代码编号 SC01020105402 2.源代码来源 单元5 构造类型程序设计 例5-22 3.问题描述 把从文本文件读入的字符输出到显示器。 4.程序代码 #include "
3、stdio.h" #include "stdlib.h" void ReadChar(FILE *fp); int main() { FILE *fp; if((fp=fopen("file1.txt","r"))==NULL) { printf("不能打开file1.txt文件。\n"); exit(0); } printf("从文件中读取的字符为:"); ReadChar(fp); fclose(fp); return 0; } void ReadChar(FILE *fp) { char ch; while((ch=fge
4、tc(fp))!=EOF) putchar(ch); printf("\n"); } SC 01 02 01 05 403 1.源代码编号 SC01020105403 2.源代码来源 单元5 构造类型程序设计 例5-23 3.问题描述 编写一个程序,能将一个文本文件中的内容复制到另一个文件中。 4.程序代码 #include "stdio.h" #include "stdlib.h" void CopyChar(FILE *in,FILE *out); int main() { FILE *in,*out; char infile[10]
5、outfile[10]; printf("请输入源文件名:\n"); scanf("%s",infile); printf("请输入目标文件名:\n"); scanf("%s",outfile); if((in=fopen(infile,"r"))==NULL) { printf("不能打开源文件。\n"); exit(0); } if((out=fopen(outfile,"w"))==NULL) { printf("不能打开目标文件。\n"); exit(0); } CopyChar(in,out); fclose(
6、in); fclose(out); return 0; } void CopyChar(FILE *in,FILE *out) { char ch; while((ch=fgetc(in))!=EOF)/*读一个字符,并判断文件结束标志*/ fputc(ch,out); /*写一个字符*/ } SC 01 02 01 05 404 1.源代码编号 SC01020105404 2.源代码来源 单元5 构造类型程序设计 例5-24 3.问题描述 编制一个将文本文件中全部信息送往显示屏上显示的程序。 4.程序代码 #include
7、"stdio.h" #include "stdlib.h" void ReadStr(FILE *fp); int main() { FILE *fp; char string[20]; printf("请输入待打开的文件:\n"); scanf("%s",string); if((fp=fopen(string,"r"))==NULL) { printf("不能打开该文件。\n"); exit(0); } printf("文件内容为:\n"); ReadStr(fp); fclose(fp); return 0; } voi
8、d ReadStr(FILE *fp) { char str[81]; while(fgets(str,81,fp)!=NULL) printf("%s",str); printf("\n"); } SC 01 02 01 05 405 1.源代码编号 SC01020105405 2.源代码来源 单元5 构造类型程序设计 例5-25 3.问题描述 编写一个程序,将一个二进制文件中的内容复制到另一个文件中。 4.程序代码 #include "stdio.h" #include "stdlib.h" void CopyBinFile(FILE *i
9、n,FILE *out); int main() { FILE *in,*out; char infile[10],outfile[10]; printf("请输入源文件名:\n"); scanf("%s",infile); printf("请输入目标文件名:\n"); scanf("%s",outfile); if((in=fopen(infile,"rb"))==NULL) { printf("不能打开源文件。\n"); exit(0); } if((out=fopen(outfile,"wb"))==NULL) { pri
10、ntf("不能打开目标文件。\n"); exit(0); } CopyBinFile(in,out); fclose(in); fclose(out); return 0; } void CopyBinFile(FILE *in,FILE *out) { char buff[32768]; unsigned int bfsz=32768; unsigned long i=0; while(bfsz) { if(fread(buff,bfsz,1,in)) { fwrite(buff,bfsz,1,out); i=i
11、bfsz;
}
else
{
fseek(in,i,0);
bfsz=bfsz/2;
}
}
}
SC 01 02 01 05 406
1.源代码编号
SC01020105406
2.源代码来源
单元5 构造类型程序设计
引例
3.问题描述
模拟22选5彩票摇奖过程,得出开奖号码,查询投注者自选的一组号码是否中奖,中几等奖。
4.程序代码
#include
12、码表容量为22 #define LotteryListSize 5 //自选号码表和开奖号码表容量为5 typedef struct {//备选号码表、自选号码表和开奖号码表的描述 int data[SelectListSize]; //数组data用于存放表结点 int length; /length为当前表的长度 }List; int randnum(List *SL,int *k) {//随机选择一个彩票号码 int i,j=rand()%11+10,x;//j表示摇号次数,介于10至20之间 for(i=1;i<=j;i++) { *k=rand(
13、)%SL->length+1;//随机生成备选号码位置
x=SL->data[*k-1];
if(i 14、
for(i=0;i 15、f("%d",&x);
for(j=0;j 16、 //表长加1
}
}
}
void WinSearch(List *LL,List *CL)
{//中奖查询
int i,j=1,k=0;
printf("\n\n您购买的彩票:\t");
for(i=0;i 17、ryListSize&&CL->data[j-1]==LL->data[i])
k++;
}
if(k==5)
printf("\n\n恭喜,您中了一等奖!\n\n");
if(k==4)
printf("\n\n恭喜,您中了二等奖!\n\n");
if(k==3)
printf("\n\n恭喜,您中了三等奖!\n\n");
if(k<3)
printf("\n\n您只选中了%d个号码,没有中奖!\n\n",k);
}
int main()
{//LL为自选号码表,CL开奖号码表,SL为备选号码表
List LL={{0},0},C 18、L={{0},0},SL={{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, 17,8,19,20,21,22},22};
printf("\n\t\t欢迎使用22选5体育彩票系统\n");
printf("\n请输入自选彩票号码(例如:1 12 7 3 21):");
SelfSelect(&LL);//自选号码生成彩票
ComputerSelect(&SL,&CL);//机器生成开奖号码
WinSearch(&LL,&CL);//中奖查询
return 0;
}
SC 01 02 01 05 407
1.源代码编号
SC0 19、1020105407
2.源代码来源
单元5 构造类型程序设计
课堂实践5-13
3.问题描述
把从键盘输入的字符“abcde12345”输出到文件d:\f1.txt,并从该文件中读出字符输出到显示器。
4.程序代码
#include "stdio.h"
#include "stdlib.h"
int main()
{
void WriteChar(FILE *fp);
void ReadChar(FILE *fp);
FILE *fp;
if((fp=fopen("d:\\f1.txt","w"))==NULL)
{
printf("不能打开d: 20、\f1.txt文件\n");
exit(0);
}
printf("请输入字符串abcde12345:");
WriteChar(fp);
fclose(fp);
if((fp=fopen("d:\\f1.txt","r"))==NULL)
{
printf("不能打开d:\f1.txt文件\n");
exit(0);
}
printf("从文件中读取的字符为:");
ReadChar(fp);
fclose(fp);
return 0;
}
void WriteChar(FILE *fp)
{
char ch;
wh 21、ile((ch=getchar())!='\n')
fputc(ch,fp);
}
void ReadChar(FILE *fp)
{
char ch;
while((ch=fgetc(fp))!=EOF)
putchar(ch);
printf("\n");
}
SC 01 02 01 05 408
1.源代码编号
SC01020105408
2.源代码来源
单元5 构造类型程序设计
课堂实践5-14
3.问题描述
编写一个类似【例5-25】的程序,将一个二进制文件中的内容复制到另一个文件中,当读入的字符不足bfsz个字节时,对剩余的字符进 22、行逐一复制。
4.程序代码
#include "stdio.h"
#include "stdlib.h"
void CopyBinFile(FILE *in,FILE *out);
int main()
{
FILE *in,*out;
char infile[10],outfile[10];
printf("请输入源文件名:\n");
scanf("%s",infile);
printf("请输入目标文件名:\n");
scanf("%s",outfile);
if((in=fopen(infile,"rb"))==NULL)
{
print 23、f("不能打开源文件。\n");
exit(0);
}
if((out=fopen(outfile,"wb"))==NULL)
{
printf("不能打开目标文件。\n");
exit(0);
}
CopyBinFile(in,out);
fclose(in);
fclose(out);
return 0;
}
void CopyBinFile(FILE *in,FILE *out)
{
char buff[32768];
unsigned int bfsz=32768;
unsigned long i=0;
while 24、bfsz)
{
if(fread(buff,bfsz,1,in))
{
fwrite(buff,bfsz,1,out);
i=i+bfsz;
}
else
{ char c;
fseek(in,i,0);
c=fgetc(in);
while(!feof(in)){
fputc(c,out);
c= fgetc(in);
}
break; //退出while(bfsz)
}
}
SC 01 02 01 05 409
1.源代码编号
SC01020105409
2 25、.源代码来源
单元5 构造类型程序设计——文件
同步训练 程序设计题1
3.问题描述
编程实现以下功能:从键盘输入一个字符串,将文件中的大写字母全部转换成小写字母,输出到磁盘文件letter.txt中保存,以字符#表示输入结束。
4.程序代码
#include 26、
printf("Please enter a string:\n");
f=getchar();
while(f!='#')
{
if(f>='A'&&f<='Z')
f=f+32;
fputc(f,fp);
f=getchar();
}
fclose(fp);
}
SC 01 02 01 05 410
1.源代码编号
SC01020105410
2.源代码来源
单元5 构造类型程序设计——文件
同步训练 程序设计题2
3.问题描述
有一文件num.txt中存有形如 -1,0,1,2,5,3,0,-1,2,4,5,5,6 27、7,0,的数据,编程统计出文件中正整数的个数。
4.程序代码
#include 28、>0) n++;
}
fclose(fp);
printf("%d\n",n);
}
SC 01 02 01 05 411
1.源代码编号
SC01020105411
2.源代码来源
单元5 构造类型程序设计——文件
同步训练 程序设计题3
3.问题描述
在文件worker.dat中存放着工人的基本信息,用以下结构体来描述:
struct worker
{
long int num; /*工号/
char name[10]; /*姓名/
int age; /*年龄/
char sex; 29、 /*性别/
char dept[20]; /*部门/
};
请编程查找工号为1001的人工信息并输出在屏幕上。存放工人的信息文件worker.dat需自己编写程序形成,可以参考对应同步训练。
4.程序代码
#include "stdio.h"
#include "stdlib.h"
struct worker
{
int num; /*工号*/
char name[10]; /*姓名*/
int age; /*年龄*/
char sex; /*性别*/
char dept[10]; /*部 30、门*/
};
void main()
{
FILE *fp;
struct worker wrk;
if((fp=fopen("worker.dat","rb"))==NULL)
{
printf("can not open file\n");
exit(0);
}
fread(&wrk,sizeof(struct worker),1,fp);
while(!feof(fp))
{
if(wrk.num==1001)
printf("num:%d name:%s age:%d sex:%c dept:%s\n", wrk.num,wrk.name,wrk.age,wrk.sex,wrk.dept);
fread(&wrk,sizeof(struct worker),1,fp);
}
fclose(fp);
}






