20165218 學習基礎和C語言基礎調查
個人技能及閱讀心得
個人技能之繪畫
繪畫是我從很小便開始接觸的,從最初的簡筆畫到國畫、素描、水粉,大約也學了七八年。但是到了高中之後,就逐漸放下了。
記得當初學素描時,老師的一句話讓我記憶猶新,她說,畫素描就是要 “抄”:一是“抄”作品,也就是臨摹;而是“抄”實物,因為素描追求的是真實,什麽時候能把擺在桌子上的靜物原封不動地“抄”到紙上,那水平才算是達標。
臨摹 是一種在技術不成熟的時期裏很有效的學習方法。特別是在畫水粉畫的時候,初學者很難掌握調色技巧,比如有些綠色水果的暗面要用深紅色、靛藍處理,這對於初學者來說,很難從實物上看出來;而臨摹時,因為有作品參考,便更容易把顏色從整體的物體上剝離。臨摹不僅是單純的復制,這是一個鍛煉技巧、學習經驗、把理論知識融會貫通的過程。對於編程語言的學習來說,這就相當於開始的抄代碼,在“抄”的過程中鞏固理論知識,明白上課講的知識的用法。
個人技能之閱讀與寫作
我的寫作技能不能算是出類拔萃,但至少在中學時期,這是我領先大部分人的一個加分項。閱讀與寫作,是知識的積累與運用過程,這二者在某種意義上是一體的。
同繪畫一樣,我也是在很小的時候就開始閱讀。但是到高中時期,由於學業,也由於手機的影響,我紙質書的閱讀量大大減少,到了大學才又漸漸重拾。在我多有起伏的閱讀經歷中,我最大的心得就是要找到適合自己的方法.
高中時期,閱讀常常是為了積累寫作素材、鍛煉語感,那是我讀到值得記錄的段落、句子,就直接抄下來,雖說有些費時,但摘抄的過程可以大大加深記憶、也給人進一步思考的機會,同時,這也是個練字的過程,可謂一舉多得。
而到大學時期,我看書的同時會使用一個叫 “蘿蔔書摘”
閱讀心得
讀了老師的博客以後,我記憶最深刻的就是老師的做一件事時的目的性、系統性、總結性。無論減肥、學習五筆、背單詞、乒乓球,婁老師在過程中以及結束後,都會進行系統地總結,條理清晰、階段分明,這是我以前從未見到過的。
有關C語言學習的調查
你是怎麽學習C語言的?
說實話,我C語言的學習做的並不好。水平止步於比較淺的程度。學習的過程就是練習;在期末復習階段,我有用筆記本整理過一些容易混淆的知識。
目前為止估算自己寫過多少行C代碼?理解的情況如何?量變引起質變,如何平衡質和量?
估算大概在3000行以上。理解的情況較一般,有些知識點比如指針和數組、指針和函數、文件操作等只停留在初步了解階段,幾乎沒有實際編程操作過。
學過了C語言,你分的清數組指針,指針數組;函數指針,指針函數這些概念嗎?
數組指針是一個指針變量,保存一個數組的首地址;
指針數組是有若幹及類型相同的指針構成的數組,其中每個元素都是一個指針;
函數指針就是指向函數的指針,指向函數的指針變量中存儲的是一個函數在內存中的入口地址;
指針函數是一個返回值為指針的函數。
學過了C語言,你明白文件和流的區別和聯系嗎?如何區分文本文件和二進制文件?如何編程操作這兩種文件?
文件和流
計算機文件是以計算機硬盤為載體存儲在計算機上的信息集合。文件可以是文本文檔、圖片、程序等等。通常是磁盤上一段命名的存儲區。流是數據之間的傳輸操作。比如:
標準I/O流:內存與標準輸入輸出設備之間信息的傳遞;文件I/O流:內存與外部文件之間信息的傳遞;字符串I/O流:內存變量與表示字符串流的字符數組之間信息的傳遞。
——C++ 流(stream)總結
文件的I/O函數都是針對文件描述符進行操作的,比如說當調用open或者其他函數打開一個文件,返回一個文件的描述符fd,然後針對這個fd進行後續的I/O操作,由於需要多次反復調用對應的系統調用,效率低是自然的。
而流I/O函數的操作是圍繞流(Stream)進行的,當使用流I/O庫打開或者創建一個文件時,可以使一個流和一個文件結合,接下來的操作就是對流進行讀寫、定位等,最後關閉即可。……用戶可以簡單地把流看做一塊由操作系統分配的內存緩沖區,在該緩沖區中存放了文件對應的數據。——流和文件的區別 - CSDN博客
我個人的理解,流就是程序輸入/輸出數據過程的載體。流連接了輸入/輸出設備與程序。
文本文件和二進制文件
C語言文件有兩種類型,文本文件(也稱 ASCII碼文件)和 二進制文件。其差別在於存儲數值型數據的方式不同。在二進制文件中,數值型數據是以二進制形式存儲的,而在文本文件中,則是將數值型數據的每一位數組作為一個字符及其ASCII碼的形式存儲的。因此, 文本文件中的每一位數字都單獨占用一個字節的存儲空間。而二進制文件則是把整個數字作為一個二進制來存儲的,並非熟知的每一位數字都占用單獨的存儲空間。
——《C語言程序設計(第3版)》P373
編程編輯
字 符 | 含 義 |
---|---|
“r" | 以只讀方式,打開文本文件;該文件必須是已經存在的,並且只能讀出,不能寫入數據;若文件不存在,則會出錯 |
“w" | 以只寫方式,創建並打開文本文件,已存在的文件將被覆蓋;無論文件是否存在,都需創建一個新的文本文件,只能寫入數據 |
“a” | 以只寫方式,打開文本文件,位置指針移到文件末尾,向文件尾部添加數據,原文件數據保留;若文件不存在,則會出錯 |
“+” | 與上面的字符串組合,表示以讀寫方式打開文本文件;既可以向文件中寫入數據,也可從文件中讀出數據 |
“b” | 與上面的字符串組合,表示打開二進制文件 |
例如,
fp=fopen("D:\\demo.txt","a+");
表示以讀寫方式打開D盤的文本文件demo.txt,保留原內容,並向尾部添加數據;
而
fp=fopen("D:\\demo.bin","ab+");
表示以讀寫方式打開D盤的二進制文件demo.bin,保留原內容,並向尾部添加數據;
學過了C語言,你知道什麽叫面向過程程序設計嗎?它解決問題的方法是什麽?
我以前沒有接觸過這個概念,通過查資料,我了解到“面向過程”是一種以過程為中心的編程思想。
“面向過程”(Procedure Oriented)是一種以過程為中心的編程思想。“面向過程”也可稱之為“面向記錄”編程思想,他們不支持豐富的“面向對象”特性(比如繼承、多態),並且它們不允許混合持久化狀態和域邏輯。
就是分析出解決問題所需要的步驟,然後用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以了。——面向過程_百度百科
在C語言裏面,什麽是模塊?你寫過多個源文件的程序嗎?
個人理解模塊就是函數,將主函數中一些比較繁瑣,或者使用次數較多的部分寫成函數方便隨時調用。在利用c語言編程解決密碼學數學基礎的問題時用的比較多。
我沒有寫過多個源文件的程序。
學過了C語言,你知道什麽是“高內聚,低耦合”嗎?這個原則如何應用到高質量程序設計中?
模塊分解的基本原則是:高聚合、低耦合,保證每個模塊的相對獨立型。 無論結構化方法還是面向對象方法,都要遵循這個原則。高聚合指的是模塊內部的聯系越緊密越好,內聚性越強越好,簡單地說就是模塊的功能要相對獨立型和單一,讓模塊各司其職,每個模塊只專心負責一件事情。低耦合指的是模塊之間的聯系越松散越好,模塊之間僅僅交換那些為完成系統功能必須交換的信息,這意味著模塊對外的接口越簡單越好,因為借口越簡單,模塊與外界打交道的變量和交換的數據就越少,這樣就會降低模塊之間的互相影響到程度。——《C語言程序設計》P171
學過了C語言,你如何把數組A的內容復制到數組B中?如何查找整數數組A中有沒有數字5?如何對整數數組A進行排序(從小到大,從大到小)?寫出相應的程序。
把數組A的內容復制到數組B中
#include <stdio.h>
#include <stdlib.h>
# define N 6
int main()
{
int a[N], b[N];
int i;
printf("輸入數組a:");
for(i=0; i<6; i++) //錄入數組a的值
{
scanf("%d",&a[i]);
}
for(i=0; i<6; i++) //將數組a的值復制到數組b中
{
b[i]=a[i];
}
printf("以下是數組b:\n");
for(i=0; i<6; i++) //打印數組b
{
printf("%d\t", b[i]);
}
}
查找整數數組A中有沒有數字5
#include <stdio.h>
#include <stdlib.h>
#define N 6
int main()
{
int a[N], b[N];
int i;
printf("輸入數組a:");
for(i=0; i<6; i++) //錄入數組a的值
{
scanf("%d",&a[i]);
}
for(i=0; i<6; i++) //將數組a的值復制到數組b中
{
b[i]=a[i];
}
printf("以下是數組b:\n");
for(i=0; i<6; i++) //打印數組b
{
printf("%d\t", b[i]);
}
}
對整數數組A進行排序(從小到大,從大到小)
#include <stdio.h>
#include <stdlib.h>
void upsort(int a[],int m);
void printa(int a[],int m);
void downsort(int a[], int m);
int main()
{
int a[7]={12,67,3,78,36,90,40,2};
upsort(a,8);
printf("升序為:");
printa(a,8);
downsort(a,8);
printf("\n降序為:");
printa(a,8);
}
void upsort(int a[],int m)//用選擇排序法實現生序排序
{
int i,j;
int k;
int temp;
for(i=0; i<m-1; i++)
{
k=i;
for(j=i+1; j<m; j++)
{
if(a[j]<a[k])
k=j;
}
if(i!=k)
{
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
}
}
void printa(int a[], int m)//打印數組
{
int i;
for(i=0; i<m; i++)
printf("%d\t",a[i]);
}
void downsort(int a[], int m)//用冒泡排序法實現降序排序
{
int i,j;
int temp;
int flag=0;
for(i=0; i<m; i++)
{
for(j=0;j<m-1-i; j++)
{
if(a[j]<a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
flag=1;
}
}
}
}
寫一個程序,統計自己C語言共寫了多少行代碼。
很抱歉我不會寫這個程序。我在網上也找到了很過類似的程序,但是文件操作這一部分是我的薄弱之處。參考過其他人的代碼後,我認為該程序大致思路應是
graph LR
A[遍歷一個目錄下所有.c的文件]-->B[分別統計行數]
B-->C[分別相加]
你知道什麽是斷點嗎?給出自己調試程序的例子。
斷點,調試器的功能之一,可以讓程序中斷在需要的地方,從而方便其分析。
斷點也可以在一次調試中設置斷點,下一次只需讓程序自動運行到設置斷點位置,便可在上次設置斷點的位置中斷下來,極大的方便了操作,同時節省了時間。
斷點模式可以看作一種超時。所有元素(例如,函數、變量和對象)都保留在內存中,但它們的移動和活動被掛起了。在中斷模式下,您可以檢查它們的位置和狀態,以查看是否存在沖突或 bug。您可以在中斷模式下對程序進行調整。例如,可以更改變量的值。可以移動執行點,這會改變執行恢復後將要執行的下一條語句。在 C++、C# 和 Visual Basic 中,甚至可以在中斷模式下對代碼本身進行更改(使用一種稱為“編輯並繼續”的強大功能)。
——斷點-百度百科
個人理解,斷點就是在調試程序的過程中,程序運行到該處可以暫停,所有數據保留。而後通過逐行分析數據變化,檢查程序的錯誤。
斷點調試的例子有很多,比如上學期密數實驗:求一個數的生成元中,我就曾使用過斷點調試測試程序。
參考怎樣快速閱讀一本書,快速閱讀一下雲班課中有PPT,每章提出一個問題
- 如何理解類?
標識符由字母、下劃線、美元符號和數字組成
為什麽例子中會有這樣的代碼,出現了中文?
byte x= -12, tom=28, 漂亮=98
- 何謂“boolean型數據”,這與用一個實數的1、0判斷邏輯有何不同?
- 各個類之間有執行順序的先後嗎?如果如果需要先後執行,如何實現?
- 什麽叫做“子類和父類在/不在一個包中”?“包”是什麽?
- 將接口類比為C語言函數中的“形參”可以嗎?
- C語言中,斷點調試是設置斷點,而後從斷點開始逐行調試,Java中斷言是否類似?
- 實用常用類中的特定的類是不是就是Java已經設定好的,針對特定對象的?
- GUI是什麽?
- 流在何處使用?不能直接操作文件嗎?
- 數據庫是什麽?
- wait()方法和sleep(int millsecond) 有什麽區別?
- Java網絡編程除了傳輸數據、遠程調用之外還可以實現哪些功能?
- Java是否可以實現多種圖形編輯功能?
對比C語言的學習,你對《Java程序設計》的學習有什麽具體目標?如何通過刻意訓練提高程序設計能力和培養計算思維?如何通過“做中學”實現你的目標?
對比C語言的學習,我希望Java我能學的更深入,不止停留於淺層知識。對於提高程序設計能力和培養計算思維,除了堅持練習和及時反饋外,我認為應逐漸接觸一些比自身水平更難一點的程序,由淺入深,不能“知難而退“,只停留在學習的舒適區。
20165218 學習基礎和C語言基礎調查