Transcript chap3

โครงสร้ างภาษาซีเบือ้ งต้ น
ใช้ สาหรับ Turbo C++ Version 4.5
โปรแกรมภาษา
ในการเขียนโปรแกรมคอมพิวเตอร์ ด้วยภาษาระดับต่าหรื อ
ระดับสูง จะต้องเปลี่ยนภาษานั้นให้เป็ นภาษาเครื่ อง เพื่อให้เครื่ อง
คอมพิวเตอร์ทางานได้
โปรแกรมต้นฉบับ (Source Program)
โปรแกรมที่เครื่ องทางานได้ (Executable Program)
 การเขียนโปรแกรมด้วยแอสเซมบลี (ภาษาระดับต่า) เป็ นภาษาเครื่ อง
ขั้นตอนการแปลงภาษาแอสเซมบลีเป็ นภาษาเครื่อง
โปรแกรมภาษา
 การเขียนโปรแกรมด้วยภาษาระดับสู งเป็ นภาษาเครื่ อง

อินเทอร์พรี เตอร์ (Interpreter)
interpreter

คอมไพเลอร์ (Compiler)
compiler
ขั้นตอนการแปลภาษาโปรแกรม
ขัน้ ตอนพัฒนาโปรแกรม
การเขียนโปรแกรมคอมพิวเตอร์ให้ทางานได้ตามเราต้องการ ผูเ้ ขียน
โปรแกรมจะต้องรู ้วา่ จะให้โปรแกรมทาอะไร มีขอ้ มูลอะไร และต้องการอะไร
จากโปรแกรม รวมทั้งรู ปแบบการแสดงผลด้วย โดยทัว่ ไปจะมีข้ นั ตอนการ
พัฒนาโปรแกรม ดังนี้
 การกาหนดและวิเคราะห์ปัญหา
 การเลือกเครื่ องมือและการออกแบบขั้นตอนวิธี / Flowchart
 การดาเนิ นการแก้ปัญหา / การเขียนโปรแกรม
 การตรวจสอบและปรับปรุ ง
คุณสมบัติของภาษาซี
 ภาษาที่เป็ นโครงสร้าง เข้าใจง่าย มีความยืดหยุน่
 มีส่วนขยายเป็ นคาหลัก (keyword) ในภาษาอังกฤษ เช่น if, else, for, do และ while
ที่มีความใกล้เคียงกับภาษามนุษย์
 สามารถใช้งานในระดับต่า (low-level) ได้
 สามารถใช้ก ับ งานด้า นโปรแกรมระบบ (system
programming) เช่ น เขี ย น
โปรแกรมระบบปฏิบตั ิการ (operating system) หรื อใช้กบั งานทัว่ ๆ ไป
 สามารถย้ายไปทางานในเครื่ องอื่นได้
ประวัติภาษาซี
 ภาษาซี พฒ
ั นาขึ้นมาในปี 1972 โดย Dennis Ritchie แห่ ง Bell Telephone
Laboratories, Inc. (ปัจจุบนั คือ AT&T Bell Laboratories)
 ต้นกาเนิดมาจากภาษา 2 ภาษา คือ ภาษา BCPL และ ภาษา B
 ภาษาซี น้ นั ถูกใช้งานอยู่ เพียงใน Bell Laboratories จนกระทัง่ ปี 1978 Brian
Kernighan และ Ritchie นั้นเป็ นที่รู้จกั กันในชื่อของ "K&R C"
 ในกลางปี 1980 ภาษาซี กก็ ลายเป็ นภาษาที่ได้รับความนิยม
