ภาษาซีเบื้องต้น

Download Report

Transcript ภาษาซีเบื้องต้น

ภาษาซี
Fundamentals of the C Programming Language
โครงสร ้างของภาษาซ ี
ประกอบด ้วย
1. Preprocessor
2. Type declarations
3. Statement
4. Comment
5. Function
Preprocessor
สว่ นหัวข ้อของโปรแกรม
ื่ header file ทีร่ ะบุในเครือ
# include ตามด ้วยชอ
่ งหมาย
< > หรือ “ ” (ถ ้าไม่ระบุพาทจะหมายถึงไดเรกทอรีปัจจุบน
ั )
่
เชน
#include <stdio.h>
#include " d:testheader.h “
คาสงั่ ของPreprocessor มี :
#include
#define
#endif
#error
#elif
#else
#if
#ifndef
#ifdef
#program
#undef
Preprocessor ทีน
่ ่าสนใจมี 2 ตัวคือ
#include ทาหน ้าทีแ
่ จ ้งให ้คอมไพเลอร์อา่ นไฟล์อน
ื่ เข ้ามาแปลร่วมด ้วย
่ #include <dos.h>
เชน
อ่านไฟล์ dos.h จากไดเร็คทอรีทก
ี่ าหนด (โดยคอมไพเลอร์)
#include “c:\example\sample.h”
อ่านไฟล์ sample.h จากไดเร็คทอรีทผ
ี่ ู ้เขียนโปรแกรมกาหนด
#define ทาหน ้าทีใ่ ชก้ าหนดค่าคงที่ แทนคา นิพจน์ คาสงั่ หรือคาสงั่ หลายคาสงั่
่ #define i 10
เชน
กาหนดค่าคงที่ i เท่ากับ 10
#define PI 3.141592654
กาหนดค่าคงที่ PI เท่ากับ 3.141592654
Program Comment
คือ ค ำอธิบ ำยโปรแกรม ใช ้เมื่อต อ้ งกำรเพิ่มส่ ว นของกำร
่
อธิบำยโปรแกรม ซึงจะเป็
นส่วนไม่มผ
ี ลต่อโปรแกรม และเป็ น
่ ถูก compiles และ กำรเขียน comment ใน
ส่วนทีไม่
ภำษำซีสำมำรถเขียนได ้ 2 แบบ คือ
่ น
่
่ น
1.เริมต
้ ด ว้ ยเครืองหมำย
/* และจบทำ้ ยประโยคทีเป็
comment ด ้วย */ เช่น /* Compute the Tax */
่
่
่ อยู่ ห ลัง
2.เริ่มต น
้ ด ว้ ยเครืองหมำย
// ซึงประโยคที
่
เครืองหมำยดั
ง กล่ ำ ว จนจบบรรทัด จะถูก มองว่ ำ เป็ น
ส่วนของ comment เช่น
// Compute the Tax
Type declaration
่ ้ในกำรประกำศข ้อมูล
คือส่วนประกำศข ้อมูล เป็ นส่วนทีใช
่ ยวข
่
เช่น ตัวแปร ชนิ ดของตัวแปร ค่ำคงที่ ทีเกี
้องกับโปรแกรม
เช่น
#define Kms 1.609
int counter;
่ ยกแทนพืนที
้ เก็
่ บข ้อมูลใน
ตัวแปร หมำยถึงชือเรี
หน่ วยควำมจำ มีชนิ ดของข้อมู ล หรือแบบของตัวแปร
คือ char, int, long, float, double, short , long
่ จำนวนแน่ นอน ซึงจะใช
่
constant คือ ค่ำของข ้อมูลทีมี
้
่ ได ้
#define มำเป็ นตัวกำหนดค่ำคงทีก็
ตัวแปร (variable) ในภาษาซี
กำรกำหนดตัวแปร ทำได ้ 2 แบบ คือ
1. กำหนดไว ้นอกกลุม
่ คำสัง่ หรือฟังก ์ช ัน เรียกตัวแปรนี ้
ว่ำ Global Variable กำหนดไว ้นอกฟังก ์ช ัน ใช ้
้
่ ้นเป็ น 0 (กรณี ไม่ได ้
งำนได ้ทังโปรแกรม
มีคำ่ เริมต
่ ้น)
กำหนดค่ำเริมต
2. กำหนดไว ้ในกลุม
่ คำสัง่ หรือฟังก ์ช ัน เรียกตัวแปรนี ว่้ ำ
Local Variable กำหนดไว ้ภำยในฟังก ์ช ัน ใช ้งำนได ้
่ ้นโดย
ู กำหนดค่ำเริมต
ภำยในฟังก ์ช ันนั้น และไม่ถก
อัตโนมัต ิ
กำรประกำศตัวแปร มีลก
ั ษณะดังนี ้
ชนิดของข ้อมูลในภาษาซ ี
1. ตัวแปรแบบ char เป็ นตัวแปรทีใ่ ชส้ าหรับเก็บข ้อมูลทีเ่ ป็ น
้ อ
ตัวอักษรขนาด 1 ตัว โดยใชเนื
้ ทีใ่ นการเก็บ 1 ไบต์ ตัวอย่างตัว
่ ‘A’ , ‘b’ , ‘1’ , ‘?’
แปรชนิดนี้ เชน
2. ตัวแปรแบบ integer เป็ นตัวแปรทีใ่ ชส้ าหรับการเก็บค่าตัวเลขที่
้ อ
เป็ นจานวนเต็มทีม
่ ค
ี า่ ระหว่าง -32768 ถึง 32767 ใชเนื
้ ทีใ่ นการ
่ 5 -10
เก็บ 2 ไบต์ ตัวอย่างตัวแปรชนิดนี้ เชน
3. ตัวแปรแบบ long เป็ นตัวแปรทีเ่ ก็บค่าเป็ นจานวนเต็มทีม
่ จ
ี านวน
้ นคานาหน ้าตัวแปร
ไบต์เป็ น 2 เท่าของจานวนเดิม (มักจะใชเป็
่ long int )
เชน
้ บข ้อมูลทีเ่ ป็ นเลขทศนิยม
4. ตัวแปรแบบ float เป็ นตัวแปรทีใ่ ชเก็
้ น
โดยจะเก็บอยูใ่ นรูป a.b x 10e ใชพื
้ ทีใ่ นการเก็บ 4 ไบต์ มีคา่
ระหว่าง 3.4E-38 ถึง 3.4E+38 หรือ แสดงเป็ น เลขทศนิยมได ้
่ 10.625 -6.67
ไม่เกิน 6 ตาแหน่ง ตัวอย่างตัวแปรชนิดนี้ เชน
5. ตัวแปรแบบ double เป็ นตัวแปรทีเ่ ก็บข ้อมูลทีเ่ ป็ นเลขทศนิยม
char
unsignedchar
short int
int (Windows)
int (UNIX, Linux)
long int (Windows)
long int (UNIX, Linux)
unsignedint (Windows)
unsignedint (UNIX, Linux)
float
double
8
8
16
16
32
32
32
16
16
32
64
ASCII character (-128 127)
0-255
-32768 32767
-32768 32767
-2147483648 2147483649
-2147483648 2147483649
-2147483648 2147483649
0 65535
0 4294967296
3.4E-38 3.4E+38
6
1.7E-308 1.7E+308
12
ตัวอย่าง
int i ;
้ บค่า เป็ นเลขจานวนเต็มทีม
ประกาศตัวแปร i เป็ นตัวแปรทีใ่ ชเก็
่ ค
ี า่ ระหว่าง
-35768 ถึง 32767
int num1=8;
ประกาศตัวแปร num1 เป็ นตัวแปรสาหรับเก็บค่าตัวเลขจานวนเต็ม และ
ให ้ค่าเริม
่ ต ้นเท่ากับ 8
float money,price ;
ประกาศตัวแปร money และ price สาหรับเก็บค่าทีเ่ ป็ นเลขทศนิยม
char ch=’A’
ประกาศตัวแปร ch เป็ นตัวแปรทีเ่ ก็บค่าตัวอักษรเพียง 1 ตัว คือ ตัวอักษร
‘A’
unsigned long int test;
chara,b,c,d;
/* ตัวแปร a,b,c,d เป็ นตัวแปรชนิด character */
unsigned e;
/* ตัวแปร e เป็ นตัวแปรชนิด unsigned int */
Char key = ‘A’;
/* ตัวแปร key เป็ นตัวแปรชนิด character มีคา่
‘A’ */
Char name = ‘Sompong’ ; /* ตัวแปร name เป็ นตัวแปรชนิด
character มีคา่ ‘Sompong’ */
Constant เขียนได ้ 3 ลักษณะ คือ
่ านวนเต็ม เขียนอยูใ่ นรูปตัวอักษร อาจมีเครือ
1. ค่าคงทีจ
่ งหมายลบ
่
นาหน ้า เชน
#define INTEGER -100
่ านวนจริง เขียนในรูปตัวเลขมีทศนิยม เชน
่
2. ค่าคงทีจ
#define FLOAT 2.023
3. ค่าคงทีทหมายถึ
ี่
งรหัสต ัวอ ักษร (ตัวอักษรถูกจาในรูปแบบตัวเลข
่ #define STRING “Message”
ตามรหัส ASCII) เชน
Statement
่
่ ำหนดกำรกระทำ ทีควรทรำบมี
่
คือ คำสังในภำษำซี
เป็ นส่วนทีก
ดงั นี ้
่
1. ประโยคคำสั่งในภำษำซีจะลงทำ้ ยด ้วยเครืองหมำย
; และเขียน
ด ้วยอักษรตัวเล็ก
่
2. กำรกำหนด identifier สำหรบั กำหนดชือของตั
วแปร ค่ำคงที่ ที่
้
่ ้โปรแกรมรบั รู ้
เรำสร ้ำงขึนใหม่
จะต ้องมีกำรประกำศค่ำเหล่ำเพือให
่ เกณฑ ์สำหร ับกำรกำหนด identifier ทีจะใช
่
ก่อน ซึงมี
้ดังนี ้
่
 ประกอบดว้ ยอักษร A-Z, a-z, 0 – 9 และเครืองหมำย
