Computer Programming: ข้อ 101–110

เนื้อหาวิชา : 2 : ชนิดของข้อมูล

ข้อ 101. ผลจากการทำงานของโปรแกรม ค่า x, y, z มีค่าเท่ากับเท่าไหร่
int x = 8;
double y = 3;
int z = 2;
x++;
y = y / z;
z = (int)y;
x – 1;

1 : x=9 y=1 z=2
2 : x=9 y=1.5 z=1
3 : x=8 y=1 z=2
4 : x=8 y=1.5 z=1

เฉลย: 2
อธิบาย: 
เริ่มจาก x=8, y=3, z=2
แล้ว x++ ทำให้ x จาก 8 → เป็น 9 ★
จากนั้น y = y / z คือ 3 / 2 ได้ 1.5 เพราะ y เป็น double ★
แล้ว z = (int)y เปลี่ยนชนิดข้อมูล y เป็น Integer จาก 1.5 → เป็น 1
ทำให้ z ได้ค่า 1 ★
ส่วน x – 1; ไม่ได้เก็บค่ากลับเข้า x จึงไม่ทำให้ x เปลี่ยน

Note: x – 1; เฉย ๆ ไม่เปลี่ยนค่า x ต้องเขียน x = x – 1;


ข้อ 102. ถ้าเราต้องการเก็บค่าของเลขจำนวนเต็มบวกซึ่งมีค่าตั้งแต่ 1 ถึง 32767 เก็บไว้ที่ตัวแปร n เราควรกำหนดอย่างไร?

1 : int n;
2 : signed int n;
3 : unsigned int n;
4 : unsigned char n;

เฉลย: 3
อธิบาย: เพราะต้องการเก็บเฉพาะจำนวนเต็มบวก จึงใช้ unsigned int ซึ่งไม่เก็บค่าติดลบ และเหมาะกับค่าบวกในช่วงนี้

Note: 

หมายเหตุ:
ปัจจุบัน int มีขนาด 4 bytes
int เก็บได้ -2,147,483,648 to 2,147,483,647
unsigned int เก็บได้ 0 to 4,294,967,295

อ้างอิง: https://learn.microsoft.com/th-th/cpp/cpp/data-type-ranges?view=msvc-160

1. จำนวนเต็มint / short / long / unsigned int / unsigned short / unsigned long
2. จำนวนจริง (ทศนิยม) → float / double
3. ตัวอักขระและสตริง (String)char / Array of char


ข้อ 103. การประกาศตัวแปรต่อไปนี้ ข้อใดใช้เนื้อที่ในหน่วยความจำมากที่สุด?

1 : char str[13] = “California”;
2 : char grade, school[ ] = “SUT KORAT”;
3 : int x, y, z[5];
4 : float average, gpa, mean;

เฉลย: 3
อธิบาย: 
ข้อ 1 char str[13]
char ละ 1 bytes = 13 bytes

ข้อ 2 char grade, school[ ] = “SUT KORAT”;
grade =1 bytes
school[ ] = “SUT KORAT” มี 9 ตัวอักษร รวม ตัวปิดท้ายสายอักขระ (\0) 1 byte = 10 bytes
รวม 11 bytes

ข้อ 3 int x, y, z[5]
int ละ 4 bytes
4+4+(4×5)= 28 bytes

ข้อ 4 (float average, gpa, mean)
float ละ 4 bytes
4+4+4 = 12 bytes

ดังนั้น เมื่อเปรียบเทียบกัน ข้อ 3 จึงใช้หน่วยความจำมากที่สุด

Note: จำง่ายๆ
char = 1 byte
short = 2 bytes
int = 4 bytes
float = 4 bytes
double = 8 bytes
long long = 8 bytes


ข้อ 104. กำหนดให้ char ch = ’A’; ผลของการใช้คำสั่ง printf ในข้อใดกล่าวถูก? (รหัส ASCII ของ A = 65)

1 : printf(”%c %c”, ch, 65); ผลที่แสดงออกที่จอภาพคือ A 65
2 : printf(”%d %c”, ch, 65); ผลที่แสดงออกที่จอภาพคือ A 65
3 : printf(”%c %d”, 65, 65); ผลที่แสดงออกที่จอภาพคือ A A
4 : printf(”%d %d”, 65, ch); ผลที่แสดงออกที่จอภาพคือ 65 65

เฉลย: 4
อธิบาย: %d ใช้แสดงค่าเป็นตัวเลขจำนวนเต็ม ดังนั้น 65 จะแสดงเป็น 65 และตัวแปร ch ที่เก็บตัวอักษร A ก็มีรหัส ASCII เป็น 65 จึงแสดงเป็น 65 เช่นกัน

Note: 
การแสดงผลข้อมูลสามารถทำได้โดยการเรียกใช้ฟังก์ชัน printf() มีรูปแบบคือ

printf( รูปแบบ, อาร์กิวเมนต์1, อาร์กิวเมนต์2, … );

ผู้เขียนโปรแกรมสามารถส่งข้อความใด ๆ มายังฟังก์ชัน print() หรือส่งตัวแปรมาพิมพ์ค่าโดยส่งผ่านมาทางอาร์กิวเมนต์ ให้สอดคล้องกับรูปแบบที่กำหนด ตัวอย่างเช่น

char name[] = “Mickey”;
int age = 20;
printf(“%s is %d years old.”, name, age);