โครงสร้างโปรแกรมภาษาซี
1. ส่ วนหัวของโปรแกรม (Header file)
#include <stdio.h>
2. ส่ วนของคาสั่ งหลัก (Main function)
main()
{
statements;
}
การใช้ #include
วิธีการใช้ งาน
#include <ชื่อไฟล์> หรื อ #include “ชื่อไฟล์”
ตัวอย่ าง
#include <stdio.h> (เป็ นการเรี ยกใช้ไฟล์ stdio.h เข้ามาในโปรแกรม
หากไม่มีไฟล์น้ ีไม่สามารถเรี ยกใช้งานคาสัง่
printf ได้ )
การใช้ printf()
เป็ นคาสั่งที่ใช้ในการแสดงผลออกทางจอภาพ โดยมีรูปแบบการใช้งานดังนี้
printf(“control หรือ format string”, variable list …);
control หรือ format string
เป็ นส่ วนที่ ใ ส่ ข้ อ ความที่ จ ะแสดงผล และส่ วนควบคุ ม ลั ก ษณะการ
แสดงผล รวมทั้งบอกตาแหน่ งที่ตวั แปรจะแสดงผล
variable list
เป็ นตัวแปรที่ต้องการจะแสดงผล ในกรณี ที่ต้องการแสดงข้ อ ความ ไม่
จาเป็ นต้ องมีส่วนนี้
ฟั งก์ชนั หลักของโปรแกรม (Main Function)
ตัวอย่ าง
#include<stdio.h>
main()
{
printf(“Hello, Good afternoon.\n”);
}
ผลการทางาน
Hello, Good afternoon
หลักการตัง้ ชื่อ (Identifier)
ชื่อ (Identifier)
ไอเดนติ ฟ ายเออร์ เป็ นชื่ อ ที่ ผูใ้ ช้ก าหนดขึ้ น ในโปรแกรม เช่ น ชื่ อ ค่ า คงที่
ชื่อตัวแปร ชื่อฟังก์ชนั เป็ นต้น






ต้องขึ้นต้นด้วยตัวอักษรภาษาอังกฤษ (ตัวใหญ่หรื อเล็กก็ได้) หรื อขีดล่าง ‘_’
ตามด้วยตัวอักษรภาษาอังกฤษ ตัวเลข หรื อขีดล่าง (Underscore) ‘_’
ไม่มีช่องว่างหรื อตัวอักษรพิเศษอื่นๆ เช่น ‘!’, ‘@’, ‘#’, ‘$’, ‘%’, ‘^’ เป็ นต้น
ตัวพิมพ์ใหญ่และเล็กจะเป็ นคนละตัวกันเช่น NAME, name, Name, NamE
ห้ามซ้ ากับคาสงวน Reserve Words ของภาษา C
ห้ามตั้งชื่อซ้ ากับ Function ที่อยูใ่ น Library ของภาษา C
การประกาศตัวแปรพร้ อมให้ ค่าเริ่มต้ น
 ในภาษา C ประโยค (statement) ของการประกาศตัวแปร สามารถ
กาหนดค่าเริ่ มต้นให้กบั ตัวแปรได้ทนั ที โดยใช้รูปแบบ
ชนิดตัวแปร ชื่อตัวแปร = ค่ าเริ่มต้ น;
เช่น int i = 5;
 นอกจากนี้ยงั สามารถประกาศ หลายๆ ตัวแปรในบรรทัดเดียว
กันได้อีก
เช่น int i = 5, k = 3 ;
ส่วนประกาศ (Global Declarations)
 เป็ นการประกาศตัว แปรเพื่ อ ใช้งานในโปรแกรม โดยตัว แปรนั้นสามารถ
ใช้ได้ในทุกที่ในโปรแกรม
 เป็ นส่ วนที่ใช้ในการประกาศ Function Prototype ของโปรแกรม
 ส่ วนนี้ในบางโปรแกรมอาจจะไม่มีกไ็ ด้
