Slide บทที่ 3.1

Download Report

Transcript Slide บทที่ 3.1

โครงสร้ างภาษาซีเบือ้ งต้ น
1
โปรแกรมภาษา
ในการเขียนโปรแกรมคอมพิวเตอร์ ด้วยภาษาระดับต่าหรื อ
ระดับสูง จะต้องเปลี่ยนภาษานั้นให้เป็ นภาษาเครื่ อง เพื่อให้เครื่ อง
คอมพิวเตอร์ทางานได้
โปรแกรมต้นฉบับ (Source Program)
โปรแกรมที่เครื่ องทางานได้ (Executable Program)
 การเขียนโปรแกรมด้วยแอสเซมบลี (ภาษาระดับต่า) เป็ นภาษาเครื่ อง
ขั้นตอนการแปลงภาษาแอสเซมบลีเป็ นภาษาเครื่อง
2
โปรแกรมภาษา
 การเขียนโปรแกรมด้วยภาษาระดับสู งเป็ นภาษาเครื่ อง

อินเทอร์พรี เตอร์ (Interpreter)
interpreter

คอมไพเลอร์ (Compiler)
compiler
ขั้นตอนการแปลภาษาโปรแกรม
3
ขัน้ ตอนพัฒนาโปรแกรม
การเขียนโปรแกรมคอมพิวเตอร์ให้ทางานได้ตามเราต้องการ ผูเ้ ขียน
โปรแกรมจะต้องรู ้วา่ จะให้โปรแกรมทาอะไร มีขอ้ มูลอะไร และต้องการอะไร
จากโปรแกรม รวมทั้งรู ปแบบการแสดงผลด้วย โดยทัว่ ไปจะมีข้ นั ตอนการ
พัฒนาโปรแกรม ดังนี้
 การกาหนดและวิเคราะห์ปัญหา
 การเขียนผังงานและซูโดโค๊ด
 การเขียนโปรแกรม
 การทดสอบและแก้ไขโปรแกรม
 การทาเอกสารและบารุ งรักษาโปรแกรม
4
แนะนาภาษาซี
 ภาษาซี เป็ นภาษาที่เป็ นโครงสร้างและใช้ได้กบั งานทัว่ ไป คาสั่งของภาษาซี จะประกอบด้วยพจน์
(term) ซึ่ งจะมี ลกั ษณะเหมื อนกับนิ พจน์ทางพีชคณิ ต และมีส่วนขยายเป็ นคาหลัก (keyword) ใน
ภาษาอังกฤษ เช่น if, else, for, do และ while ดังนั้นภาษาซี เป็ นภาษาระดับสู ง ภาษา อื่นๆ เช่น
ปาสคาล และ ฟอร์แทรน 77 มีลกั ษณะเป็ นโครงสร้างเช่นกัน แต่ภาษาซี ก็มี คุณสมบัติพิเศษเพิ่มขึ้น
นั่นคื อ มันสามารถใช้ง านในระดับ ต่ า (low-level) ได้ ดัง นั้น มันจึ ง เปรี ย บเหมื อ นสะพานเชื่ อ ม
ภาษาเครื่ องเข้ากับภาษาระดับสู ง จากจุดนี้ ทาให้ภาษาซี สามารถใช้กบั งานด้านโปรแกรมระบบ
(system programming) เช่น เขียนโปรแกรมระบบปฏิบตั ิการ (operating system) หรื อใช้กบั งานทัว่
ๆ ไป เช่ น เขี ยนโปรแกรมแก้ปัญหาทางคณิ ตศาสตร์ ที่ ซับซ้อ น หรื อ เขี ย นโปรแกรมเพื่ อ ออก
ใบเสร็จให้กบั ลูกค้า เป็ นต้น
 คุณสมบัติที่สาคัญอี กประการหนึ่ งของภาษาซี ก็คือ โปรแกรมภาษาซี สามารถ ย้ายไปทางานใน
