在個人教學的過程當中,發現不少同窗都以爲編程是一件很難的事情,甚至有同窗說我使出了洪荒之力,上學期的《c語言》期末才考了60分,並且聽不少學長說《數據結構》這門課平均經過率不到50%,因而乎很多同窗都選擇了迎難而退,有了換專業的想法。那麼事實真的是這樣嗎?編程真的很難嗎?html
確實編程很難,你要想成爲一名優秀的開發工程師確實須要具有不少條件,如你的計算機專業基礎知識(算法與數據結構,操做系統,編譯原理,數據庫原理,計算機網絡等)、英語、分析問題解決問題的能力等,這些都不是一朝一夕可以練成的,須要長時間的學習和領悟。可是若是你的目標不是那麼高,而只是爲了學習c語言或數據結構的基礎知識,那麼事情就沒有你想的那麼難。既然如此,那爲何還有那麼多的學生以爲編程很難呢?緣由在於沒有掌握較好的學習方法。算法
今天就和你們一塊兒來聊一聊編程初學者應該須要注意的一些地方。數據庫
1 代碼格式編程
你們小時候都寫過做文,若是你的做文字跡潦草,卷面邋遢,那麼即便你的做文內容再豐富,邏輯性再強,你的得分也會很低。由於老師第一眼看了做文之後,就不想再繼續看下去,因此得分低就是意料之中的事情。數組
寫代碼就和寫做文同樣,先無論你的代碼寫的多好,邏輯性多強,你要作的第一件事就是代碼格式優美,該縮進的就縮進,該換行的就換行的。網絡
代碼1數據結構
代碼2ide
以上兩個代碼你更願意看哪個?代碼1毫無格式可言,沒有任何的縮進,也沒有任何的換行,試想若是是你去讀這樣的代碼,你什麼感覺。函數
因此寫代碼是給人讀的,首先要作的一點就是優良的格式,我相信這是每一位同窗都應該作到的。學習
2 前後順序
作什麼事情都有前後順序,先作什麼,再作什麼,最後作什麼。這裏面都是有前後關係的,不是想到什麼就作什麼。
對於C語言編程來講,咱們首先要寫的就是程序的模板。
#include <stdio.h>
int main(){
// 你的代碼
return 0;
}
C語言是一門面向過程的語言,也就是說一個C語言的程序是由一個個獨立的函數構成,在這些函數中有一個很是特別的函數,那就是main函數。爲何特殊呢?由於它是整個程序的入口。
有了上面的基礎理論以後,咱們知道寫C語言程序其實就是寫一個個的函數。
因此,函數是如何定義的,有哪些組成部分,我相信這是每一位同窗都可以作到的。
3 不要一口氣吃成胖子
作什麼事情都不能着急,要一步步來,心急是吃不了熱豆腐的,一樣對於編程也不例外。
一個程序的代碼越多,其隱含bug的概率也就越大,相應的你解決bug的時間也就越長。我相信大部分同窗應該都認同上面這句話,因此若是一個程序只有打印「hello,world」這個功能,那麼這個程序怎麼也不會出現問題。
上面這句話其實告訴了咱們一個編程的基本道理:全部的大的程序都不是一鼓作氣的,而是一點點累積起來的。即只有在確保上一個功能正確的前提下,我纔會增長一個新的功能。
舉個簡單的例子說明一下:
輸入5位學生的一組信息,包括學號、姓名、數學成績、計算機成績,求得每位同窗的平均分和總分,而後按照總分從高到低排序。
這是我給學生上課時佈置的一道做業題,不少學生都實現了功能,但在實現的過程當中遇到了不少的問題,接下來我便介紹一下,若是是我,我該怎麼去實現。
步驟1:寫模板。
#include <stdio.h>
int main(){
return 0;
}
步驟2:分析題目,肯定有幾個任務。
經過對題目的分析,咱們發現主要有3個任務:
1)輸入5個學生的信息;
2)計算5位學生的平均分;
3)按照總分紅績對5位學生進行排序。
這是很是很是關鍵的一步,你得很是瞭解你要作的事情有哪些?將一個大的任務分解成多個小的任務,而後再去解決每個小的任務。當全部的小的任務都解決了,那麼大任務也就天然而然的解決了,這就是著名的「分治法」的思想。
有了上面的任務分解後,接下來咱們就首先解決第一個任務:「輸入5個學生的信息」。
每個學生包含了學號、姓名、數學成績和計算機成績,該用什麼結構來保存呢?你們以前學過C語言的知識應該都能很快想到,咱們應該使用結構體。
struct student{
int no;
char name[20];
float math_score;
floatcomputer_score;
};
輸入5個學生的信息,以後保存在什麼地方呢?咱們很快就能想到結構體。
struct student students[5];
最後即是處理如何輸入的問題了,將用戶輸入的信息保存在上面的結構體數組裏面。
有了上面的分析以後,咱們可以很快寫出下面的代碼。
#include <stdio.h>
struct student {
int no;
char name[20];
float math_score;
floatcomputer_score;
};
struct student students[5];
int main(){
int i = 0;
for(; i<2;i++){
scanf("%d,%s,%f,%f", &students[i].no, students[i].name,&students[i].math_score, &students[i].computer_score);
}
return 0;
}
可是這裏面你們須要注意的一點是,個人代碼雖然寫完了,可是我並無驗證它的正確性,因此還應該加上一些驗證性代碼。
#include <stdio.h>
struct student {
int no;
char name[20];
float math_score;
floatcomputer_score;
};
struct student students[5];
int main(){
// 實現任務1的代碼
int i = 0;
for(; i<5;i++){
scanf("%d,%s,%f,%f", &students[i].no, students[i].name,&students[i].math_score, &students[i].computer_score);
}
// 爲了驗證任務1代碼正確性而寫的額外的代碼
for(i = 0; i <5; i++){
printf("%d, %s, %f,%f", students[i].no, students[i].name,students[i].math_score, students[i].computer_score);
}
return 0;
}
只有在完成任務1的代碼而且驗證它的正確性以後,我纔會開始第2個任務的代碼編寫。
以上就是給你們分析的什麼叫編程的基本方法,只有在確認上一個任務徹底正確的前提下,纔會開始新的任務。
總結
但願上面介紹的3點可以對你的編程有所幫助,爲從此寫出更好的代碼打下基礎。
你在學習編程的過程當中,遇到哪些問題,歡迎在下面留言,後面會根據你們的留言狀況,提供你們須要的編程知識。