ตัวอย่าง
int summation(float x, float y) ;
int x,y ;
float z=3;
(ประกาศ function summation)
(กาหนดตัวแปร x,y เป็ นจานวนเต็ม)
(กาหนดตัวแปร z เป็ นจานวนจริ ง)
ชนิดของตัวแปร
ประเภทข้ อมูล
คาอธิบาย
ค่าที่เก็บได้
ขนาด (ไบต์ )
char
ตัวอักษร 1 ตัว
-128 ถึง 127
1
short
ตัวเลขจานวนเต็ม
-128 ถึง 127
1
int
ตัวเลขจานวนเต็ม
-32768 ถึง 32767
2
long
ตัวเลขจานวนเต็ม
-232 ถึง 232-1
4
float
ตัวเลขทศนิยม
3.4E+/-38 (7 ตาแหน่ง)
4
double
ตัวเลขทศนิยม
1.7E+/-308 (15 ตาแหน่ง)
8
ส่วนประกาศ (Global Declarations)
ตัวอย่ าง
#include <stdio.h>
main()
int num1,num2,total;
รูปแบบการประกาศค่ าตัวแปร
{
num1 = 15;
num2 = 12;
total = num1*num2;
printf(“The sum of two numbers= %d“,total);
}
ผลการทางาน
The sum of two numbers = 180
การใช้ Preprocessor Directive





ทุกโปรแกรมต้องมี
ใช้เรี ยกไฟล์ที่โปรแกรมใช้ในการทางานร่ วมกัน
ใช้กาหนดค่าคงที่ให้กบั โปรแกรม
เริ่ มต้นด้วยเครื่ องหมาย #
ที่เราจะใช้กนั มี 2 directives คือ


#include ใช้สาหรับเรี ยกไฟล์ที่โปรแกรมใชในการทางาน
#define ใช้สาหรับกาหนดมาโครที่ให้กบั โปรแกรม
#include
#define
#undef
#if
#ifdef
#ifndef
#else
#elif
#endif
#line
#error
#pragma
ฟั งก์ชนั หลักของโปรแกรม (Main Function)
 ส่ วนนี้ ทุกโปรแกรมจะต้องมี โดยโปรแกรมหลักจะเริ่ มต้นด้วย main() และ
ตามด้วยเครื่ องหมายปี กกาเปิ ด ‘{’ และปี กกาปิ ด ‘}’
 ระหว่างปี กกาจะประกอบไปด้วยคาสั่ง(Statement) ต่างๆ ที่ จะให้โปรแกรม
ทางาน
 แต่ละคาสั่งจะต้องจบด้วยเซมิโคลอน ‘;’ (Semicolon)
#include <stdio.h>
void main(void)
{
...
Statement ;
}
การสร้างฟั งก์ชนั ใช้งานเอง (User Define Function)
 สร้างฟังก์ชนั หรื อคาใหม่ ขึ้นมาใช้งานตามที่เราต้องการ
 ระหว่างปี กกาจะประกอบด้วยคาสั่ง(Statement) ต่างๆ ที่จะให้ฟังก์ชนั ทางาน
 สามารถเรี ยกใช้ภายในโปรแกรมได้ทุกที่
#include <stdio.h>
int function()
void main(void)
{
...
Statement ;
}
int function()
{
Statement ;
...
return (int value);
}
การสร้างฟั งก์ชนั ใช้งานเอง (User Define Function)
ตัวอย่าง
#include <stdio.h>
int Feet2Inch(int);
int feet,inches;
void main()
{
feet = 6;
inches = Feet2Inch(feet);
printf("Height in inches is %d",inches);
}
int Feet2Inch(int f)
{
ผลการทางาน
return f*12;
}
Height in inches is 72
การใช้คาอธิบาย (Program Comments)
 ใช้เขียนส่ วนอธิ บายโปรแกรม (คอมเมนต์)
 ช่วยให้ผศู ้ ึกษาโปรแกรมภายหลังเข้าใจการทางานของโปรแกรม
 ส่ วนของคาอธิ บายจะถูกข้ามเมื่อคอมไพล์โปรแกรม
