34
C PROGRAMMING ค่ายอิเล็กทรอนิกส์รุ่นเยาว์ รุ่นที่ 248

C Programming

Embed Size (px)

DESCRIPTION

สไลด์ประกอบการสอน ค่ายอิเล็กทรอนิกส์รุ่นเยาว์ รุ่นที่ 248 จัดโดย NECTEC และภาควิชาวิศวกรรมไฟฟ้า คณะวิศวกรรมศาสตร์ มหาวิทยาลัยเกษตรศาสตร์

Citation preview

Page 1: C Programming

C PROGRAMMING

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

Page 2: C Programming

Program Structure

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

ตวัอยา่งโปรแกรม

Page 3: C Programming

Preprocessor Directives

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

คือค าสั่งที่ใหค้อมไพเลอร์กระท าการอย่างใดอย่างหนึ่ง ก่อนที่จะคอมไพลโ์ปรแกรม ค าสัง่ประเภทนีจ้ะตอ้งเริม่ตน้ดว้ยสญัลกัษณ์ # เสมอ ไฟลท์ี่มนีามสกลุ .h เรยีกวา่ header file ตวัอยา่งเชน่

#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <math.h> #define PI 3.141592654 #define E 2.718281828

Page 4: C Programming

Data Types

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

กอ่นจะพดูถงึสว่นอืน่ของโปรแกรม ขอพดูถงึชนดิของตวัแปรภาษาซทีี่ใชก้นับอ่ย ๆ

char คอื ตวัอกัขระเดีย่ว

int คอื จ านวนเต็ม

unsigned int คอื จ านวนเต็มทีไ่มค่ดิเครือ่งหมาย (มแีตศ่นูยก์บับวก)

float คอื จ านวนทศนยิม

double คอื จ านวนทศนยิมทีม่จี านวนทศนยิมเป็นสองเทา่ของ float

Page 5: C Programming

Variable Declarations

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

เมือ่ตอ้งการใชต้ัวแปร ตอ้งมกีารประกาศตัวแปรก่อนการใชง้าน การประกาศตัวแปร ตอ้งเร ิม่ดว้ยชนดิตวัแปร แลว้ตามดว้ยชือ่ของตวัแปร และทกุค าสัง่ ตอ้งลงทา้ยดว้ยเครือ่งหมาย ';'

<data type> <name>;

ตวัอยา่งเชน่

นอกจากจะประกาศตัวแปรแลว้ ยังสามารถก าหนดค่าเริม่ตน้ใหก้ับตัวแปรไดอ้กีดว้ย ตวัอยา่งเชน่

char c; int n; float f;

char c = 'E'; int n = 2; float f = 2.48;

Page 6: C Programming

Variable Declarations

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

กฎการตัง้ชือ่ตวัแปรมดีงันี ้

ประกอบดว้ยตวัอกัษร เครือ่งหมาย '_' และตวัเลขเทา่นัน้

หา้มขึน้ตน้ดว้ยตวัเลข

ตวัพมิพใ์หญก่บัตวัพมิพเ์ล็ก ถอืวา่คนละตวั (case sensitive)

หา้มใชค้ าสงวน (reserved word)

ความยาวของชือ่ตวัแปร สว่นใหญจ่ะไมเ่กนิ 63 ตวั (ขึน้อยูก่บัคอมไพเลอร)์

Page 7: C Programming

Functions

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

คือส่วนย่อยของโปรแกรม ที่เก็บหลายประโยคค าสั่งเอาไวใ้นส่วนเดยีวกัน ซึง่ทกุโปรแกรม จะตอ้งมฟัีงกช์ัน่อยา่งนอ้ย 1 ฟังกช์ัน่ คอืฟังกช์ัน่ main โดยทกุโปรแกรมจะเริม่ตน้และสิน้สดุทีฟั่งกช์ัน่ main เสมอ

โดยฟังก์ชั่นที่จะถูกเรียกใชง้านก่อน จะนิยมไวต้ าแหน่งล่างสุด ตวัอยา่งเชน่

#include <stdio.h> void DoSomeThing(){ printf(":P\n"); } void main(){ printf("Hello world!\n"); DoSomeThing(); }

Page 8: C Programming

Output Statement

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

ค าสัง่ printf เป็นค าสัง่ทีใ่ชแ้สดงผลออกทางหนา้จอ ซึง่มรีูปแบบการใชง้านดงันี ้

printf("<ขอ้ความ>");

