C语言程序设计 实验报告
班级 日期
学生姓名 学号
第 6 次上机
实验 文件实验
(一) 实验目的
(1)熟悉文本文件和二进制文件在磁盘中的存储方式;
(2)熟练掌握流式文件的读写方法。
(二) 实验内容及要求
1.文件类型的程序验证
设有程序:
#include
void main(void)
{
short a=0x253f,b=0x7b7d;
char ch;
FILE *fp1,*fp2;
fp1=fopen("d:\\abc1.bin","wb+");
fp2=fopen("d:\\abc2.txt","w+");
fwrite(&a,sizeof(short),1,fp1);
fwrite(&b,sizeof(short),1,fp1);
fprintf(fp2,"%hx %hx",a,b);
rewind(fp1); rewind(fp2);
while((ch = fgetc(fp1)) != EOF)
putchar(ch);
putchar('\n');
while((ch = fgetc(fp2)) != EOF)
putchar(ch);
putchar('\n');
fclose(fp1);
fclose(fp2);
}
(1) 请思考程序的输出结果,然后通过上机运行来加以验证。
(2)将两处sizeof(short)均改为sizeof(char)结果有什么不同,为什么?
(3)将fprintf(fp2,"%hx %hx",a,b) 改为 fprintf(fp2,"%d %d",a,b)结果有什么不同。
(1)?%}{
253f 7b7d
(2)
改后只把a和b所指向的1个字节(低字节)输出到fp1,舍去了高字节
(3)fp2输出a,b的十进制数字形式
2.源程序修改、替换
将指定的文本文件内容在屏幕上显示出来,其命令行的格式为:
type filename
(1) 下面源程序中存在什么样的逻辑错误(先观察执行结果)?请对程序进行修改、调试,使之能够正确完成指定任务。
源程序:
#include
#include
void main(int argc, char* argv[])
{
char ch;
FILE *fp;
if(argc!=2){
printf("Arguments error!\n");
exit(-1);
}
if((fp=fopen(argv[1],"r"))==NULL){ /* fp 指向 filename */
printf("Can't open %s file!\n",argv[1]);
exit(-1);
}
while(ch=fgetc(fp)!=EOF) /* 从filename中读字符 */
putchar(ch); /* 向显示器中写字符 */
fclose(fp); /* 关闭filename */
}
(2)用输入输出重定向freopen改写上述源程序中的main函数。
3.程序设计
编写并上机调试运行能实现以下功能的程序:
(1)编写一个程序,实现以下功能:从键盘输入一行英文句子,将每个单词的首字母换成大写字母,然后输出到一个磁盘文件“test”中保存。
(2) 设计一个通信录管理程序,程序应有以下10个选项:
① 录入每个联系人的基本信息(至少应有姓名、单位、电话、邮件地址)。
② 从磁盘文件中读取记录到内存。
③ 保存记录到磁盘文件。
④ 修改记录。
⑤ 插入一条记录。
⑥ 删除一条记录。
⑦ 显示所有的记录。
⑧ 查找某条记录(用二分法)。
⑨ 按姓名对记录升序排序。
⑩ 退出。
要求:
① 用链表结构。
② 采用结构化程序设计,将每个功能定义成函数。
③ 应有用户界面,提供菜单选项。
(1)
#include
void main()
{
char str[100];
FILE *p;
int i,len=0;
printf("输入英文正文:\n");
while((str[len]=getchar())!='\n')
{
len++;
}
for(i=0;i
if(str[i]=' '&&str[i+1]!='\n')