การเขียนส่ วนอธิบายโปรแกรม (comments)ทาได้ 2 วิธีคือ
// สาหรับคาอธิบายไปจนถึงท้ายบรรทัด
และ
/* คาอธิบาย */ ลักษณะการใช้เหมือนวงเล็บนั้นเอง
การใช้คาอธิบาย (Program Comments)
ตัวอย่าง
#include <stdio.h>
//
void main()
//
{
//
int feet,inches;
feet = 6;
//
inches = feet * 12;
//
printf("Height in inches
//
}
//
ผลการทางาน
Height in inches is 72
Change Feet to Inches
main function
Start
feet  6
inches  feet * 12
is %d", inches);
write inches
Stop
โปรแกรมที่ 1
 สร้าง folder ชื่อ 517111/รหัสนักศึกษา
 สร้างไฟล์ hello.c โดยให้พิมพ์คาว่า hello world
 การใช้งาน turbo c
F2
Alt+F9
Ctrl+F9
Alt+F5
 พิมพ์ชื่อตัวเองเพิ่มอีกหนึ่ งบรรทัด
Save
Compile
Compile & Run
Output
ตัวอย่ างโปรแกรม
โปรแกรม
#include <stdio.h>
Backslash n
main()
ขึ้นบรรทัดใหม่
{
printf(“Hello world\n");
printf(“Welcome to Computer Programming 1");
}
ผลการทางาน
Hello world
Welcome to Computer Programming 1
คาแนะนา
โปรแกรม
#include <stdio.h>
main ()
{
clrscr();
….
getch();
}
เคลียร์หน้าจอ
รอรับค่าจากคียบ์ อร์ ด
การใช้ Control ด้วย Backslash
จากตัวอย่ างที่ 3 จะเห็นได้วา่ หากต้องการให้แสดงผลข้ามบรรทัดจะต้องเพิ่ม \n
ลงไป เรี ยกว่า backslash นอกจากนี้ยงั มีตวั อื่นๆ เช่น
\n
ขึ้นบรรทัดใหม่
\t
เว้นระยะ 1 tab
\xhh
ใส่ ตวั อักษร hh เมื่อ hh เป็ นเลขฐานสิ บหก
เช่น 41 = 'A', 42 = 'B'
\a
ส่ งเสี ยงปิ้ บ
\\
แสดง \
\"
แสดง "
ตัวอย่ างโปรแกรม
โปรแกรม
#include <stdio.h>
main() {
printf("%d
}
%5.2f
%s", 12, 20.3, "Example");
ผลการทางาน
12
%d
20.30
Example
%5.2f
%s คือ รหัสควบคุม
รหัสควบคุมลักษณะ (Format String)
%d
พิมพ์จานวนเต็มฐานสิ บ
%u
พิมพ์เลขไม่มีเครื่ องหมาย
%f
พิมพ์เลขทศนิยม
%e
พิมพ์ในรู ปจานวนจริ งยกกาลัง
%c
พิมพ์ตวั อักษรตัวเดียว
%s
พิมพ์ชุดตัวอักษร (String)
%%
พิมพ์เครื่ องหมาย %
%o
พิมพ์เลขฐานแปด
%x
พิมพ์เลขฐานสิ บหก
ตัวอย่ างโปรแกรม
โปรแกรม
#include <stdio.h>
#define x 65
main()
{
printf("%d %c %o %x\n", x, x, x, x);
printf(“x = %d”, x);
}
ผลการทางาน
65 A 101
X = 65
41
การจัดการหน้าจอด้วยรหัสควบคุมลักษณะ
ในกรณี ที่ ต ้ อ งการจั ด การหน้ า จอแสดงผลสามารถใช้ ต ั ว เลขร่ วมกั น กั บ
รหัสควบคุมได้ เช่น
%5d หมายถึง แสดงตัวเลขจานวนเต็ม 5 หลักอย่างต่า
%5.2f หมายถึง แสดงตัวเลขจานวนจานวน 5 หลักอย่างต่า และ
ทศนิยม 2 ตาแหน่ง
ค่ า
%d
%5d
ค่ า
%f
%5.2f
12
12
___12
1.2
1.200000
_1.20
123
123
__123
1.234
1.234000
_1.23
1234
1234
_1234
12.345
12.345000
12.35
12345
12345
12345
123.456 123.456000
123.46
โปรแกรมที่ 2
 สร้างไฟล์ print.c โดย
 กาหนด #define ดังต่อไปนี้
X in decimal = 65
X in octadecimal = 101
X in Hexadecimal = 41
Y = 1.234
Y = 1.23e+00
CH = %C
SU = “Sipakorn university”
มีค่า 65
 จานวนจริ ง Y มีค่า 1.23456
 ตัวอักษร CH มีค่า ‘C’
 ชุดตัวอักษร SU มีค่า “Silpakorn university”
 จานวนเต็ม X
 พิมพ์ค่าต่างๆ ที่กาหนด ให้แสดงผลดังรู ป
การเก็บค่าในภาษา C
 ทาได้ 2 ลักษณะ คือ
 แบบค่าคงที่ (Constant)
 แบบตัวแปร (Variable)
 การสร้างตัวแปร
 ต้องรู ้วา่ จะใช้ตวั แปรเก็บค่าอะไร
 ประกาศตัวแปรให้เหมาะสมกับค่าที่จะเก็บ
 ชนิดของตัวแปรหลักในภาษา C
 ตัวแปรที่ใช้เก็บอักขระ (Character variable)
 ตัวแปรที่ใช้เก็บเลขจานวนเต็ม (Integer variable)
 ตัวแปรที่ใช้เก็บเลขจานวนจริ ง (Float variable)
การประกาศตัวแปร
รู ปแบบของการประกาศตัวแปร
ชนิดตัวแปร
int i;
float realnum;
char ch;
ชื่อตัวแปร;
ประกาศ i ให้ชนิดเป็ น integer
ประกาศ realnum ให้มีชนิดเป็ น float
ประกาศ ch ให้ชนิดเป็ น character
การประกาศตัวแปรชนิดเดียวกัน
 เราสามารถประกาศตัวแปรหลายๆตัว ที่มีชนิดเดียวกันโดยใช้เพียง
ประโยค(statement) เดียวได้ โดยใช้รูปแบบ
1. การประกาศทีละตัว เช่ น
int i;
int j;
int k;
2. การประกาศพร้ อมกันหลายตัว เช่ น int i, j, k;
คาสงวน Reserve Words ของภาษา C
auto
double
int
struct
break
else
long
switch
case
enum
register
typedef
char
extern
return
union
const
float
short
unsigned
continue
for
signed
void
default
goto
sizeof
volatile
do
if
static
While
asm
_cs
_ds
_es
_ss
cdecl
far
huge
interrupt
near
pascal
_export
วีธีการสร้างตัวแปรและกาหนดค่า
#include <stdio.h>
void main ()
{
int age;
char sex;
float grade;
#include <stdio.h>
void main ()
{
int age = 20;
char sex = ‘ f ’;
float grade = 3.14;
char name[10] = “malee”
age = 20;
sex = ‘ f ’;
grade = 3.14;
}
printf(“you are %s\n”,name);
...
}
นิพจน์
 นิพจน์ อาจประกอบด้ วย
 ตัวแปร
 ค่ าคงที่
 การเรียกใช้ ฟังก์ ชัน
 หรือมีตวั ดาเนินการร่ วมอยู่กไ็ ด้
a + b
x = y
c = a + b
x == y
++i
ตัวดาเนินการ
กลุ่มของตัวดาเนินการ
ลาดับความสาคัญมาก
ตัวดาเนินการยูนารี
คูณ หาร และหาเศษเหลือ
บวกและลบ
ตัวดาเนินการเปรียบเทียบ
ตัวดาเนินการเทียบเท่า
AND
OR
ตัวดาเนินการเงื่อนไข
ลาดับความสาคัญน้อย ตัวดาเนินการกาหนดค่า
ตัวดาเนินการ
- ++ -- ! sizeof (type)
* / %
+ < <= > >=
== !=
&&
||
?:
= += -= *= /= %=
โปรแกรมที่ 3
 สร้างไฟล์ triangle.c โดยให้
 รับค่าฐานเป็ นเลขจานวนจริ ง
 รับค่าความสู งเป็ นเลขจานวนจริ ง
 คานวนหาค่าพื้นที่ของสามเหลี่ยม

Area = ½ * ฐาน * สูง
การใช้ scanf()
เป็ นคาสั่งที่ใช้ในการรับค่า โดยมีรูปแบบการใช้งานดังนี้
scanf(“format string”, address list …);
format string
เป็ นส่ วนทีใ่ ช้ ในการใส่ รูปแบบของการรับข้ อมูล
address list
เป็ นตาแหน่ งของตัวแปรทีต่ ้ องการจะเก็บข้ อมูล
ตัวอย่ างโปรแกรม
โปรแกรม
#include <stdio.h>
void main() {
int x ;
scanf("%d",&x);
printf("%d %c", x, x);
return ;
}
ผลการทางาน
66
66
B
65
65
A
ตัวอย่ างโปรแกรม
โปรแกรม
#include <stdio.h>
void main() {
char s1[80], s2[80] ;
scanf("%[0-9]%[a-zA-Z]", s1, s2);
printf("%s %s", s1, s2);
return ;
}
ผลการทางาน
1234test
1234 test
test1234
test
ตัวอย่ างโปรแกรม
Input Base = 12.0
Input Height = 6.0
Area of triangle is 36.00
Input Base = 3.2
Input Height = 1.2
Area of triangle is 1.92
#include <stdio.h>
void main() {
float b,h,area ;
printf("Input Base = ");
scanf("%f",&b);
printf("Input Height = ");
scanf("%f",&h);
area = 0.5*b*h ;
printf("Area of triangle is %5.2f",area);
return ;
}
โปรแกรมที่ 4
 สร้างไฟล์ circle.c โดยให้
 รับค่ารัศมีเป็ นเลขจานวนจริ ง


กาหนดค่าคงที่ PI มีค่า 3.14159
คานวนหาค่าพื้นที่ของวงกลม

Area = PI* (รัศมี)2
ตัวอย่ างโปรแกรม
Input Radias = 12.0
Area of circle is 452.39
/* program to calculate area of a circle */
#include <stdio.h>
#define
PI
3.14159
main()
{
float radius, area;
printf(“Input Radius = ?");
scanf("%f", &radius);
area = PI * radius * radius;
printf("Area of circle is %7.2f ", area);
}
โปรแกรมที่ 5
 สร้างไฟล์ donut.c โดยให้



รับค่ารัศมีของวงกลม 2 วง
กาหนดค่าคงที่ PI มีค่า 3.14159
คานวนหาค่าพื้นที่ของวงกลมส่ วนสี เทา
ตัวอย่ างโปรแกรม
#include <stdio.h>
#define
PI
3.14159
main()
{
float radius1,radius2, area1, area2;
printf("Input outer radius =");
scanf(%f, &radius1);
printf("Input inner radius =");
scanf(%f, &radius2);
if (radius2 < radius1) {
area1 = PI * radius1 * radius1;
area2 = PI * radius2 * radius2;
printf("Area of donut is %5.2f", area1-area2);
}
}
จบโครงสร้างภาษาซีเบื้องต้น
Question ?
คาถามเกี่ยวกับ printf()
จากส่ วนของโปรแกรม
yards = 8;
feet = yards * 3;
printf(“%d yards is \n”, yards);
Printf(“%d feet”, feet);
ผลการทางาน คือ ?
8 yards is
24 feet
ตัวอย่ างโปรแกรม
โปรแกรม
#include <stdio.h>
void main() {
char s1[80], s2[80] ;
scanf("%[^0-9]%[^a-zA-Z\n]", s1, s2);
printf("%s %s", s1, s2);
return ;
}
ผลการทางาน
test1234
test 1234
1234test
1234