สารสนเทศ10
โครงสร้างภาษาc
คำศัพท์ของภาษา C
โดยปกติแล้วโปรแกรมของผู้เริ่มต้นเป็นโปรแกรมที่เรียกว่า "Hello word" ซึ่งจะแสดงคำว่า "Hello World!" ออกทางจอคอมพิวเตอร์ของคุณ มันเป็นโปรแกรมที่ง่ายที่สุดที่จะแสดงให้นักพัฒนามือใหม่ได้เห็น มาดูว่ามันเป็นอย่างไร
#include <stdio.h>
int main ()
{
printf ("Hello word!");
return 0;
}
โปรแกรมนี้เป็นโปรแกรมเพื่อแสดงข้อความอย่างง่าย "Hello word!" ออกทางหน้าจอ เราได้ใช้ฟังก์ชันต่างๆ จากไลบรารี่ stdio.h ของภาษา C ที่สามารถให้เราทำสิ่งต่างๆ ได้ แสดงข้อความออกทางจอภาพหรือรับค่าจากคีย์บอร์ด และคุณจะได้เรียนในบทอื่นต่อไป สำหรับบทเรียนภาษา C นี้
Hello word!
นี่เป็นผลลัพธ์การทำงานของโปรแกรมซึ่งจะแสดงผลข้อความ Hello word! ออกทางหน้าจอ คุณสามารถเปลี่ยนเป็นชื่อของคุณเองแล้วดูผลลัพธ์
ฺBlocks
บล็อค คือสิ่งที่กำหนดขอบเขตและควบคุมการทำงานของโปรแกรม ซึ่งจะใช้เครื่องหมาย {
และสิ้นสุดด้วย }
ในภาษา C บล็อคนั้นมีหลายรูปแบบ เช่น บล็อคของฟังก์ชัน บล็อคของคำสั่งควบคุม หรือบล็อคย่อยในโปรแกรม และนอกจากนี้บล็อคยังสามารถซ้อนกันได้ นี่เป็นตัวอย่างของบล็อคในภาษา C
#include <stdio.h>
int sum (int a, int b)
{
return a + b;
}
int main ()
{
int x = 3, y = 4;
if (x < y) {
printf ("%d\n", sum(x, y));
}
printf ("Summation program\n", sum(x, y));
return 0;
}
ในตัวอย่าง เป็นโปรแกรมหาผลรวมของตัวเลขสองจำนวนในภาษา C ในโปรแกรมนั้นประกอบไปด้วย 3 บล็อค คือบล็อคของฟังก์ชัน Main ซึ่งเป็นฟังก์ชันหลักในการทำงานของโปรแกรมซึ่งโปรแกรมจะเริ่มการทำงานที่นี่ บล็อคที่สองเป็นของฟังก์ชัน sum() ซึ่งเป็นฟังก์ชันสำหรับหาผลรวมของตัวเลขที่เรียกโดยฟังก์ชันหลัก และภายในฟังก์ชัน main มีบล็อคคำสั่งเงื่อนไข if เพื่อควบคุมการทำงานของโปรแกรมอยู่ภายใน
#include <stdio.h>
ในภาษา C คำสั่ง #include
ใช้สำหรับนำเข้าโค้ดจากไฟล์อื่นเข้ามาใช้งานในโปรแกรม โดยปกติแล้วเราได้นำเข้าชุดไลบรารี่ stdio.h ของภาษา C ซึ่งประกอบไปด้วยฟังก์ชันต่างๆ ที่จำเป็นในการเขียนโปรแกรม เช่น ฟังก์ชันสำหรับแสดงผลออกทางหน้าจอ หรือรับค่าจากคีย์บอร์ด เป็นต้น คุณสามารถสร้างไฟล์ .h ของคุณเองได้เพื่อนำมาใช้ในโปรแกรม
{
และสิ้นสุดด้วย }
ในภาษา C บล็อคนั้นมีหลายรูปแบบ เช่น บล็อคของฟังก์ชัน บล็อคของคำสั่งควบคุม หรือบล็อคย่อยในโปรแกรม และนอกจากนี้บล็อคยังสามารถซ้อนกันได้ นี่เป็นตัวอย่างของบล็อคในภาษา C#include
ใช้สำหรับนำเข้าโค้ดจากไฟล์อื่นเข้ามาใช้งานในโปรแกรม โดยปกติแล้วเราได้นำเข้าชุดไลบรารี่ stdio.h ของภาษา C ซึ่งประกอบไปด้วยฟังก์ชันต่างๆ ที่จำเป็นในการเขียนโปรแกรม เช่น ฟังก์ชันสำหรับแสดงผลออกทางหน้าจอ หรือรับค่าจากคีย์บอร์ด เป็นต้น คุณสามารถสร้างไฟล์ .h ของคุณเองได้เพื่อนำมาใช้ในโปรแกรมComment
Comment เป็นส่วนของโค้ดที่ไม่มีผลต่อการทำงานของโปรแกรม มันถูกใช้เพื่ออธิบายโปรแกรมสำหรับมนุษย์เข้าใจ ในภาษา C เราสามารถคอมเม้นท์ได้สองวิธี คือ การคอมเม้นท์แบบหนึ่งบรรทัดและแบบหลายบรรทัด
// Single line comment example
#include <stdio.h>
int main ()
{
// This is my comment
printf ("Hello C language");
return 0;
}
ในตัวอย่างเป็นการคอมเม้นท์แบบหนึ่งบรรทัด เราจะใช้เครื่องหมาย slash สองอัน (//) และตามด้วยสิ่งที่เราต้องการคอมเม้นท์ ในตัวอย่างเราได้สร้างคอมเม้นต์สองอันในโปรแกรม
/* Multiple lines comment example */
#include <stdio.h>
int main ()
{
/* This is my comment
This another line comment */
printf ("Hello C language");
return 0;
}
คอมเม้นท์อีกแบบหนึ่งคือการคอมเม้นท์หลายบรรทัด มันจะละเว้นทุกอย่างหลังจากการปรากฏครั้งแรกของเครื่องหมาย slash star (/*) และสิ้นสุดที่ star slash (*/)
Semicolon
เซมิโคลอน (Semicolon) (;) เป็นสัญลักษณ์ที่ใช้เพื่อแบ่งแยกคำสั่งภายในโปรแกรม ซึ่งมันหมายถึงการจบคำสั่งนั้นๆ เซมิโคลอนใช้ในภาษาต่างๆ และมันเป็นสิ่งที่บังคับ เพื่อให้ตัวคอมไพเลอร์ของภาษาสามารถแยกแยะคำสั่งในการทำงานได้
int a;
int b = 5; b = 2;
printf ("%d", a+b);
ในตัวอย่างเรามีสี่คำสั่ง บรรทัดแรกเป็นการประกาศตัวแปร บรรทัดที่สองคุณจะเห็นสองคำสังอยู่ในบรรทัดเดียวกันและมันสิ้นสุดด้วยเซมิโคลอน บรรทัดที่สามจะแสดงค่าผลรวมของตัวแปร a และ b
Whitespace
Whitespace คือตัวอักษรหรือเครื่องหมายที่ใช้แบ่งแยกคำสั่งและ Token ในโค้ดของโปรแกรม ในภาษา C นั้น white space จะประกอบไปด้วย การเว้นวรรค Tab และการขึ้นบรรทัดใหม่ Whitespace ที่เรียงต่อกันเป็นจำนวนมากนั้นไม่มีผลต่อการทำงานของโปรแกรมและคอมไพเลอร์ แต่มันช่วยให้โปรแกรมเมอร์สามารถทำโค้ดให้เป็นระเบียบและสามารถอ่านเข้าใจได้ง่ายขึ้นโดยคนอื่นๆ แต่ Whitespace ยังคงต้องใช้ในบางที่ เช่น ระหว่างคำสั่งของภาษา C และชื่อของตัวแปร เป็นต้น
int a = 1;
int b=2;
int c = 3;
ในตัวอย่าง เป็นการใช้ Whitespace ในรูปแบบต่างๆ ซึ่งถือว่าเป็นรูปแบบการเขียนโปรแกรมของแต่ละคน แต่โดยปกติแล้วเรานิยมใช้ Whitespace ในรูปแบบของการประกาศตัวแปร a
Keywords
keyword เป็นกลุ่มคำที่ถูกสงวนไว้โดยเราไม่สามารถใช้คำเหล่านี้ในการประกาศเป็นชื่อตัวแปร ฟังก์ชัน ซึ่งในโปรแกรมทุกภาษาต่างก็มี keyword
นี่เป็น keyword มาตราฐานในภาษา C
auto | break | case | char |
const | continue | default | do |
double | else | enum | extern |
float | for | goto | if |
int | long | register | return |
short | signed | sizeof | static |
struct | switch | typedef | union |
unsigned | void | volatile | while |
keyword เหล่านี้มีหน้าที่การทำงานที่แน่นอนซึ่งขึ้นกับวัตุประสงค์ของมัน
int, short, float, double
ใช้เพื่อประกาศตัวแปร ในขณะที่ if
for
while
เป็นคำสังในการควบคุมการทำงานของโปรแกรม
ในบทนี้ เราได้พูดถึงเกี่ยวกับคำศัพท์ในภาษา C และโครงสร้างพื้นฐานของภาษาที่เราจะได้นำไปใช้ในบทต่อๆ ไปในภาษา C ตัวแปรเป็นสถานที่สำหรับเก็บข้อมูลในหน่วยความจำ โดยมีชื่อของตัวแปรเพื่อใช้อ้างถึงข้อมูล (identifier) ตัวแปรถูกใช้เพื่อเก็บค่า เราสามารถสร้างตัวแปรได้เป็นจำนวนมากโดยมีชื่อที่แตกต่างกัน รูปแบบของการประกาศตัวแปรในภาษา C คือ:
type identifier;
type identifier = value;
type เป็นประเภทของข้อมูลที่จะเก็บในตัวแปร identifier เป็นที่รู้จักกันในในชื่อของตัวแปร เราใช้ชื่อนี้เพื่ออ้างถึงค่าที่ตัวแปรนั้นเก็บอยู่ values เป็นทางเลือกที่คุณสามารถกำหนดค่าให้กับตัวแปรเมื่อมันถูกสร้าง หรือกำหนดในภายหลังได้ มาดูตัวอย่าง
int a;
float b;
char c = 'A';
ในตัวอย่างเรามีตัวแปร 3 ตัว ตัวแรกประเภทของมันคือ
int
และมีชื่อว่า a
มันใช้เพื่อเก็บค่าเลขจำนวนเต็ม (integer) และเรายังไม่ได้กำหนดค่าใดๆ ให้มัน ดังนั้นค่าเริ่มต้นของตัวแปรเมื่อถูกสร้างขึ้นจะเป็น NULL
ตัวแปรที่สองมีประเภทเป็น float
ตัวแปรนี้จะถูกใช้เพื่อเก็บค่าของจำนวนจริง และตัวแปรที่สามมีประเภทเป็น char
มันถูกใช้เพื่อเก็บสัญลักษณ์หนึ่งตัวใน ASCII code และเรากำหนด 'A' เป็นค่าเริ่มต้นให้กับมันประเภทข้อมูล
ในภาษา C มีประเภทข้อมูลชนิดต่างๆ ที่ให้เราสามารถใช้เพื่อชนิดการกับข้อมูลต่างประเภทกัน เช่น boolean, number, character, object เป็นต้น
ตารางข้างล่างนี้แสดงประเภทข้อมูลทั้งหมดในภาษา C
Data type | Size | Value |
---|---|---|
char | 1 byte | -128 to 127 |
unsigned char | 1 byte | 0 to 255 |
signed char | 1 byte | -128 to 127 |
int | 4 byte | -2,147,483,648 to 2,147,483,647 |
unsigned int | 4 byte | 0 to 4,294,967,295 |
short | 2 byte | -32,768 to 32,767 |
unsigned short | 2 byte | 0 to 65,535 |
long | 4 byte | -2,147,483,648 to 2,147,483,647 |
unsigned long | 4 byte | 0 to 4,294,967,295 |
float | 4 byte | 1.2E-38 to 3.4E+38 |
double | 8 byte | 2.3E-308 to 1.7E+308 |
long double | 10 byte | 3.4E-4932 to 1.1E+4932 |
bool | 1 bit | 0 to 1 |
การประกาศตัวแปร
ตอนนี้เราจะมาเรียนวิธีการประกาศและกำหนดค่าเริ่มต้นให้กับตัวแปรกับตัวอย่างง่ายๆ
#include <stdio.h>
int main () {
int a = 5;
int b;
b = 10;
int c = a + b;
printf("Value of c is %d", c);
return 0;
}
ในตัวอย่าง เราได้สร้างตัวแปรสามตัวคือ a, b และ c ที่มีชนิดข้อมูลเป็น int และเรารวมค่าของ a และ b แล้วเก็บไว้ในตัวแปร c ข้างล่างนี้เป็นผลลัพธ์ของโปรแกรม
Value of c is 15
อย่างไรก็ตาม คุณสามารถประกาศชนิดข้อมูลอื่นได้ ซึ่งมันไม่อยากเกินไป มาดูตัวอย่างเพิ่มเติม
#include <stdio.h>
int main () {
float PI = 3.14;
int r;
scanf("Enter circle radius %d", &r);
double result = 2*PI*r;
printf("Area is %f", result );
return 0;
}
ในตัวอย่าง แสดงให้คุณเห็นการใช้ตัวแปรประเภทต่างๆ ในภาษา C นั้นมีข้อมูลประเภทต่างๆ ที่ให้เราสามารถจัดการกับข้อมูลที่แตกต่างกันออกไป เช่น ตัวเลขจำนวนเต็ม ตัวเลขจำนวนจริง หรือข้อมูลแบบตัวอักษร ซึ่งข้อมูลแต่ละประเภทมีรูปแบบการใช้งานและขนาดของข้อมูลที่แตกต่างกัน ดังแสดงในตารางก่อนหน้า ต่อไปเราจะอธิบายและแสดงตัวอย่างของการใช้ข้อมูลประเภทต่างๆ ในภาษา C สำหรับเขียนโปรแกรม
Boolean
Boolean เป็นประเภทข้อมูลที่มีได้เพียงสองค่าคือจริง (true) และเท็จ (false) ซึ่งเป็นประเภทของตัวแปรสำหรับเก็บค่าที่เป็นไปได้เพียงสองค่า เช่น กลางวันและกลางคืน สีขาวและสีดำ ร้อนและหนาว เป็นต้น ข้อมูลประเภทนี้มักจะใช้สำหรับสร้าง Expression สำหรับเงื่อนไขการทำงานของโปรแกรม ในภาษา C ค่าของ boolean นั้นใช้ 1
หรือ true
สำหรับค่าที่เป็นจริงและ 0
หรือ false
สำหรับค่าที่เป็นเท็จ มาดูตัวอย่างการใช้งาน
#include <stdio.h>
#include <stdbool.h>
int main ()
{
bool male = 1;
bool open = 0;
if (male) {
printf("This is the boy.\n");
}
else {
printf("This is the girl.\n");
}
if(open) {
printf("The door is open.\n");
}
else {
printf("The door is not open.\n");
}
return 0;
}
ในตัวอย่าง เป็นการใช้งานตัวแปรประเภท Boolean ในภาษา C ในตัวแปร male
เราได้กำหนดตัวแปรให้หมายถึงเพศ ถ้าในตัวแปรนั้นมีค่าเป็นจริงจะหมายถึงเป็นผู้ชาย และถ้ามีค่าเป็นเท็จจะหมายถึงเป็นผู้หญิง และตัวแปร open
ใช้สำหรับเก็บสถานะการเปิดและปิดของประตู เมื่อตัวแปรมีค่าเป็นจริงจะหมายถึงประตูถูกเปิดอยู่ และเมื่อค่าในตัวแปรเป็นเท็จก็หมายความว่าประตูนั้นไม่ได้เปิด
This is the boy.
The door is not open.
ในคอมไพเลอร์ของภาษา C ในปัจจุบันนั้น ข้อมูลประเภท bool นั้นถูกนำออกแล้ว ดังนั้นเพื่อใช้ข้อมูลประเภทนี้ เราต้องทำเข้าไลบรารี่จาก stdbool.h สำหรับการใช้งาน และคอมไพลเลอร์ของคุณสนับสนุนเวอร์ชัน C99 ด้วย อย่างไรก็ตามมีหลายวิธีที่จะ implement ข้อมูลประเภท bool ถ้าหากคุณใช้บ่อยๆ ในโปรแกรม หรือสามารถใช้ข้อมูลประเภท Integer แทนได้
1
หรือ true
สำหรับค่าที่เป็นจริงและ 0
หรือ false
สำหรับค่าที่เป็นเท็จ มาดูตัวอย่างการใช้งานmale
เราได้กำหนดตัวแปรให้หมายถึงเพศ ถ้าในตัวแปรนั้นมีค่าเป็นจริงจะหมายถึงเป็นผู้ชาย และถ้ามีค่าเป็นเท็จจะหมายถึงเป็นผู้หญิง และตัวแปร open
ใช้สำหรับเก็บสถานะการเปิดและปิดของประตู เมื่อตัวแปรมีค่าเป็นจริงจะหมายถึงประตูถูกเปิดอยู่ และเมื่อค่าในตัวแปรเป็นเท็จก็หมายความว่าประตูนั้นไม่ได้เปิดChar ตัวอักษร
Char เป็นประเภทข้อมูลที่ใช้สำหรับเก็บตัวอักษรจำนวนหนึ่งตัวอักษรใน ASCII ภาษา C นั้นยังไม่ได้สนับสนุนการเก็บข้อมูลแบบ String แต่คุณสามารถทำแบบนั้นได้ โดยการใช้ char array เพื่อเก็บตัวอักษรที่ต่อกันหลายตัว มาดูตัวอย่างการใช้งานตัวแปรประเภท char ในภาษา C
#include <stdio.h>
int main ()
{
char n = 'A';
printf("%c\n", n);
printf("%d\n", n);
char *name = "marcuscode";
printf("%s", name);
char extension[] = ".com";
printf("%s", extension);
return 0;
}
ในตัวอย่าง เป็นการประกาศตัวแปรประเภท char โดยการเก็บตัวอักษร A ตัวอักษรทุกตัวนั้นมีรหัส ASCII ของมันในฐาน 10 ในภาษา C นั้นข้อมูลประเภท Char และ Integer สามารถแปลงค่าได้โดยวิธี implicit และ Explicit type casting ยกตัวอย่างเช่น เมื่อเราต้องการค่าที่หมายถึง A และสามารถใช้ 65 แทนได้ดังตัวอย่างข้างล่าง
char a = 65; // A
int b = 'A'; // 65
เราสามารถเก็บตัวอักษรที่มากกว่าหนึ่งตัวอักษรได้ โดยเราเรียกว่าอาเรย์ หรือ Array of char ซึ่งสามารถสร้างได้ทั้งในรูปแบบของอาเรย์ปกติและพอยน์เตอร์ นี่เป็นผลลัพธ์การทำงานของโปรแกรมในการใช้งานข้อมูลประเภท Char และ Char อาเรย์
A
65
marcuscode.com
Integer ตัวเลขจำนวนเต็ม
Integer เป็นประเภทข้อมูลแบบจำนวนเต็ม ซึ่งข้อมูลแบบ Integer นั้นจะประกอบไปด้วยหลายขนาด เช่น short int และ long ซึ่งจะเก็บข้อมูลในระยะที่แตกต่างกัน เรามักจะใช้ตัวแปรประเภท Integer สำหรับเก็บข้อมูลที่นับได้ เช่น จำนวนของผลไม้ในตระกร้า จำนวนของคนในห้อง จำนวนของรถที่วิ่งบนท้องถนน เป็นต้น มาดูตัวอย่างการใช้งานตัวแปรประเภท Integer ในภาษา C
#include <stdio.h>
int main ()
{
int apple = 3;
int orange = 2;
int total = apple + orange;
printf("%d apples and %d oranges\n", apple, orange);
printf("I have %d fruits in total", total);
return 0;
}
ในตัวอย่าง เป็นการใช้งานตัวแปรประเภท Integer สำหรับเก็บจำนวนของผลไม้แต่ละชนิด และหาผลรวมของผลไม้ทั้งสองในตัวแปร total
ต่อไปเราจะพูดเกี่ยวกับค่ามากสุดและค่าน้อยสุดของข้อมูลประเภท Integer ในภาษา C ข้างล่างนี้เป็นตัวอย่างของโปรแกรม
#include <stdio.h>
#include <limits.h>
int main ()
{
printf("Maximum value of int: %d\n", INT_MAX);
printf("Minimum value of int: %d\n", INT_MIN);
int a = INT_MAX;
printf("%d\n", a);
a = a + 1;
printf("%d\n", a);
return 0;
}
ในตัวอย่าง เป็นโปรแกรมในการแสดงค่ามากสุดและค่าน้อยสุดของข้อมูลประเภท Integer โดยใช้ค่าคงที่ INT_MAX
และ INT_MIN
ซึ่งเป็นค่าที่กำหนดโดย marco ที่อยู่ในไลบรารี่ limits.hของภาษา C และเราทดสอบการทำงานของโปรแกรมโดยการกำหนดค่ามากสุดให้กับตัวแปร a
และเพิ่มค่าของตัวแปรขึ้นไป 1 ผลลัพธ์ที่ได้คือค่าในตัวแปรนั้นเกิด overflow และเป็นที่น้อยที่สุดของ Integer ซึ่งจะได้ผลลัพธ์ตามข้างล่าง
Maximum value of int: 2147483647
Minimum value of int: -2147483648
2147483647
-2147483648
total
ต่อไปเราจะพูดเกี่ยวกับค่ามากสุดและค่าน้อยสุดของข้อมูลประเภท Integer ในภาษา C ข้างล่างนี้เป็นตัวอย่างของโปรแกรมINT_MAX
และ INT_MIN
ซึ่งเป็นค่าที่กำหนดโดย marco ที่อยู่ในไลบรารี่ limits.hของภาษา C และเราทดสอบการทำงานของโปรแกรมโดยการกำหนดค่ามากสุดให้กับตัวแปร a
และเพิ่มค่าของตัวแปรขึ้นไป 1 ผลลัพธ์ที่ได้คือค่าในตัวแปรนั้นเกิด overflow และเป็นที่น้อยที่สุดของ Integer ซึ่งจะได้ผลลัพธ์ตามข้างล่างFloating-point numbers ตัวเลขจำนวนจริง
Floating-point number เป็นประเภทข้อมูลสำหรับเก็บตัวเลขจำนวนจริง ในภาษา C จะมีอยู่สองประเภทคือ float และ double สิ่งที่แตกต่างกันคือขนาดของพื้นที่ที่ใช้ในการจัดเก็บ และข้อมูลประเภท double นั้นจะเก็บจำนวนของทศนิยมได้มากกว่า ข้อมูลประเภทนี้จะใช้เก็บข้อมูลที่มีค่าเป็นเศษส่วนหรือตัวเลขที่มีเลขหลังจุดทศนิยม ยกตัวอย่างเช่น ข้อมูลการคำนวณทางวิทยาศาสตร์ เป็นต้น มาดูตัวอย่างการประกาศตัวแปรและใช้งาน
#include <stdio.h>
int main ()
{
float pi = 3.14f;
float half = 3 / 2.0f;
float half2 = 3 / 2;
printf("Pi: %f\n", pi);
printf("Half of 3: %f\n", half);
printf("Half of 3: %f\n", half2);
double gravity = 9.807;
double earth_mass = 5.972E24;
double meter = 1E-3;
printf("Earth gravity: %lf m/s^2\n", gravity);
printf("Earth mass: %lf kg\n", earth_mass);
printf("1 centimeter: %lf meter\n", meter);
return 0;
}
ในตัวอย่าง เป็นการใช้งานตัวแปรสำหรับเก็บข้อมูลในรูปแบบของทศนิยมทั้งตัวแปรประเภท float และ double ในส่วนแรกเราได้ประกาศตัวแปร float จำนวนสามตัวและกำหนดค่าให้กับตัวแปร ค่าของข้อมูลประเภท float นั้นจะลงท้ายด้วย f
หรือ F
เสมอ
float half = 3 / 2.0f;
float half2 = 3 / 2;
ต่อมาเป็นการทดสอบการหารตัวเลขในตัวแปร half
และ half2
เพื่อให้คุณเข้าใจและเห็นความแตกต่างของสิ่งที่เกิดขึ้น การคูณหรือการหารตัวเลขในภาษา C นั้นจะได้ผลลัพธ์เป็น Integer ถ้าหากตัวเลขทั้งสองตัวนั้นเป็นประเภท Integer เหมือนในตัวแปร half2
ถ้าหากมีตัวแปรอย่างน้อนหนึ่งตัวแปรที่เป็น float หรือ double จะได้ข้อมูลเป็น float หรือ double นี่จึงเป็นสิ่งที่ต้องควรระวังในการเขียนโปรแกรม
double gravity = 9.807;
double earth_mass = 5.972E24;
double meter = 1E-3;
สามตัวแปรต่อมาเป็นการประกาศตัวแปรประเภท double สำหรับตัวแปรทั้งสองประเภทนั้นสามารถประกาศในรูปแบบสัญกรณ์วิทยาศาสตร์ได้ เช่นในตัวอย่างในตัวแปร earth_mass
เป็นการกำหนดค่าแบบย่อซึ่งมีค่าเท่ากับ 5.972 x 10^24 และในตัวแปร meter
นั้นมีค่าเท่ากับ 1 x 10^-3
Pi: 3.140000
Half of 3: 1.500000
Half of 3: 1.000000
Earth gravity: 9.807000 m/s^2
Earth mass: 5972000000000000300000000.000000 kg
1 centimeter: 0.001000 meter
นี่เป็นผลลัพธ์ของโปรแกรมในการทำงานกับประเภทข้อมูลแบบทศนิยมในภาษา C ด้วยตัวแปรแบบ float และ double
ในบทนี้ คุณได้เรียนรู้เกี่ยวกับการประกาศและใช้งานตัวแปรในภาษา C และได้รู้จักประเภทข้อมูลชนิดต่างๆ ซึ่งใช้ในการเก็บข้อมูลที่แตกต่างกันในการเขียนโปรแกรม
f
หรือ F
เสมอhalf
และ half2
เพื่อให้คุณเข้าใจและเห็นความแตกต่างของสิ่งที่เกิดขึ้น การคูณหรือการหารตัวเลขในภาษา C นั้นจะได้ผลลัพธ์เป็น Integer ถ้าหากตัวเลขทั้งสองตัวนั้นเป็นประเภท Integer เหมือนในตัวแปร half2
ถ้าหากมีตัวแปรอย่างน้อนหนึ่งตัวแปรที่เป็น float หรือ double จะได้ข้อมูลเป็น float หรือ double นี่จึงเป็นสิ่งที่ต้องควรระวังในการเขียนโปรแกรมearth_mass
เป็นการกำหนดค่าแบบย่อซึ่งมีค่าเท่ากับ 5.972 x 10^24 และในตัวแปร meter
นั้นมีค่าเท่ากับ 1 x 10^-3ตัวดำเนินการตัวดำเนินการจะถูกใช้กับตัวแปรและค่าคงที่ในการดำเนินการบางอย่าง เช่น การดำเนินการทางคณิตศาสตร์ ในภาษา C มีตัวดำเนินการประเภทต่างๆ ที่ทำหน้าที่แตกต่างกันไป ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับตัวดำเนินการและตัวอย่างการใช้ตัวดำเนินการประเภทต่างๆ ในภาษา C
ข้างล่างนี้เป็นรายการของตัวดำเนินการในภาษา C
- Assignment operator
- Arithmetic operators
- Compound assignment
- Increment and decrement
- Relational and comparison operators
- Logical operators
- Bitwise operators
- Operator precedence
Assignment operator
ตัวดำเนินการกำหนดค่า ในภาษา C ใช้สัญลักษณ์เท่ากับ
=
มันถูกใช้เพื่อกำหนดค่าให้กับตัวแปรหรือค่าคงที่ ตัวดำเนินการจะมีสอง operand การทำงานของมันคือการนำค่าทางด้านขวาไปใส่ทางด้านซ้าย และ operand ทางด้านขวาสามารถเป็น expression ใดๆa = 2;
b = 3;
c = a + b;
ในตัวอย่างนี้ เราได้สร้างสามตัวแปรและกำหนดค่า 2 ให้กับตัวแปร a 3 ให้กับตัวแปร b และผลรวมของ a และ b ให้กับตัวแปร c ตามลำดับ
Arithmetic operators ( +, -, *, /, % )
ตัวดำเนินการทางคณิตศาสตร์ คือตัวดำเนินการที่ใช้เพื่อกระทำการดำเนินการทางคณิตศาสตร์ระหว่างตัวแปรหรือค่าคงที่ เช่น การบวก การลบ การคูณ และการหาร สำหรับในการเขียนโปรแกรมในภาษา C นั้นจะมีตัวดำเนินการสำหรับการหารเอาเศษ (Modulo) เพิ่มเข้ามา
ตารางข้างล่างนี้คือตัวดำเนินการทางคณิตศาสตร์ในภาษา C
Symbol | Name | Example |
---|---|---|
+ | Addition | c = a + b |
- | Subtraction | c = a - b |
* | Multiplication | c = a * b |
/ | Division | c = a / b |
% | Modulo | c = a % b |
จากในตารางของตัวดำเนินการข้างบน คุณน่าจะคุ้นเคยกับมันมาบ้างแล้วในการเรียนในวิชาคณิตศาสตร์ นอกจากตัวดำเนินการ Modulo ที่เป็นการหารเอาเศษ ต่อไปมาดูตัวอย่างการใช้ตัวดำเนินการทางคณิตศาสตร์ ในการเขียนโปรแกรมในภาษา C
#include <stdio.h>
int main () {
int a = 5;
int b = 10;
printf("a + b = %d\n", a + b);
printf("a - b = %d\n", a - b);
printf("a * b = %d\n", a * b);
printf("a / b = %d\n", a / b);
printf("a % b = %d\n", a % b);
return 0;
}
ในตัวอย่าง เป็นการใช้งานตัวดำเนินการประเภทต่างๆ ในภาษา C เราได้ประกาศตัวแปร a และ b และพร้อมกับกำหนดค่าให้กับมันและใช้ตัวดำเนินการต่างๆ ซึ่งคุณคงจะคุ้นเคยดี และในตัวดำเนินการ Modulo นั้นเป็นการหารเอาเศษซึ่งคำตอบที่ได้จะเป็นเศาของการหาร เมื่อรันโปรแกรม มันจะได้ผลลัพธ์ดังนี้
a + b = 15
a - b = -5
a * b = 50
a / b = 0
a % b = 5
Compound assignment (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=)
Compound assignment คือตัวดำเนินการที่ใช้เพื่ออัพเดทหรือแก้ไขค่าปัจจุบันของตัวแปรโดยการกระทำทางคณิตศาสตร์และใช้ตัวดำเนินการกำหนดค่าร่วมด้วย ซึ่งตัวดำเนินการแบบ Compound assignment มักจะใช้เป็นรูปแบบสั้นของตัวดำเนินการทางคณิตศาสตร์และตัวดำเนินการระดับบิตเพื่อให้การเขียนสั้นลง
ข้างล่างนี้เป็นตารางของ compound assignment operators ในภาษา C
Operator | Example | Equivalent to |
---|---|---|
+= | a += 2; | a = a + 2 |
-= | a -= 2; | a = a - 2 |
*= | a *= 2; | a = a * 2 |
/= | a /= 2; | a= a / 2 |
%= | a %= 2; | a = a % 2 |
>>= | a >>= 2; | a = a >> 2 |
<<= | a <<= 2 | a = a << 2 |
&= | a & = 2; | a = a & 2 |
^= | a ^= 2; | a= a ^ 2 |
|= | a |= 2; | a = a | 2 |
มาดูตัวอย่างของการใช้งานของตัวดำเนินการ compound assignment
#include <stdio.h>
int main () {
int x = 10;
int y = 2;
x += 10; //equivalent to x = x + 10
y -= 2; //equivalent to y = y - 2
printf("x = %d, y = %d", x, y);
return 0;
}
ในตัวอย่าง นั้นเป็นรูปแบบอย่างสั้นในการดำเนินการทางคณิตศาสตร์ของมัน โดยการทำงานของตัวดำเนินการจะอ้างอิงจากค่าเดิม เช่น ในตัวแปร x นั้นเป็นการบวกค่าเข้าไปในตัวแปรเดิมอีก 10 และในตัวแปร y นั้นเป็นการลบค่าออกจากตัวแปรเดิมออก 2 และมันจะได้ผลลัพธ์ดังนี้
x = 20, y = 0
Increment and decrement (++, --)
ตัวดำเนินการเพิ่มและลดค่า คือตัวดำเนินการที่ใช้เพื่อบวกหรือลบค่าออกจากตัวแปรโดย 1 โดยการเพิ่มเครื่องหมาย
++
หรือ--
ใส่ข้างหน้าหรือข้างหลังตัวแปร ซึ่งมีรูปแบบการใช้ดังนี้identifier++
มาดูตัวอย่างของการใช้ตัวดำเนินการเพิ่มและลดค่า
#include <stdio.h>
int main () {
int a = 1;
int b = 10;
a++;
b--;
printf("a=%d, b=%d", a, b);
return 0;
}
เมื่อเรารันโปรแกรม นี่เป็นผลลัพธ์ที่เราจะได้
a=2, b=9
เหมือนที่คุณเห็นในตัวอย่าง มันเป็นรูปแบบอย่างสั้นของ
a = a + 1
และ b = b - 1
มันมักจะใช้กับคำสั่ง for loop เพื่อเพิ่มของการรัน index หรือตำแหน่ง index ของอาเรย์
และยังมีรูปแบบอื่นของตัวดำเนินการนี้คือ prefix เช่น
++a
--b
โดยมันหมายถึงจะมีการเพิ่มหรือลดค่าก่อนที่จะมีการประมวลผลคำสั่งปัจจุบันRelational และ comparison operators ( ==, !=, >, <, >=, <= )
ตัวดำเนินการความสัมพันธ์และเปรียบเทียบ คือตัวดำเนินการที่ถูกใช้เพื่อประเมินค่า true และ false ระหว่างสองตัวถูกดำเนินการ ซึ่งขึ้นกับเงื่อนไขและความสัมพันธ์ของมัน
ข้างล่างนี้เป็นรายการของตัวดำเนินการ relational และตัวดำเนินการเปรียบเทียบ
Operater | Example | Result |
---|---|---|
== | a == b | true if a equal to b, otherwise false |
!= | a != b | true if a not equal to b, otherwise false |
< | a < b | true if a less than b, otherwise false |
> | a > b | true if a greater than b, otherwise false |
<= | a <= b | true if a less than or equal to b, otherwise false |
>= | a >= b | true if a greater than or equal to b, otherwise false |
ตัวดำเนินการเหล่านี้ถูกใช้ เช่น เพื่อเปรียบเทียบค่าระหว่างตัวแปรว่าเท่ากันหรือไม่ หรือเปรียบการมากกว่าน้อยกว่าหรือค่าในตัวแปร และผลลัพธ์ของการเปรียบเทียบจะเป็น true และ false
#include <stdio.h>
int main () {
int a = 5;
int b = 10;
if (a == b) {
printf ("a and b are equal");
} else {
printf ("a and b are not equal");
}
return 0;
}
ในตัวอย่าง เป็นโปรแกรมในการเปรียบเทียบค่าในตัวแปร a และ b โดยการใช้คำสั่ง if ซึ่งถ้าหากค่าของตัวแปรทั้งสองเท่ากันซึ่งจะทำให้เงื่อนไขเป็นจริง จะทำให้โปรแกรทำงานในบล็อคของคำสั่ง if ไม่เช่นนั้นโปรแกรมจะทำในบล็อคของคำสั่ง else แทน
a and b are not equal
นี่เป็นผลลัพธ์การทำงานของโปรแกรม จะเห็นว่าโปรแกรมทำงานในบล็อคของคำสั่ง else เพราะว่าค่าในตัวแปรทั้งสองนั้นไม่เท่ากัน ให้คุณลองเปลี่ยนค่าในตัวแปรให้เท่ากันแล้วลองรันโปรแกรมอีกครั้งเพื่อดูผลลัพธ์
Logical operators ( !, &&, || )
ตัวดำเนินการทางตรรกศาสตร์ถูกใช้เพื่อประเมิน expression ย่อยหลายๆ expression ให้เหลือเพียงอันเดียว โดยผลลัพธ์สุดท้ายนั้นจะเป็นจริงหรือเท็จ
ข้างล่างนี้เป็นรายการตัวดำเนินการทางตรรกศาสตร์ในภาษา C
Name | Symbol | Example |
---|---|---|
not | ! | !a |
and | && | a && b |
or | || | a || b |
ในการทำงานของตัวดำเนินการนั้น ตัวดำเนินการ Not จะกลับค่าของ Boolean expression ตัวดำเนินการ and ทำการเชื่อมสอง expression เข้าด้วยกัน โดยจะได้ผลลัพธ์เป็นจริงหากทั้งสองค่าเป็นจริง ไม่เช่นนั้นจะเป็นเท็จ และตัวดำเนินการ or เชื่อมสอง expression เข้าด้วยกัน โดยจะได้ผลลัพธ์เป็นจริงหากมีอย่างน้อยหนึ่ง expression ที่เป็นจริง ไม่เช่นนั้นจะเป็นเท็จ ต่อไปมาดูตัวอย่างการใช้งานของตัวดำเนินการตรรกศาสตร์
#include <stdio.h>
int main() {
int a = 10;
bool b = 1;
bool c = 0;
// using "not" operator
if(!(a == 10))
printf("a is not equal to 10.\n");
else
printf("a is equal to 10.\n");
// using "and" operator
if(b && c)
printf("True.\n");
else
printf("False.\n");
// using "or" operator
if(b || c)
printf("True.\n");
else
printf("False.\n");
return 0;
}
ในตัวอย่างเรามีตัวแปรสามตัว ตัวแปร a เป็น integer ในขณะที่ตัวแปร b และ c เป็น boolean ในภาษา C ค่าของ boolean ที่เป็นจริงนั้นจะมีค่าเป็น
1
และเท็จจะเป็น 0
และนี่คือผลลัพธ์ของโปรแกรม
a is equal to 10.
False.
True.
Bitwise operators ( &, |, ^, ~, <<, >> )
Bitwise operators นั้นถูกใช้ในการดำเนินการระดับบิตของตัวแปรหรือข้อมูล มันมีประโยชน์มากในการเขียนโปรแกรมระดับต่ำ ตัวดำเนินการ Bitwise นั้นใช้หลักการทำงานเหมือนกับตัวดำเนินการทางตรรกศาสตร์ โดยใช้ 1 สำหรับค่าจริงและ 0 สำหรับค่าเท็จ
นี่เป็นรายการของตัวดำเนินการ Bitwise ในภาษา C
Symbol | Name | Description |
---|---|---|
& | Bitwise AND | 1 ถ้าบิตทั้งคู่เป็น 1, ไม่เช่นนั้นเป็น 0 |
| | Bitwise inclusive OR | 1 ถ้าอย่างน้อยหนึงบิตเป็น 1, ไม่เช่นนั้นเป็น 0 |
^ | Bitwise exclusive OR | 1 ถ้าทั้งสองบิตแตกต่างกัน, ไม่เช่นนั้นเป็น 0 |
~ | bit inversion | กลับบิตจาก 1 เป็น 0 และในทางตรงข้าม |
<< | Shift bits left | เลื่อนบิตไปทางซ้าย เติมบิต 0 ทางขวา |
>> | Shift bits right | เลื่อนบิตไปทางขวา เติมบิต 0 ทางซ้าย |
จากตารางข้างบน เป็นตัวดำเนินการประเภทต่างๆ ในภาษา C ที่ใช้ดำเนินการกับข้อมูลในระดับบิต ยกตัวอย่าง เช่น เมื่อเรากำหนดค่าให้กับตัวแปรนั้น คอมพิวเตอร์จะเก็บข้อมูลในรูปแบบของเลขฐานสอง (binary) ตัวดำเนินการเหล่านี้ใช้สำหรับจัดการกับข้อมูลดังกล่าว มาดูตัวอย่างการใช้งานในภาษา C
#include <stdio.h>
int main () {
int a = 2; // 00000010
int b = 5; // 00000101
printf("a & b = %d\n", a & b); // 00000000 = 0
printf("a & b = %d\n", a | b); // 00000111 = 7
printf("~a = %d\n", ~a); // 11111101 = -1
printf("a >> 1 = %d\n", a >> 1); // 00000001 = 1
printf("a << 1 = %d\n", a << 1); // 00000100 = 8
return 0;
}
ในตัวอย่าง เป็นโปรแกรมในการใช้งานตัวดำเนินการระดับบิตกับการจัดการข้อมูลประเภท Integer เราได้ประกาศตัวแปร a และ b และได้คอมเมนต์ค่าของ binary ที่ถูกเก็บไว้ในหน่วยความจำ การทำงานของตัวดำเนินการ
&
และ |
นั้นทำงานกับคู่ของแต่ละบิตของตัวแปรทั้งสอง ส่วนอีกสามตัวดำเนินการที่เหลือนั้นกระทำกับตัวแปรเดียว ในตัวดำเนินการ ~
นั้นเป็นการกลับบิต และสำหรับตัวดำเนินการ bit shift นั้นเมื่อเลื่อนบิตไปทางซ้ายจะทำให้ค่าเพิ่มขึ้นสองเท่า และเมื่อเลื่อนบิตไปทางขวาก็จะทำให้ค่าลดลงสองเท่าa & b = 0
a & b = 7
~a = -3
a >> 1 = 1
a << 1 = 4
นี่เป็นผลลัพธ์การทำงานของโปรแกรมของการใช้งานตัวดำเนินการระดับบิตในภาษา C
Operator precedence
ลำดับความสำคัญของตัวดำเนินการ (Operator precedence) ใช้เพื่อกำหนดว่าตัวดำเนินการใช้ที่จะถูกทำงานก่อน ยกตัวอย่างเช่น ในการทำงานของ expression 6 + 3 * 4 นั้นจะได้ผลลัพธ์เป็น 18 เพราะว่าตัวดำเนินการ * นั้นมีความสำคัญมากกว่าตัวดำเนินการ + คุณสามารถบังคับให้การบวกทำงานก่อนได้โดยใช้วงเล็บ (6 + 3) * 4 เพื่อให้การบวกสามารถทำงานก่อนได้ ซึ่งจะได้ผลลัพธ์เป็น 36 เป็นต้น
ข้างล่างนี้ เป็นตารางแสดงลำดับความสำคัญของตัวดำเนินการในภาษา C
Operator Name | Associativity | Operators |
---|---|---|
Primary | left to right | ()[]. |
Unary | ขวาไปซ้าย | ++--+-!~&*(type_name)sizeof new delete |
Multiplicative | ซ้ายไปขวา | */% |
Additive | ซ้ายไปขวา | +- |
Bitwise Shift | ซ้ายไปขวา | <<>> |
Relational | ซ้ายไปขวา | <><=>= |
Equality | ซ้ายไปขวา | ==!= |
Bitwise AND | ซ้ายไปขวา | & |
Bitwise Exclusive OR | ซ้ายไปขวา | ^ |
Bitwise Inclusive OR | ซ้ายไปขวา | | |
Logical AND | ซ้ายไปขวา | && |
Logical OR | ซ้ายไปขวา | || |
Conditional | ขวาไปซ้าย | ?: |
Assignment | ขวาไปซ้าย | =+=-=*= /=<<=>>= %= &=^=|= |
Comma | ซ้ายไปขวา | , |
ในบทนี้ เราได้ครอบคลุมการดำเนินการพื้นฐานในภาษา C คุณได้เรียนรู้และทำความเข้าใจในตัวดำเนินการประเภทต่างๆ และได้เห็นถึงตัวอย่างการใช้งานของตัวดำเนินการแต่ละรูปแบบ ซึ่งจะนำไปใช้ในการเขียนโปรแกรมในบทต่อๆ ไป
Input-output กับประเภทข้อมูล
ในบทเรียนนี้ คุณจะได้เรียนเกี่ยวกับการรับค่าและการแสดงผลโดยการใช้ฟังก์ชันของภาษา C โดยปกติในการเขียนโปรแกรม เรามักจะมีการรับค่าและการแสดงผลจากผู้ใช้ ในการรับค่าโดยทั่วไปแล้วจะเป็นการรับค่าจากคีย์บอร์ดและการแสดงผลจะเป็นทางหน้าจอคอมพิวเตอร์
ในภาษา C มีฟังก์ชันให้เราสามารถรับค่าและแสดงผลได้ โดยจะมีรูปแบบในการรับค่าและแสดงผลของข้อมูลขึ้นกับประเภทของข้อมูล นี่เป็นข้อมูลส่วนมากที่เราจะพบในการทำงาน โดยจะเป็น specifier ที่จะใช้ในการรับข้อมูลแต่ละแบบ
specifier | Description | Usage |
---|---|---|
d | integer | ใช้กับตัวเลขจำนวนเต็ม |
f | floating, double | ใช้กับตัวเลขจำนวนจริง |
c | Character | ใช้กับตัวอักษรหนึ่งตัวอักษร |
s | String of characters | ใช้กับสตริงหรือตัวอักษรหลายตัว |
p | Pointer | ใช้กับค่าที่อยู่ของหน่วยความจำ |
% | % | เครื่องหมายที่จะตามโดย specifier ตัวอื่นๆ |
ฟังก์ชัน printf
ในการแสดงผลในภาษา C ฟังก์ชันที่ใช้คือฟังก์ชัน printf ซึ่งเป็นฟังก์ชันที่สามารถแสดงข้อมูลประเภทต่างออกทางหน้าจอภาพได้ โดยมันมีรูปแบบการใช้งานดังนี้
printf ("string pattern", value1, value2, ...);
ในการใช้ฟังก์ชัน อาร์กิวเมนต์ตัวแรกคือรูปแบบการแสดงผล และอาร์กิวเมนต์ตัวต่อไปเป็นข้อมูลที่ตรงกับ specifier ที่เรากำหนดไว้ตามลำดับ มาดูตัวอย่างการใช้งานจริง
printf ("Hello, my name is Mateo\n");
int age = 20;
printf ("I\'m %d year old\n", age);
printf ("I have %f USD and %d cents\n", 10.5, 4);
จากตัวอย่างเป็นการใช้ฟังก์ชัน printf เพื่อการแสดงผลแบบต่างๆ อันแรกเป็นการแสดงผลข้อความโดยที่ไม่มี specifier อันที่สองเราต้องการแสดงอายุที่เป็น integer เราจึงใช้
%d
เพื่อแทนการแสดงผลของมัน อันสุดท้ายแสดงให้เห็นถึงการแสดงหลาย ค่าโดยเราต้องกำหนด specifier ให้ตรงกับค่าของเรา
และนี่เป็นตัวอย่างผลลัพธ์ของโปรแกรม
Hello, my name is Mateo
I'm 20 years old
I have 4.5 USD and 4 cents
ฟังก์ชัน scanf
ในการรับค่านั้นเราจะใช้ฟังก์ชัน scanf ในการรับค่า โดยการรับค่าเรามักจะหมายถึงการรับค่าจากคีย์บอร์ด โดยรูปแบบการใช้งานของฟังก์ชันเป็นดังนี้
scanf ("%specifier1 %specifier2 ...", variable1, variable2, ...);
ฟังก์ชัน scanf นั้นมีรูปแบบที่คล้ายกันกับฟังก์ชัน printf โดยอาร์กิวเมนต์ในฟังก์ตัวแรกเป็นสตริงของ specifier input ที่เราต้องการรับ และเป็นลำดับของตัวแปรที่ตรงกับ specifier ที่เราได้กำหนดไว้ในอาร์กิวเมนต์ตัวแรก และใส่ตัวแปรให้ตรงกับลำดับของ specifier ที่กำหนด
ต่อไปมาดูตัวอย่าง ของการรับค่าโดยการใช้ฟังก์ชัน scanf
int a;
float b;
scanf ("%d%f", &a, &b);
printf ("value of a is %d\n", a);
printf ("value of b is %f\n", b);
ในตัวอย่าง เราได้มีตัวแปรสองตัวคือ a และ b และมีประเภทของตัวแปรเป็น integer และ floating ตามลำดับ ดังนั้นใน specifier input เราจึงใส่
%d
สำหรับตัวแปร a และ %f
สำหรับตัวแปร b อาร์กิวเมนต์ตัวต่อไปเราจะใส่ลำดับของตัวแปร โดยลำดับของตัวแปรจะแตกต่างจากฟังก์ชัน printf โดยจะนำหน้าด้วยเครื่องหมาย &
ซึ่งมันหมายถึงที่อยู่ของตัวแปร ถ้าในกรณีที่ตัวแปรเป็นอาเรย์ของตัวอักษรนั้นเราไม่ต้องใส่
และนี่เป็นตัวอย่างของโปรแกรมเมื่อใส่ค่าเป็น 5 และ 10.5 ตามลำดับ
5 10.5
value of a is 5
value of b is 10.500000
Escape characters
Escape characters เป็นตัวอักษรพิเศษในภาษา C ที่จะต้องใช้สัญลักษณ์เครื่องหมาย
\
นำหน้าเสมอ เพื่อไม่ให้เกิดข้อผิดพลาดในการคอมไพล์โปรแกรม เพราะว่าตัวอักษรนี้เป็นสัญลักษณ์ที่ตรงกันกับโครงสร้างของภาษา นี่เป็นรายการของตัวอักษรพิเศษในภาษา CEscape character | Character represented |
---|---|
\a | Alarm |
\b | Backspace |
\n | Newline |
\r | Carriage Return |
\t | Horizontal Tab |
\v | Vertical Tab |
\\ | Backslash |
\' | Single quotation mark |
\" | Double quotation mark |
\? | Question mark |
ต่อไปมาดูตัวอย่างการใช้งานของ Escape characters ในภาษา C ซึ่งเราจะเก็บข้อความที่มีตัวอักษรเหล่านี้ไว้ภายในตัวแปร char และตัวแปร char array
#include <stdio.h>
int main ()
{
char tab = '\t';
char a = 'A';
char text[] = "His name is \"Mateo\".\n";
char text2[] =
"You can visit Mateo's website by asking him for address.\n";
printf("%c%c\n", tab, a);
printf("%s", text);
printf("%s", text2);
return 0;
}
ในตัวอย่าง เป็นการใช้งาน Escape characters ในการเขียนโปรแกรม ในสองตัวแปรแรก
tab
และ a
นั้นเป็นตัวแปรแบบ char ตัวแปรแรกเป็นตัวแปรที่เป็นตัวอักษรพิเศษซึ่งหมายถึง tab และตัวแปรที่สองเป็นค่าปกติของ char ที่ไม่ใช่ตัวอักษรพิเศษ
ต่อมาในตัวแปร
text
และ text2
เป็นตัวแปรแบบ char array หรือตัวแปรที่เก็บข้อมูลของ char ได้มากกว่า 1 ตัวอักษร สำหรับการกำหนดค่าให้กับตัวแปรเราจึงใช้ \"
สำหรับเครื่องหมาย " และ \'
สำหรับเครื่องหมาย '
ส่วน \n
นั้นเป็นตัวอักษรพิเศษที่หมายถึงการขึ้นบรรทัดใหม่ซึ่งเราจะใช้บ่อยในบทเรียนนี้ A
His name is "Mateo".
You can visit Mateo's website by asking him for address.
นี่เป็นผลลัพธ์การทำงานของโปรแกรมในการใช้งาน Escape characters ในภาษา C
ในบทนี้ คุณได้เรียนรู้เกี่ยวกับการรับค่าและการแสดงผลในภาษา C เบื้องต้น เพื่อให้สามารถสร้างโปรแกรมที่มีการติดต่อกับผู้ใช้ได้ อย่างไรก็ตาม Input-output นั้นสามารถเป็นได้ในทางอื่นๆ เช่น การรับค่าจากเสียง กล้องถ่ายรูป หรืออาจจะเป็นการทำงานกับไฟล์ หรือแม้กระทั่งกับ Network สำหรับบทนี้ เราพูดถึงการรับค่าทางคีย์บอร์ดและการแสดงผลทางหน้าจอ Console
คำสั่งควบคุมการควบคุมการทำงานของโปรแกรมโดยใช้คำสั่งควบคุม ในภาษา C มีคำสั่งควบคุมหลายประเภทที่คุณสามารถใช้ได้ เช่น if, if-else, for, while, do-while เป็นต้น ซึ่งคำสั่งควบคุมการทำงานของโปรแกรมนั้นจะมีสองประเภทคือ คำสั่งเลือกเงื่อนไขและคำสั่งวนซ้ำที่คุณจะได้เรียนในบทนี้
คำสั่ง If
คำสั่งควบคุมการทำงานที่เป็นพื้นฐานที่สุดในภาษา C นั้นก็คือคำสั่ง if มันใช้สำหรับสร้างเงื่อนไขให้โปรแกรมทำงานตามที่ต้องการ ยกตัวอย่างเช่น ถ้าหากวันนี้ฝนไม่ตก คุณจะออกไปเที่ยวข้างนอก นี่เป็นการตัดสินใจที่เกิดขึ้นและถูกนำแนวคิดมาใช้ในการเขียนโปรแกรม นี่เป็นรูปแบบของการใช้งานคำสั่ง if ในภาษา C
if (expression) {
// statements
}
คำสั่ง if เป็นคำสั่งที่ใช้ในการตรวจสอบว่าเงื่อนไขเป็นจริงหรือไม่ โดยการใช้ตัวดำเนินการต่างๆ ในการสร้างเงื่อนไขหรือ expression ถ้าผลลัพธ์เป็นจริง โปรแกรมจะทำงานในบล็อคของคำสั่ง if ที่เราได้กำหนดขึ้น และถ้าหากผลลัพธ์ไม่เป็นจริงโปรแกรมจะข้ามการทำงานในบล็อคคำสั่งไป มาดูตัวอย่างการใช้งานของมัน;
#include <stdio.h>
int main () {
if (10 == 10) {
printf ("block 1 is executed.\n");
}
if (3 < 1) {
printf ("block 2 is executed.\n");
}
int a = 10;
if (a % 2 == 0) {
printf ("block 3 is executed.\n");
}
return 0;
}
ในการทำงานของโปรแกรมเป็นการใช้คำสั่ง if เพื่อเปรียบเงื่อนไขต่างๆ โดยแต่ละบล็อคคำสั่งจะทำงานเมื่อเงื่อนไขเป็นจริงเท่านั้น บล็อคแรกจะทำงานเพราะว่า 10 มีค่าเท่ากับ 10 บล็อคที่สองจะไม่ทำงานเพราะว่า 3 ไม่น้อยว่า 1 และสำหรับบล็อคสุดท้ายจะทำงาน เพราะว่า a เป็นจำนวนคู่
และนี่เป็นผลลัพธ์ของโปรแกรมเมื่อรัน คุณจะเห็นว่ามีแค่ block 1 และ 3 ที่แสดงผลเพราะว่าเงื่อนไขของ if เป็นจริง
block 1 is executed
block 3 is executed
คำสั่ง If else
คำสั่ง if else เป็นคำสั่งมีการเพิ่มเงื่อนไข else if เข้ามาสำหรับการสร้างเงื่อนไขแบบหลายทางเลือก นั่นหมายถึงในบล็อคของคำสั่งจะทำงานเมื่อเงื่อนไขไม่ต้องกับเงื่อนไขก่อนหน้าแต่ตรงกับเงื่อนไขปัจจุบัน นอกจากนี้ยังมีคำสั่ง else ซึ่งเป็นบล็อคของคำสังที่จะทำงานถ้าหากไม่มีเงื่อนไขใดเป็นจริงเลย มาดูตัวอย่างของการใช้คำสั่ง if-else
#include <stdio.h>
int main () {
int score;
scanf ("%d", &score);
if (score < 50)
printf ("Your grade is F");
else if (score < 60)
printf ("Your grade is D");
else if (score < 70)
printf ("Your grade is C");
else if (score < 80)
printf ("Your grade is B");
else
printf ("Congratulation! You got grade A");
return 0;
}
ในตัวอย่างนี้เป็นโปรแกรมสำหรับการคำนวณเกรด โดยโปรแกรมจะให้คุณสามารถใส่เกรดเข้ามา และเปรียบเทียบเงื่อนไขโดยใช้คะแนนตรวจสอบ คุณจะสังเกตเห็นว่าเราสามารถ ใช้ else if ได้ถ้าหากมีหลายเงื่อนไข และใช้คำสั่ง else เป็นเงื่อนไข default ในกรณีที่ไม่ตรงกับเงื่อนไขใดๆ เลย
74
Your grade is B
85
Congratulation! You got grade A
นี่เป็นผลลัพธ์การทำงานของโปรแกรมเมื่อเราได้กรอกคะแนนเป็น 74 ซึ่งตรงกับเงือนไขของเกรด B หลังจากโปรแกรมพบอย่างน้อยหนึ่งเงือนไขที่เป็นจริง บล็อคที่เหลือจะถูกข้ามไปในทันที และเราได้รับโปรแกรมอีกครั้งและกรอกคะแนนเป็น 85 ซึ่งโปรแกรมไม่ตรงกับเงื่อนไขใดเลย ในบล็อคของคำสั่ง if และ else if ทำให้ในบล็อคของคำสั่ง else ทำงานและได้เกรด A
คำสั่ง Switch case
Switch case เป็นคำสั่งเงื่อนไขที่ทำงานคล้ายกับ if แต่ส่วนมากจะใช้สำหรับการเปรียบเทียบกับค่าคงที่และต้องเป็นข้อมูลประเภท Integer หรือ Char เท่านั้น มาดูตัวอย่างของการใช้คำสั่ง Switch
#include <stdio.h>
int main () {
int number = 5;
switch (number) {
case 1:
printf ("n is 1");
break;
case 2:
printf ("n is 2");
break;
case 3:
printf ("n is 3");
break;
default:
printf ("Unknown");
}
return 0;
}
ในการทำงานจากตัวแปรด้านบน เป็นการส่งตัวแปร number โดยจะนำไปเปรียบเทียบกับแต่ละ case ถ้าเงื่อนไขตรง โปรแกรมจำทำงานทันที่ จนกว่าจะสิ้นสุดบล็อคของคำสั่ง switch ดังนั้นเราจำเป็นต้องใช้คำสั่ง
break
เพื่อให้จบการทำงาน สำหรับคำสั่ง default
จะเป็นการทำหลังจากที่ number ไม่ตรงกับเงื่อนไขใดๆ ก่อนหน้าคำสั่ง while loop
หลังจากที่คุณได้รู้จักคำสั่งเงื่อนไขพื้นฐานไปแล้ว ต่อไปคุณจะได้รู้จักคำสั่งของการทำงานซ้ำ ซึ่งสามารถให้เราประมวลผลส่วนของโปรแกรมที่ต้องการได้
คำสั่งวนซ้ำที่ง่ายที่สุดคือคำสั่ง while loop โดยการทำงานของคำสั่ง while loop จะทำงานเมื่อเงื่อนไขเป็นจริง และจะสิ้นสุดการทำงานจนกว่าเงื่อนไขจะเป็นเท็จ มาดูตัวอย่างของโปรแกรม
#include <stdio.h>
int main () {
int n = 1;
while (n <= 10) {
printf ("%d, ", n);
n++;
}
return 0;
}
ในตัวอย่างเป็นการใช้คำสั่ง while เพื่อแสดงผลตัวเลข 1 ถึง 10 โดยเราได้กำหนดค่าเริ่มต้นให้ n เท่ากับ 1 และจะเพิ่มขึ้นในการแสดงผลแต่ละครั้ง จนกว่าจะมากกว่า 10 จึงสิ้นสุดการทำงานของโปรแกรม และจะได้ผลลัพธ์ดังนี้
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
คำสั่ง do-while loop
คำสั่ง do while นั้นคล้ายกับคำสั่ง while แต่สิ่งที่แตกต่างกันเล็กน้อยคือ คำสั่ง do while จะทำงานก่อนอย่างน้อยหนึ่งรอบ แล้วจะตรวจเงื่อนและถ้าเงื่อนไขไม่เป็นจริงจะสิ้นสุดการทำงาน มาดูตัวอย่างการใช้งาน
#include <stdio.h>
int main () {
int n = 1;
do {
printf ("Enter number: ");
scanf ("%d", &n);
printf ("You have entered %d\n", n);
} while (n != 0);
printf ("The program is terminated");
return 0;
}
ในตัวอย่างนี้ เป็นโปรแกรมที่จะรับค่าจากคีย์บอร์ด โดยจะรับตัวเลขเข้ามาและแสดงผลตัวเลขที่ได้รับเข้ามา และจะสิ้นสุดการทำงานเมื่อตัวเลขเป็น 0
1
You have entered 1
3
You have entered 3
0
You have entered 0
The program is terminated
คำสั่ง for loop
คำสั่ง for loop เป็นคำสั่งวนซ้ำที่เราสามารถกำหนดค่าเริ่มต้นเงื่อนไขและการเปลี่ยนแปลงของค่าได้ ในตอนแรกครั้งเดียว โดยมีรูปแบบดังนี้
for (initial; expression; increment) {
// statements
}
คำสั่ง for loop สามารถใช้ได้เหมือนกับ คำสั่ง while loop และ do while loop แต่โดยทั่วไปแล้ว เรามักจะใช้คำสั่ง for loop กับการวนซ้ำในจำนวนรวบที่แน่นอน หรือมันมักจะถูกใช้กับอาเรย์ มาดูตัวอย่างการใช้งาน
int i;
for (i = 0; i <= 10; i++) {
printf ("%d, ", i);
}
ในตัวอย่างเป็นการใช้คำสั่ง for loop เพื่อวนซ้ำแสดงผลลัพธ์เลข 1 ถึง 10 เหมือนกับตัวอย่างของคำสั่ง while loop ก่อนหน้า มาดูตัวอย่างเพิ่มเติมในการใช้คำสั่ง for loop
#include <stdio.h>
int main () {
char n[] = "Hello World";
int i;
for (i = 0; i < strlen(n); i++) {
printf ("%c", n[i]);
}
printf ("\n");
for (i = strlen(n) - 1; i >= 0; i--) {
printf ("%c", n[i]);
}
return 0;
}
ในตัวอย่างเราได้ใช้ for loop ในการวนอ่านค่าจากในตัวแปรอาเรย์ โดยจำนวนรอบในการวนจะใช้ฟังก์ชัน
strlen
ในการหาความยาวของอาเรย์ ซึ่งคุณจะได้เรียนรู้เรื่องอาเรย์ในบทหลัง โดยในครั้งแรกจะอ่านมาแสดงปกติ และครั้งที่สองจะอ่านจากด้านหลังมา โดยจะได้ผลลัพธ์ดังนี้Hello World
dlroW olleH
คำสั่ง break
คำสั่ง
break
เป็นคำสั่งที่ใช้สำหรับหยุดการทำงาน loop ในทันที โดยจะไม่สนใจเงื่อนไขของ loop ว่ายังเป็นจริงอยู่หรือไม่ มาดูตัวอย่างการใช้งานในการแสดงผลตัวเลข 1 ถึง 10#include <stdio.h>
int main () {
int i;
for (i = 1; i <= 10; i++) {
printf ("%d, ", i);
if(i == 3) break;
}
return 0;
}
ในการทำงานของโปรแกรม โปรแกรมจะวนเพียง 3 รอบ เพราะว่าเมื่อ i มีค่าเป็น 3 เราได้ใช้คำสั่ง break เพื่อให้สิ้นสุดการทำงานของ for loop ทันที โดยจะไม่สนใจกว่าเงื่อนไขของ for loop จะยังคงเป็นจริง และนี่เป็นผลลัพธ์ของโปรแกรมเมื่อรัน
1, 2, 3,
คำสั่ง continue
คำสั่ง continue เป็นคำสั่งสำหรับการข้ามการทำงานในรอบปัจจุบัน และทำงานในรอบใหม่ทันที มาดูตัวอย่าง
#include <stdio.h>
int main () {
int i;
for (i = 1; i <= 10; i++) {
if(i % 2 != 0) continue;
printf ("%d, ", i);
}
return 0;
}
ในตัวอย่างโปรแกรมจะทำงานคำสั่ง continue ถ้าหาก i หาร 2 มีเศษเป็น 0 หรือจำนวนคู่ ดังนั้นโปรแกรมจะได้ดังนี้
2, 4, 6, 8, 10,
ในบทนี้ คุณได้เรียนรู้คำสั่งควบคุมในเบื้องต้นในภาษา C เราได้พูดถึงการควบคุมโปรแกรมด้วยคำสั่งเลือกเงือนไขอย่งเช่นคำสั่ง If และ switch และคำสั่งวนซ้ำที่สามารถทำให้โปรแกรมของเราทำงานแบบเดิมซ้ำๆ ได้ภายในเงื่อนไขที่เปลี่ยนแปลงไป และนอกจากนี้คุณยังได้รู้จักการใช้คำสั่ง continue และ break สำหรับควบคุมการทำงานของลูป
ความคิดเห็น
แสดงความคิดเห็น