เครื่ องอื่นได้ง่ายกว่าภาษาระดับสู งอื่นๆ ที่เป็ นเช่ นนี้ เพราะภาษาซี ได้แยกส่ วนที่ข้ ึ นอยู่กบั เครื่ อง
คอมพิวเตอร์ไปเป็ นไลบรารี ฟั งก์ชนั ดังนั้นโปรแกรมภาษาซี ทุกๆ โปรแกรม ก็จะทางานโดยเรี ยก
ฟั งก์ชนั จากไลบรารี ฟังก์ชนั มาตราฐาน และมีวิธีการเขียนใช้งานแบบเดี ยวกัน ดังนั้น โปรแกรม
ภาษาซีท้งั หมดจึงสามารถนามาใช้งานบนเครื่ องคอมพิวเตอร์ ที่ แตกต่างกันได้ โดยแก้ไขโปรแกรม
5
เพียงเล็กน้อย หรื ออาจจะไม่ตอ้ งแก้ไข เลยก็ได้
ประวัติภาษาซี
 ภาษาซี พฒ
ั นาขึ้นมาในปี 1970 โดย Dennis Ritchie แห่ง Bell Telephone Laboratories, Inc.
(ปั จจุบนั คือ AT&T Bell Laboratories) ซึ่ งภาษาซี น้ นั มี ต้นกาเนิดมาจากภาษา 2 ภาษา คือ
ภาษา BCPL และ ภาษา B
 ภาษาซี น้ นั ถูกใช้งานอยู่ เพียงใน Bell Laboratories จนกระทัง่ ปี 1978 Brian Kernighan และ
Ritchie นั้นเป็ นที่รู้จกั กันในชื่อของ "K&R C"
 หลังจากที่ ตี พิมพ์ขอ้ กาหนดของ K&R นัก คอมพิ วเตอร์ มือ อาชี พ รู ้ สึก ประทับ ใจกับ
คุณสมบัติที่น่าสนใจของภาษาซี และเริ่ มส่ งเสริ มการใช้งานภาษาซี มากขึ้น ในกลางปี 1980
ภาษาซี ก็กลายเป็ นภาษาที่ได้รับความนิ ยม โดยทัว่ ไป มีการพัฒนาตัวแปลโปรแกรม และ
ตัวแปลคาสั่งภาษาซี จานวนมาก สาหรับคอมพิวเตอร์ ทุกขนาด และภาษาซี ก็ถูกนามาไปใช้
สาหรับพัฒนา โปรแกรมเชิงพาณิ ชย์เป็ นจานวนมาก ยิง่ ไปกว่านั้นโปรแกรมเชิงพาณิ ชย์ที่
เคย พัฒนาขึ้นมาโดยภาษาอื่น ก็ถูกเขียนขึ้นใหม่โดยใช้ภาษาซี เนื่ องจากความ ต้องการใช้
ความได้เปรี ยบทางด้านประสิ ทธิภาพ และความสามารถในการเคลื่อนย้ายได้ของภาษาซี
6
โครงสร้างโปรแกรมภาษาซี
Preprocessor directive
int main(void)
{
Global Declarations
Local Declarations
main function
Statements ;
User define functions
}
int function ()
{
User define functions
โครงสร้ างภาษาซีประกอบด้ วยหลายส่ วน แต่
ในการเขียนไม่ จาเป็ นจะต้ องเขียนทุกส่ วน
Local Declarations
Statements ;
}
7
หลักการตัง้ ชื่อ (Identifier)
ไอเดนติไฟเออร์ (Identifier)
ไอเดนติฟายเออร์ เป็ นชื่อที่ผใู ้ ช้กาหนดขึ้นในโปรแกรม เช่น ชื่อค่าคงที่
ชื่อตัวแปร ชื่อฟังก์ชนั เป็ นต้น






