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.終於我們即將不再是師生。當你結束本課程,你和我就站在同樣的位置上,我將不再基於學校授權和知識、經驗 (年齡?)上的優勢而對你的自由有任何干擾。除發布成績以外,我最后一次行使教師特權: 請問你有什么要對教師 (我)說的,建議、抱怨、希望……多謝。
建議:希望老師能夠根據我們的能力來出一些題,我覺得老師你有時候有點高估我們的能力了,老師有些題絕大部分的我們都不會,所以我們會抄襲來完成老師的任務,代碼都是一樣的。
老師,在您的眼中我可能是一個好學生,很感謝您的信任和鼓勵,在有時候我挺叛逆的,作業太多,以至於在心里對老師有埋怨,現在回想起來其實老師也是為我們好,老師真的很對不起你,希望您能原諒我。老師很感謝你這么長時間對我的關注與支持,您一直對我充滿希望,謝謝你老師。
