[網友來信] 我開始背誦 C 語言 32 個關鍵字了,為何我還學不會 C 語言?
常常有網友用私訊詢問問題,我通常會抹消個資、稍做修改後,登出來分享給可能有同樣疑惑的人。底下是昨天一位網友問我關於「C 語言學習」的問題,希望我提供給這位網友的解答,也能幫助到有相同困惑的朋友。 :-)
紀老師
-------
老師你好!
我最近開始學習C語言,我之前常常看C語言介紹影片,知道 C 語言有 32個關鍵字,9種控制語句,34種運算符號。有人說這些背不起來就不用學C語言了,但我的記憶力不太好,我是否真的只能放棄呢?我非常熱愛軟體類型的事物或資訊,我不想就這樣算了。
我有在網路上找到一本C語言教學書本:(URL 恕略)可是我真的不了解,簡單說有看沒有懂。我開始覺得我到底適不適合學習C語言?我常在想那麼多的中文字我都記的起來,為什麼我卻背不起來C語言的所有關鍵字?目前我在背32個關鍵字中的15個。我洗澡背、吃飯背、上網也在背、看影片也一直背。起床第一時間就重頭背一次,就怕我忘記。
我不知道有什麼好的管道可以吸收學習?也不知道我的方法對不對,我僅僅只靠網路上的資源收集資料。原本我想購買書籍可是不知道該買哪本。就在網路上找到上面網址的那一本,可是我卻看不懂、不了解,我真的不知道該從哪開始了。
[紀老師回答]
您好:
您的學習方法錯了!
「程式語言」不是一種「知識(Knowledge)」,是一種「技能(Skill)」。所謂的知識,是只要「記下來」,就能使用了。例如歷史、地理等課程。所謂的「技能」,是要透過「實戰」學會的,像是游泳、騎腳踏車。
您的作法,有點像是「我已經把一本游泳入門背得滾瓜爛熟了,我洗澡背、吃飯背、上網也在背,為什麼我下水後還是不會游泳?」或者像是「我已經把九陰真經背得滾瓜爛熟了,為什麼我還是學不會絕世武功?」所以,你去背誦 32 個關鍵字,希望透過這種方法學會程式語言,並非一個很正確的作法。
很多人都誤會程式語言是一種「知識」,以為用力背就會了。事實上它是一種「技能」。凡是技能類的東西,除非你天縱英才,否則初學者都得找「教練」來學比較好。第一次學游泳,你會買一本游泳入門,然後看著書自己學嗎?不會吧?你會找個會游泳的人教。但是一旦學會「蛙式」或是「自由式」,您接下來就會自學「仰式」或「蝶式」了。所以(重點!),看書自學,比較適合有程式設計經驗的人,不太適合完全沒有程式設計經驗的人。
當然我沒有說,所有人一定沒辦法靠著自學學會程式設計。但是,如果您已經嘗試自學,效果不好,您是否考慮去補習班找個老師好好教您一次呢?所以,不要因為你背完「游泳入門」,下水嗆水,就篤定自己「不適合學游泳」。那只不過你學習方法不對而已。去補習班學一次很值得的,因為當你有了基礎,接下來其它語言,就有很高的機率看書自學、並且精通了!
此外,雖然程式設計是用英文呈現,但是跟英文程度好壞沒有太大的關係。因為它們用的「字彙」(如:printf(), scanf()...之類的),根本不是日常英文。語法也非英文文法。最有力的證據是,你叫一個以英語為母語、沒學過程式的外國人來看程式碼,保證 100% 看不懂!程式設計只是一種假借 26 個英文字母,拼寫出來的另一國度的語言而已。人人只要花時間、付出努力(約 6 ~ 9 個月,每週花 6~8 小時左右),都一定學得會。
所以,根據您的情況,我對於您「不知道如何開始」的建議是:去補習班找個老師,好好學一次。然後,老師教的東西,一定要回家「傻傻地」遮起答案,再練一次。這個步驟猶如游泳教練教完後,您自行練習的過程。這是把「程式設計」這個技術,固定在你身體裡的重要步驟,請千萬一定要「傻傻地」、「私下另外找時間」照做。不要有「為什麼教練教完,我也跟著教練練過一遍了,為什麼我還不會游泳?」這種不切實際的想法。
如果您真的還是想要找一本入門書的話,我可以推薦這一本,還不錯:
http://www.books.com.tw/products/0010360466
希望這樣的回答能對您有幫助!
「c語言scanf」的推薦目錄:
- 關於c語言scanf 在 紀老師程式教學網 Facebook 的精選貼文
- 關於c語言scanf 在 [問題] C語言,scanf 字元- 看板C_and_CPP - 批踢踢實業坊 的評價
- 關於c語言scanf 在 【C 語言入門】20.4 - 使用scanf 讀入資料的問題 - YouTube 的評價
- 關於c語言scanf 在 【C 語言入門】2.3 - 將printf 或scanf 用在不同資料型別 的評價
- 關於c語言scanf 在 C 語言秘技(1) – 使用sscanf 模仿正規表達式的剖析功能(作者 的評價
- 關於c語言scanf 在 #新手C語言scanf問題 - 軟體工程師板 | Dcard 的評價
c語言scanf 在 [問題] C語言,scanf 字元- 看板C_and_CPP - 批踢踢實業坊 的推薦與評價
問題(Question):
case 1和 case 2 裡,無法做第一次的輸入,會直接跳到第二次
預期的正確結果(Expected Output):
請設計一多載函式,函式有2個參數:(1)當2個參數都是字元時,則顯示該字元
(2)當參數的字元和整數x時,則顯示該字元x次,
(3)當2個參數都是整數時,則顯 示兩個數相乘的結果
錯誤結果(Wrong Output):
case 1 和 case 2 有問題,case 3則沒問題
程式碼(Code):(請善用置底文網頁, 記得排版)
https://ideone.com/api/embed.js/link/TnpbOU
#include<stdlib.h>
#include<stdio.h>
void aaa(char,char);
void aaa(char,int);
void aaa(int,int);
int main()
{
int num1,num2;
char a1,a2;
int key;
printf("1.兩字元,2.一字元一數字,3.兩數字\n");
scanf("%d",&key);
switch (key)
{
case 1:
printf("輸入第一個字元\n");
scanf("%c",&a1);
printf("輸入第二個字元\n");
scanf("%c",&a2);
aaa(a1,a2);
break;
case 2:
printf("輸入第一個字元\n");
scanf("%c",&a1);
printf("輸入第一個數字\n");
scanf("%d",&num1);
aaa(a1,num1);
break;
case 3:
printf("輸入第一個數字\n");
scanf("%d",&num1);
printf("輸入第二個數字\n");
scanf("%d",&num2);
aaa(num1,num2);
break;
}
system("pause");
return 0;
}
void aaa(char a1,char a2)
{
printf("%c,%c",a1,a2);
}
void aaa(char a1,int num1)
{
int i;
for(i=0;i<num1;i++)
printf("%c ",a1);
}
void aaa(int num1,int num2)
{
int ans;
ans=num1*num2;
printf("%d*%d=%d\n",num1,num2,ans);
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.153.51
... <看更多>