资源描述
单元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");
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 "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=fgetc(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],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(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 "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;
}
void 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 *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)
{
printf("不能打开源文件。\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(bfsz)
{
if(fread(buff,bfsz,1,in))
{
fwrite(buff,bfsz,1,out);
i=i+bfsz;
}
else
{
fseek(in,i,0);
bfsz=bfsz/2;
}
}
}
SC 01 02 01 05 406
1.源代码编号
SC01020105406
2.源代码来源
单元5 构造类型程序设计
引例
3.问题描述
模拟22选5彩票摇奖过程,得出开奖号码,查询投注者自选的一组号码是否中奖,中几等奖。
4.程序代码
#include <stdio.h>
#include <time.h>
#include <windows.h>
#define SelectListSize 22 //备选号码表容量为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()%SL->length+1;//随机生成备选号码位置
x=SL->data[*k-1];
if(i<j)
printf("%02d\b\b",x);
else
printf("%02d\t",x);
Sleep(150);//延时
}
return x;
}
void ComputerSelect(List *SL,List *CL)
{//机器生成开奖号码
int i,j,k,x;//k用于存放摇奖号码在备选号码表中的位置
srand((unsigned)time(NULL));
printf("\n现在开始摇奖:\t");
for(i=0;i<LotteryListSize;i++)
{
x=randnum(SL,&k);
for(j=k;j<=SL->length-1;j++)
SL->data[j-1]=SL->data[j];
SL->length--;
CL->data[CL->length]=x; //插入x
CL->length++; //表长加1
}
}
void SelfSelect(List *LL)
{//自选号码生成彩票
int i,j,x;
for(i=0;i<LotteryListSize;i++)
{
scanf("%d",&x);
for(j=0;j<LL->length;j++)
if(x==LL->data[j])
break;
if(x<1||x>SelectListSize||j<LL->length)
{//输入数据小于1或大于22或与前面重复时,出错重输
printf("\n输入错,请全部重新输入:");
i=-1;
LL->length=0;
flushall();//清除缓冲区
}
else
{
LL->data[LL->length]=x; //插入x
LL->length++; //表长加1
}
}
}
void WinSearch(List *LL,List *CL)
{//中奖查询
int i,j=1,k=0;
printf("\n\n您购买的彩票:\t");
for(i=0;i<LotteryListSize;i++)
printf("%02d\t",LL->data[i]);
for(i=0;i<LotteryListSize;i++)
{
j=1;
while(j<=LotteryListSize&&CL->data[j-1]!=LL->data[i])
j++;
if(j<=LotteryListSize&&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},CL={{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.源代码编号
SC01020105407
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:\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;
while((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个字节时,对剩余的字符进行逐一复制。
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)
{
printf("不能打开源文件。\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(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.源代码来源
单元5 构造类型程序设计——文件
同步训练 程序设计题1
3.问题描述
编程实现以下功能:从键盘输入一个字符串,将文件中的大写字母全部转换成小写字母,输出到磁盘文件letter.txt中保存,以字符#表示输入结束。
4.程序代码
#include <stdio.h>
#include <stdlib.h>
void main()
{
char f;
FILE *fp;
if((fp=fopen("letter.txt","w"))==NULL)
{
printf("can not open file\n");
exit(0);
}
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,7,0,的数据,编程统计出文件中正整数的个数。
4.程序代码
#include <stdio.h>
#include <stdlib.h>
void main()
{
char f;
FILE *fp;
int i=0,n=0;
float t;
long pos=0;
if ((fp=fopen("num.txt","r"))==NULL)
{
printf("can not open file\n");
exit(0);
}
while(!feof(fp))
{
fscanf(fp,"%f,",&t);
if(t>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; /*性别/
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]; /*部门*/
};
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);
}
展开阅读全文