說句實話,我尚未那種特別特別自信的、說我能拿得出手的、所謂能超過百分之九十以上的人的技能。畢竟人外有人,天外有天。html
姑且算上象棋吧,能下的過一些人,碰上一些天天都在下的那種老爺爺可能仍是不太招架得過來。java
至於說我所積累的經驗,總結一下,大量的實戰經驗和靈活的思惟模式。編程
首先說這頭一點吧,實戰經驗就是大量的練習。有的人下棋就喜歡背棋譜,不過我以爲紙上得來終覺淺,或者說,我以爲真刀真槍地幹上一局比背棋譜進步得快。其實......我小時候也沒想這麼多,這都是我如今瞎bb的。個人象棋算是野路子學來的,小時候和爺爺奶奶下,一點點啓蒙的技巧仍是會的。再後來,上小學了,和班裏同窗下,參加比賽等等。從始至終沒有上過正兒八經的培訓班之類的,因此,到底應該怎麼學我也不知道。數組
可是我以爲下的多,仍是有幫助的。見的套路多,中的招多了,天然能長記性。編輯器
因此我如今把這個經驗總結爲:大量的實戰經驗。小時候打下的底子,縱觀全局,不可或缺。模塊化
第二,死腦筋仍是不行的,思惟要靈活。對局時動腦子想一想幾步以後走到哪裏了,有沒有便宜可佔,猜對手想幹什麼,其中有沒有殺機;對局後動腦子,這個對手棋路風格如何,剛纔有沒有失誤,等等。若是不動腦子,那麼進步就是一種奢望。函數
勤能補拙,靜能生慧。我以爲這是與老師博客中的學習經驗的最大共通之處,也是全部求學道路上的祕訣。學習
剛剛開始的時候,基礎的知識瞭解一點,一些基本的語句。測試
而後就是刷題刷題刷題......老師給的那個c語言在線題庫。debug
以後慢慢開始學會看錯誤信息,找錯,學會用debug等等,再後來幫同窗改程序,一些易錯的地方愈來愈熟練,到最後慢慢地開始和大佬們交流,看看其餘人是怎麼寫的。
總而言之就是不斷進步嘛,本身發現問題解決問題,查書,問同窗,問度娘,問老師。這就是個人,最大的收穫。
(老師對不起寫了多少行C語言代碼我是真的內心沒數啊)
等等啊,咱們如今一個實驗寫程序大概100~200行,這樣算下來,咱們作了這麼多大大小小的實驗,應該有個小几千行了。
目前寫的代碼都仍是能理解的,畢竟都是本身寫的,應該不存在看不懂的問題;其餘人的代碼也仍是看得懂,只是要多看兩眼,多琢磨琢磨,多是代碼看少了,不太熟練吧。
量變引發質變,這是必然的規律。我以爲咱們只要慢慢積累,天然集腋成裘,沒有必要刻意追求質變的發生。也許有一天,咱們回過頭來,看見本身從最開始的「Hello world!」到後來能本身編個小應用,咱們就會感嘆不知不覺中質變的發生。
也不知道我記的是否是對的。
數組指針,說白了是指針嘛,指向一個數組的指針;指針數組是一個數組,數組裏儲存的是指針。
函數指針相似,函數指針是指向一個函數的指針;指針函數是一個函數,函數返回值是一個指針。
第一個問題只知道一點點......
文件指的是電腦儲存設備上的數據信息,流簡單的說應該是字節序列,文件的輸入輸出控制,外部輸入輸出設備等等。關係:流是一種向文件寫入字節和從文件讀取字節的方式。
第二個問題......我以爲廣義上講,文本文件本質就是二進制文件的......因此兩者的區別並非物理上的,而是邏輯上的。二進制文件能夠存儲char/int/short/long/float/……各類變量值。做爲特殊的二進制文件,文本文件只能存儲char型字符變量。所以,文本文件每條數據一般是固定長度的,而二進制文件不是。
文本文件編輯器就能夠讀寫,好比記事本;二進制文件須要特別的解碼器。
C語言是面向過程的程序設計。所謂過程就是,酒一口一口喝,步子一步一步走,先幹嗎再幹嗎,順序很重要,對於計算機而言只須要一個一個地實現就好了。
解決問題的辦法就是把一個程序模塊化,從上往下步步求精便可。
在設計一個較大的程序時,能夠把它分紅若干個程序模塊,每個模塊包括一個或多個函數,每個函數實現一個特定的功能。C語言經過函數來實現其模塊化功能的。
多個源程序倒沒有寫過,目前只寫一個源程序的。
「高內聚,低耦合」其實按字面意思也很好懂,程序的模塊與模塊之間的耦合度要低,接口處儘可能簡單;模塊內部要作得精細,模塊內的函數功能聯繫要緊密。
應用上主要的問題在於模塊的劃分。一方面要考慮耦合性:爲了提升模塊的獨立性,模塊與模塊之間的聯繫應該儘量的減小,儘可能在主函數裏調用,實現非直接耦合;另外一方面要考慮內聚:儘量實現一個模塊對應一個功能。
(假設數組char型,長度爲5,數組a是1,2,a,b,c)
把數組A的內容複製到數組B中:最簡單就是腳標循環,一個一個對應着寫。
#include <stdio.h> #include <stdlib.h> int main() { char a[5]={'1','2','a','b','c'}; char b[5]; int i; for (i=0;i<5;i++) { b[i] = a[i]; } return 0; }
如何查找整數數組A中有沒有數字5?腳標循環查找。
#include <stdio.h> #include <stdlib.h> int main() { char a[5]={'1','2','a','b','c'}; int i; int flag = 0; for (i=0;i<5;i++) { if (a[i]=='5') { flag = 1; break; } } if (flag) printf("Bingo!"); else printf("Not Found!"); return 0; }
如何對整數數組A進行排序(從小到大,從大到小)?冒泡排序。
下面是從大到小排序(按照ASCII碼排序)。從小到大隻須要將判斷條件,由「if (a[j]<a[j+1])」
改成「if (a[j]>a[j+1])」
。
#include <stdio.h> #include <stdlib.h> int main() { char a[5]={'2','1','b','a','c'}; int i,j; int temp; for (i=0;i<4;i++) { for (j=0;j<4-i;j++) { if (a[j]<a[j+1]) { temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } } for (i=0;i<5;i++) { printf("%c",a[i]); } return 0; }
這個是大二上作中國剩餘定理實驗的代碼,前先後後敲了一週吧。
//中國剩餘定理實驗 #include <stdio.h> #include <stdlib.h> #define N 10000 #define M 10 struct equa //方程:bx = a mod n; { int a; int b; int n; }; int modni(int a,int b); //模逆運算 m = a^(-1) mod b int gcd(int a,int b); //求最大公因子 int gcd(int a,int b)//展轉相除法求最大公因子 { int temp; if (a<b) { temp = a; a = b; b = temp; } while (b!=0) { temp = a % b; a = b; b = temp; } return a; } int modni(int a,int b)//模逆運算 m = a^(-1) mod b { int v1=0,v2=1,q,temp; if (a>b) { a = a % b; } while (a!=0) { q = b/a; v1 = v1-v2*q; temp = b % a; b = a; a = temp; temp = v1; v1 = v2; v2 = temp; } return v1; } int main() { int x,xn; //方程總個數 struct equa E[M],B[M]; //兩個方程組,互寫(bx = a mod n) int m0 = 1; //m0 是中國剩餘定理的 m int m[M]; //m 是中國剩餘定理的 M int mm[M]; //mm 是中國剩餘定理的 M' int shit = 0; //最終結果 x = shit mod m0 int i = 0,j,k; //角標 int g1,g2; //互素分解的臨時儲存位置 printf("Please input the number of equations:\n"); scanf("%d",&x); xn = x; //數據保留 if (x>M) { printf("Error!\nx>%d\n",M); exit(0); } while (x--) { printf("Please enter b,a,n:\n(bx = a mod n)\n"); if (scanf("%d",&E[i].b)&&scanf("%d",&E[i].a)&&scanf("%d",&E[i++].n)) continue; else { printf("\nError!"); exit(0); } } for (i = 0;i<xn;i++) //計算m m0 *= E[i].n; for (i = 0;i<xn;i++) //計算M m[i] = m0/E[i].n; for (i = 0;i<xn;i++) //計算M' mm[i] = modni(m[i],E[i].n); for (i = 0;i<xn;i++) shit += m[i]*mm[i]*E[i].a; shit = shit % m0; printf("x = %d mod %d",shit,m0); //程序測試部分 /*for (i = 0;i<xn;i++) { printf("%dx = %d (mod %d)\n",E[i].b,E[i].a,E[i].n); }*/ }
原來的那個程序太長了,我就改了一下,如今這段代碼只能解很簡單的那種方程了。這個程序掐頭去尾共有91行代碼。
斷點就是程序運行時會自動中止的地方,準確來講應該是在調試過程當中,程序運行到斷點位置會中止。
程序調試如圖所示。
程序運行結果如圖所示。
Java的動態特徵不太理解。
爲啥有一個「boolean 關閉 = false」?
3.1.5的例子看不怎麼懂......
不理解「Java支持中文類名、方法名、屬性名,而且不會由於亂碼問題致使運行期連接失敗。這是Java內核支持UTF-8這一特性決定的。」
全部的類都有本身的子類嗎?
不理解接口和abstract類的具體區別。
異常類不理解。
第八章日後我基本一臉蒙逼了......後面的邊學邊問吧,我感受這學期Java的學習會讓我收穫很多。
計算機語言的學習我以爲是代碼堆出來的。語言的學習離不開環境,而對於計算機語言,代碼就是環境。想要提升程序設計能力和培養計算思惟,軟磨硬泡地訓練是必不可少的。「作中學」要求咱們有靈活的思惟,擺脫「溫馨區」,進入「學習區」。