Friday, February 20, 2015

ตอนที่ 2: ตัวแปร การประกาศตัวแปร และการแสดงค่าตัวแปรโดยใช้ printf()




ในตอนนี้จะพูดถึง ตัวแปร การประกาศตัวแปร และการแสดงค่าตัวแปรออกทางจอภาพโดยใช้คำสั่ง printf()

ตัวแปร

ในการเขียนโปรแกรม มักจะต้องมีการเก็บข้อมูล หรือ เก็บผลลัพธ์ในการคำนวณ ซึ่งคอมพิวเตอร์จะเก็บค่าเหล่านี้ไว้ในหน่วยความจำ โดยโปรแกรมเมอร์จะอ้างถึงหน่วยความจำผ่านตัวแปร เปรียบเสมือนตัวแปรเหมือนกล่องใส่ข้อมูล โปรแกรมสามารถดูได้ว่าในกล่องแต่ละกล่องมีข้อมูลอะไรอยู่ หรือจะเอาข้อมูลใหม่ไปใส่แทนข้อมูลเก่า ก็ทำได้

การประกาศตัวแปร (Variable declaration)

ในภาษา C ก่อนจะเริ่มใช้งานตัวแปร จะต้องมีการประกาศตัวแปรก่อน
รูปแบบคำสั่งการประกาศตัวแปรมีดังนี้

แบบที่ 1: ประกาศตัวแปรตัวเดียว โดยไม่ระบุค่าเริ่มต้น
datatype identifierName;
แบบที่ 2: ประกาศตัวแปรตัวเดียว โดยระบุค่าเริ่มต้น
datatype identifierName = initialValue;
แบบที่ 3: ประกาศตัวแปรหลายตัวที่เป็นชนิดขัอมูลแบบเดียวกัน โดยอาจจะกำหนดค่าเริ่มต้นให้กับตัวแปรบางตัว หรือไม่กำหนด หรือกำหนดทั้งหมดก็ได้
 datatype identifierName1, identifierName2 = initialValue2, identifierName3;

โดย dataType คือชนิดข้อมูล ส่วน identiferName คือ  ชื่อตัวแปร และ initialValue คือ ค่าเริ่มต้นของตัวแปร ซึ่งถ้าเราประกาศตัวแปรโดยไม่กำหนดค่าเริ่มต้น เราจะไม่ทราบว่าตัวแปรที่ประกาศขึ้นมานี้เก็บค่าอะไรอยู่ อาจจะเป็นค่าที่ค้างอยู่เดิมในหน่วยความจำ ซึ่งอาจทำให้การคำนวณในโปรแกรมของเราผิดพลาดได้

สำหรับชนิดข้อมูลในภาษา C มีดังนี้
ชนิดข้อมูล หลัก มี 3 ประเภท ได้แก่
  1. ข้อมูลจำนวนเต็ม (Integer) แบ่งเป็น 3 ประเภทย่อยตามขนาดของหน่วยความจำที่ใช้ คือ
    1. short int หรือ short เป็นข้อมูลจำนวนเต็มขนาดสั้น
    2. int เป็นข้อมูลจำนวนเต็มขนาดปกติ
    3. long int หรือ long เป็นข้อมูลจำนวนเต็มขนาดยาว
  2. ข้อมูลจำนวนจริงมีทศนิยม (Floating-point) แบ่งเป็น 3 ประเภทย่อยตามขนาดของหน่วยความจำที่ใช้ คือ
    1. float เป็นข้อมูลจำนวนจริงขนาดปกติ
    2. double เป็นข้อมูลจำนวนจริงขนาดยาว หรือ ความละเอียด 2 เท่า (double precision) 
    3. long double เป็นข้อมูลจำนวนจริงขนาดยาวกว่า double 
  3. ข้อมูลอักขระ (Character) เป็นข้อมูลชนิดอักขระ ซึ่งในภาษาซีจะเก็บข้อมูลโดยเข้ารหัสตัวอักขระเป็นเลขจำนวนเต็มเพื่อเก็บข้อมูล ส่วนการนำไปแสดงเป็นตัวอักขระก็จะถอดรหัสเลขจำนวนเต็มเป็นตัวอักขระ  ซึ่งรหัสที่ใช้ในภาษา C และเป็นรหัสที่นิยมใช้มากที่สุดในระบบคอมพิวเตอร์ คือรหัส ASCII ย่อมาจาก (American Standard Code for Information Interchange) ดูตารางแสดงรหัส ASCII ได้ที่เว็บ http://www.asciitable.com/
