C語言-筆記一
筆者簡介:
本人是現在是在校的一枚研二的學生,最近同實驗室的師兄找工作,感覺真心不容易,也讓我感到很焦慮,想想現在的我,對編程語言掌握的並不好,糊裏糊塗的,想想明年的我,感覺壓力很大。所以,每天抽出點時間專門去學習一下編程語言,並記錄一下學習筆記,給自己一個鞭策。
那麽,選擇哪一個編程語言呢? - -C語言,公司招聘基本上都要求掌握的語言當中必有C,系統的學習一下C還是非常有必要的。本科階段學過C語言,不過學的很糊塗,現在重新系統的學習一遍,希望自己有一個不小的收獲。
正文:
好了,開始我們今天的第一個筆記啦:
本筆記參考的書籍為: Stephen Prate著 C Primer Plus
C語言是一個編譯性的語言。我們寫的代碼並保存為.c格式,這個稱其為源碼,然後經過編譯器生成可執行文件,也就是.exe文件,如下面的代碼:我們保存為Happy.c ,然後在在命令行下輸入:
gcc Happy.c -o Happy
即可完成編譯任務,生成可執行文件Happy.exe,註意:鍵入上述命令時,首先你電腦上要有C編譯器,並且在源碼的文件路徑下。
來向祖國道一聲“生日快樂吧!”:
/* 這是一個祝福祖國生日快樂的簡單C程序 */ #include<stdio.h> int main(void) //這是主函數,無論這個函數在文件的哪個位置,程序從這裏開始 { int age = 69; printf("Happy birthday to my motherland at the age of %d.\n", age); return 0; }
#include<stdio.h> :該語句的作用相當於你在文件中該行所在的位置鍵入了文件stdio.h的完整內容。實際上,它是一種剪切和粘貼的操作,這樣可以方便地在多個程序間共享公用的信息。那麽,這個stdio.h文件裏包含了什麽東東呢?由於上述程序中使用了printf()函數,可是我們並沒用去定義這個函數,那這個函數怎麽就可以把"Happy Birthty Day To Chian"輸出到控制臺的呢?那是因為,你沒有定義函數,但是你復制粘貼了stdio.h這個文件了呀,這個文件裏有定義了printf()這個函數,在這個文件中它說明了函數名以及該函數如何使用,但是函數的實際代碼並不在這個文件了,而是在一個預編譯代碼的庫文件中。那什麽是預編譯呢?#include語句是C預處理指令的一個例子,通常,C編譯器在編譯前要對源代碼做一些準備工作,這就稱為預處理。在C世界中,人們稱出現在文件頂部的信息集合為頭(header),C實現通常都帶有許多頭文件。
int main(void): main(),這是一個函數名為main的函數,也是C程序執行的起始函數,int 指這個函數處理後要返給操作系統一個int值。void: 表明這個主函數並不接受任何參數。
{}: 表示所有的C函數都使用花括號來表示函數體的開始和結束,花括號還可以用來把函數中的語句聚集到一個單元或代碼塊中來。
int age = 69 : 生明並初始化變量age為69
;分號 -- 表明一個語句的結束
%d : int 類型變量的占位符
\n : 轉義字符,表示光變換到下一行
return 0 表示,這個主函數結束,返回一個int類型的值 0
/* */ 註釋,可以在/*和*/之間寫多行註釋
// 這是單行註釋,在//之後的字符會被編譯器忽略
age: 是int類型的變量名,給變量起名字盡量一眼就能看出其含義,方便閱讀源代碼。變量名的起名規則: 可供使用的字符有小寫字母、大寫字母、數字和下劃線。第一個字符必須是字母或者下劃線。
除了使用標準的printf()函數外,怎麽把自己的函數加入到程序中呢?
#include<stdio.h> void question(void); // C 函數原型 void answer(void); void question(void) { printf("What‘s the date today?\n"); } int main(void) { int age = 69; printf("Happy birthday to my motherland at the age of %d.\n", age); question(); answer(); return 0; } void answer(void) { printf("Today is October 1st National Day.\n"); }
answer()函數在上述程序中出現了3次。第一次是出現在原型中,通知編譯器要用到的函數。第二次是在main()函數中以函數調用的形式出現的。最後,程序給出了函數的定義,既函數本身的源碼。而在上述關於printf()函數的談論,現在也可以進一步的解釋,在文件stdio.h中,類似void answer(void);這樣聲明了函數的名字及參數,但函數本身的代碼並不在stdio.h文件中,而在預編譯代碼庫中。簡單的理解,也就是stdio.h文件提供了printf()函數的接口。而,question()函數本身的代碼卻在main()函數的上面,這實際沒有影響的,程序是從main()函數開始執行的,只要在main()函數之前有通知了編譯器有question()這個函數了就行。
第二章編程練習習題及答案(已經編譯通過)
/*
1. 編寫一個程序,調用printf()函數在一行上輸出您的名和姓,再調用一次printf()函數在兩個單獨的行上輸出您的名和姓,然後調用一對printf()函數在一行上輸出您的名和姓。
輸出應如下所示:
Anton Bruckner 第一個輸出語句
Anton 第二個輸出語句
Bruckner 第三個輸出語句
Anton Bruckner 第四個輸出語句
*/
#include<stdio.h> int main(void) { printf("Anton Bruckner\n"); printf("Anton\nBruckner\n"); printf("Anton "); printf("Bruckner"); return 0; }
/*
2. 編寫一個程序輸出您的姓名及地址
*/
#include<stdio.h> int main(void) { printf("My name is Double Lin.\n"); printf("Localtion: Heifei, Anhui.\n"); return 0; }
/*
3. 編寫一個程序,把您的年齡轉換成天數並顯示二值的值。不用考慮平年或者閏年的問題,一年=356
*/
#include<stdio.h> int main(void) { int age = 23; //聲明年齡為23 printf("age: %d days: %d ",age,age*356); return 0; }
/*
4. 編寫一個能夠產生下面輸出的程序:
For he‘s a jolly good fellow!
For he‘s a jolly good fellow!
For he‘s a jolly good fellow!
Which nobody can deny!
程序中除了main()函數之外,要使用兩個用戶定義的函數:一個用於把上面的誇獎消息輸出一次; 另一個用於把最後一行輸出一次
*/
#include<stdio.h> void function_1(void); // 原型函數 void function_2(void); void function_1(void) { printf("For he‘s a jolly good fellow!\n"); } int main(void) { function_1(); function_1(); function_1(); function_2(); return 0; } void function_2(void) { printf("Which nobody can deny!"); }
/*
5. 編寫一個程序,創建一個名為toes的整數變量。讓程序把toes設置為10,。再讓程序計算兩個toes的和以及toes的平方。程序應該輸出所有的3個值,並分別標識它們
*/
#include<stdio.h> int main(void) { int toes = 10; printf("toes: %d\nsum of toes: %d\n squared of toes: %d\n",toes,2*toes,toes*toes); return 0; }
/*
6. 編寫一個能夠產生下列輸出的程序:
Smile!Smile!Smile!
Smile!Smile!
Smile!
在程序中定義一個能顯示字符串Smile!一次的函數,並在需要的時使用該函數
*/
#include<stdio.h> void function(void); void function(void) { printf("Smile!"); } int main(void) { function(); function(); function(); printf("\n"); function(); function(); printf("\n"); function(); return 0; }
/*
7. 編寫一個程序,程序中要調用名為one_three()的函數。該函數要在一行中顯示單詞"one",再調用two()函數,然後再在另一行中顯示單詞"three". 函數two()應該能在一行中顯示單詞"two"
main()函數應該在調用one_three()函數之前顯示短語"starting now";函數調用之後要顯示"done!".這樣,最後的輸出結果應如下所示:
starting now:
one
two
three
done!
*/
#include<stdio.h> void one_three(void); void two(void); int main(void) { printf("starting now:\n"); one_three(); printf("done!\n"); } void one_three(void) { printf("one\n"); two(); printf("three\n"); } void two(void) { printf("two\n"); }
C語言-筆記一