บทที่ 2 ภาษาซี...
TRANSCRIPT
1
บทท่ี 2
บทท่ี 2 ภาษาซี การเขียนโปรแกรมเบ้ืองต้น
และคาํส่ังแสดงผล
ETT1007 Computer Programming
2
วตัถุประสงค์
• สามารถเขียนโปรแกรมภาษาซีอยา่งง่าย ๆ ได้
• สามารถแสดงขอ้ความออกทางจอภาพได้
• สามารถแสดงขอ้มูลชนิดต่างๆ ออกทางจอภาพได้
• สามารถกาํหนดรูปแบบการแสดงขอ้มูลออกทางจอภาพได้
3
โครงสร้างโปรแกรมภาษาซี (1)
#include<file.h>type function_name(type);type variable;int main(){
type variable;statement-1;...statement-n;return 0;
}type function_name(type variable){
statement-1;...statement-n;return(var);
}
พรีโปรเซสเซอร์ไดเร็คทีฟ
ตวัแปรชนิดโกบอล
ฟังกช์นัหลกั
ฟังกช์นัยอ่ย
ส่วนตัวโปรแกรม
ส่วนหัวโปรแกรม
ตวัแปรชนิดโลคอล
คาํสัง่
ฟังก์ชนัโพรโทรไทพ์
4
โครงสร้างโปรแกรมภาษาซี (2)
• ส่วนหวัโปรแกรม (Header Program)
– พรีโปรเซสเซอร์ไดเร็คทีฟ (Preprocessor Directive)
#include
#define
– ฟังกช์นัโพรโทรไทพ์ (Function Prototype Declaration)
– ตวัแปรชนิดโกบอล (Global Variable Declaration)
5
2.1 โครงสร้างโปรแกรมภาษาซี (3)
• ส่วนตัวโปรแกรม (Body Program)
– ฟังกช์นัหลกั (Main Function)
• ตวัแปรชนิดโลคอล (Local Variable Declaration)
• คาํสัง่ (Statement)
– ฟังกช์นัอ่ืน ๆ (Functions)
• คาํอธิบายโปรแกรม (Comment Program)
6
2.2 ฟรีโปรเซสเซอร์ไดเร็คทฟี
• ส่วนประมวลผลก่อน เป็นส่วนท่ีสัง่ใหค้อมไพเลอร์เตรียมการ
ทาํงานท่ีกาํหนดไว ้ก่อนท่ีจะทาํงานในฟังกช์นัหลกั
ใหโ้ปรแกรมดึงคาํสัง่จาก file-name.h ใน Include Directory
ใหโ้ปรแกรมดึงคาํสัง่จาก file-name.h ใน Current Directory
file-name คือช่ือไฟลน์ามสกลุ h
#include<file-name.h>
#include"file-name.h"
7
ตัวอย่างคาํส่ังฟรีโปรเซสเซอร์ไดเร็คทฟี
#include<stdio.h>
ทาํการเรียกไฟล ์stdio.h เพ่ือทาํใหส้ามารถใชค้าํสัง่ทัว่ไปได้
#include<conio.h>
ทาํการเรียกไฟล ์conio.h เพ่ือทาํใหส้ามารถใชค้าํสัง่จดัการหนา้จอ และคาํสัง่
รับและแสดงผลเพ่ิมเติม
#include<math.h>
ทาํการเรียกไฟล ์math.h เพ่ือทาํใหส้ามารถใชค้าํสัง่เก่ียวกบัคณิตศาสตร์ได้
#include<string.h>
ทาํการเรียกไฟล ์string.h เพ่ือทาํใหส้ามารถใชค้าํสัง่จดัการเก่ียวกบัขอ้ความได้
8
ฟังก์ชันหลกั
• ฟังก์ชันหลักเป็นฟังก์ชันท่ีโปรแกรมภาษาซีต้องมีอยู่เสมอ
เพราะคอมไพเลอร์ของภาษาซีจะเร่ิมตน้การทาํงานจากฟังก์ชนั
หลกั
• ตวัอยา่งการเขียนฟังกช์นัหลกัท่ีไม่มีการทาํงานใดๆ
int main(void){
return(0);}
int main(){
return 0;}
9
กฎเกณฑ์การใช้คาํส่ังในภาษาซี
• ใชเ้คร่ืองหมาย semi colon ; เป็นจุดส้ินสุดคาํสัง่
• ใชอ้กัษรตวัเลก็สาํหรับเรียกใชค้าํสัง่ (statement)
• ใชเ้คร่ืองหมาย comma , สาํหรับคัน่ตวัแปร และพารามิเตอร์
• หากคําสั่งใดมีคําสั่งส่วนย่อยภายในหลาย ๆ ค ําสั่ง ให้ใช้
เคร่ืองหมายปีกกา { } สาํหรับกาํหนดขอบเขต
10
2.3 การแสดงผลด้วยคาํส่ัง printf
• การเขียนโปรแกรมจาํเป็นตอ้งมีการแสดงผล เพ่ือให้ผูใ้ช้งาน
ทราบว่าโปรแกรมสามารถทาํงานอะไร จาํเป็นต้องป้อนค่า
อะไรบ้าง และเม่ือโปรแกรมทาํงานเสร็จ ผลลัพธ์ท่ีได้เป็น
อยา่งไร
• คาํสั่งท่ีใช้สําหรับการแสดงผลในภาษาซีมีหลายคาํสั่ง แต่ท่ี
สามารถใชง้านไดค้รอบคลุมและนิยมใชก้นั คือ คาํสัง่ printf
11
รูปแบบของคาํส่ัง printf
format-string คือรูปแบบของขอ้ความซ่ึงจะประกอบดว้ย
ขอ้ความธรรมดา, ค่ารหสั ASCII และ ส่วน
แสดงชนิดขอ้มูล โดย format-string จะอยูใ่น
เคร่ืองหมาย Double quote " "
data-list คือช่ือขอ้มูล หรือตวัแปรท่ีจะทาํการแสดงผล
ตามส่วนแสดงชนิดขอ้มูลใน format-string
printf (format-string, data-list);
หมายเหตุ คาํส่ัง printf ต้องเรียกใช้ Preprocessor Directive #include<stdio.h>
12
ตัวอย่างการใช้งานคาํส่ัง printf ทีไ่ม่ถูกต้อง
13
ตัวอย่างการใช้งานคาํส่ัง printf ทีถู่กต้อง
#include<stdio.h>int main(){
printf ("Hello World!");return 0;
}
Hello World!
14
รูปแบบของข้อความในคาํส่ัง printf
• ขอ้ความธรรมดา เป็นส่วนท่ีแสดงตวัอกัษร ตวัเลขออกโดยตรง
• ค่ารหสั ASCII เป็นส่วนท่ีควบคุมรูปแบบการแสดงผล เช่น การ
จดัยอ่หนา้ การข้ึนตน้บรรทดัใหม่ เป็นตน้
• ส่วนแสดงชนิดขอ้มูล เป็นการกาํหนดรูปแบบของชนิดขอ้มูลท่ี
จะแสดงผลขอ้มูล หรือตวัแปร
– ส่วนแสดงชนิดขอ้มูลแบบปกติ
– ส่วนแสดงชนิดขอ้มูลท่ีกาํหนดรูปแบบการแสดงผล
15
ข้อความธรรมดา
• การแสดงขอ้ความธรรมดาเป็นการใชค้าํสัง่ printf ใหแ้สดงขอ้ความท่ีตอ้งการออกทางจอภาพ โดยจะอยูใ่นส่วนของ format-string ในคาํสัง่ (อยูใ่นเคร่ืองหมาย Double quote " ")
• เช่น คาํสัง่ในตวัอยา่งโปรแกรมท่ีผา่นมา
จะทาํการแสดงขอ้ความ Hello World! ออกทางจอภาพหลงัจากสัง่ Run โปรแกรม
printf (format-string, data-list);
printf ("Hello World!");
16
Hello World!This is my first Program.I am a programmer.
ตัวอย่างการใช้งานคาํส่ัง printf หลายๆคาํส่ัง
Hello World!This is my first Program.I am a programmer.
#include<stdio.h>#include<conio.h>int main(){
printf ("Hello World!");printf ("This is my first Program.");printf ("I am a programmer.");return 0;
}
17
ค่ารหัส ASCII
• ค่ารหสั ASCII เป็นอกัขระพิเศษท่ีใชง้านในภาษาซี ซ่ึงใชค้วบคุม
การแสดงผลในคาํสัง่ printf ในส่วนของ format-string
ค่ารหัส ASCII การใช้งาน
\t เว้นช่องว่างทุก 1 แท็ป (8 ช่องตวัอกัษร)
\n ขึน้บรรทัดใหม่
\0 เป็นอกัขระว่าง
\' แสดง single quote ออกทางจอภาพ
\" แสดง double quote ออกทางจอภาพ
\\ แสดง backslash ออกทางจอภาพ
18
ตัวอย่างการใช้งานคาํส่ัง printf โดยใช้ค่ารหัส ASCII
#include<stdio.h>int main(){
printf ("Hello World!\n");printf ("This is my first Program.");printf ("\n\tI\'m a programmer.");return 0;
}
Hello World!This is my first Program.
I'm a programmer.
19
ส่วนแสดงชนิดข้อมูล
• ในการเขียนโปรแกรมท่ีมีการประยกุตข้ึ์น เช่นโปรแกรมคาํนวณ
เลข จะตอ้งมีการแสดงผลลพัธ์ของค่าท่ีทาํการคาํนวณ ซ่ึงคาํสั่ง
printf สามารถแสดงผลค่าตวัแปรได ้แต่จะตอ้งเขียนโปรแกรม
ใหมี้ความสมัพนัธ์กนัในส่วนของ format-string และ data-list
– โดยท่ีใน format-string จะมีส่วนแสดงชนิดขอ้มูล
– และใน data-list จะมีขอ้มูล หรือตวัแปรท่ีจะแสดงผล
printf (format-string, data-list);
20
การกาํหนดส่วนแสดงชนิดข้อมูลแบบต่างๆ
ส่วนแสดงชนิดข้อมูล การใช้งาน
%d แสดงผลขอ้มูลชนิดจํานวนเต็ม
%u แสดงผลขอ้มูลชนิดจาํนวนเตม็บวก (ไม่คิดเคร่ืองหมาย)
%o แสดงผลขอ้มูลเป็นเลขฐานแปด
%x แสดงผลขอ้มูลเป็นเลขฐานสิบหก
%f แสดงผลขอ้มูลชนิดจํานวนทศนิยม (6 ตําแหน่ง)
%e แสดงผลขอ้มูลเป็นจาํนวนทศนิยมและอยูใ่นรูปยกกาํลงั
%c แสดงผลขอ้มูลชนิดอักขระ
%s แสดงผลขอ้มูลชนิดข้อความ
%p แสดงผลขอ้มูลชนิดตัวช้ีตําแหน่ง
21
ตัวอย่างการใช้งานคาํส่ัง printf แสดงผลข้อมูล
#include<stdio.h>int main(){
printf ("My name is : %s\n","Kmitl");printf ("My point : %d\n",10+40+49);printf ("Grade : %c\n",'A');printf ("GPA : %f",3.99);return 0;
}
My name is :KmitlMy point : 99Grade : AGPA : 3.990000
22
การกาํหนดรายช่ือตัวแปรในคาํส่ัง printf
• การแสดงผลตวัแปรโดยใชค้าํสั่ง printf สามารถใชง้านโดยการ
ใส่ขอ้มูล หรือช่ือตวัแปรในส่วนของ data-list
• หากไม่ตอ้งการแสดงผลตวัแปร ไม่ตอ้งมีส่วนของ data-list
• หากต้องการแสดงผลข้อมูล หรือตัวแปรมากกว่าหน่ึงตัวใน
คาํสัง่ใหใ้ช ้เคร่ืองหมาย comma , สาํหรับคัน่ช่ือตวัแปร โดยจะ
ทาํการแสดงผลตามลาํดบัตวัแปร และส่วนการแสดงชนิดขอ้มูล
23
รายช่ือตัวแปรในคาํส่ัง printf
printf ("...%?...", data);
printf ("%? %? ... %?", data-1, data-2, ..., data-n);
...data...
data-1 data-2 ... data-n
printf ("...%d...",19);
...19...
printf ("%d-%d-%d",19,1,1980);
19-1-1980
ตัวอย่
างตัว
อย่าง
24
ตัวอย่างการใช้งานคาํส่ัง printf แสดงผลข้อมูลหลายตัว-1
#include<stdio.h>int main(){
printf ("Age = %d, GPA = %f\n",17,3.75);printf ("Programming: %f\nMechanics: %f",4.0,3.5);return 0;
}
Age = 17, GPA = 3.750000Programming: 4.000000Mechanics: 3.5000000
25
ตัวอย่างการใช้งานคาํส่ัง printf แสดงผลข้อมูลหลายตัว-2
#include<stdio.h>int main(){
printf ("Subject : %s(%d)\n","Programming",2552);printf ("Point : %d\nGrade : %c",99,'A');return 0;
}
Subject : Programming(2552)Point : 99Grade : A
26
ส่วนแสดงชนิดข้อมูลทีก่าํหนดรูปแบบการแสดงผล (1)
• เป็นการจองพ้ืนท่ีหนา้จอจาํนวน m ตวัอกัษร แลว้แสดงผล data
ชิดด้านขวาของพ้ืนท่ีส่วนท่ีจองไว ้โดยชนิดขอ้มูลตาม ? (หาก
ความยาวเกินส่วนท่ีจองไวก้จ็ะเล่ือนออกไป)
• เป็นการจองพ้ืนท่ีหนา้จอขนาด m ตวัอกัษร แลว้แสดงผล data
ชิดด้านซ้ายของพ้ืนท่ีส่วนท่ีจองไว ้โดยชนิดขอ้มูลตาม ?
printf ("%m?",data);
printf ("%-m?",data);
27
ตัวอย่างการใช้งานคาํส่ัง printf โดยมกีารกาํหนดรูปแบบ-1
#include<stdio.h>int main(){
printf ("123456789012345678901234567890");printf ("\n%20d*",46);printf ("\n%-20d*",46);printf ("\n%3d*",46);printf ("\n%3d*",2550);return 0;
}
12345678901234567890123456789046*
46 *46*2550*
28
ตัวอย่างการใช้งานคาํส่ัง printf โดยมกีารกาํหนดรูปแบบ-2
#include <stdio.h>int main(){
printf ("123456789012345678901234567890");printf ("\n%20c*",'c');printf ("\n%-20c*",'c');printf ("\n%10s*","Pro");printf ("\n%10s*","Programming");return 0;
}
123456789012345678901234567890c*
c *Pro*
Programming*
29
2.4 ส่วนแสดงชนิดข้อมูลทีก่าํหนดรูปแบบการแสดงผล (2)
• เป็นการกาํหนดใหแ้สดงจาํนวนทศนิยม n ตาํแหน่ง สาํหรับ %f
หรือแสดงอกัขระจาํนวน n ตวั สาํหรับ %s
• เป็นการจองพ้ืนท่ีหนา้จอขนาด m ตวัอกัษรแลว้แสดงผล data
จาํนวนทศนิยม n ตาํแหน่ง สาํหรับ %f หรือแสดงอกัขระจาํนวน
n ตวั สาํหรับ %s
printf ("%.n?",data);
printf ("%m.n?",data);
30
ตัวอย่างการใช้งานคาํส่ัง printf โดยมกีารกาํหนดรูปแบบ-3
printf ("123456789012345678901234567890");printf ("\n%20s*","programming");printf ("\n%-20s*","programming");printf ("\n%.3s*","programming");printf ("\n%20.3s*","programming");printf ("\n%-20.3s*","programming");
123456789012345678901234567890programming*
programming *pro*
pro*pro *_
31
ตัวอย่างการใช้งานคาํส่ัง printf โดยมกีารกาํหนดรูปแบบ-4
printf ("123456789012345678901234567890");printf ("\n%20f*", 1234.56789);printf ("\n%-20f*", 1234.56789);printf ("\n%.3f*", 1234.56789);printf ("\n%20.3f*", 1234.56789);printf ("\n%-20.3f*", 1234.56789);
1234567890123456789012345678901234.567890*
1234.567890 *1234.568*
1234.568*1234.568 *_
32
2.5 คาํอธิบายโปรแกรม (Comment)
• คาํอธิบายโปรแกรมเป็นส่วนท่ีเพ่ิมในโปรแกรมเพ่ือช่วยให้ผูท่ี้
เขียน หรือผูท่ี้อ่านโปรแกรมสามารถเขา้ใจกบัตวัโปรแกรมได้
ง่ายข้ึน
• โดยท่ีค ําอธิบายโปรแกรมน้ีจะไม่มีผลต่อการทํางานของ
โปรแกรม คือเวลาท่ีทาํการคอมไพล์ จะข้ามข้อความท่ีอยู่ใน
ส่วนอธิบายโปรแกรมไป
33
รูปแบบคาํอธิบายโปรแกรม
/* Comment Sentence 1Comment Sentence 2...Comment Sentence n */
/* Comment Sentence */
// Comment Sentence
34
โจทย์ : โปรแกรมแสดงผลข้อมูลส่วนตัว
• จงเขียนโปรแกรมแสดงผล ช่ือ-นามสกลุ อายุ
– ตวัอยา่งการแสดงผลName : KmitlSurname : EngineeringAge : 46
35
โจทย์ : โปรแกรมรายได้
• จงเขียนโปรแกรมแสดงรายไดต่้อเดือน แลว้แสดงวา่ต่อสปัดาห์
คิดเป็นเท่าใด (ทศนิยม 2 ตาํแน่ง) ต่อวนัคิดป็นเท่าใด (ทศนิยม 3
ตาํแหน่ง)
– ตวัอยา่งการแสดงผล
Salary : 6500Money/Week : 1625.00Money/Day : 232.143
36
โจทย์ : โปรแกรมแสดงเกรด
• จงเขียนโปรแกรมแสดงผล เกรดวิชา Programming, Drawing,
Mechanics, Math1 พร้อมแสดงเกรดเฉล่ีย (ทศนิยม 2 ตาํแหน่ง)
– ตวัอยา่งการแสดงผล
Programming : ADrawing : B+Mechanics : B+Math : BGPS : 3.50
คาํถามท้ายบท
1. แสดงผลของโปรแกรมต่อไปนี้
#include<stdio.h>int main(){
/* float radius, pi, area;pi = 22/7; // pi = 3.14;printf ("Enter Radius of Circular : ");scanf ("%f",&radius);area = pi * radius * radius; */printf (“Programming Language”,2015);return 0;
}
37
คาํถามท้ายบท (ต่อ)
2. จงเขียนส่วนของโปรแกรมให้แสดงผลดังต่อไปนี้
03\09\2015Faculty of Industrial TechnologySuan Sunandha Rajabhat University, Bangkok, Thailand.
3.จงเขียนส่วนของโปรแกรมให้แสดงผลตามเง่ือนไขต่อไปนี้
บรรทัดท่ี 1 แสดง รหัสประจําตัว นศ.
บรรทัดท่ี 2 แสดง ช่ือ นามสกุล
บรรทัดท่ี 3 แสดง วนั/เดือน/ปี เกิด
บรรทัดท่ี 8 แสดงข้อความ http://www.el.ssru.ac.th
ชิดขอบขวาของบรรทัด
บรรทัดท่ี 10 แสดงข้อความ Bye Bye ตรงกลางบรรทัด 38