ขนาดของหน่วยความจำที่ใช้ในแต่ละระบบคอมพิวเตอร์ (แต่ละ Compiler) อาจจะไม่เท่ากัน แต่ความสัมพันธ์ระหว่างขนาดจะเป็นเช่นนี้เสมอ คือ
ขนาดของ long  >= ขนาดของ int >= ขนาดของ short
ขนาดของ long double >= ขนาดของ double >= ขนาดของ float 
 รูปด้านล่างนี้แสดงตัวอย่างขนาดของหน่วยความจำที่ใช้สำหรับแต่ละชนิดข้อมูล ในระบบ c9.io
หมายเหตุ นอกจากการแบ่งชนิดข้อมูลตามขนาดของหน่วยความจำที่ใช้แล้ว เรายังสามารถแบ่งย่อยข้อมูลจำนวนเต็มตามลักษณะการคิดเครื่องหมายได้อีกด้วย คือ
  1. แบบคิดเครื่องหมาย (signed) เป็นข้อมูลที่มีค่าเป็นบวกหรือลบได้ 
  2. แบบไม่คิดเครื่องหมาย (unsigned) เป็นข้อมูลที่เป็นบวกเพียงอย่างเดียว
โดยปกติชนิดข้อมูลทั้งหมดที่กล่าวมาก่อนหน้านี้จะเป็นแบบคิดเครื่องหมาย แต่เราสามารถประกาศตัวแปรให้เป็นแบบไม่คิดเครื่องหมายได้โดยเติมคำว่า unsigned ไปข้างหน้า เช่น unsigned int aa; คือ การประกาศตัวแปรชื่อ aa เป็นข้อมูลจำนวนเต็มแบบไม่คิดเครื่องหมาย ทั้งนี้ int และ unsigned int จะใช้พื้นที่ในการเก็บข้อมูลเท่ากัน แต่ int จะเก็บค่าได้ตั้งแต่ -2,147,483,648 ถึง 2,147,483,647 ในขณะที่ unsigned int จะเก็บค่าได้ตั้งแต่ 0 ถึง 4,294,967,295

การแสดงค่าตัวแปรออกทางจอภาพโดยใช้คำสั่ง printf()

printf() สามารถใช้แสดงค่าตัวแปรออกทางจอภาพได้ โดยใช้รูปแบบดังต่อไปนี้

printf("Message with %specifier", variable);
โดย variable คือตัวแปรที่ต้องการแสดงค่า ส่วน specifier คือ สิ่งที่ใช้ระบุชนิดหรือรูปแบบข้อมูลที่จะแสดง ซึ่ง specifier ที่ควรรู้เบื้องต้นมีดังนี้

  • %c จะแสดงตัวอักขระ 1 ตัว
  • %d หรือ %i จะแสดงค่าจำนวนเต็มเลขฐานสิบแบบคิดเครื่องหมาย
  • %e หรือ %E จะแสดงเลขจำนวนจริง float หรือ doubleในรูปแบบเลขยกกำลัง เช่น \[2.56\times10^5\] จะแสดงเป็น 2.56e5 (ถ้าใช้ %E จะเป็น E ตัวใหญ่แทน e)
  • %f จะแสดงเลขจำนวนจริง float หรือ double ในรูปแบบเลขทศนิยม
  • %u จะแสดงเลขจำนวนเต็มแบบไม่คิดเครื่องหมาย
นอกจากนี้เราสามารถใช้ตัว l สำหรับการระบุข้อมูลชนิด long ร่วมกับ specifier ตัวอื่นได้ เช่น
  • %ld จะแสดงเลขจำนวนเต็มแบบยาวและคิดเครื่องหมาย (long int)
  • %lu จะแสดงเลขจำนวนเต็มแบบยาวไม่คิดเครื่องหมาย (unsigned long int)

ในกรณีที่ต้องการแสดงค่าตัวแปรมากกว่า 1 ตัวในข้อความเดียวกันก็ทำได้ ตัวอย่างเช่น
printf("Var1  = %d  Var2 = %d  Var3 = %d", a, b, c); 
โปรแกรมจะแสดงข้อความโดยนำค่าจากตัวแปร a, b, และ c ไปใส่แทน %d ในข้อความตามลำดับ