หากตอ้งการควบคมุการแสดงผล ตอ้งใช ้escape character ซึง่ escape character ทีใ่ชก้นับอ่ย ๆ มดีงันี ้

ตวัอยา่งเชน่ printf("Hello world!\n");

Page 9: C Programming

Output Statement

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

หากตอ้งการแสดงคา่ของตัวแปร ตอ้งใช ้conversion code ให ้สมัพันธก์บัตวัแปรแตล่ะชนดิดว้ย ซึง่ตวัทีเ่ราใชง้านบอ่ย ๆ มดีงันี ้

%c ใชก้บั char ใหแ้สดงคา่ตวัอกัขระ

%d ใชก้บั int ใหแ้สดงคา่จ านวนเต็ม

%u ใชก้บั unsigned int ใหแ้สดงคา่จ านวนเต็มแบบไมค่ดิเครือ่งหมาย

%f ใชก้บั float ใหแ้สดงคา่ทศนยิม

%lf ใชก้บั double ใหแ้สดงคา่ทศนยิม

%x หรอื %X ใชก้บัจ านวนเต็ม ใหแ้สดงคา่ออกมาเป็นเลขฐานสบิหก

ตวัอยา่งเชน่

int a=5; printf("a = %d\n", a);

Page 10: C Programming

Output Statement

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

ใหนั้กเรยีนลองรันโปรแกรมตอ่ไปนี้ แลว้สังเกตความแตกตา่งของผลการรันระหวา่งสองโปรแกรม

#include <stdio.h> void main() { int a=1, b=2, c=3; printf("Hello %d", a); printf("Hello %d", b); printf("Hello %d", c); }

#include <stdio.h> void main() { int a=1, b=2, c=3; printf("Hello %d\n", a); printf("Hello %d\n", b); printf("Hello %d\n", c); }

Page 11: C Programming

Input Statement

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

ค าสั่ง scanf เป็นค าสั่งที่ใชรั้บค่าจากคียบ์อร์ดเก็บไวท้ี่ตัวแปร ซึง่มีรปูแบบการใชง้านดงันี ้

scanf("<conversion code>", &<variables>);

ใหนั้กเรยีนลองรันโปรแกรมตอ่ไปนี้

#include <stdio.h> void main() { int a; printf("Please input integer number : "); scanf("%d", &a); printf("a = %d\n", a); }

Page 12: C Programming

Arithmetic & Operators

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

ตวัด าเนนิการในภาษาซ ีประกอบดว้ย

ตวัด าเนนิการทางคณติศาสตร ์(Arithmetic Operators)

+ - * / %

ตวัด าเนนิการเปรยีบเทยีบ (Comparison Operators)

== != < <= > >=

ตวัด าเนนิการทางตรรกศาสตร ์(Boolean Operators)

&& || !

ตวัด าเนนิการระดบับติ (Bitwise Operators)

& | ~ ^ << >>

Page 13: C Programming

Arithmetic & Operators

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

ตวัด าเนนิการทางคณติศาสตร ์(Arithmetic Operators)

+ คอื การบวก

- คอื การลบ

* คอื การคณู

/ คอื การหาร

% คอื การหารเอาเศษ

ค าถาม

5/2 = ?

2/5 = ?

5.0/2 = ?

5%2 = ?

Page 14: C Programming

Arithmetic & Operators

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

ตวัด าเนนิการเปรยีบเทยีบ (Comparison Operators)

== คอื เทา่กบัหรอืไม ่

!= คอืไมเ่ทา่กบัหรอืไม ่

< คอื นอ้ยกวา่หรอืไม ่

<= คอื นอ้ยกวา่หรอืเทา่กบัหรอืไม ่

> คอื มากกวา่หรอืไม ่

>= คอื มากกวา่หรอืเทา่กบัหรอืไม ่

ค าถาม

10 > 50 = ?

‘A’ < ‘B’ = ?

‘s’ > ‘x’ = ?

Page 15: C Programming

Arithmetic & Operators

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

ตวัด าเนนิการทางตรรกศาสตร ์(Boolean Operators)

&& คอื และ (and)

|| คอื หรอื (or)

! คอื นเิสธ (not)

ค าถาม

(3<2)||(2+5>6) = ?

('a'!='z')&&!(9==0) = ?

Page 16: C Programming

Arithmetic & Operators

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

ตวัด าเนนิการระดบับติ (Bitwise Operators)

& คอื น าแตล่ะบติมา and กนั

| คอื น าแตล่ะบติมา or กนั

