C程序第四次作业
作业要求一
实践最简答的项目wordcount,必须完成其中的基本功能,若可以完成其他功能给予加分。完成后请将你的设计思路、主要代码写在本次作业博客里。
设计思路:
第一步:定义文件型指针变量fp,整型number,字符a。
第二步:判断输入的字符a的值,根据a值的不同调用不同的函数。
第三步:在被调用的三个函数中,判断是否打开此txt文件,如果打开失败则直接退出,从fp所指示的磁盘文件上分别读入一个字符到a,b,c,在while循环中判断文件是否结束。
第四步:对应不同的函数在循环中有不一样的条件,最后返回主函数。
主要代码:
#include <stdio.h>
#include <process.h>
int main(int argc,char *argv[])
{
FILE *fp;
int number;
char a;
printf("请输入字符:\n");
scanf("%c",&a);
if(a=='c') {
number=ch();
} else if(a=='w') {
number=wo();
} else {
number=li();
}
printf("%d",number);
return 0;
}
int ch() {
FILE *fp;
if((fp=fopen("wc.txt","r"))==NULL)
{
printf("File to open error!\n");
exit(-1);
}
int m=0;
char a;
a = fgetc(fp);//
while(a!=EOF) {
m++;
a=fgetc(fp);
}
if( fclose(fp) )
{
printf( "Can Not Close The File!\n" );
return 0;
}
return m;
}
int wo () {
FILE *fp;
if((fp=fopen("wc.txt","r"))==NULL)
{
printf("File to open error!\n");
exit(-1);
}
char b;
int i=1,count=0;
b = fgetc(fp);
while(b!=EOF) {
if(b==' '||b=='\n')
{
i=1;
}else
{
if(i==1)
{
count++;
i=0;
}
}
b = fgetc(fp);
}
if( fclose(fp) )
{
printf( "Can Not Close The File!\n" );
return 0;
}
return count;
}
int li() {
FILE *fp;
if((fp=fopen("wc.txt","r"))==NULL)
{
printf("File to open error!\n");
exit(-1);
}
int n=1;
char c;
c= fgetc(fp);
while(c!=EOF) {
if(c=='\n') {
n++;
}
c= fgetc(fp);
}
if( fclose(fp) )
{
printf( "Can Not Close The File!\n" );
return 0;
}
return n;
}
自身觉得自己的代码并不是十分的符合题目要求,虽然在主函数的括号中有写到argc和argv[],但在主函数中并没有运用到。在做这道题的时候自己一开始并没有读懂题目,用了先写后读的方法,最后虽然明白了题意但很懵。在仔细看了赵寅胜同学的代码后,也查阅了关于int main(int argnum, char* args[]) 的书籍和资料,然而还是很懵。最后只是大致明白了它的含义,因此最终选择了这样较为简单的方法。
要求二、学习总结和进度
1、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址。
git地址:(https://git.coding.net/exo07/disizhouzuoye.git)
2、点评3个同学的本周作业(在作业中给出被点评同学博客的链接),并邀请3名同学点评你的作业,无点评作业(你的作业未被3人点评)/或者没有回复同学或老师的点评都倒扣该题分数。
赵寅胜:(http://www.cnblogs.com/2017023960ZYS/p/8952253.html)
董欣:(http://www.cnblogs.com/dx2017/p/8992749.html)
冯子旋:(http://www.cnblogs.com/fengzx/p/8992814.html)
3、请用表格和折线图呈现你本学期的代码行数和所用时间、博客字数和所用时间,包括ACM刷题等其他平时自己练习的代码
4、本学期课程即将结束,请总结下你本课程的收获,回顾第0次作业,你是否实现了你的目标?
答:在本学期感觉自己学了很多,但又感觉像是没学多少,总和起来就是那种学的知识点很多然而自己掌握的都不怎么好的那种程度。
a:在指针方面自己学到了如何去定义指针变量、指针变量的引用、用指针指向数组且进行相应的运算、指针的指向各种类型(指针,字符串,结构体等等),自我感觉前三点掌握的还算熟练以外其他都是需要多加磨炼的。
b:在结构体方面学到了结构体变量的引用和初始化,及结构体数组的应用,感觉这章的知识点较少,因此自己的掌握程度较熟练。
c:在链表这章,自己主要学习到了链表的定义即如何去创建链表及输出链表,而在链表的插入及删除方面属于懂得原理,但实际操作起来的话会需要时间的程度。
d:在文件方面学到了如何去打开和关闭文件,了解了文件的读和写。
回顾第0次作业,自己给自己这一学期设定的目标来看,在对上学期的知识点能够更加熟悉掌握这方面觉得自己是有达到要求的;而在这学期尽量掌握新学的内容方面,感觉自己做的不是很够。而在自己的《第0次作业》中,写到每天会规定至少一个小时的时间去练习和深入了解且不包括PTA作业所需要懂的这点,自己确实是没有做到,可以在每次博客的表格和折线图中也可以看出。而在写PTA时,也没有将时间和写博客园的时间相对应,一般都是在写完PTA之后才开始写的博客园。回顾第0次作业对自己的要求,和现在自身的情况一对比,感觉很内疚。在写第0次作业时,对自己的规划感觉是很满意的,也想每天都要实施下去的,然而却经常会被自己的一些事情打破计划,只能保质保量的完成PTA中的题目。在后面较多的复习的时间内,自己会针对这不足点,将概念及书上例题都尽量做到熟悉和了解,希望在期末考试前,可以做到让自己满意的程度。
5、你对目前的上课和作业方式(上课讲解+PTA+博客)有何意见和建议?
答:对上课讲解+PTA+博客的总体模式并没有什么意见,但就PTA的题目的话,觉得前期的方法较好一点,就是那种一节课讲完后,就对相关知识点的PTA题目进行发布,在下一节课上完以后,再进行第二次发布,而不是那种一次性发布完。当PTA中新的题集一发布里面就有三四道题目时,这样的话会导致同学们一看题数就有可能会做完的话会花费很多时间,且题目肯定比较难的感觉。如果是每道题隔一段时间的话,感觉同学们有可能看到PTA题目时的压力会比较小一点,从而提高同学们的积极性,但如果这样的话,老师应该会更加的辛苦。对PTA+博客的模式感觉是蛮好的,PTA是必要的,而博客也是不可缺的。在博客园中将自己的错误点记录下来,这样积累下来,对我们自身来说也是一笔小小的财富,并且博客园本身也是一个开放的模式,也希望自己可以在其中学到更多的东西。
6、终于我们即将不再是师生。当你结束本课程,你和我就站在同样的位置上,我将不再基于学校授权和知识、经验 (年龄?)上的优势而对你的自由有任何干扰。除发布成绩以外,我最后一次行使教师特权: 请问你有什么要对教师 (我)说的,建议、抱怨、希望……多谢。
答:觉得老师在最后两周的授课中,相较于之前是比较温柔哒。C程序这门课的掌握程度和自己敲的代码数量是呈正比例关系的,并且最终也是以代码的形式呈现出来的,不像网页制作或者是PS这类,效果比较直观。抱怨的话,确实是没有的,老师是很负责任,也很辛苦,希望下学期的相关课程也会是牛老师来教授我们。