Upload
nut-sundramara
View
137
Download
0
Embed Size (px)
DESCRIPTION
สไลด์ประกอบการสอน ค่ายอิเล็กทรอนิกส์รุ่นเยาว์ รุ่นที่ 248 จัดโดย NECTEC และภาควิชาวิศวกรรมไฟฟ้า คณะวิศวกรรมศาสตร์ มหาวิทยาลัยเกษตรศาสตร์
Citation preview
C PROGRAMMING
คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248
Program Structure
คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248
ตวัอยา่งโปรแกรม
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
Data Types
คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248
กอ่นจะพดูถงึสว่นอืน่ของโปรแกรม ขอพดูถงึชนดิของตวัแปรภาษาซทีี่ใชก้นับอ่ย ๆ
char คอื ตวัอกัขระเดีย่ว
int คอื จ านวนเต็ม
unsigned int คอื จ านวนเต็มทีไ่มค่ดิเครือ่งหมาย (มแีตศ่นูยก์บับวก)
float คอื จ านวนทศนยิม
double คอื จ านวนทศนยิมทีม่จี านวนทศนยิมเป็นสองเทา่ของ float
Variable Declarations
คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248
เมือ่ตอ้งการใชต้ัวแปร ตอ้งมกีารประกาศตัวแปรก่อนการใชง้าน การประกาศตัวแปร ตอ้งเร ิม่ดว้ยชนดิตวัแปร แลว้ตามดว้ยชือ่ของตวัแปร และทกุค าสัง่ ตอ้งลงทา้ยดว้ยเครือ่งหมาย ';'
<data type> <name>;
ตวัอยา่งเชน่
นอกจากจะประกาศตัวแปรแลว้ ยังสามารถก าหนดค่าเริม่ตน้ใหก้ับตัวแปรไดอ้กีดว้ย ตวัอยา่งเชน่
char c; int n; float f;
char c = 'E'; int n = 2; float f = 2.48;
Variable Declarations
คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248
กฎการตัง้ชือ่ตวัแปรมดีงันี ้
ประกอบดว้ยตวัอกัษร เครือ่งหมาย '_' และตวัเลขเทา่นัน้
หา้มขึน้ตน้ดว้ยตวัเลข
ตวัพมิพใ์หญก่บัตวัพมิพเ์ล็ก ถอืวา่คนละตวั (case sensitive)
หา้มใชค้ าสงวน (reserved word)
ความยาวของชือ่ตวัแปร สว่นใหญจ่ะไมเ่กนิ 63 ตวั (ขึน้อยูก่บัคอมไพเลอร)์
Functions
คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248
คือส่วนย่อยของโปรแกรม ที่เก็บหลายประโยคค าสั่งเอาไวใ้นส่วนเดยีวกัน ซึง่ทกุโปรแกรม จะตอ้งมฟัีงกช์ัน่อยา่งนอ้ย 1 ฟังกช์ัน่ คอืฟังกช์ัน่ main โดยทกุโปรแกรมจะเริม่ตน้และสิน้สดุทีฟั่งกช์ัน่ main เสมอ
โดยฟังก์ชั่นที่จะถูกเรียกใชง้านก่อน จะนิยมไวต้ าแหน่งล่างสุด ตวัอยา่งเชน่
#include <stdio.h> void DoSomeThing(){ printf(":P\n"); } void main(){ printf("Hello world!\n"); DoSomeThing(); }
Output Statement
คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248
ค าสัง่ printf เป็นค าสัง่ทีใ่ชแ้สดงผลออกทางหนา้จอ ซึง่มรีูปแบบการใชง้านดงันี ้
printf("<ขอ้ความ>");
หากตอ้งการควบคมุการแสดงผล ตอ้งใช ้escape character ซึง่ escape character ทีใ่ชก้นับอ่ย ๆ มดีงันี ้
ตวัอยา่งเชน่ printf("Hello world!\n");
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);
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); }
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); }
Arithmetic & Operators
คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248
ตวัด าเนนิการในภาษาซ ีประกอบดว้ย
ตวัด าเนนิการทางคณติศาสตร ์(Arithmetic Operators)
+ - * / %
ตวัด าเนนิการเปรยีบเทยีบ (Comparison Operators)
== != < <= > >=
ตวัด าเนนิการทางตรรกศาสตร ์(Boolean Operators)
&& || !
ตวัด าเนนิการระดบับติ (Bitwise Operators)
& | ~ ^ << >>
Arithmetic & Operators
คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248
ตวัด าเนนิการทางคณติศาสตร ์(Arithmetic Operators)
+ คอื การบวก
- คอื การลบ
* คอื การคณู
/ คอื การหาร
% คอื การหารเอาเศษ
ค าถาม
5/2 = ?
2/5 = ?
5.0/2 = ?
5%2 = ?
Arithmetic & Operators
คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248
ตวัด าเนนิการเปรยีบเทยีบ (Comparison Operators)
== คอื เทา่กบัหรอืไม ่
!= คอืไมเ่ทา่กบัหรอืไม ่
< คอื นอ้ยกวา่หรอืไม ่
<= คอื นอ้ยกวา่หรอืเทา่กบัหรอืไม ่
> คอื มากกวา่หรอืไม ่
>= คอื มากกวา่หรอืเทา่กบัหรอืไม ่
ค าถาม
10 > 50 = ?
‘A’ < ‘B’ = ?
‘s’ > ‘x’ = ?
Arithmetic & Operators
คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248
ตวัด าเนนิการทางตรรกศาสตร ์(Boolean Operators)
&& คอื และ (and)
|| คอื หรอื (or)
! คอื นเิสธ (not)
ค าถาม
(3<2)||(2+5>6) = ?
('a'!='z')&&!(9==0) = ?
Arithmetic & Operators
คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248
ตวัด าเนนิการระดบับติ (Bitwise Operators)
& คอื น าแตล่ะบติมา and กนั
| คอื น าแตล่ะบติมา or กนั
~ คอื การกลบับติ (not)
^ คอื xor ใหค้า่แตล่ะบติเป็น 1 เมือ่บตินัน้ของเลขทัง้สองมคีา่ตา่งกนั
<< คอืการเลือ่นบติไปทางซา้ย
>> คอืการเลือ่นบติไปทางขวา
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
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
if statement
คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248
ประโยคค าสัง่ if จะควบคมุใหป้ระโยคค าสัง่ยอ่ยท างานเมือ่เงือ่นไขเป็นจรงิ
if(condition) { statement 1; statement 2; statement 3; . . . }
condition
Statement 1
Statement 2
Statement 3
false
true
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"); }
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
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"); }
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"); }
while statement
คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248
ประโยคค าสั่ง while จะควบคุมใหป้ระโยคค าสั่งย่อย ท าซ ้าตามเงือ่นไขทีก่ าหนดเทา่นัน้
while(condition) { statement 1; statement 2; statement 3; . . }
condition
Statement 1
Statement 2
Statement 3
false
true
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++; } }
for statement
คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248
ประโยคค าสัง่ for จะเป็นการรวมประโยคค าสัง่คา่เริม่ตน้ของตวัแปรที่ใชใ้นการท าซ ้า เงื่อนไขการท าซ ้า และการอัพเดทค่าของตัวแปรทีใ่ชใ้นการท าซ ้า
for(<initialize>;<condition>;<update>) { statement 1; statement 2; statement 3; . . }
condition
Statement 1
Statement 2
Statement 3
false
true
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); }
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); }
Local Variables
คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248
คือการประกาศตัวแปรภายในขอบเขตจ ากัด ถา้ประกาศตัวแปรในขอบเขตไหน ตัวแปรก็จะมผีลแคใ่นขอบเขตนัน้ ๆ ซึง่โดยปกตเิรามักประกาศตัวแปรภายในฟังกช์ัน่ ตวัแปรจะมขีอบเขตเฉพาะในฟังกช์ัน่นัน้ ๆ ตวัอยา่งเชน่
จะพบวา่ โปรแกรมคอมไพลไ์มผ่า่น เพราะ n มขีอบเขตเฉพาะฟังกช์ัน่ main เทา่นัน้
#include <stdio.h> void PrintN(){ printf("n = %d\n", n); } int main(){ int n = 5; PrintN(); return 0; }
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; }
Function Definitions
คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248
การนยิามฟังกช์ัน่ ตอ้งระบปุระเภทการสง่กลบัคา่ แลว้ตามดว้ยชือ่ฟังกช์ ัน่ แลว้ตามดว้ยตัวแปรทีเ่อาไวรั้บคา่ ซึง่สว่นนี้จะมกีีต่ัวก็ได ้(ตัง้แตไ่ม่มีเลย จนมไีดห้ลายตัว) และทุกฟังกช์ั่น ตอ้งมปีีกกาท ัง้สว่นตน้และทา้ยของฟงักช์ ัน่
<return type> <function name>(<parameters>)
หากตอ้งการใหฟั้งกช์ั่นสง่กลับคา่ ใหร้ะบุชนดิการสง่กลับคา่เป็นชนดิตวัแปรนัน้ ๆ โดยกอ่นจบฟังกช์ัน่ตอ้งมคี าสัง่ return
แต่ถา้หากไม่ตอ้งการใหฟั้งกช์ั่นสง่กลับค่า ใหร้ะบุชนดิการสง่กลับค่าเป็น void โดยไมจ่ าเป็นตอ้งมคี าสัง่ return
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); }
Test
คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่248
ใหนั้กเรยีนลองเขยีนโปรแกรมตามรายละเอยีดตอ่ไปนี้
รับคา่จ านวนเต็ม n ผา่นทางคยีบ์อรด์
แสดงผลเลขจ านวนเฉพาะตัง้แต ่2 ถงึ n
ถา้ป้อนคา่นอ้ยกวา่ 2 ใหแ้สดงขอ้ความ Bye แลว้จบโปรแกรม
ตวัอยา่งผลการรัน
คา่ยอเิล็กทรอนกิสร์ุน่เยาว ์รุน่ที ่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"); }