C语言程序设计第3版何钦铭 颜 晖 第12章 文件范本模板Word格式文档下载.docx

上传人:b****6 文档编号:16978897 上传时间:2022-11-27 格式:DOCX 页数:26 大小:23.16KB
下载 相关 举报
C语言程序设计第3版何钦铭 颜 晖 第12章 文件范本模板Word格式文档下载.docx_第1页
第1页 / 共26页
C语言程序设计第3版何钦铭 颜 晖 第12章 文件范本模板Word格式文档下载.docx_第2页
第2页 / 共26页
C语言程序设计第3版何钦铭 颜 晖 第12章 文件范本模板Word格式文档下载.docx_第3页
第3页 / 共26页
C语言程序设计第3版何钦铭 颜 晖 第12章 文件范本模板Word格式文档下载.docx_第4页
第4页 / 共26页
C语言程序设计第3版何钦铭 颜 晖 第12章 文件范本模板Word格式文档下载.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

C语言程序设计第3版何钦铭 颜 晖 第12章 文件范本模板Word格式文档下载.docx

《C语言程序设计第3版何钦铭 颜 晖 第12章 文件范本模板Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计第3版何钦铭 颜 晖 第12章 文件范本模板Word格式文档下载.docx(26页珍藏版)》请在冰豆网上搜索。

C语言程序设计第3版何钦铭 颜 晖 第12章 文件范本模板Word格式文档下载.docx

%d,num:

%d,name:

%s\n”,students[j].score,students[j].num,&

students[j].stname);

printf(”Minscore:

%d,num:

%d,name:

%s\n”,students[k].score,students[k]。

num,&students[k]。

stname);

if(fclose(fp)){

printf("

Cannotclosethefile!

\n”);

return0;

}

【练习12—2】请使用例8—9答电码加密函数对民吗字符串进行加密,改写例12-2。

#include〈stdio.h>

#include<

string.h〉

#include〈stdlib。

h>

structsysuser{

charusername[20];

charpassword[8];

};

voidencrypt(char*pwd);

FILE*fp;

inti;

structsysusersu;

if((fp=fopen(”f12-2.txt"

,"

w"

))==NULL){

Fileopenerror!

\n"

);

for(i=1;

i<

=5;

i++){

Enter%dthsysuser(namepassword):

”,i);

scanf(”%s%s”,su.username,su。

password);

encrypt(su.password);

fprintf(fp,"

%s%s\n"

su.username,su。

}

