第四次作業


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.終於我們即將不再是師生。當你結束本課程,你和我就站在同樣的位置上,我將不再基於學校授權和知識、經驗 (年齡?)上的優勢而對你的自由有任何干擾。除發布成績以外,我最后一次行使教師特權: 請問你有什么要對教師 (我)說的,建議、抱怨、希望……多謝。

建議:希望老師能夠根據我們的能力來出一些題,我覺得老師你有時候有點高估我們的能力了,老師有些題絕大部分的我們都不會,所以我們會抄襲來完成老師的任務,代碼都是一樣的。
老師,在您的眼中我可能是一個好學生,很感謝您的信任和鼓勵,在有時候我挺叛逆的,作業太多,以至於在心里對老師有埋怨,現在回想起來其實老師也是為我們好,老師真的很對不起你,希望您能原諒我。老師很感謝你這么長時間對我的關注與支持,您一直對我充滿希望,謝謝你老師。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM