2017 寒假作業 (一) 隨筆


前言

在寫這篇隨筆之前,掌握了一下markdown的基本語法,以及探索了一下GitHub的用法,所以拖了一點時間,這也算是寫這篇隨筆的一大收獲吧,在這個過程中提高了自己的自學能力。


有關技能和經驗的調查

你有什么技能比大多人(超過70%以上)更好?針對這個技能的獲取你有什么成功的經驗?

沉思了許久,如果在四個月前也許我會說,數學。在當時我還是能夠自信地說我的數學成績能比70%的人更好,但這70%的范圍只是基於我當時所處的環境。也許是因為高中的知識比較容易掌握,加上老師授課速度慢,有足夠的時間讓我消化,所以對於高中數學我還是游刃有余。每逢數學競賽必去參加,雖然僅僅拿過少數微不足道的獎。圖就不發了,在這大神如雲的地方實在不好意思。而最令我自豪的大概是數學老師只要有出差,就讓我替他上課,雖然我並不是課代表,於是到了最后就演變成了這種局面:

我:“明天數學老師要出差,然后有誰想要來上數學課的嗎?”
全班:“你啊!”

印象中,從高一到高三,大概共代過四堂課,而大大小小的周考更是不知道幫老師改了多少次(我不是課代表)。這其實就是成功的經驗吧。在備課的過程中需要自己對整個知識點有充分的理解,於是為了不禍害同學們就會逼自己不放過每個重難點,從而對數學的認識也默默提升了。而改考卷改作業的時候總能發現各種各樣的錯誤,潛意識里能給自己提個醒。同理,給其他同學講解題目也是一個提升的好辦法,有時別人來問的題目恰好是我放空過去沒做的題,為了不辜負對方的信任,自己就會翻書翻各種材料慢慢摸索,最后竟然也能夠解出來,無形之中提高了自己的能力和信心。一道題反反復復給不同的人講解,再難的知識點還不能掌握那就說不過去了。

還有一個個人認為很重要的經驗就是,反復研究解題辦法。在刷完一張卷子或做完習題后,對於那些沒有思路的題目,參照答案的時候最好能夠領悟解題的方法,而不是僅僅將目光放在眼前這道題,應該看到整個類型的題,真正理解原理,掌握它的思想融會貫通

另外最后一點是學會積累,積累各種各樣的題型,做得多了,到最后看到大部分的題也基本能一下想到思路。這一點其實同時也適用於很多方面,譬如對於做海報,在這之前我會多搜圖,多看看別人怎么做的,多積累素材,儲存在腦子里,然后等自己做的時候就能比較有靈感了。在此舉個例子(來自我的收藏):

上了大學之后發現自己就是個蒟蒻,人外有人天外有天,在這被虐成了渣,上了高數線代的我瞬間就懂了高中時有些人說數學課完全聽不懂是種什么體驗,感謝高中對數學良好的興趣讓我不至於放棄治療,還在努力搶救中。

目前我的數學是渣得一塌糊塗,不過上述重點主要在介紹經驗,如果讓我說現在有什么技能比較突出的話……手速快算嗎?

當然我不玩LOL也不玩dota。

我也沒具體測試過自己的速度是多少,只是從小學到高中都被同學或老師委托打各種各樣的材料,一旦有什么需要從紙質版轉化為電子版,二話不說就來找我了。

成功的經驗就是打得多熟記按鍵位置吧,慢慢就熟練了,家里鍵盤拆下來洗的時候一般我的任務就是鍵帽復位。很慚愧我打字都是亂打,在小學信息技術培訓班的時候才從老師口中第一次聽到打字的正確指法,而那時我已經改不過來了,於是也就一直將錯就錯下去,倒也沒有什么影響。曾經想嘗試過雙拼不過記不住。

所以結合兩者成功的經驗,大致可以歸結為以下幾點:

  • 學會積累
  • 勤奮刻苦,多做,多練,自然就熟了
  • 學會學習,模仿,總結經驗和方法
  • 學會自己解決遇到的問題,在解決問題的過程中加深印象

有關C語言學習的調查

你是怎么學習C語言的?(作業,實驗,教材,其他),與你的高超技能相比,C語言的學習有什么經驗和教訓?

我最開始接觸代碼也是在小學的信息技術培訓班,當時參加的競賽由兩部分組成,一是Flash制作,二是網頁制作,而flash按鈕的制作需要自己添加代碼,我便是從那時知道了編程。這一次競賽算是打開了我對計算機世界興趣的大門吧。

最早關於C語言的記憶已經搜索不到了,想不起來是在哪里接觸到的,只記得我初中的時候在B站上面搜過C語言入門教程,那時候MOOC應該還沒出來。看了大概一兩個視頻,忘了講到哪了,估計也就是順序結構,之后就沒堅持下去了……

在高考過后那個暑假,曾勵志重新自學C語言(或者說應該叫預習了?),於是下載了c primer plus的PDF,然后看了幾頁,看到“自己編寫第一個程序”,然后打開DC,寫了helloworld,然后,暑假就結束了。

現在能有這個成績,最應該感謝的是高中NOIP競賽經歷,高一暑假開始自學pascal(是的雖然有培訓班但老師讓我們自己看書),十一月份的時候到福州參加復賽,是這短短幾個月的學習打下了我學代碼的良好基礎,雖然當時由於時間緊迫沒有認真學習算法,很多都還沒涉及,只是掌握了循環選擇之類的結構,所以這個寒假給自己的目標就是學好算法。

總歸也是一種學習,所以和上述經驗一樣,對於C語言還是要多積累,學會閱讀代碼,學會參考其他實現功能的思路,另外養成良好的代碼風格也是很重要的一點。說來慚愧,我對C語言的學習也只是停留在按時做完老師布置的作業上吧,還有課外打醬油了幾個比賽,教材也沒有很認真研讀。

倒是在班級需要的時候寫過一個生成隨機數的小程序,雖然功能實現很簡單,但這畢竟是用自己掌握的知識解決實際生活中問題的第一次嘗試,並且還為班級做出了貢獻,還是很開心的。

目前為止估算自己寫過多少行C代碼?理解的情況如何?

粗略估計了一下,大概寫過2000+行代碼,90%以上理解。由於還沒有上算法的課程,個別題暫時還沒有深刻理解。

學過了C語言,你分的清數組指針,指針數組;函數指針,指針函數這些概念嗎?

  • 數組指針:如int (*p)[n]; 指向數組的指針
  • 指針數組:如int *p[n];有n個指針類型的數組
  • 函數指針:如int (*p)(int a)指向函數的指針
  • 指針函數:如int *p(int a)返回值是指針的函數

學過了C語言,你明白文件和流的區別和聯系嗎?如何區分文本文件和二進制文件?如何編程操作這兩種文件?

慚愧,並不知道。目前僅略微接觸文件的讀寫操作。於是我翻開了書本找到了概念。編程操作文本文件與二進制文件在書上也有介紹,這里就不具體引用。

所有文件的內容都以二進制儲存。但是,如果文件最初使用二進制編碼的字符表示文本,該文件就是文本文件,其中包含文本內容。如果文件中的二進制值代表機器語言代碼或數值數據或圖片或音樂編碼,該文件就是二進制文件,其中包含二進制內容。——《c primer plus》

文件是計算機管理數據的基本單位,同時也是應用程序保存和讀取數據的一個重要場所。流是字節序列的抽象概念,例如文件、輸入/輸出設備、內部進程通信管道等。流提供一種向后備存儲器寫入字節和從后備存儲器讀取字節的方式。——來自網絡搜索

學過了C語言,你知道什么叫面向過程程序設計嗎?它解決問題的方法是什么?

面向過程解決問題的方法:

  1. 分析問題解決的步驟
  2. 用函數實現每個步驟
  3. 調用函數

在C語言里面,什么是模塊?你寫過多個源文件的程序嗎?

在我理解中,模塊就是不同功能,一個功能一個模塊,而模塊中可能有一個函數或多個函數。慚愧,沒寫過。

學過了C語言,你知道什么是“高內聚,低耦合”嗎?這個原則如何應用到高質量程序設計中?

慚愧,不知道。於是到網絡上搜索了一下,看完后粗略理解了一下,大概是模塊內的代碼相關性很強,但模塊與模塊之間相互獨立。

