第四次作业
1.
1.设计思路:
第一步:定义一个字符数组filename[20]用于存放所输入的文件名,输入一个字符串给字符数组filename。
第二步:定义文件型指针变量*fp
第三步:使用fopen函数打开所要处理的文件,如果打开失败就输出cannot open file,然后关闭所有文件,终止正在执行的程序,打开文件成功,定义一个字符变量a,整型变量count=0,读入一个字符给a。
第四步:如果字符a是c就调用函数zifushu,将函数的返回值给count,如果字符a是w就调用函数cishu,将函数的返回值赋给count,如果字符a是l就调用函数line,将函数的返回值赋给count,如果都不满足就输出请输入正确的命令字符,关闭文件,结束程序
第五步:在函数zifushu中统计文件的字符数:定义字符变量c,整型变量count=0,使用while循环,条件为!feof(fp)(判断文件是否是末尾),如果不是就执行c=fgetc(fp),如果c>=0&&c<=127,count++,执行完while语句就返回count的值。函数cishu的作用统计文件中词的数目,并将词的数目返回给主函数,函数line的作用统计文件中的行数,将行数返回给主函数。
2.代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int zifushu(FILE *fp);
int cishu(FILE *fp);
int line(FILE *fp);
int main(int argc,char *argv[])
{
FILE *fp;
if((fp=fopen("file.c","r"))==NULL){
printf("cannot open file\n");
exit(0);
}
char a;
int count;
scanf("%c",&a);
if(a=='c'){
count=zifushu(fp);
}else if(a=='w'){
count=cishu(fp);
}else if(a=='l'){
count=line(fp);
}
printf("%d",count);
fclose(fp);
return 0;
}
int zifushu(FILE *fp){
/*FILE *fp;
if(fp=fopen(file.c,"r")==NULL){
printf("cannot open file\n");
exit(0);
}*/
char c;
int count=0;
while(!feof(fp)){
c=fgetc(fp);
if(c>=0&&c<=127){
count++;
}
}
//fclose(fp);
return count;
// printf("%d",count);
}
int cishu(FILE *fp){
/*FILE *fp;
if(fp=fopen(file.c,"r")==NULL){
printf("cannot open file\n");
exit(0);
}*/
char c;
int count=0;
while(!feof(fp)){
c=fgetc(fp);
if((c>='A'&&c<='Z')||(c>='a'&&c<='z')) count++;
}
//fclose(fp);
return count;
// printf("%d",count);
}
int line(FILE *fp){
/*FILE *fp;
if(fp=fopen(file.c,"r")==NULL){
printf("cannot open file\n");
exit(0);
}*/
char c;
int count=0;
while(!feof(fp)){
if(c=='\n') count++;
}
//fclose(fp);
return count;
// printf("%d",count);
}
上述代码只能输出固定的文件file.c的字符数,行数,单词数,不满足题意,
修改后的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int zifushu(FILE *fp);
int cishu(FILE *fp);
int line(FILE *fp);
int main(int argc,char *argv[])
{
char filename[20];
printf("Please input you want to open the file name:\n");
gets(filename);
FILE *fp;
if((fp=fopen(filename,"r"))==NULL){ //打开你所输入的文件名的文件,
printf("cannot open file\n"); //如果失败了就输出cannot open file,结束程序
exit(0);
}
char a;
int count=0;
printf("请输入一个字符:\n"); //输入一个字符来判断所要进行的功能 c代表输出文件的字符数,w代表输出文件的单词数,l代表文件的行数
scanf("%c",&a);
if(a=='c'){
count=zifushu(fp); //调用函数字符数
}else if(a=='w'){
count=cishu(fp); //调用函数cishu
}else if(a=='l'){
count=line(fp); //调用函数line
}else{
printf("请输入正确的命令字符\n");
fclose(fp);
return 0;
}
printf("%d",count); //打印count的值(即你所要输出的单词数/字符数/行数)
fclose(fp); //关闭文件
return 0;
}
int zifushu(FILE *fp){ //统计字符数的函数
/*FILE *fp;
if(fp=fopen(file.c,"r")==NULL){
printf("cannot open file\n");
exit(0);
}*/
char c;
int count=0;
while(!feof(fp)){
c=fgetc(fp);
if(c>=0&&c<=127){
count++;
}
}
//fclose(fp);
return count;
// printf("%d",count);
}
int cishu(FILE *fp){ //统计单词数的函数
/*FILE *fp;
if(fp=fopen(file.c,"r")==NULL){
printf("cannot open file\n");
exit(0);
}*/
char c;
int count=0;
while(!feof(fp)){
c=fgetc(fp);
if((c>='A'&&c<='Z')||(c>='a'&&c<='z')) count++;
}
//fclose(fp);
return count;
// printf("%d",count);
}
int line(FILE *fp){ //统计行数的函数
/*FILE *fp;
if(fp=fopen(file.c,"r")==NULL){
printf("cannot open file\n");
exit(0);
}*/
char c;
int count=0;
while(!feof(fp)){
c=fgetc(fp);
if(c=='\n') count++;
}
//fclose(fp);
return count;
// printf("%d",count);
}
3.作业所用的知识点:
1.定义文件型指针变量
FILE *fp;
2.打开文件的方式
if((fp=fopen("file1",''r")==NULL){
printf("cannot open file\n");
exit(0);
}
关闭文件:
fclose(fp);
当成功关闭文件则返回0,则返回EOF(-1)
3.fputc和fgetc函数
fputc(ch,fp);将字符ch的值输出到fp所指向的文件中去
ch=fgetc(fp);从文件中读取一个字符给ch。
4.feof函数
feof函数判断文件是否结束/判断是否是文件末尾
feof(fp);如果文件结束feof(fp)=1,否则feof(fp)=0.
2.学习进度和总结
Git https://gitee.com/tmjl/fourth_pta_operation/tree/master
评论我的博客作业的同学:
马钰娟:http://www.cnblogs.com/chenxidream/p/8992880.html
袁中:http://www.cnblogs.com/chenxidream/p/8992880.html
李新华:http://www.cnblogs.com/chenxidream/p/8992880.html
我所评论同学的博客:
李新华:http://www.cnblogs.com/Lixinhua18/p/8992895.html
辛静瑶:http://www.cnblogs.com/X-JY/p/8933801.html
马钰娟:http://www.cnblogs.com/dfgfds/p/8992878.html
1.本学期课程即将结束,请总结下你本课程的收获,回顾第0次作业,你是否实现了你的目标?
回过自己的第零次作业,理想很美好,但是关键还是要付诸行动,感觉自己真的很失败,在第零次作业中提到要以课本为基础,每天给自己一个任务看书并且敲书上的例题的代码,在一开始还能坚持,一两周之后就没有实行过。自己没有坚持下去,感觉很失败。在作业中提到要做到课前预习,课后复习,但是我从来没有预习过,复习倒是有过,倒是最近活动太多,我从前的知识点都忘记的差不多了,尤其是链表忘记的一干二净,
经过两个月的学习,自我感觉良好,对于老师所讲的内容,绝大部分能够明白,但是以前的知识点已经很长时间没有复习了,感觉有些遗忘了,这点没有做好,对于最后一节所学的文件,我没有学会,学的模棱两可。现在我可以读懂代码,这一点我做到了。
开学到现在所学的主要是指针,链表,文件,结构。收获挺多的,相关的基本的知识点能够掌握,就是有时候做题不知道该怎么运用,可能是自己敲得太少,在这方面需要加强。从现在开始我需要好好复习学过的知识点,每天看一点。
2.你对目前的上课和作业方式(上课讲解+PTA+博客)有何意见和建议?
就我的观点来说,在课上老师所讲的知识点有点快,在课上总会有一些知识点不太明白,自己其实并不太敢问说这点没有明白,就这样稀里糊涂的过去了,这样就不得不逼迫自己看书本去搞明白,
PTA作业感觉挺好的,能够及时的巩固上节课所学习的知识点,当做题时遇到不会的知识点能够强迫自己去看书,或者问问同学,能过学到好多有用的东西
博客作业:在做作业时其实自己是非常抵触的,要求太繁琐,感觉太浪费自己的时间,但是不得不完成就按照老师的要求去做,经过五次的的博客作业,现在已经结束了,感觉对自己来说是一种解脱。现在想想,其实也没什么了,我知道做任何一件事都有他的意义,他对我的影响和帮助,我现在还不明白还没有体会到,也许在以后的学习道路上会体会到,现在我只是觉得自己比以前细心了。
3.终于我们即将不再是师生。当你结束本课程,你和我就站在同样的位置上,我将不再基于学校授权和知识、经验 (年龄?)上的优势而对你的自由有任何干扰。除发布成绩以外,我最后一次行使教师特权: 请问你有什么要对教师 (我)说的,建议、抱怨、希望……多谢。
建议:希望老师能够根据我们的能力来出一些题,我觉得老师你有时候有点高估我们的能力了,老师有些题绝大部分的我们都不会,所以我们会抄袭来完成老师的任务,代码都是一样的。
老师,在您的眼中我可能是一个好学生,很感谢您的信任和鼓励,在有时候我挺叛逆的,作业太多,以至于在心里对老师有埋怨,现在回想起来其实老师也是为我们好,老师真的很对不起你,希望您能原谅我。老师很感谢你这么长时间对我的关注与支持,您一直对我充满希望,谢谢你老师。