เนื้อหาวิชา : 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,647unsigned 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