ต้องขึ้นต้นด้วยตัวอักษรภาษาอังกฤษ (ตัวใหญ่หรื อเล็กก็ได้) หรื อขีดล่าง ‘_’
ตามด้วยตัวอักษรภาษาอังกฤษ ตัวเลข หรื อขีดล่าง (Underscore) ‘_’
ไม่มีช่องว่างหรื อตัวอักษรพิเศษอื่นๆ เช่น ‘!’, ‘@’, ‘#’, ‘$’, ‘%’, ‘^’ เป็ นต้น
ตัวพิมพ์ใหญ่และเล็กจะเป็ นคนละตัวกันเช่น NAME, name, Name, NamE
ห้ามซ้ ากับคาสงวน Reserved Words ของภาษา C
ห้ามตั้งชื่อซ้ ากับ Function ที่อยูใ่ น Library ของภาษา C
8
คาสงวน Reserved 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
9
การใช้ Preprocessor Directive






ทุกโปรแกรมต้องมี
ใช้เรี ยกไฟล์ที่โปรแกรมใช้ในการทางานร่ วมกัน
ใช้กาหนดค่าคงที่ให้กบั โปรแกรม
ใช้กาหนดเงื่อนใขในการคอมไพล์ให้กบั โปรแกรม
เริ่ มต้นด้วยเครื่ องหมาย #
ที่เราจะเรี ยนกันในหลักสู ตรมี 2 directives คือ


