370 likes | 676 Vues
การโปรแกรมภาษา C. โปรแกรมแปลภาษา. การเขียนโปรแกรมคอมพิวเตอร์ทุกครั้ง จะต้องแปลงภาษาเหล่านั้นให้เป็นรหัสภาษาเครื่องที่คอมพิวเตอร์เข้าใจก่อนทุกครั้ง ก่อนที่คอมพิวเตอร์จะทำงานได้ การเขียนชุดคำสั่ง จะเรียกว่า โปรแกรมต้นฉบับ ( source program ) หรือ รหัสต้นฉบับ ( source code )
E N D
โปรแกรมแปลภาษา • การเขียนโปรแกรมคอมพิวเตอร์ทุกครั้ง จะต้องแปลงภาษาเหล่านั้นให้เป็นรหัสภาษาเครื่องที่คอมพิวเตอร์เข้าใจก่อนทุกครั้ง ก่อนที่คอมพิวเตอร์จะทำงานได้ • การเขียนชุดคำสั่ง จะเรียกว่า โปรแกรมต้นฉบับ (source program)หรือ รหัสต้นฉบับ (source code) • ภาษาเครื่องที่คอมพิวเตอร์ทำงานได้เรียกว่า executable program โปรแกรมต้นฉบับ Interpreter รหัสภาษาเครื่อง แปลทีละบรรทัด โปรแกรมต้นฉบับ Compiler รหัสภาษาเครื่อง แปลทั้งโปรแกรม
ขั้นตอนการพัฒนาโปรแกรมขั้นตอนการพัฒนาโปรแกรม • การกำหนดและวิเคราะห์ปัญหา (Problem definition and problem analysis) • การเขียนผังงานและซูโดโค้ด (pseudocoding) • การเขียนโปรแกรม (programming) • การทดสอบและแก้ไขโปรแกรม (program testing and debuggin) • การทำเอกสารและบำรุงรักษาโปรแกรม (documentation and maintenance) วิเคราะห์ปัญหา ซูโดโค้ด และผังงาน การเขียนโปรแกรม การทำเอกสาร และ บำรุงรักษาโปรแกรม การทดสอบและแก้ไข
โครงสร้างโปรแกรม # include “stdio.h” # include “conio.h” int cola = 10 ; main( ) { int pepsi = 20 ; total = cola + pepsi ; printf (“This result is : %d”,total) ; } Preprocessor directives global declarations int main (void) { } local definitions statements
โปรแกรมภาษาซีเบื้องต้นโปรแกรมภาษาซีเบื้องต้น # include “stdio.h” main() { } # include “stdio.h” main( ) { printf (“COMPUTER”) ; } หรือ หรือ # include “stdio.h” main(){ } # include “stdio.h” main( ){ printf (“COMPUTER”) ; }
ประเภทของข้อมูล (Data type) • ข้อมูลประเภทอาจจะมี คำว่า short หรือ long หรือ unsigned ซึ่งหมายความว่า • short int : จะใช้เนื้อที่หน่วยความจำน้อยกว่าหรือเท่ากับ int • long int : จะใช้เนื้อที่หน่วยความจำมากกว่าหรือเท่ากับ int • unsigned : จะเก็บข้อมูลที่ไม่มีค่าลบ เพราะจะใช้ทุกๆบิตแทนค่าตัวเลข ดังนั้น unsigned int จะเก็บข้อมูลเลขบวก ได้มากกว่า int 2 เท่า
การประกาศตัวแปรและค่าคงที่การประกาศตัวแปรและค่าคงที่ # include "stdio.h" const float taxrate = 0.07 ; float itemcost,salestax; main( ) { printf("Please enter cost of item: "); scanf("%f",&itemcost); salestax = taxrate * itemcost; printf("Item cost is = %f \n",itemcost); printf("Sales tax is %f\n",salestax); getch(); } การประกาศค่าคงที่ การประกาศตัวแปร
ตัวดำเนินการเลขคณิต • ลำดับการทำงานของตัวดำเนินการ คือ ( ) , * , / , + , - เช่น • 5 % 2 + 14 / 3 – 6 ผลลัพธ์คือ –1 • 7.5 – 10.0 / 4.0 * (2 + 3) ผลลัพธ์คือ –5.0
ผลลัพธ์จากการดำเนินการกับข้อมูลต่างประเภทผลลัพธ์จากการดำเนินการกับข้อมูลต่างประเภท #include "stdio.h" main(){ char aChar = 'A'; int intNum = 200; double fltNum = 245.3; printf("aChar contains: %c\n",aChar); printf("aChar numeric: %d\n",aChar); printf("intNum contains: %d\n",intNum); printf("fltNum contains: %f\n",fltNum); intNum = intNum + aChar; fltNum = fltNum + aChar; printf("\nAfter additions....\n"); printf("aChar numaric: %d\n",aChar); printf("intNum contains: %d\n",intNum); printf("fltNum contains: %f\n",fltNum); } ผลลัพธ์ คือ aChar contains : A aChar numeric : 65 intNum contains : 200 After additions… aChar numeric : 65 intNum contains : 265 fltNum contains : 310.300000
การพิมพ์ข้อมูลเบื้องต้น : ฟังก์ชัน printf ( ) • ฟังก์ชัน printf( ) เป็นฟังก์ชันที่ใช้พิมพ์ข้อความต่างๆออกทางจอภาพ มีลักษณะโครงสร้างดังนี้ • control string : เป็นส่วนที่ใช้แสดงข้อความออกทางจอภาพ • variable list : เป็นส่วนของค่าคงที่ หรือตัวแปรที่จะให้แสดงผล printf (“control string”,variable list,…………..) ; # include “stdio.h” main( ){ int fanta = 22 ; printf (“Value is : %d and %d\n”,fanta,500) ; }
การพิมพ์ข้อมูลเบื้องต้น : ฟังก์ชัน printf ( ) printf (“Computer\n”); printf (“\\Computer”); printf (“\nComputer”); printf (“\aComputer\n”); printf (“\nComputer\n”); printf (“\tComputer”);
การพิมพ์ข้อมูลเบื้องต้น : ฟังก์ชัน printf ( )
การพิมพ์ข้อมูลเบื้องต้น : ฟังก์ชัน printf ( ) printf (“%s %d %f %c \n”,”Sam”,14,-8.76,’X’) ; Sam 14 –8.760000 X printf (“%f %.3f %.2f %.1f”,4.5678,4.5678,4.5678,4.5678) ; 4.567800 4.568 4.57 4.6 # include “stdio.h” main( ){ int x,y; x = 5; y = 6; printf (“%d\n”,x); printf (“%c\n”,x); printf (“%d %d\n”,x,y); printf (“%d\n”,125); printf (“%c\n”,125); printf (“The total is $ %6.2f\n”,12.5); printf (“The total is $ %6.3f\n”,12.5); }
การรับข้อมูลเบื้องต้น : ฟังก์ชัน scanf ( ) • ฟังก์ชัน scanf( ) เป็นฟังก์ชันที่ใช้ในการรับข้อมูลจากการกดคีย์บอร์ดที่อยู่ในรูปรหัส ASCII ไปเก็บไว้ในตัวแปรที่กำหนด และสามารถระบุชนิดข้อมูลที่เก็บได้ • control string : เป็นการกำหนดชนิดของข้อมูลที่จะเก็บในตัวแปร • &variable list : เป็นการชี้ไปที่แอดเดรสหน่วยความจำของตัวแปร scanf (“control string”,&variable list,…………..) ; # include “stdio.h” main( ){ int num ; scanf (“%d”,&num) ; }
การรับข้อมูลเบื้องต้น : ฟังก์ชัน scanf ( ) • ฟังก์ชัน scanf( ) สามารถระบุประเภทของข้อมูลที่จะรับเข้าได้อีกด้วย เช่น เมื่อ run โปรแกรม และทดลองป้อนค่า abcdtye และกด Enter ผลลัพธ์ที่ได้จะเป็น abcd เท่านั้น ส่วน tye จะไม่ถูกจัดเก็บในตัวแปร str เนื่องจาก มีการระบุว่าให้รับเพียงแค่ abcd เท่านั้น # include “stdio.h” main( ){ int i ; char str[80] ; scanf (“%[abcdefg]”,str) ; }
ตัวอย่างโปรแกรมอินเทอร์แอกทีฟตัวอย่างโปรแกรมอินเทอร์แอกทีฟ # include “stdio.h” main(){ int feet,inches; printf(“Enter number of feet “); scanf(“%d”,&feet); inches = feet * 12; printf(“%d inches”,inches); } ผลรันของโปรแกรมคือ Enter number of feet 5 60 inches feet 5 inches 60
ฟังก์ชันอื่นๆที่ใช้ในการรับข้อมูลเข้าฟังก์ชันอื่นๆที่ใช้ในการรับข้อมูลเข้า • getchar( ) : ใช้สำหรับป้อนตัวอักษร 1 ตัวผ่านทางแป้นพิมพ์และแสดงตัวอักษรบนจอภาพพร้อมทั้งต้องกด Enter เพื่อทำงานต่อ เช่น ch = getchar( ); • getche( ) : ใช้สำหรับป้อนตัวอักษรผ่านทางแป้นพิมพ์และแสดงตัวอักษรบนจอภาพ แต่เมื่อป้อนข้อมูลแล้วไม่ต้องกด Enter เช่น ch = getche( ); • getch( ): ใช้สำหรับป้อนตัวอักษรผ่านทางแป้นพิมพ์และไม่แสดงตัวอักษรบนจอภาพ แต่เมื่อป้อนข้อมูลแล้วไม่ต้องกด Enter เช่น ch = getch( ); • gets( ) : ใช้สำหรับข้อมูลชนิด String ซึ่งป้อนทางแป้นพิมพ์โดยมีรูปแบบดังนี้ • gets(str); • เมื่อโปรแกรมทำงานถึงคำสั่งนี้จะหยุดเพื่อให้ป้อนข้อความ เมื่อป้อนเสร็จแล้วกด Enter ข้อความทั้งหมดจะถูกเก็บไว้ในอาร์เรย์สตริงก์ str
การใส่หมายเหตุ(Comment) • หมายเหตุ (Comment) : เป็นข้อความที่ใส่ไว้ตามส่วนต่าง ๆ ของโปรแกรม เพื่ออธิบายหรือบันทึกข้อความให้ผู้พัฒนาโปรแกรมมีความเข้าใจในส่วนต่าง ๆ ของโปรแกรม โดยมีวิธีการใส่หมายเหตุดังนี้ • //ใช้กำหนดบรรทัดที่จะเป็นหมายเหตุทั้งบรรทัด เช่น // This is my Program • /*…*/ ใช้กำหนดหมายเหตุเป็นช่วง ๆ โดยหมายเหตุจะอยู่ระหว่างเครื่องหมาย /* กับ */ เช่น /* This is my Program */
การใส่หมายเหตุ (Comment) // เป็นโปรแกรมที่ใช้ในการคำนวณหาหน่วยที่เป็นนิ้ว # include “stdio.h” main(){ int feet,inches; printf(“Enter number of feet “);//สั่งให้แสดงข้อความออกทางจอภาพ scanf(“%d”,&feet);/* สั้งให้โปรแกรมรับค่าจากผู้ใช้ */ inches = feet * 12; printf(“%d inches”,inches); } /* ตัวอย่างนี้เป็นวิธีการใส่หมายเหตุ ให้กับโปรแกรม */
การเลือกทำ • ข้อมูลทางลอจิก (logical data) จะมีอยู่ 2 ค่าคือ ค่าที่เป็นจริง (true)และเป็นเท็จ(false) • ในภาษาซีจะใช้ 1แทนค่าที่เป็น จริง และ 0 แทนค่าที่เป็น เท็จ
การเลือกทำ # include "stdio.h" int main(void){ int a = 5; int b = -3; int c = 0; printf(“ %2d && %2d is %2d\n”,a,b, a &&b ); printf(“ %2d && %2d is %2d\n”,a,c, a &&c ); printf(“ %2d && %2d is %2d\n”,c,a, c && a); printf(“ %2d || %2d is %2d\n”,a,c, a || c); printf(“ %2d || %2d is %2d\n”,c,a, c || a); printf(“ %2d || %2d is %2d\n”,c,c, c || c); printf(“!%2d && !%2d is %2d\n”a,c, !a && !c); printf(“!%2d && !%2d is %2d\n”a,c, !a && c); printf(“%2d && !%2d is %2d\n”,a,c, a && !c); return 0; } ผลลัพธ์ คือ 5 && -3 is 1 5 && 0 is 0 0 && 5 is 0 5 | | 0 is 1 0 | | 5 is 1 0 | | 0 is 0 !5 && !0 is 0 !5 && 0 is 0 5 && !0 is 1
การเลือกทำแบบทางเดียว (if) if(condition){…action statement….} ตัวอย่าง if (age >=18) printf(“of age\n”); printf(“good luck”); เท็จ เงื่อนไข if (age >=18) { printf(“of age\n”); } printf(“good luck”); จริง สเตตเมนด์ ผลลัพธ์ age = 14 age = 18 age = 25 of age good luck good luck of age good luck
การเลือกทำแบบทางเดียว (if) โปรแกรมที่ 4.3 โปรแกรมที่ 4.2 #include “stdio.h” main( ){ int magic = 123; //กำหนดค่า123ให้ตัวแปร int guess; printf(“Enter your guess : “); scanf(“%d”,&guess); if(guess == magic) printf(“*** Right ***”); } #include “stdio.h” #include “conio.h” main( ){ int answer; clrscr( ); printf(“What is 3+4 = “); scanf(“%d”,&answer); if(answer == 3+4) printf(“OK”); printf(“Error”); getch( ); }
การเลือกทำแบบสองทิศทาง (if-else) if(condition){….statement1….} else {….statement 2….} ตัวอย่าง if (score >= 60) printf(“You pass”); else printf (“Your fail”); printf(“Have a nice day”); if (score >= 60) { printf(“You pass”); } else { printf (“Your fail”); } printf(“Have a nice day”); เงื่อนไข จริง เท็จ สเตตเมนด์ 1 สเตตเมนด์ 2 ผลลัพธ์ score = 54 score = 73 You fail Have a nice day You pass Have a nice day
การเลือกทำแบบสองทิศทาง (if-else) โปรแกรมที่ 4.6 โปรแกรมที่ 4.5 #include “stdio.h” #include “conio.h” main( ){ int num; clrscr( ); printf(“enter a number”); scanf(“%d”,&num); if (num<0) printf(“number is negative”); else printf(“number is positive”); getch( ); } #include “stdio.h” int Number; float cost; main( ){ printf(“Enter number …..”); scanf(“%d”,&Number); if (Number >= 10) cost = Number * 6.5; else cost = Number * 7; printf(“Cost = %2.2f\n”,cost); }
การใช้คำสั่ง if หลาย ๆคำสั่งซ้อนกัน(nested if statement) if (expression 1) if (expression 2) statement 1; else statement 2; else statement 3; Expression 1 Expression 2 Statement 3 Statement 2 Statement 1
การใช้คำสั่ง if หลาย ๆคำสั่งซ้อนกัน(nested if statement) โปรแกรมที่ 4.13 โปรแกรมที่ 4.12 #include “stdio.h” main( ){ int a,b; printf(“Please enter two integer : “); scanf(“%d%d”,&a,&b); if(a<=b) if(a<b) printf(“%d < %d\n”,a,b); else printf(“%d == %d\n”,a,b); else printf(“%d > %d\n”,a,b); } #include “stdio.h” int x; main( ){ clrscr( ); printf(“Enter Score(0..100) :”); scanf(“%d”,&x); if (x >= 90) printf(“EXCELLENT”); else if(x >= 80) printf(“Good ”); else if(x >= 70) printf(“FAIR ”); else printf(“FAIL “); }
การเลือกทำแบบหลายทาง (switch) switch (expression) { case constant1 : statement sequence break; case constant2 : statement sequence break; case constant3 : statement sequence break; .......... .......... [ default : statement sequence ] } จริง constant 1 ชุดคำสั่ง 1 จริง constant 2 ชุดคำสั่ง 2 จริง constant 3 ชุดคำสั่ง 3 default • คำสั่ง switch นี้จะกระทำค่าใน expression ถ้าผลลัพธ์ที่ได้เท่ากับค่าคงที่ค่าใดหลัง case โปรแกรมก็จะไปทำ statement sequence หลังค่าคงที่นั้น ถ้าไม่เท่ากับค่าใดเลยโปรแกรมจะไปทำ statment sequence หลัง default • ค่าคงที่หลัง case จะต้องเป็น int หรือ char เท่านั้น
การเลือกทำแบบหลายทาง (switch) โปรแกรมที่ 4.15 โปรแกรมที่ 4.16 #include “stdio.h” #include “conio.h” main( ){ int i; clrscr( ); printf(“Enter a number between 1 and 4: “); scanf(“%d”,&i); switch(i) { case 1 : printf(“one”); break; case 2 : printf(“two”); break; case 3 : printf(“three”); break; case 4 : printf(“four”); break; default: printf(“unrecognized number”); } getch( ); } #include “stdio.h” #include “conio.h” main( ){ char ch; clrscr(); printf(“Enter the letter: “); ch = getche( ); switch(ch) { case ‘a’ : case ‘e’ : case ‘i’ : case ‘o’ : case ‘u’ : printf(“is a vowel\n”); break; default : printf(“is a consonant”); } getch(); }
การทำซ้ำ (for) for (expr1;expr2;expr3) { <statement>; } expr1 : เป็นส่วนที่ใช้ในการกำหนดค่าเริ่มต้น expr2 : เป็นส่วนที่ใช้ในการตรวจสอบเงื่อนไข expr3 : เป็นส่วนที่ใช้ในการเพิ่มค่าหรือลดค่าให้กับตัวแปรเริ่มต้น for (counter=1 ; counter <= 10 ; counter++) { printf(“%d”,counter); } counter = 1 จริง counter <= 10 printf(“%d”,counter); เท็จ counter ++
การทำซ้ำ (for) โปรแกรมที่ 5.1 โปรแกรมที่ 5.2 #include “stdio.h” int i; main( ){ for (i = 1 ; i <= 5 ; i++ ) printf(“number %d\n”,i); } #include “stdio.h” #include “conio.h” int x,y; main( ){ clrscr( ); for (i=1 ; i<= 12 ; i++) printf(“ 2 x %d = %d\n”,i,2*i); } ตัวอย่างการลดค่าให้กับตัวแปร โปรแกรมที่ 5.3 int x; for (x = 100 ; x > 0 ; x--) printf(“%d ”,x); #include “stdio.h” int SUM , Num , i; main( ){ SUM = 0; printf(“Input Number = “); scanf(“%d”,&Num); for(i = 1 ; i<Num ; i++) SUM = SUM + i; printf(“SUM = %d\n”,SUM); } ตัวอย่างการเพิ่มค่าหรือลดค่าครั้งละหลาย ๆค่า int x; for (x = 0 ; x <= 100 ; x = x+5) printf(“%d ”,x);
การทำซ้ำ (for) โปรแกรมที่ 5.6 โปรแกรมที่ 5.7 #include “stdio.h” #include “conio.h” main( ){ int i; char ch; ch = ‘a’; clrscr( ); for (i=0;ch!=‘q’;i++){ printf(“pass: %d\n”,i); ch = getch(); } } #include “stdio.h” #include “conio.h” main( ){ int i; clrscr( ); printf(“Enter an integer: “); scanf(“%d”,&i); for(;i;i--) printf(“%d “,i); getch( ); } โปรแกรมที่ 5.10 #include “stdio.h” #include “conio.h” main( ){ int i; clrscr(); for(i=1;i<100;i++) { printf(“%d “,i); if (i==10) break; } } คำสั่ง breakเป็นคำสั่งที่ใช้ใน การบังคับให้โปรแกรมออกจากลูป ทันที
การทำซ้ำ (while) while (test condition) { <statement>; } while n = 7 ; while (n >= 0) { printf (“%d\n”,n); n = n – 5; printf(“Hi %d\n”,n); } char ch ; ch = “\0” ; while (ch != ‘A’) ch = getche(); no test condition yes statement
การทำซ้ำ (while) โปรแกรมที่ 5.14 โปรแกรมที่ 5.15 #include “stdio.h” #include “conio.h” main( ){ char ch; clrscr( ); ch = getche(); while (ch!=‘q’) ch = getche(); printf(“\n found the q”0; getch( ); } #include “stdio.h” #include “conio.h” main( ){ clrscr(); n = 0 ; sum = 0 ; while (sum <= 1000) { n = n + 1; sum = sum + (n * n) ; } printf(“Sum first goes over 1000 when you add %d squared \n”,n); printf(“Sum is %d\n”,sum); }
การทำซ้ำ (do while) do { <statement>; }while (test condition) ; โปรแกรมที่ 5.17 โปรแกรมที่ 5.16 do #include “stdio.h” main( ) { int counter = 1 ; do { printf(“%d “,counter); }while (++counter <= 10); } #include “stdio.h” main( ){ int num; do { scanf(“%d”,&num); }while(num > 100); } statement no test condition yes
คำสั่ง continue • คำสั่ง continue: เป็นคำสั่งที่ตรงข้ามกับคำสั่ง break ซึ่งคำสั่ง continue สามารถใช้ได้ใน while , for , do/while มีลักษณะการทำงานคือ เมื่อโปรแกรมทำงานมาถึงคำสั่ง continue จะทำลูปต่อไปโดยไม่ทำสเตดเมนต์ที่ตามหลัง continue โปรแกรมที่ 5.20 #include “stdio.h” main( ) { int x; for (x=1; x<=10 ; x++) { if (x==5) continue; printf(“%d “,x); } printf(“\nUsed continue to skip printing the value 5\n”); }