Source code listing


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/*----------------------------------------------------
Program: VariableDemo
Objectives: 
    (1) Variables and declaration
    (2) Displaying variables by using printf()
Created by Panupong Sornkhom
email: panupongs@nu.ac.th
-----------------------------------------------------*/
#include <stdio.h>
int main()
{
    /*----------------------------------------------
    เมื่อคอมพิวเตอร์ต้องเก็บข้อมูล เช่น รับข้อมูลจากผู้ใช้ 
    หรือเก็บผลลัพธ์จากการคำนวณ คอมพิวเตอร์จะเก็บข้อมูลไว้ใน
    หน่วยความจำ ซึ่งการเข้าถึงหน่วยความจำนั้น
    ในการเขียนโปรแกรมจะทำผ่านตัวแปร โดยจะต้องทำการ
    ประกาศตัวแปร ซึ่งรูปแบบของคำสั่งในการประกาศตัวแปร คือ
        dataType variableName;
    หรือ
        dataType variableName = initialValue;
    เมื่อ dataType คือ ชนิดข้อมูล
        variableName คือ ชื่อตัวแปร
    กรณีมีตัวแปรหลายตัว ระบุโดยคั่นด้วยเครื่องหมาย ,
    -------------------------------------------------*/
    
    /* ประกาศตัวแปรจำนวนเต็ม ชื่อ iVariable1*/
    int iVariable1 = 5; 
    /* ประกาศตัวแปรจำนวนจริง ชื่อ fVariable2 */
    float fVariable2 = 3.14;  
    /* ประกาศตัวแปรอักขระ ชื่อ cVariable3 */
    char cVariable3 = 'A';
    
    /*----------------------------------------------
    การแสดงค่าตัวแปรโดยใช้ printf() ทำได้โดย
    ระบุ Format Specifiers โดยใช้เครื่องหมาย % 
    ภายในเครื่องหมายคำพูดที่จะแสดงข้อความ
    แล้วระบุตัวแปรที่ต้องการแสดงค่า ตัวอย่างเช่น
    printf("A = %d",var); 
    คือ แสดงข้อความ A = ค่่าของตัวแปรvar
    หากมีตัวแปรที่ต้องการแสดงค่าหลายตัว ให้ระบุโดยคั่นด้วย ,
    ----------------------------------------------*/
    printf("Answer = %d\n",iVariable1);
    printf("Answer2 = %f\n",fVariable2);
    printf("Answer3 = %c\n",cVariable3);
    printf("FinalAnswer = %f\n",
        iVariable1+fVariable2);
    printf("%d * %f = %f\n",iVariable1,fVariable2,
        iVariable1*fVariable2);
    return 0;
}




 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*----------------------------------------
Program: Datatypes in C program
Objectives:
    (1) Show various datatypes 
        and size of memory required
    (2) Show format identifiers
        related to datatypes
    (3) Show the limitation value of
        each datatype
Created by Panupong Sornkhom
email: panupongs@nu.ac.th
----------------------------------------*/
#include <stdio.h>
#include <limits.h> // ใช้กับค่าคงที่ เช่น INT_MAX 
#include <float.h>  // ใช้กับค่าคงที่ที่เกี่ยวกับกับ floating-point number
int main()
{
    // declare character variable c
    char c = 'x'; 
    // declare short variable s
    short s = 12345;
    // declare integer variable i
    int i = 1234567890; 
    // declare long variable l
    long l = 1234567890123;
    // declare floating-point vairable f
    float f = 12.9876543210;
    // declare double precision variable d
    double d = 12.9876543210; 
    // declare long double variable ld
    long double ld = 12.9876543210L; 
    
    /*
    * ใช้ sizeof เพื่อดูขนาดของหน่วยความจำ
    * เป็นจำนวน byte ที่ใช้ในแต่ละตัวแปร
    */
    printf("Size of char = %lu byte\n",sizeof c);
    printf("Size of short = %lu bytes\n",sizeof s);
    printf("Size of int = %lu bytes\n",sizeof i);
    printf("Size of long = %lu bytes\n",sizeof l);
    printf("Size of float = %lu bytes\n",sizeof f);
    printf("Size of double = %lu bytes\n",sizeof d);
    printf("Size of long double = %lu bytes\n",sizeof ld);
    
    /* 
    * แสดงความแตกต่างระหว่าง signed กับ unsigned 
    * โดยแสดงค่าคงที่ที่ประกาศไว้ในไฟล์ limits.h
    */
    printf("Minimum value of type (signed) int = %d\n",INT_MIN);
    printf("Maximum value of type (signed) int = %d\n",INT_MAX);
    printf("Minimum value of type unsigned int = %d\n",0);
    printf("Maximum value of type unsigned int = %u\n",UINT_MAX);
    
    /*
    * แสดงค่าของตัวแปรชนิดต่าง ๆ ด้วย printf 
    */
    printf("c = %c\n",c);
    printf("s = %d\n",s);
    printf("i = %d\n",i);
    printf("l = %ld\n",l);
    printf("f = %e\n",f);
    printf("f = %f\n",f);
    printf("f = %.6f\n",f);
    printf("d = %e\n",d);
    printf("d = %f\n",d);
    printf("d = %.15f\n",f);
    printf("ld = %Le\n",ld);
    printf("ld = %Lf\n",ld);
    printf("ld = %.18Lf\n",ld);
    printf("Number of digits in float = %d\n",FLT_DIG);
    printf("Number of digits in double = %d\n",DBL_DIG);
    printf("Number of digits in long double = %d\n",LDBL_DIG);
    return 0;
}

คลิป VDO อธิบาย








No comments:

Post a Comment