~ คอื การกลบับติ (not)

^ คอื xor ใหค้า่แตล่ะบติเป็น 1 เมือ่บตินัน้ของเลขทัง้สองมคีา่ตา่งกนั

<< คอืการเลือ่นบติไปทางซา้ย

>> คอืการเลือ่นบติไปทางขวา

Page 17: C Programming

Arithmetic & Operators

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

ตวัอยา่งการด าเนนิการระดบับติ

5 & 3 = 0101 & 0011 = 0001 = 1

5 | 3 = 0101 | 0011 = 0111 = 7

5 ^ 3 = 0101 ^ 0011 = 0110 = 6

~5 = 0000 0000 0000 0101 = 1111 1111 1111 1010 = 65533

5 << 3

0000 0000 0000 0101

0000 0000 0010 1000 = 40

255 >> 3

0000 0000 1111 1111

0000 0000 0001 1111 = 31

Page 18: C Programming

Increment & Decrement

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

++x คอื Pre increment

--x คอื Pre decrement

x++ คอื Post increment

x-- คอื Post decrement

ตวัอยา่ง

int a=5, b; b = ++a; //a, b = 6

int a=5, b; b = --a; //a, b = 4

int a=5, b; b = a++; //a = 6, b = 5

int a=5, b; b = a--; //a = 4, b = 5

Page 19: C Programming

if statement

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

ประโยคค าสัง่ if จะควบคมุใหป้ระโยคค าสัง่ยอ่ยท างานเมือ่เงือ่นไขเป็นจรงิ

if(condition) { statement 1; statement 2; statement 3; . . . }

condition

Statement 1

Statement 2

Statement 3

false

true

Page 20: C Programming

if statement

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

ใหนั้กเรยีนลองรันโปรแกรมตอ่ไปนี้

#include <stdio.h> void main() { int a; printf("Please input integer number : "); scanf("%d", &a); if(a%2==0) printf("a is even number\n"); }

Page 21: C Programming

if-else statement

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

ประโยคค าสัง่ if-else จะมสีว่นเพิม่เตมิจาก if คอื หากเงือ่นไขเป็นเท็จ จะท าประโยคค าสัง่ยอ่ยในสว่นของ else ดว้ย

if(condition) { statement t1; statement t2; . . } else{ statement f1; statement f2; . . }

condition

Statement t1

Statement t2

Statement t3

false

true

Statement f1

Statement f2

Statement f3

Page 22: C Programming

if-else statement

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

ใหนั้กเรยีนลองรันโปรแกรมตอ่ไปนี้

#include <stdio.h> void main() { int a; printf("Please input integer number : "); scanf("%d", &a); if(a%2==0) printf("a is even number\n"); else printf("a is odd number\n"); }

Page 23: C Programming

Nested if statement

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

เป็นการน า if หรอื if-else มาซอ้นกนั โดยใหนั้กเรยีนลองรันโปรแกรมตอ่ไปนี ้

#include <stdio.h> void main(){ float score; printf("Please input score (0-100) : "); scanf("%f", &score); if(score>=80) printf("Good :D\n"); else if(score>=50) printf("Pass :)\n"); else printf("Failed :P\n"); }

Page 24: C Programming

while statement

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

ประโยคค าสั่ง while จะควบคุมใหป้ระโยคค าสั่งย่อย ท าซ ้าตามเงือ่นไขทีก่ าหนดเทา่นัน้

while(condition) { statement 1; statement 2; statement 3; . . }

condition

Statement 1

Statement 2

Statement 3

false

true

Page 25: C Programming

while statement

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

ใหนั้กเรยีนลองรันโปรแกรมตอ่ไปนี้

#include <stdio.h> void main(){ int n, i; printf("Enter n : "); scanf("%d", &n); i=1; while(i<=n){ printf("Loop %d\n", i); i++; } }

Page 26: C Programming

for statement

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

ประโยคค าสัง่ for จะเป็นการรวมประโยคค าสัง่คา่เริม่ตน้ของตวัแปรที่ใชใ้นการท าซ ้า เงื่อนไขการท าซ ้า และการอัพเดทค่าของตัวแปรทีใ่ชใ้นการท าซ ้า

for(<initialize>;<condition>;<update>) { statement 1; statement 2; statement 3; . . }

condition

Statement 1

Statement 2

Statement 3

false

true

Page 27: C Programming

for statement

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

ใหนั้กเรยีนลองรันโปรแกรมตอ่ไปนี้

