第四次作业

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.终于我们即将不再是师生。当你结束本课程,你和我就站在同样的位置上,我将不再基于学校授权和知识、经验 (年龄?)上的优势而对你的自由有任何干扰。除发布成绩以外,我最后一次行使教师特权: 请问你有什么要对教师 (我)说的,建议、抱怨、希望……多谢。

建议:希望老师能够根据我们的能力来出一些题,我觉得老师你有时候有点高估我们的能力了,老师有些题绝大部分的我们都不会,所以我们会抄袭来完成老师的任务,代码都是一样的。
老师,在您的眼中我可能是一个好学生,很感谢您的信任和鼓励,在有时候我挺叛逆的,作业太多,以至于在心里对老师有埋怨,现在回想起来其实老师也是为我们好,老师真的很对不起你,希望您能原谅我。老师很感谢你这么长时间对我的关注与支持,您一直对我充满希望,谢谢你老师。

posted @ 2018-05-04 22:32  _晨曦  阅读(225)  评论(10编辑  收藏  举报