ผลลัพธ์ที่ได้คือ

Mickey is 20 years old.

โดยที่ %s ตัวแรกจะถูกแทนที่ด้วยค่าของอาร์กิวเมนต์ตัวที่ 1 คือ ตัวแปร name และ %d ตัวที่ 2 จะถูกแทนที่ด้วยค่าของอาร์กิวเมนต์ตัวที่ 2 คือ ตัวแปร age

จำรหัสพื้นฐาน
รหัส ใช้กับ
%s ข้อความ / string
%d จำนวนเต็ม / int
%f ทศนิยม / float, double
%c ตัวอักษร 1 ตัว / char


ข้อ 105. ในการประกาศตัวแปร char str[ ] = ”I love \”ABC\”.”; str จะถูกกำหนดขนาดในหน่วยความจำเท่าไร?

1 : 12 bytes
2 : 13 bytes
3 : 14 bytes
4 : 15 bytes

เฉลย: 3
อธิบาย: ข้อความจริงคือ I love “ABC”. 
มี 13 ตัวอักษร และ string ในภาษา C ต้องมีตัวปิดท้าย \0 อีก 1 byte รวมเป็น 14 bytes

Note 1: 
เครื่องหมาย \" คือ escape sequence ที่ใช้เพื่อแสดงเครื่องหมายอัญประกาศคู่ (") ภายในสตริง

● ปกติ " " ใช้กำหนดขอบเขตของสตริง เช่น "Hello"
● ถ้าอยากใส่เครื่องหมาย " ข้างในสตริง ต้องใช้ backslash (\) เพื่อบอกคอมไพเลอร์ว่า " นี้เป็นตัวอักษร ไม่ใช่จุดสิ้นสุดของสตริง
● ดังนั้น \" = ตัวอักษร " จริง ๆ 1 ตัว

escape sequences ที่ใช้บ่อย
\n ขึ้นบรรทัดใหม่
\t ช่องว่างยาว
\\ Backslash (\)
\’ Single quote (')
\” Double quote (")

Note 2: 
String ใน ภาษา C ต้องบวก \0 อีก 1 ตัวเสมอ


ข้อ 106. ชื่อตัวแปรใดต่อไปนี้ไม่สามารถนำไปใช้ในการประกาศตัวแปรในภาษาโปรแกรมทั่ว ๆ ไปได้

1 : report_99
2 : food
3 : general
4 : 7sumurai

เฉลย: 4
อธิบาย: ชื่อตัวแปรทั่วไปห้ามขึ้นต้นด้วยตัวเลข


ข้อ 107. ถ้าต้องการให้ตัวแปร x เก็บค่า -123456 จะต้องประกาศให้ตัวแปร x เป็นชนิดอะไร

1 : unsigned long
2 : char
3 : unsigned int
4 : long

เฉลย: 4
อธิบาย: ค่า -123456 เป็นเลขติดลบขนาดใหญ่ ใช้ long (8 bytes)

Note: 
1 : unsigned long → เก็บเลขติดลบไม่ได้
2 : char → เก็บ -128 to 127
3 : unsigned int → เก็บเลขติดลบไม่ได้
4 : long → เก็บเลขติดลบขนาดใหญ่ -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

อ้างอิง: https://learn.microsoft.com/th-th/cpp/cpp/data-type-ranges?view=msvc-160


ข้อ 108. ต้องประกาศตัวแปรเป็นชนิดอะไร จึงจะเก็บค่า 12345 ได้อย่างประหยัดหน่วยความจำที่สุด

1 : double
2 : int
3 : long
4 : float

เฉลย: 2
อธิบาย: 12345 เป็นจำนวนเต็ม จึงใช้ int ได้เหมาะสมและประหยัดกว่า

Note: 
1 : double ใช้ 8 byte สำหรับทศนิยม
2 : int ใช้ 4 byte
3 : long ใช้ 8 byte
4 : float ใช้ 4 byte สำหรับทศนิยม


ข้อ 109. ข้อใดคือความหมายของตัวแปรท้องถิ่น (Local Variable) และตัวแปรภายนอก (Global Variable)

1 : Local Variable คือตัวแปรที่กำหนดภายในฟังก์ชันหรือลูปของโปรแกรม Global Variable คือตัวแปรที่กำหนดภายนอกโปรแกรมหลัก
2 : Local Variable คือตัวแปรที่มองเห็นเฉพาะในฟังก์ชันหรือในลูปโปรแกรม Global Variable คือตัวแปรที่สามารถมองเห็นได้ทุกแห่งในโปรแกรม
3 : Local Variable คือตัวแปรที่เปลี่ยนแปลงค่าได้ Global Variable คือตัวแปรที่ไม่สามารถเปลี่ยนแปลงค่าได้
4 : ถูกเฉพาะข้อ 1 และ 2

เฉลย: 4
อธิบาย: Local = ใช้เฉพาะที่, Global = ใช้ได้กว้างทั้งโปรแกรม


ข้อ 110. คอมพิวเตอร์จัดเก็บข้อมูลทุกชนิดในรูปแบบใด

1 : เลขฐานสอง
2 : เลขฐานสิบหก
3 : เลขฐานสิบ
4 : เลขฐานสิบแปด

เฉลย: 1
อธิบาย: คอมพิวเตอร์เก็บข้อมูลทุกอย่างเป็นเลขฐานสอง คือ 0 และ 1

Scroll to Top