_
(underscore)
้ ้นด ้วยตัวอักษรหรือเครืองหมำย
่
 ต ้องขึนต
_
้ั
้
 มีควำมยำวไดต
้ งแต่
1 ตัวขึนไป
แต่ภำษำซีจะมองเห็ นแค่ 32
ตัวอักษร
 ห ้ำมเป็ นคำสงวน (reserved word) เช่น main, while
่
ประโยคคาสังใน
Statement
แบ่งได ้เป็ น 5 ประเภท คือ
1.ประโยคกาหนดค่าตัวแปร (Assignment
Statement)
2.ประโยคอ่านข ้อมูลเข ้าเครือ
่ ง และประโยคแสดง
ผลลัพธ์ (Input/Output Statement)
3.ประโยคคานวณ (Computing Statement)
4.ประโยคควบคุมการทางานของโปรแกรม
(Program Control Statement
5.ประโยคจบ (End Statement)
่
รู ปแบบคาสังในภาษาซี
รูปแบบคาสงั่ ในภาษาซ ี มีกฏเกณฑ์ ดังนี้
่
1.คาสงั่ ทุกคาสงั่ ต ้องเขียนด ้วยอักษรตัวเล็กเสมอ เชน
คาสงั่ printf, scanf, for
้ อ
2.ทุกคาสงั่ จะใชเครื
่ งหมาย ; แสดงการจบของ
่ printf(“Hello”) ;
คาสงั่ เชน
3.การเขียนคาสงั่ จะเขียนได ้แบบอิสระ (Free Format)
่
คือ สามารถเขียนหลายๆคาสงั่ ต่อกันได ้ เชน
printf(“Hello”); printf(“Goodbye”); a = 95;
แต่เพือ
่ ความเป็ นระเบียบและอ่านง่าย ควรเขียน 1 คาสงั่
ต่อ 1 บรรทัด
คาสงวนในภาษาซี
auto default
volatile
break do
while
case double
char
else if
enum
int
sizeof
float
register struct
far
return
switch
goto
short
typedef
signed union
const
unsigned
continue
Function
o
o
o
ั ในภาษาซ ี มีทงั ้ ฟั งก์ชน
ั มาตรฐานและ
ฟั งก์ชน
ั ทีส
ฟั งก์ชน
่ ร ้างขึน
้ เอง
ั ทีส
ั main
ฟั งก์ชน
่ าคัญในภาษาซ ี คือ ฟั งก์ชน
ี ะเริม
ั
ภาษาซจ
่ ต ้นทางานในชุดคาสงั่ ทีอ
่ ยูใ่ นฟั งก์ชน
main ก่อน
ั ในภาษาซแ
ี บ่งเป็ น 2 สว่ น ได ้แก่ ฟั งก์ชน
ั
ฟั งก์ชน
ั หลักและฟั งก์ชน
ั อืน
main เป็ นฟั งก์ชน
่ ๆ จะมีก ี่
ั ก็ได ้
ฟั งก์ชน
่
โครงสร ้างทัวไปในฟั
งก ์ช ัน
ั (Heading) เป็ นสว่ นทีน
ื่ ฟั งก์ชน
ั
สว่ นหัวของฟั งก์ชน
่ ย
ิ ามชอ
กาหนดชนิดและจานวนตัวแปรทีใ่ ชส้ ง่ ผ่านค่าเข ้าออก
ื่ ฟั งก์ชน
ั (
รูปแบบ : ชนิดพารามิเตอร์ทใี่ ชส้ ง่ ค่าออก ชอ
พารามิเตอร์ทใี่ ชส้ ง่ ค่าเข ้า )
่ int main(char)
เชน
ั main มีการรับพารามิเตอร์ชนิด char และ
หมายถึง ฟั งก์ชน
มีการสง่ ค่ากลับออกมาเป็ นชนิด int (สงั เกตว่าการรับ
การสง่ ค่าเป็ นคนละชนิด)
สว่ นกลุม
่ คาสงั่ (Compound Statements) ประกอบด ้วย 3
สว่ นย่อย
1.สว่ นกาหนดตัวแปร (Variable Declaration) ใชส้ าหรับ
้
ั
กาหนดตัวแปรเพือ
่ ใชงานในฟั
งก์ชน
2.สว่ นคาสงั่ (Statement) ประกอบด ้วยคาสงั่ ต่างๆ เรียงกันไป
Preprocessor directive
ตัวอย่าง
1. #include <stdio.h>
Type declaration
2. #define Kms 1.609
3. main(void)
Function
4. {
Type declaration
5. float miles,kms;
6. printf("Enter the distance in miles> ");
Statement
7. scanf("%f",&miles);
8. /*convert to kilometer */
Comments
9. kms = Kms*miles;
10. printf("The result is %f kilometes \n",kms);
11. }
คาอธิบาย
1. #include <stdio.h> คือบอกคอมไพล ์เลอร ์ให ้นำไฟล ์ stdio.h
มำใช ้ร่วม
่ นค่ำคงที่ กำหนดให ้ Kms เท่ำกับ 1.609
2. ประกำศตัวแปร ซึงเป็
่
่
่ ำงำนทีนี
่ ่ และเมือจบ
3. main คือชือของฟั
งก ์ชัน โปรแกรมจะเริมท
ฟังก ์ชัน main หมำยถึงจบโปรแกรมด ้วย
่ ้นส่วนคำสัง่
4. เริมต
่ นตัวแปรชนิ ดทศนิ ยม
5. ประกำศตัวแปร miles และ kms ซึงเป็
่ ใ่ นเครืองหมำย
่
6. กำรใช ้ฟังก ์ชัน printf พิมพ ์ข ้อควำมทีอยู
  ออก
ทำงหน้ำจอ
่ วแปร
7. กำรใช ้ฟังก ์ชัน scanf ร ับตัวเลขชนิ ดทศนิ ยมมำเก็บไว ้ทีตั
miles
่
8. ส่วน Comment ซึงจะไม่
แสดงในกำรร ันโปรแกรม
่ ้คำนวณค่ำคงที่ (Kms) กับค่ำทีร่ ับเข ้ำมำทำงแป้ นพิมพ ์
9. คำสังให
่ วแปร Kms
(miles) เก็บไว ้ทีตั
Input and Output


อินพุท การรับค่าข ้อมูลจากผู ้ใช ้ อป
ุ กรณ์มาตรฐาน
ได ้แก่ คียบ
์ อร์ด สแกนเนอร์ หรือ เมาส ์ ในภาษาซ ี
ั สาหรับ ป้ อนข ้อมูลทางแป้ นพิมพ์ คือ
มีฟังก์ชน
scanf(), getchar(), getche(), getch และ get()
เอาท์พท
ุ คือ การแสดงผลข ้อความ ข ้อมูล หรือ
ค่าตัวแปรใดๆ ออกมาทางอุปกรณ์แสดงผล
อุปกรณ์มาตรฐาน ได ้แก่ จอภาพ ลาโพง หรือ
ั มาตรฐานในการแสดงผลข ้อมูล
เครือ
่ งพิมพ์ ฟั งก์ชน
ั คือ ฟั งก์ชน
ั printf
ทางจอภาพ ฟั งก์ชน
่ ั printf()
ฟั งก ์ชน
ั่ ใชแสดงค่
้
เป็ นฟั งก์ชน
าข ้อมูลไปยังหน ้า
จอคอมพิวเตอร์
้
ั printf
ตัวอย่าง การใชงานฟั
งก์ชน
int i = 10;
printf(“\n test %d”,i);
้
/n เป็ นรหัสรูปแบบ (Format Code) ทีใ่ ชในการ
แสดงผล หมายถึง ขึน
้ บรรทัดใหม่
รหัสรู ปแบบ
ชนิ ดตัวแปร
ลักษณะการแสดงผลออกจอภาพ
%d
int
่ นเลขจำนวนเต็มฐำนสิบ
ใช ้แสดงข ้อมูลทีเป็
%ld
long int
่ นเลขจำนวนเต็มฐำนสิบแบบ long
ใช ้แสดงข ้อมูลทีเป็
%u
unsigned int
่ นเลขจำนวนเต็มฐำนสิบแบบ unsigned
ใช ้แสดงข ้อมูลทีเป็
%c
char
%s
string
่ นตัวอักษร
ใช ้แสดงข ้อมูลทีเป็
่ นตัวแปรสตริงหรือชุดตัวอักษร
ใช ้แสดงข ้อมูลทีเป็
%o
int (octal)
%x
int (hexa)
%f
float
่ นเลขทศนิ ยม ทีไม่
่ มเี ลขยกกำลัง
ใช ้แสดงข ้อมูลทีเป็
%e
float, double
่ นเลขทศนิ ยม ทีมี
่ เลขชีก้ ำลัง
ใช ้แสดงข ้อมูลทีเป็
%lf
double
่ นเลขทศนิ ยมแบบ double
ใช ้แสดงข ้อมูลทีเป็
่ นเลขฐำนแปด
ใช ้แสดงข ้อมูลทีเป็
่ นเลขฐำนสิบหก
ใช ้แสดงข ้อมูลทีเป็
ฟั งก ์ช ัน scanf()
รูปแบบ :
scanf("format code", &
var);
่ ้ป้ อนข ้อมูล
 ฟังก ์ช ันสำหร ับหยุดเพือให
้
 ข ้อมูลทีป้่ อนจะแสดงบนจอภำพ ข ้อมูลทังหมดจะ
ถูกเก็บไว ้ในตัวแปร var
่ ำหนดให ้กับตัวแปร var จะถูก
 ชนิ ดของข ้อมูลทีก
่
กำหนดโดยตัวกำหนดชนิ ดข ้อมูลซึงระบุในส่
วน
ของ format code
ตัวอย่าง
#include "stdio.h"
#include "conio.h"
void main()
{
int a,b,c;
clrscr();
printf("Enter three integer numbers : ");
scanf("%d%d%d",&a,&b,&c);
printf("a = %d b = %d c = %d \n",a,b,c);
}
ให ้ป้ อนเลขจานวนเต็ม 3 ตัวให ้กับตัวแปร a,b และ c
ฟั งก ์ช ัน getchar()
ฟังก ์ช ัน getchar() ใช ้สำหร ับป้ อนตัวอักษรผ่ำนทำง
แป้ นพิมพ ์โดยจะร ับตัวอักษรเพียง 1 ตัวเท่ำนั้น และแสดงตัว
อักษรบนจอภำพ
รูปแบบ : ch =
getchar();
่
่ จะหยุ
้
่ ้ป้ อนตัวอักษร 1
เมือโปรแกรมท
ำงำนถึงคำสังนี
ดเพือให
ตัว หลังจำกนั้นกด Enter ตัวอักษรทีป้่ อนจะถูกเก็บไว ้ในตัว
่ นชนิ ดตัวอักษรและเคอร ์เซอร ์จะขึนบรรทั
้
แปร ch ซึงเป็
ด
ใหม่ ฟังก ์ช ัน getchar() กำหนดในไฟล ์ stdio.h
ตัวอย่ำง
#include <stdio.h>
void main()
{ char ch;
printf("Type one character ");
ch = getchar();
printf("The character you type is %c
\n",ch);
printf("The character you typed is ");
putchar(ch);
}
กำรใช ้ฟังก ์ช ัน putchar() แทน printf() จะพิมพ ์
ตัวอักษร 1 ตัว และเคอร ์เซอร ์จะไม่ขนบรรทั
ึ้
ดใหม่
ฟั งก ์ช ัน getche() และ getch()
รูปแบบ
ch = getche();
ch = getch();
ฟังก ์ช ัน getche() จะร ับตัวอักษร 1 ตัวทีป้่ อนทำง
่ อน
แป้ นพิมพ ์ และจะแสดงตัวอักษรบนจอภำพ เมือป้
ข ้อมูลเสร็จไม่ต ้องกด Enter และเคอร ์เซอร ์จะไม่ขน
ึ้
บรรทัดใหม่
ฟังก ์ช ัน getch() จะคล ้ำยกับฟังก ์ช ัน
่
getche() ต่ำงกันตรงทีจะไม่
แสดงตัวอักษรขณะป้ อน
ข ้อมูล
ฟังก ์ช ัน getche() และ getch() กำหนดในไฟล ์
ฟั งก ์ช ัน gets
ฟังก ์ช ัน gets() ใช ้สำหร ับข ้อมูลชนิ ดสตริงก ์หรือ
่ อนทำงแป้ นพิมพ ์
ข ้อควำมซึงป้
รูปแบบ
gets(str);
่
่ จะหยุ
้
่ ้ป้ อน
เมือโปรแกรมท
ำงำนถึงคำสังนี
ดเพือให
่ อนเสร็จแล ้วกด Enter ข ้อควำม ทังหมด
้
ข ้อควำม เมือป้
จะถูกเก็บไว ้ในอำร ์เรย ์สตริงก ์ str โดย carriage return
(จำกกำรกด Enter) จะแทนด ้วยสตริงก ์ศูนย ์ ฟังก ์ช ัน
้
gets() จะทำให ้เคอร ์เซอร ์ขึนบรรทั
ดใหม่ หลังจำกกด
Enter กำหนดในไฟล ์ stdio.h