#include <stdio.h> void main() { int n, i; printf("Enter n : "); scanf("%d", &n); for(i=1; i<=n; i++) printf("Loop %d\n", i); }

Page 28: C Programming

Nested for statement

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

เป็นการน า for มาซอ้นกนั โดยใหนั้กเรยีนลองรันโปรแกรมตอ่ไปนี ้

#include <stdio.h> void main(){ int m, n, i, j; printf("Enter m : "); scanf("%d", &m); printf("Enter n : "); scanf("%d", &n); for(i=1; i<=m; i++) for(j=1; j<=n; j++) printf("Out %d, In %d\n", i, j); }

Page 29: C Programming

Local Variables

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

คือการประกาศตัวแปรภายในขอบเขตจ ากัด ถา้ประกาศตัวแปรในขอบเขตไหน ตัวแปรก็จะมผีลแคใ่นขอบเขตนัน้ ๆ ซึง่โดยปกตเิรามักประกาศตัวแปรภายในฟังกช์ัน่ ตวัแปรจะมขีอบเขตเฉพาะในฟังกช์ัน่นัน้ ๆ ตวัอยา่งเชน่

จะพบวา่ โปรแกรมคอมไพลไ์มผ่า่น เพราะ n มขีอบเขตเฉพาะฟังกช์ัน่ main เทา่นัน้

#include <stdio.h> void PrintN(){ printf("n = %d\n", n); } int main(){ int n = 5; PrintN(); return 0; }

Page 30: C Programming

Global Variables

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

จากโปรแกรมเมือ่สักครู่ หากตอ้งการใหต้ัวแปร n มขีอบเขตทัง้โปรแกรม เราสามารถประกาศตัวแปรนอกฟังก์ชั่น ซึง่ก็คือส่วนของ global declarations โดยตวัแปรเหลา่นัน้ จะเป็นตวัแปร global variable ตวัอยา่งเชน่

#include <stdio.h> int n; void PrintN(){ printf("n = %d\n", n); } int main(){ n = 5; PrintN(); return 0; }

Page 31: C Programming

Function Definitions

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

การนยิามฟังกช์ัน่ ตอ้งระบปุระเภทการสง่กลบัคา่ แลว้ตามดว้ยชือ่ฟังกช์ ัน่ แลว้ตามดว้ยตัวแปรทีเ่อาไวรั้บคา่ ซึง่สว่นนี้จะมกีีต่ัวก็ได ้(ตัง้แตไ่ม่มีเลย จนมไีดห้ลายตัว) และทุกฟังกช์ั่น ตอ้งมปีีกกาท ัง้สว่นตน้และทา้ยของฟงักช์ ัน่

<return type> <function name>(<parameters>)

หากตอ้งการใหฟั้งกช์ั่นสง่กลับคา่ ใหร้ะบุชนดิการสง่กลับคา่เป็นชนดิตวัแปรนัน้ ๆ โดยกอ่นจบฟังกช์ัน่ตอ้งมคี าสัง่ return

แต่ถา้หากไม่ตอ้งการใหฟั้งกช์ั่นสง่กลับค่า ใหร้ะบุชนดิการสง่กลับค่าเป็น void โดยไมจ่ าเป็นตอ้งมคี าสัง่ return

Page 32: C Programming

Function Definitions

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

ใหนั้กเรยีนลองรันโปรแกรมตอ่ไปนี้

#include <stdio.h> void PrintNum(float f){ printf("f = %f\n", f); } float add(float x, float y){ return x+y; } void main(){ float a=2, b=3, c; c = add(a, b); PrintNum(c); }

Page 33: C Programming

Test

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

ใหนั้กเรยีนลองเขยีนโปรแกรมตามรายละเอยีดตอ่ไปนี้

รับคา่จ านวนเต็ม n ผา่นทางคยีบ์อรด์

แสดงผลเลขจ านวนเฉพาะตัง้แต ่2 ถงึ n

ถา้ป้อนคา่นอ้ยกวา่ 2 ใหแ้สดงขอ้ความ Bye แลว้จบโปรแกรม

ตวัอยา่งผลการรัน

Page 34: C Programming

คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248

#include <stdio.h> void main(){ int n, count, i, j; printf("Enter n : "); scanf("%d", &n); if(n>=2) for(i=2; i<=n; i++){ count = 0; for(j=1; j<=i; j++) if(i%j==0) count++; if(count==2) printf("%d ", i); } else printf("Bye"); }