内容正文:
第八章文件(二)
第八章文件(二)
一、理论测试题(每小题12分,其中输出格式占2分,共60分)
1.下面的程序执行后,输出内容是?
#include "stdio.h"
int main()(
FILE fpl;
int i;
char chl3]0807="I "),"love "),{"Beijing.
"))
char ch203]080]={"Beijing "),{"welcome "),"you!
"));
fpl=fopen("c:\\test1.txt","w");
for(i=0:i3:i++)
fputs(chli],fpl);
for(i=0:i<3:i++)
fputs(ch2[i],fp1);
fputs("Hey!",fpl);
fclose(fpl):
2.下列程序执行后,exam.dat中的内容是?
#include <stdlib.h
int main()
FILE米fpw:
inta[10],i=0:
for(i=0:i10:i++)
a[i]=10+i:
if((fpw=fopen("d:\\exam.dat","wb"))==NULL)
printf("cannot open the file");
exit(0);
fwrite(a,sizeof(int),10,fpw);
fclose(fpw):
·53·
单招零距离·计算机专业综合测试卷·下册
}
3.二进制文件exam.dat有10个数据,内容是:23342145568932239061,以下程序的
运行结果是?
#include <stdio.h
#include <stdlib.h>
#define N5
int main()
{
FILE fp:
int a[N],i,j,t,n=N;
if((fp=fopen("d:\\exam.dat","rb"))==NULL)
printf("cannot open the file");
exit(0);
fread(a,sizeof(int),n,fp);
fclose(fp);
for(i=1;i<=n-1:i++)
{
for(j=0:j<=n-1-i:j++)
if(a[j]<a+1])
t=a[i];aCj]=aCj+1];a[j+1]=t;
}
printf("排序之后的数据为:
");
for(i=0;i<n;i++)
printf("%4d",a[i门):
}
4.aa.txt中的内容为:aa,bb.txt中的内容为:bb,则文件执行后,aa.txt中的内容为什么?
#include<stdio.h
int main()
FILE fpr,fpw;
·54·
第八章文件(二)
char ch;
fpr=fopen("d:\aa.txt","r");
fpw=fopen("d:\\bb.txt","a+");
ch=fgetc(fpr);
while(ch!=EOF)
fputc(ch,fpw);
ch=fgetc(fpr);
}
fclose(fpr):
fpr=fopen("d:\\aa.txt","a");
rewind(fpw);
ch=fgetc(fpw);
while(ch!=EOF)
(fputc(ch,fpr);
ch=fgete(fpw);
}
fclose(fpr);
fclose(fpw);
5.某二进制文件D盘根目录下exam.dat有10个整型数据,要求读出其中第偶数个数据
放入数组中输出,且求出它们的最大值和最小值的最大公约数。请完成程序。
#include <stdio.h
#include <stdlib.h
int gys(int x,int y);
int main()
{
FILE fp:
int a[5],p=0.i,max,min;
fp=①:
for(i=1;i<=5:i++)
{fseek(②
):
fread(&a[p],sizeof(int),1,fp):
p十十;
}
·55·
单招零距离·计算机专业综合测试卷·下册
fclose(fp);
puts("读出的第奇数个数据有:
"):
for(i=0:i<5:i++)
printf("%d\t",ai]):
printf("
");
min=
③
for(i=1;i<5;i++)
if(a[i]>max)max=a[i门;
if(a[i]<min)min=a[i];
printf("max=%d,min=%d,gys=%d",max,min,gys(max,min));
int gys(int x,int y)
{
int r;
r=x%y;
while(r!=O)
{
x=y;
y=r;
r=x%y;
return
④;
}
二、技能测试题(第1题20分,第2、3题各30分,共80分)
1.程序填空题:有10个两位正整数,用插入法升序排序后把数据用逗号间隔写入到D盘
test目录下文本文件exam.txt中,请完成程序。
#include <stdio.h
#define N 10
int main()
{
inta[N]-{12,23,54,76,32,78,26,53,90,92},i,j,x;
FILE ff;
·56·
第八章文件(二)
printf("原来的数据为:
"):
for(i=0:i<N;i++)
{
printf("%4d",ai):
}
printf("
"):
i=1:
while(i<=N-1)
/关头关关关关共兴兴关关关关米兴¥米SPACE米关*关米¥*米共兴米¥米米*兴/
for((1)
j>=0&&.x<a[j门j--)
aj+1]=a[j];
aj+1]=x:
i++;
}
printf("排序之后的数据为:n"):
for(i=0;i<10;i++)
printf("%4d",ai):
printf("
"):
ff=fopen("d:\test\\exam.txt","w");
for(i=0:i<10:i++)
/¥关关米¥¥兴兴并米关0¥关关并*SPACE*共米米米并*关关米兴米关关¥¥
fprintf((2));
fclose(ff):
2.程序改错题:d盘根目录abcl.txt中有字符:agahdadhshsdgsdfb,下列程序执行后其中
内容变为:
agahdadhshsdgsdfb
文件中删除相同的字符后是:aghdsfb
程序中有三处错误,请改正。
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "ctype.h"
·57·
单招零距离·计算机专业综合测试卷·下册
#define N 200
void del_same(char st])
char ch[N];
int i.j,k;
for(i=0,k=0;st[i];i++)
人
/并米¥关并英米并***关00并FOUND弟*0关关米米黄并0关0关养¥并并
for(j=0;j<=k:j++)
if(st[i]==chj])
break:
if(j==k)
ch[k++]=st[i];
ch[k]=0;
strepy(st,ch);
void file read(char st],char fn])
(char str[N],ch:
int i;
FILE fpr:
if((fpr=fopen(fn,"r"))==NULL)
(printf("open %os error",fn);
exit(0);
}
fgets(fpr,N,st);
fclose(fpr):
void file_write(char st[],char fn])
FILE fpw:
/*米米米米米**兴米米米*关兴FOUND*关兴米米*米*兴兴兴关米米**米/
if((fpw=fopen(fn,"w"))==NULL)
(printf("open %s error",fn);
·58·
第八章文件(二)
exit(0);
fputs("
文件中删除相同的字符后是:",fpw):
fputs(st,fpw);
fclose(fpw);
int main()
(char strN],ch,filename[20]={"d:\\abel.txt");
file read(str,filename);
del_same(str);
file write(str,filename);
printf("文件中删除相同的字符后是:%s",str):
}
3.程序编程题:小玲的老公是一个程序员,今年寒假小玲在外省抗疫值班,晚上接到老公
孙强电话询问银行卡的密码,井玲说电脑D盘根目录中有一个文本文件bb.txt中有三行八进
制字符,让他用C语言编程转换成十进制字符(转换后不超过两位)后就知道密码的后六位数
了。其中每行如转换成的十进制数是两位数则就是这两个数,如转换后的十进制数是一位数,
则在前加一个字符0,一行要保证有两个十进制字符,这样三行就有六个数字字符,这六个数
字字符就是密码的后六位。只有孙强求出银行卡的后六位后发送给小玲,小玲才会告知其银
行卡的密码前缀。如你是孙强,请你完成下列程序。
如文件中内容为:
117
心
14
则程序输出为:
117
5
14
密码后六位是:790512
函数void octal_decimal(char st[3][N],char result[])完成把st中的三行八进制字符转
换成十进制字符按规则放人result字符数组中。
函数void file_r(char str[3][N],char filename[])完成从D盘根目录中bb.txt中读取三
行字符放入str中。
#include "stdlib.h
·59·
单招零距离·计算机专业综合测试卷·下册
include "string.h"
include "ctype.h"
#define N 20
void octal_decimal(char st[3][N],char result)
{米米**米*米米米米米米*Pr0grm米米*米米米为米米0米0米米/
/米关米0****00米0关0Ed0米米****米兴米¥*0*/
void file_r(char str[3][N],char filename[])
{/米米兴¥0¥¥米米米¥*米米Pr0grm米米*米****米米米米米*/
/*关关米关关*关兴关英弟关兴Ed关关米弟并并¥米米¥关关关*/
int main()
(char str[3]N],ch,filename[20]=("d:\\bb.txt"),result[N];
file r(str,filename);
octal_decimal(str,result);
printf("
密码后六位是:%s",result):
}
·60· 3.程序设计题:
intnum[26]={0};
inti,maxi;
i=0;
while(st[i])
{num[tolower(st[i])-'a']++;
i++;
}
maxi=0;
for(i=0;i<26;i++)
if(num[i]>num[maxi])maxi=i;
returnmaxi+'a';
charstr[N],ch;
inti;
FILE ∗fpr;
if((fpr=fopen("d:\\abc1.txt","r"))= =
NULL)
{printf("openabc1.txterror");
exit(0);
}
ch=fgetc(fpr);
while(ch! =EOF)
{str[i++]=ch;
ch=fgetc(fpr);
}
str[i]=0;
fclose(fpr);
第八章 文件二
一、理论测试题
1.IloveBeijing.
Beijingwelcomeyou!
Hey!
2.10111213141516171819
3.排序之后的数据为:5645342321
4.aabbaa
5.①fopen("d:\\exam.dat","rb")
②fp,sizeof(int),1
③max=a[0]
④y
二、技能测试题
1.(1)j=i-1,x=a[i] (2)ff,"%d,",a[i]
2.(1)for(j=0;j<k;j++)
(2)fgets(st,N,fpr)
(3)if((fpw=fopen(fn,"a"))==NULL)
3.inti,j,n,num;
n=0;
for(i=0;i<3;i++)
{num=0;
for(j=0;st[i][j]! ='
'&&st[i][j]! =0;j
++)
num=num∗8+st[i][j]-'0';
if(num>=10)
{
result[n++]=num/10+'0';
result[n++]=num%10+'0';
}
else
{result[n++]='0';
result[n++]=num+'0';
}
}
result[n]=0;
inti;
FILE ∗fpr;
if((fpr=fopen(filename,"r"))==NULL)
{printf("open%serror",filename);
exit(0);
}
for(i=0;i<3;i++)
{fgets(str[i],N,fpr);
printf("%s",str[i]);
}
fclose(fpr);
6
单招零距离计算机专业综合测试卷下册