if(fclose(fp)){

Cannotclosethefile!

voidencrypt(char*pwd)

for(i=0;

strlen(pwd);

i++)

if(pwd[i]==’z’)

pwd[i]=’a’;

else

pwd[i]+=1;

【练习12-3】例12—3中为什么在执行fputc(ch,fp2)前要判断ch的值是否等于EOF?

改写例12—3的程序,在复制用户信息文件后,再统计被复制文件中字符的数量。

文件结束符EOF是一个值为-1的常量,读文件时可用来判断从文件中读入的字符是否为EOF来决定循环是否继续。

FILE*fp1,*fp2;

charch;

intcount=0;

if((fp1=fopen("

f12—2。

txt”,"

r"

))=NULL){

if((fp2=fopen("

f12-3.txt”,”w”))==NULL){

);

exit(0);

while(!

feof(fp1)){

ch=fgetc(fp1);

if(ch!

=EOF){

fputc(ch,fp2);

count++;

if(fclose(fp1)){

}

if(fclose(fp2)){

printf(”f12—2中字符数量为:

%d”,count);

【练习12—4】字母转换并统计行数:

读取一个指定的文本文件,显示在屏幕上,如果有大写字母,则改成小写字母再输出,并根据回车符统计行数.试编写相应程序。

#include〈stdio。

#include〈stdlib.h〉

charch;

intcountline=0;

练习12—4。

txt"

r”))==NULL){

printf("

Notopen!

”);

exit(0);

feof(fp)){

ch=fgetc(fp);

if(ch!

=EOF)

if(ch>

=’A'

&&ch<

=’Z'

%c”,ch—’A'

+’a'

else

%c”,ch);

if(ch==’\n'

countline++;

file’slineis:

%d.”,countline+1);

Cannotclose!

”);

exit(0);

return0;

【练习12—5】写字符并验证:

从键盘输入一行字符,写入到文件f3。

txt中,并重新读出,最终在屏幕上显示验证。

程序输入以读到回车符“\n”为结束,读文件时要用EOF来控制循环。

试编写相应程序。

解答:

#include〈stdio。

stdlib。

intmain(void)

{

FILE*fp;

if((fp=fopen(”f3.txt”,"

w+"

))==NULL){

cannotopenfile!

"

printf(”Inputthestring:

ch=getchar();

while(ch!

='

\n'

){

fputc(ch,fp);

rewind(fp);

while(!

feof(fp)){

ch=fgetc(fp);

=EOF)

putchar(ch);

printf(”cannotclosefile!

【练习12—6】实数取整写入文件:

文件f1.txt中有若干个实数,请分别读出,将每个实数按四舍五入取整后存入文件f2.txt中。

FILE*fp1,*fp2;

doublea;

if((fp1=fopen(”f1。

txt”,”r"

printf(”Fileopenerror!

if((fp2=fopen(”f2.txt"

,”w"

feof(fp1)){

fscanf(fp1,”%lf”,&a);

fprintf(fp2,”%。

0f"

,a);

if(fclose(fp1)){

printf(”Cannotclosethefile!

if(fclose(fp2)){

printf(”Cannotclosethefile!

【练习12—7】修改例12-6,增加修改资金账户的功能。

输入一个记录ID,如果文件中已存在该记录,则输入新的记录信息并更新资金账户文件中相应记录的信息。

要求定义和调用函数UpdateLog(),其功能是修改资金账户记录.

longsize;

structLogData{

longlogid;

charlogdate[11];

char1ognote[15];

doublecharge;

doublebalance;

intinputchoice()

intmychoice;

\nEnteryourchoice:

\n”);

1—AddanewcashLOG。

\n2—ListAllCashLOG.\n"

printf(”3-QueryLastCashLoG.\n0-Endprogram。

scanf(”%d”,&mychoice);

returnmychoice;

longgetLogcount(FILE*cfptr)

longbegin,end,logcount;

fseek(cfptr,OL,SEEK_SET);

begin=ftell(cfptr);

fseek(cfptr,size,SEEK_END);

end=ftell(cfptr);

logcount=(end-begin)/size—1;

returnlogcount;

/*列出所有收支流水账*/

voidListAllLog(FILE*cfptr)

structLogDatalog;

fseek(cfptr,OL,SEEK_SET);

fread(&log,size,1,cfptr);

printf(”logidlogdatelognotechargebalance\n"

feof(cfptr)){

printf(”%6ld%—11s%-15%10。

2lf%10.2lf\n”,log。

logid,log.logdate,log.lognote,log。

charge,log。

balance);

fread(&

log,size,1,cfptr);

};

/*查询显示最后一条记录*/

voidQueryLastLog(FILE*cfptr)

longlogcount;

logcount=getlogcount(cfptr);

if(1ogcount>

0)

{

fseek(cfptr,size*(logcount-1),SEEK_SET);

log,size,1,cfptr);

printf(”Thelastlogis:

logid:

%—6ld\nlogdate:

%-11s\nlognote:

%-15s\n"

log。

logid,log.logdate,log。

lognote);

printf(”charge:

%-10.2lf\nbalance:

—10。

2lf\n"

log.charge,1og.balance);

elseprintf(”nologsinfile!

/*添加新记录*/

voidAddNewLog(FILE*cfptr)

structLogDatalog,lastlog;

longlogcount;

printf(”Inputlogdate(format:

2006-01—01):

scanf(”%s"

,log.logdate);

Inputlognote:

scanf("

%s"

,log。

printf(”InputCharge:

Income+andepend—:

%lf”,&log.charge);

logcount=getLogcount(cfptr);

if(logcount>

0){

fseek(cfptr,size*(logcount-1),SEEK_SET);

fread(&lastlog,size,1,cfptr)

log。

logid=lastlog.1ogid+1;

balance=log。

charge+lastlog。

balance;

else{

log.logid=1;

charge;

rewind(cfptr);

ogid=last-taraetlastlog;

logid=%ld\n”,log。

logid);

fwirte(&log,sizeof(structLogData),1,cfptr);

/*修改资金账户*/

voidUpdateLog(FILE*cfptr)

FILE*fpout;

structLogDatauser;

chardate[11];

charnote[15];

doublecharge;

intchoice,ID;

cfptr=fileopen("

r”);

if((fpout=fopen(”cash.dat"

w”))==NULL){

cannotopenthefile!

EnterLogID:

%d"

&ID);

feof(cfptr)){

fread(&user,sizeof(structLogData),1,cfptr);

if(strcmp(user。

logid,ID)==0){

printf(”请输入修改信息:

printf(”Date:

%s"

,date);

strcpy(user.logdate,date);

Note:

%s”,note);

strcpy(user。

lognote,note);

printf(”Charge:

user。

charge=charge;

printf(”Balance:

%s”,&balance);

balance=balance;

fwrite(&

user,sizeof(structLogData),1,fpout);

fwrite(&user,sizeof(structLogData),1,fpout);

if(fclose(cfptr)){

cannotclosefile!

if(fclose(fpout)){

cannotclosefile!

unlink("

cashbox。

dat”);

//remove(”cashbox.dat"

都是删除文件的函数

rename("

cash.dat。

dat"

”cashbox。

dat”);

/*打开文件*/

FILE*openfile(char*openmode)

,openmode))==NULL){

printf(”cannotopenfilecashbox。

dat!

return(fp);

FILE*fp;

intchoice;

size=sizeof(structLogData);

while((choice=inputchoice())!

=0){

switch(choice){

case1:

fp=openfile(”ab+"

AddNewLog(fp);

break;

/*列出所有的收入支出情况*/

case2:

fp=openfile("

rb”);

ListAllLog(fp);

/*查询最后记录及余额*/

case3:

rb"

QueryLastLog(fp);

break;

case4:

rb”);

UpdateLog(fp);

default:

InputError."

习题12

一、选择题

1。

以下语句将输出____B_____。

printf("

%d%d%d"

,NULL,‘\0’,EOF);

A。

001B。

00—1C.NULLEOFD。

10EOF

2.如果二进制文件a.dat已经存在,现在要写入全新数据,应以____B____方式打开。

A.”w”B.”wb”C.”w+"

D.“wb+”

3.定义”FILE*fp;

”,则文件指针fp指向的是_____D_____。

A.文件在磁盘上的读写位置B文件在级冲区上的读写位置

C。

整个磁盘文件D。

文件类型结构

4.缓冲文件系统的文件缓冲区位于____C______。

磁盘缓冲区中B.磁盘文件中

C.内存数据区中D。

程序文件中

5。

使文件指针重新定位到文件读写的首地址的函数是_____C_____。

ftell()B。

fseek()C.rewind()D.ferror()

二、填空题

1.函数fopen()的返回值是_指向文件缓冲区的首地址的文件结构类型指针_。

2.文件的三大特征是__名称__、__大小__和__类型__。

3。

缓冲文件系统与非缓冲文件系统的不同点在于__系统是否为文件自动分配一块文件缓冲区(内存单元)__。

4。

只能向指定文件写入一个字符的函数是_____fputc()函数______。

5.判断文件指针是否已经到了文件尾部的函数是___feof()函数___。

6.阅读程序,以下程序完成的功能是__文件infile内容复制到文件__.

#include〈stdio.h>

intmain(void)

{charinfile[10],outfile[10];

FILE*fpa,*fpb;

gets(infile);

gets(outfile);

fpa=fopen(infile,"

);

fpb=fopen(outfile,"

w”);

while(!

feof(fpa))

fputc(fgetc(fpa),fpb);

fclose(fpa);

fclose(fpb);

return0;

三、程序设计题

1。

统计文本文件中各类字符个数:

分别统计一个文本文件中字母、数字及其他字符的个数。

#include〈stdio.h>

intletter=0,digiter=0,other=0;

12-3.1.txt"

,”r”))==NULL){

Fileopenerror!

while((ch=fgetc(fp))!

=EOF){

&&ch〈=’Z'

||ch〉='

a'

=’z'

letter++;

elseif(ch>

=’0'

&&ch〈=’9’)

digiter++;

other++;

printf(”letter=%d,digiter=%d,other=%d”,letter,digiter,other);

}

2。

将实数写入文件:

从键盘输人若干实数(以特殊数值—1结束),分别写到一个文本文件中。

试编写相应程序.

intnumber;

if((fp=fopen(”12-3。

2.txt"

”w”))==NULL){

cannotopenfile!

exit(0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 社交礼仪

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1