#include ใช้สาหรับเรี ยกไฟล์ที่โปรแกรมใชในการทางาน
#define ใช้สาหรับกาหนดมาโครที่ให้กบั โปรแกรม
#include
#define
#undef
#if
#ifdef
#ifndef
#else
#elif
#endif
#line
#error
#pragma
10
การใช้ #include
วิธีการใช้งาน
#include <ชื่อไฟล์> หรื อ #include “ชื่อไฟล์”
ตัวอย่าง
#include <stdio.h> (เป็ นการเรี ยกใช้ไฟล์ stdio.h เข้ามาในโปรแกรม)
#include <mypro.h> (เป็ นการเรี ยกใช้ไฟล์ mypro.h เข้ามาในโปรแกรม)
< > จะเรี ยกไฟล์ใน directory ที่กาหนดโดยตัวคอมไพล์เลอร์
“ ” จะเรี ยกไฟล์ใน directory ทีทางานอยูใ่ นปั จจุบนั
11
การใช้ #define
วิธีการใช้งาน
#define ชื่อ ค่าที่ตอ้ งการ
ตัวอย่าง
#define START 10 (กาหนดค่า START = 10)
#define A 3*5/4
(กาหนดค่า A=3*5/4)
#define pi 3.14159 (กาหนดค่า pi = 3.14159)
#define sum(a,b) a+b
(กาหนดค่า sum(ตัวแปรที่1, ตัวแปรที่2) = ตัวแปรที่1+ตัวแปรที่2
12
ส่วนประกาศ (Global Declarations)
 เป็ นการประกาศตัว แปรเพื่ อ ใช้งานในโปรแกรม โดยตัว แปรนั้นสามารถ
ใช้ได้ในทุกที่ในโปรแกรม
 เป็ นส่ วนที่ใช้ในการประกาศ Function Prototype ของโปรแกรม
 ส่ วนนี้ในบางโปรแกรมอาจจะไม่มีกไ็ ด้
ตัวอย่าง
int summation(float x, float y) ;
int x,y ;
float z=3;
(ประกาศ function summation)
(กาหนดตัวแปร x,y เป็ นจานวนเต็ม)
(กาหนดตัวแปร z เป็ นจานวนจริ ง)
13
ส่วนประกาศ (Global Declarations)
ตัวอย่าง
#include <stdio.h>
int feet,inches;
int main()
{
feet = 6;
inches = feet * 12;
printf("Height in inches is %d",inches);
return(0);
}
ผลการทางาน
Height in inches is 72
14
ฟั งก์ชนั หลักของโปรแกรม (Main Function)
 ส่ วนนี้ ทุกโปรแกรมจะต้องมี โดยโปรแกรมหลักจะเริ่ มต้นด้วย main() และตาม
ด้วยเครื่ องหมายปี กกาเปิ ด ‘{’ และปี กกาปิ ด ‘}’
 ระหว่างปี กกาจะประกอบไปด้วยคาสั่ง(Statement) ต่างๆ ที่จะให้โปรแกรมทางาน
 แต่ละคาสัง่ จะต้องจบด้วยเซมิโคลอน ‘;’ (Semicolon)
 ต้องมี return(); เสมอ และต้องใส่ เลขจานวนเต็ม เช่น 0 = Success , 1 = Failure
#include <stdio.h>
int main()
{
...
Statement ;
return(int value);
}
15
ฟั งก์ชนั หลักของโปรแกรม (Main Function)
ตัวอย่าง
#include <stdio.h>
int feet,inches;
int main()
{
feet = 6;
inches = feet * 12;
printf("Height in inches is %d",inches);
return(0);
}
ผลการทางาน
Height in inches is 72
16
การสร้างฟั งก์ชนั ใช้งานเอง (User Define Function)
 สร้างฟังก์ชนั หรื อคาใหม่ ขึ้นมาใช้งานตามที่เราต้องการ
 ระหว่างปี กกาจะประกอบด้วยคาสั่ง(Statement) ต่างๆ ที่จะให้ฟังก์ชนั ทางาน
 สามารถเรี ยกใช้ภายในโปรแกรมได้ทุกที่
#include <stdio.h>
int function();
int main(void)
{
...
Statement ;
return(int value);
}
int function()
{
Statement ;
...
return (int value);
}
17
การสร้างฟั งก์ชนั ใช้งานเอง (User Define Function)
ตัวอย่าง
#include <stdio.h>
int FtoI(int);
int feet,inches;
int main()
{
feet = 6;
inches = FtoI(feet);
printf("Height in inches is %d",inches);
return(0);
}
int FtoI(int f)
ผลการทางาน
{
Height in inches is 72
return f*12;
}
18
การใช้คาอธิบาย (Program Comments)
 ใช้เขียนส่ วนอธิ บายโปรแกรม (คอมเมนต์)
 ช่วยให้ผศู ้ ึกษาโปรแกรมภายหลังเข้าใจการทางานของโปรแกรม
 ส่ วนของคาอธิ บายจะถูกข้ามเมื่อคอมไพล์โปรแกรม
การเขียนส่ วนอธิบายโปรแกรม (comments)ทาได้ 2 วิธีคือ
// สาหรับคาอธิบายไปจนถึงท้ายบรรทัด
และ
/* คาอธิบาย */ ลักษณะการใช้เหมือนวงเล็บนั้นเอง
19
การใช้คาอธิบาย (Program Comments)
ตัวอย่าง
#include <stdio.h>
//
int main()
//
{
//
int feet,inches;
feet = 6;
//
inches = feet * 12;
//
printf("Height in inches
return(0);
//
}
//
Change Feet to Inches
by CPE RMUTT
Start
feet  6
inches  feet * 12
is %d", inches);
write inches
Stop
ผลการทางาน
Height in inches is 72
20
การใช้ printf()
เป็ นคาสั่งที่ใช้ในการแสดงผลออกทางจอภาพ โดยมีรูปแบบการใช้งานดังนี้
printf(“control หรือ format string”, variable list …);
control หรือ format string
เป็ นส่ วนที่ ใ ส่ ข้ อ ความที่ จ ะแสดงผล และส่ วนควบคุ ม ลั ก ษณะการ
แสดงผล รวมทั้งบอกตาแหน่ งที่ตวั แปรจะแสดงผล
variable list
เป็ นตัวแปรที่ต้องการจะแสดงผล ในกรณี ที่ต้องการแสดงข้ อ ความ ไม่
จาเป็ นต้ องมีส่วนนี้
21
ตัวอย่ างโปรแกรมที่ 1
โปรแกรม
ผลการทางาน
22
ตัวอย่ างโปรแกรมที่ 2
โปรแกรม
ผลการทางาน
23
ตัวอย่ างโปรแกรมที่ 3
โปรแกรม
Backslash n ขึน้ บรรทัดใหม่
#include <stdio.h>
int main() {
printf("Welcome to RMUT\n");
printf(" Department of Computer Engineering");
return(0);
}
ผลการทางาน
Welcome to RMUT
Department of Computer Engineering
24
การใช้ Control ด้วย Backslash
จากตัวอย่ างที่ 3 จะเห็นได้วา่ หากต้องการให้แสดงผลข้ามบรรทัดจะต้องเพิ่ม \n
ลงไป เรี ยกว่า backslash นอกจากนี้ยงั มีตวั อื่นๆ เช่น
\n
ขึ้นบรรทัดใหม่
\t
เว้นระยะ 1 tab
\xhh
ใส่ ตวั อักษร hh เมื่อ hh เป็ นเลขฐานสิ บหก
เช่น 41 = 'A', 42 = 'B'
\a
ส่ งเสี ยงปิ้ บ
\\
แสดง \
\"
แสดง "
25
ตัวอย่ างโปรแกรมที่ 4
โปรแกรม
#include <stdio.h>
int main() {
printf("%d
return(0);
}
%5.2f
%s", 12, 20.3, "Example");
ผลการทางาน
12
%d
20.30
Example
%5.2f
%s คือ รหัสควบคุม
26
รหัสควบคุมลักษณะ (Format String)
%d
พิมพ์จานวนเต็มฐานสิ บ
%u
พิมพ์เลขไม่มีเครื่ องหมาย
%f
พิมพ์เลขทศนิยม
%e
พิมพ์ในรู ปจานวนจริ งยกกาลัง
%c
พิมพ์ตวั อักษรตัวเดียว
%s
พิมพ์ชุดตัวอักษร (String)
%%
พิมพ์เครื่ องหมาย %
%o
พิมพ์เลขฐานแปด
%x
พิมพ์เลขฐานสิ บหก
27
ตัวอย่ างโปรแกรมที่ 5
โปรแกรม
#include <stdio.h>
int main() {
int x ;
x=65 ;
printf("%d
return(0);
}
%c
%u
%o
101
41
%x", x, x, -1, x, x);
ผลการทางาน
65
A
65535
65535 คือเลข -1 ของตัวแปรแบบ int จะกล่าวในบทที่ 3
28
การจัดการหน้าจอด้วยรหัสควบคุมลักษณะ
ในกรณี ที่ ต ้ อ งการจั ด การหน้ า จอแสดงผลสามารถใช้ ต ั ว เลขร่ วมกั น กั บ
รหัสควบคุมได้ เช่น
%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
29
คาถามเกี่ยวกับ printf()
จากส่ วนของโปรแกรม
yards = 8;
feet = yards * 3;
printf(“%d yards is”, yards);
printf(“%d feet \n”, feet);
ผลการทางาน คือ ?
8 yards is24 feet
30
คาถามเกี่ยวกับ printf()
จากส่ วนของโปรแกรม
yards = 8;
feet = yards * 3;
printf(“%d yards is \n”, yards);
printf(“%d feet”, feet);
ผลการทางาน คือ ?
8 yards is
24 feet
31
การใช้ scanf()
เป็ นคาสั่งที่ใช้ในการรับค่า โดยมีรูปแบบการใช้งานดังนี้
scanf(“format string”, address list …);
format string
เป็ นส่ วนทีใ่ ช้ ในการใส่ รูปแบบของการรับข้ อมูล
address list
เป็ นตาแหน่ งของตัวแปรทีต่ ้ องการจะเก็บข้ อมูล
32
ตัวอย่ างโปรแกรมที่ 6
โปรแกรม
#include <stdio.h>
int main() {
int x ;
scanf("%d",&x);
printf("%d %c", x, x);
return(0);
}
ผลการทางาน
66
66
B
65
65
A
33
ตัวอย่ างโปรแกรมที่ 9 (Interactive)
#include <stdio.h>
int 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(0);
}
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
34
จบโครงสร้างภาษาซีเบื้องต้น
Question ?
35