內聚是從功能角度來度量模塊內的聯系,一個好的內聚模塊應當恰好做一件事。它描述的是模塊內的功能聯系;耦合是軟件結構中各模塊之間相互連接的一種度量,耦合強弱取決於模塊間接口的復雜程度、進入或訪問一個模塊的點以及通過接口的數據。——百度百科

學過了C語言,你如何把數組A的內容復制到數組B中?寫出相應的程序。

以下僅列出核心代碼

/*int型*/ 
	for (i=0;i<N;i++)
    	b[i]=a[i];

/*char型*/
	strcpy(b,a);

如何查找整數數組A中有沒有數字5?

for (i=0;i<N;i++)
{
	if (a[i]==5)
    {
    	printf("Yes");
    	break;
    }
}
if (i==N)
printf("No");

如何對整數數組A進行排序(從小到大,從大到小)?

/*由於排序方法多種多樣此處僅列舉最常見的排序之二——冒泡和快排*/
void bubblesort() //冒泡排序 
{
	int i,j,temp; 
 	for (i=1;i<N;i++)
	{
		for (j=0;j<N-i;j++)
		{
			if (b[j]>b[j+1])
			{
				temp=b[j];
				b[j]=b[j+1];
				b[j+1]=temp;
			}
		}
	}
} 
void quicksort(int left,int right) //快排
{
	int i,j,t,temp;
	if (left>right)
	 return;
	temp=a[left];
	i=left;
	j=right;
	while(i!=j)
	{
		while(a[j]>=temp&&i<j)
			j--;
		while(a[j]<=temp&&i<j)
			i++;
		if(i<j)
		{
			t=a[i];
			a[i]=a[j];
			a[j]=t;
		}
	}
	a[left]=a[i];
	a[i]=temp;
	quicksort(left,i-1);
	quicksort(i+1,right);
}

寫一個程序,統計自己C語言共寫了多少行代碼。

/*由於我先前就有把自己所有代碼保存在一個txt的習慣,加之水平有限,所以此處僅用較簡略的辦法*/
#include <stdio.h>
int main() 
{
    freopen("code.txt","r",stdout);
    freopen("line.txt","w",stdout);
    FILE *fp=NULL;  
    char c;  
    int line=0; 
    fp=fopen("code.txt", "r"); 
    while((c=fgetc(fp))!=EOF) 
    { 
        if(c=='\n') 
            line++;   
    } 
    fclose(fp);   
    printf("共有%d行\n", line+1); //末行 
    return 0; 
}

另附Github

你知道什么是斷點嗎?給出自己調試程序的例子。

斷點是編程調試時基本手段之一,即調試程序時讓程序中斷以便檢查。(例子就簡單放兩張圖吧)

對比C語言的學習,你對《面向對象程序設計》的學習有什么具體目標?如何通過刻意訓練提高程序設計能力和培養計算思維?如何通過“做中學”實現你的目標?

具體目標如下:

  • 熟練掌握C/C++語言,能解決一些問題
  • 按時按量完成作業
  • 掌握文獻檢索、運用現代信息技術查找所需資料的基本方法
  • 具有一定的外語能力,能夠熟練運用外文網站

提高能力最快且最有效的方法,刷題,刷題的過程中也要加上自己的思考

Learning by doing,一直是我個人堅持的原則。遇到的問題,自己先通過各種各樣的方法嘗試解決,實在沒辦法再求助別人。當然,如果是需要一起討論的問題也很樂意開口,畢竟團隊協作也是很重要的一個技能,我也很享受一起討論出結果的感受。

畢業后大多數人從事的工作的要求是“提筆能寫,開口能說,問策能對,遇事能辦”,非常重要的技能是公文寫作能力,你覺得自己寫作能力如何?要怎么提高?

自認為寫作能力還算可以,多虧高中班主任時不時就布置一篇總結。但是我的表達能力不行,日常交流中經常卡殼不知道該如何表達自己所想。還有一個缺陷是,我自己寫的文章容易語句不通順,或者出現語法錯誤。究其原因大概是網絡小說看多了?提高的話,今后多閱讀文獻吧,以及多參考其他人的博文,另外,要學會經常自我總結與反思,有空的時候可以多寫博文,既可以提高自己的寫作水平,同時也是為未來的自己積累經驗,算是留給未來的一筆寶貴財富吧。


免責聲明!

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



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