โครงสร้างภาษา C

บทที่ 2
โครงสร้างของภาษา C

          ภาษา C เป็นภาษาคอมพิวเตอร์ที่ถูกค้นคิดขึ้นโดย Denis Ritchie ในปี ค.ศ. 1970 โดยใช้ระบบปฏิบัติการของยูนิกซ์ (UNIX) นับจากนั้นมาก็ได้รับความนิยมเพิ่มขั้นจนถึงปัจจุบัน ภาษา C สามารถติดต่อในระดับฮาร์ดแวร์ได้ดีกว่าภาษาระดับสูงอื่น ๆ ไม่ว่าจะเป็นภาษาเบสิกฟอร์แทน ขณะเดียวกันก็มีคุณสมบัติของภาษาระดับสูงอยู่ด้วย ด้วยเหตุผลดังกล่าวจึงจัดได้ว่าภาษา C เป็นภาษาระดับกลาง (Middle –lever language)  ภาษา C เป็นภาษาคอมพิวเตอร์ชนิดคอมไพล์ (compiled Language) ซึ่งมีคอมไพลเลอร์ (Compiler) ทำหน้าที่ในการคอมไพล์ (Compile) หรือแปลงคำสั่งทั้งหมดในโปรแกรมให้เป็นภาษาเครื่อง (Machine Language) เพื่อให้เครื่องคอมพิวเตอร์นำคำสั่งเหล่านั้นไปทำงานต่อไป

โครงสร้างของภาษา C


ทุกโปรแกรมของภาษา C มีโครงสร้างเป็นลักษณะดังรูป

 

    

เฮดเดอร์ไฟล์ (Header Files) 

     เป็นส่วนที่เก็บไลบรารี่มาตรฐานของภาษา C ซึ่งจะถูกดึงเข้ามารวมกับโปรแกรมในขณะที่กำลังทำการคอมไพล์ โดยใช้คำสั่ง

#include<ชื่อเฮดเดอร์ไฟล์> หรือ
#include  “ชื่อเฮดเดอร์ไฟล์”

ตัวอย่าง
#include<stdio.h>

                เฮดเดอร์ไฟล์นี้จะมีส่วนขยายเป็น .h เสมอ และเฮดเดอร์ไฟล์เป็นส่วนที่จำเป็นต้องมีอย่างน้อย 1 เฮดเดอร์ไฟล์ ก็คือ เฮดเดอร์ไฟล์ stdio.h ซึ่งจะเป็นที่เก็บไลบรารี่มาตรฐานที่จัดการเกี่ยวกับอินพุตและเอาท์พุต

ส่วนตัวแปรแบบ Global (Global Variables)
    เป็นส่วนที่ใช้ประกาศตัวแปรหรือค่าต่าง ๆ ที่ให้ใช้ได้ทั้งโปรแกรม ซึ่งใช้ได้ทั้งโปรแกรม  ซึ่งในส่วนไม่จำเป็นต้องมีก็ได้

ฟังก์ชัน (Functions)
    เป็นส่วนที่เก็บคำสั่งต่าง ๆ ไว้ ซึ่งในภาษา C จะบังคับให้มีฟังก์ชันอย่างน้อย 1 ฟังก์ชั่นนั่นคือ ฟังก์ชั่น Main() และในโปรแกรม 1 โปรแกรมสามารถมีฟังก์ชันได้มากกว่า 1 ฟังก์ชั่น

ส่วนตัวแปรแบบ Local (Local Variables)
       เป็นส่วนที่ใช้สำหรับประกาศตัวแปรที่จะใช้ในเฉพาะฟังก์ชันของตนเอง ฟังก์ชั่นอื่นไม่สามารถเข้าถึงหรือใช้ได้ ซึ่งจะต้องทำการประกาศตัวแปรก่อนการใช้งานเสมอ  และจะต้องประกาศไว้ในส่วนนี้เท่านั้น
ตัวแปรโปรแกรม (Statements)
        เป็นส่วนที่อยู่ถัดลงมาจากส่วนตัวแปรภายใน ซึ่งประกอบไปด้วยคำสั่งต่าง ๆ ของภาษา C และคำสั่งต่าง ๆ จะใช้เครื่องหมาย ; เพื่อเป็นการบอกให้รู้ว่าจบคำสั่งหนึ่ง ๆ แล้ว ส่วนใหญ่ คำสั่งต่าง ๆ ของภาษา C เขียนด้วยตัวพิมพ์เล็ก เนื่องจากภาษา C จะแยกความแตกต่างชองตัวพิมพ์เล็กและพิมพ์ใหญ่หรือ Case Sensitive นั่นเอง ยกตัวอย่างใช้ Test, test หรือจะถือว่าเป็นตัวแปรคนละตัวกัน นอกจากนี้ภาษา C ยังไม่สนใจกับการขึ้นบรรทัดใหม่ เพราะฉะนั้นผู้ใช้สามารถพิมพ์คำสั่งหลายคำสั่งในบรรทัดเดียวกันได้ โดยไม่เครื่องหมาย ; เป็นตัวจบคำสั่ง

 

ค่าส่งกลับ (Return Value)
เป็นส่วนที่บอกให้รู้ว่า ฟังก์ชันนี้จะส่งค่าอะไรกลับไปให้กับฟังก์ชั่นที่เรียกฟังก์ชั่น ซึ่งเรื่องนี้ผู้เขียนจะยกไปกล่าวในเรื่องฟังก์ชั่นอย่างละเอียดอีกทีหนึ่ง

กิจกรรมนับคาบเรียน

คำสั่ง  ให้นักเรียนบอกส่วนประกอบของโครงสร้างภาษา C  

กดคลิกเื่พื่อส่งคำตอบตอบ


รายละเอียดการติดตามการเรียน

ให้นักเรียน  บันทึกกิจกรรมที่ส่ง  กดที่นี่

ผู้ปกครองติดตามการเรียนของนักเรียน 
กดที่นี่


หมายเหตุ (Comment)
       เป็นส่วนที่ใช้สำหรับแสดงข้อความ เพื่ออธิบายสิ่งที่ต้องการในโปรแกรม ซึ่งจะใช้เครื่องหมาย /*และ */ ปิดหัวและปิดท้ายของข้อความที่ต้องการ

   รูปที่ 2-2 แสดงการเขียนหมายเหตุหรือ Comment ในลักษณะต่าง ๆ



โปรแกรมที่ 2 – 1 โปรแกรมแรกสำหรับนักเรียน




กิจกรรมนับคาบเรียน

  ให้นักเรียนเปิดโปรแกรม dev-c++  ดังนี้

    1.ไปที่เมนู  file เลือกรายการเมนู new  เลือกรายการ source file  หรือนักเรียนจะเลือกกดปุ่ม Ctrl+n ก็ได้

   2. เขียนโปรแกรมตามรายละเอียดโปรแกรม 2-1  ดังนี้

 #include<stdio.h>main()
  {
    printf("Hello World\n");
    return(0);
  }

    3. เมื่อพิมพ์เรียบร้อย ไปที่เมนู  excute + compile+run
    4. สังเกตผลที่เกิดขึ้น

ให้นักเรียนคัดลอกผลที่เกิดขึ้น 
กดคลิกเื่พื่อส่งคำตอบตอบ


รายละเอียดการติดตามการเรียน

ให้นักเรียน  บันทึกกิจกรรมที่ส่ง  กดที่นี่

ผู้ปกครองติดตามการเรียนของนักเรียน 
กดที่นี่

การตั้งชื่อ 


การตั้งชื่อ (Identifier) ให้กับตัวแปร ฟังก์ชันหรืออื่น ๆ มีกฎเกณฑ์ในการตั้งชื่อ ดังนี้
1.  ตัวแรกของชื่อจะต้องขึ้นต้องด้วยตัวอักษรหรือเครื่องหมาย _ เท่านั้น
2.  ตัวอักษรตั้งแต่ตัวที่ 2 สามารถเป็นตัวเลข หรือเครื่องหมาย_ก็ได้
3.  จะต้องไม่มีการเว้นวรรคภายในชื่อ แต่สามารถใช้เครื่อง_คั่นได้
4.  สามารถตั้งชื่อได้ยาวไม่จำกัด แต่จะใช้ตัวอักษรแค่ 31 ตัวแรกในการอ้างอิง
5.  ชื่อที่ตั้งด้วยตัวอักษรพิมพ์ใหญ่และพิมพ์เล็ก จะถือว่าเป็นคนละตัวกัน
6.  ห้ามตั้งชื่อซ้ำกับคำสงวนของภาษา C

ตัวอย่างการตั้งที่ถูกและผิด


แบบที่ถูก

แบบที่ผิด

A

$sum

Student_name

Student Name

_SystemName

2names

A1

int

ชนิดข้อมูล
ในการเขียนโปรแกรมภาษา C นั้น ผู้ใช้จะต้องกำหนดชนิดให้กับตัวแปรนั้นก่อนที่จะนำไปใช้งาน โดยผู้ใช้จะต้องรู้ว่าในภาษา C นั้นมีชนิดข้อมูลอะไรบ้าง เพื่อจะเลือกใช้ได้อย่างถูก
ต้องและเหมาะสม ในภาษา C จะมี 4 ชนิดข้อมูลมาตรฐาน ดังนี้

ชนิดข้อมูลแบบไม่มีค่า หรือ Void Type (Void)
ข้อมูลชนิดนี้ จะไม่มีค่าและจะไม่ใช้ในการกำหนดชนิดตัวแปร แต่ส่วนใหญ่จะใช้เกี่ยวกับฟังก์ชั่น ซึ่งจะขอยกไปอธิบายในเรื่องฟังก์ชั่น

 ชนิดข้อมูลมูลแบบจำนวนเต็ม หรือ Integer Type (int)
เป็นชนิดข้อมูลที่เป็นตัวเลขจำนวนเต็ม ไม่มีทศนิยม ซึ่งภาษา C จะแบ่งข้อมูลชนิดนี้ออกได้เป็น 3 ระดับ คือ short int,int และ long int ซึ่งแต่ละระดับนั้นจะมีขอบเขตการใช้งานที่แตกต่างกัน ดังแสดงในตารางที่ 2-1


ชนิดข้อมูล

คิดเครื่อง
หมาย

ขนาด(ไบต์)

จำนวนบิต

ค่าน้อยที่สุด

ค่ามากที่สุด

Short int

คิด
ไม่คิด

2

16

-32,768
0

32,768
65,535

Int
(16 บิต)

คิด
ไม่คิด

2

16

-32,768
0

32,768
65,535

Int
(32 บิต)

คิด
ไม่คิด

4

32

-2,147,486,643
0

2,147,486,643
4,294,967,295

Long int

คิด
ไม่คิด

4

32

-2,147,486,643
0

2,147,486,643
4,294,967,295

ชนิดข้อมูลแบบอักษร หรือ Character Type (char)
ข้อมูลชนิดนี้ก็คือ ตัวอักษรตั้งแต่ A-Z เลข 0-9 และสัญลักษณ์ต่าง ๆ ตามมาตรฐาน ACSII (American Standard Code Information Interchange) ซึ่งเมื่อกำหนดให้กับตัวแปรแล้วตัวแปรนั้นจะรับค่าได้เพียง 1 ตัวอักษรเท่านั้น และสามารถรับข้อมูลจำนวนเต็มตั้งแต่ถึง 127 จะใช้ขนาดหน่วยความจำ 1ไบต์หรือ 8 บิต

ชนิดข้อมูลแบบทศนิยม หรือ Floating Point Type (flat)
เป็นข้อมูลชนิดตัวเลขที่มีจุดทศนิยม ซึ่งสามารถแบ่งออกเป็น 3 ระดับ คือ float, double และ long double แต่ละระดับนั้นจะมีขอบเขตที่แตกต่างกันในการใช้งาน ดังแสดงในตารางที่ 2-2

 ตารางที่ 2-2 แสดงรายละเอียดของชนิดข้อมูลแบบทศนิยม

ชนิดข้อมูล

ขนาด(ไบต์)

จำนวนบิต

ค่าที่น้อยที่สุด

float

4

32

      -38                38
3.4-10    ถึง 3.4-10

double

8

64

      -308                308
1.7*10    ถึง 1.7*10

long double

10

80

      -4932             4932
3.4*10    ถึง 1.1*10

ตัวแปร
ตัวแปร คือ ชื่อที่ใช้อ้างถึงตำแหน่งต่าง ๆ ในหน่วยความจำ ซึ่งใช้เก็บข้อมูลต่าง ๆ ด้วยขนาดตามชนิดข้อมูล

การประกาศตัวแปร
การประกาศตัวแปรในภาษา C นั้นสามรถทำได้ 2 ลักษณะ คือ การประกาศตัวแปรแบบเอกภาพ หรือการประกาศตัวแปรแบบ Global คือ ตัวแปรที่จะสามารถเรียกใช้ได้ทั้งโปรแกรม และแบบที่สองการประกาศตัวแปรแบบภายใน หรือการประกาศตัวแปรแบบ Local ซึ่งตัวแปรแระเภทนี้จะใช้ได้ในเฉพาะฟังก์ชั่นของตัวเองเท่านั้น

 #include<stdio.h>
int total; /*การประกาศตัวแปรแบบ Global */
main()
{
int price,money; /*การประกาศตัวแปรแบบ Local*/

}
  

รูปที่ 2-3 แสดงการประกาศตัวแปรแบบต่าง ๆ

การกำหนดค่าให้กับตัวแปร 


การกำหนดค่าให้กับตัวแปรนั้น จะสามารถกำหนดได้ตั้งแต่ตอนที่ประกาศตัวแปรเลยหรือจะกำหนดให้ภายในโปรแกรมก็ ได้ ซึ่งการกำหนดค่าจะใช้เครื่องหมาย = กั้นตรงกลาง

int total = 0;

ถ้ามีตัวแปรข้อมูลชนิดเดียวกัน ก็สามารถทำแบบนี้ได้

int total =0,sum

หรือ

int total =0,sum=0;

ถ้าเป็นการกำหนดภายในโปรแกรม ซึ่งตัวแปรนั้นได้ประกาศไว้แล้วสามารถทำแบบนี้

total = 50;

หรือ

total = total+sum

หรือกำหนดค่าจาการพิมพ์ข้อมูลเข้าทางคีย์บอร์ด

scanf(“%d”,&total);

โปรแกรมที่ 2-2 การประกาศและใช้ตัวแปร

 #include<stdio.h>
/*การประกาศตัวแปร Global*/
int sum = 0;
int main(void)
{
/*การประกาศตัวแปรแบบ Local */
int a;
int b;
int c;

/*คำสั่ง */


printf(“\nWelcome. This Program adds\n”);
printf(“threenumbers.Enter three numbers\n”);
printf(“in the form: nnn nnn nnn <retur>\n”);
scanf(“%d %d %d”,&a,&b,&c);

/* ทำการบวกค่าระหว่าง a,b และ c เข้าด้วยกันแล้วกำหนดค่าให้ sum*/
sum=a+b+c;
printf(“The total is: %d\n”,sum);
printf(“Thant you. Have a good day.\n”);
return 0;
}

ผลการทำงาน:



กิจกรรมนับคาบเรียน

คำสั่ง  ให้นักเรียนเขียนโปรแกรมในโปรแกรม dev-c++  นามสุกลเป็น .C ตามตัวอย่างโปรแกรมที่ 2-2  แล้วส่งคำตอบมาตาม link ข้างล่าง

กดคลิกเื่พื่อตอบ


รายละเอียดการติดตามการเรียน

ให้นักเรียน  บันทึกกิจกรรมที่ส่ง  กดที่นี่

ผู้ปกครองติดตามการเรียนของนักเรียน 
กดที่นี่





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


([ชนิดข้อมูล])[ตัวแปร]

ตัวอย่าง

(float)a
(int)a

โปรแกรมที่ 2-3 แสดงการใช้ตัวแปรแบบชั่วคราว 

 #include<stdio.h>
int main(void)
{
float a= 25.3658;
printf(“Value of a : %\n”,a);
printf(“Value of a when set is integer : %d\n”,(int)a);
return 0;
}


ผลการทำงาน :


กิจกรรมนับคาบเรียน

คำสั่ง  ให้นักเรียนเขียนโปรแกรมในโปรแกรม dev-c++  นามสุกลเป็น .C ตามตัวอย่างโปรแกรมที่ 2-3  แล้วส่งคำตอบมาตาม link ข้างล่าง

กดคลิกเื่พื่อตอบ


รายละเอียดการติดตามการเรียน

ให้นักเรียน  บันทึกกิจกรรมที่ส่ง  กดที่นี่

ผู้ปกครองติดตามการเรียนของนักเรียน 
กดที่นี่



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

รูปแบบ

Const[ชนิดข้อมูล][ตัวแปร]=[ค่าหรือ นิพจน์]

ตัวอย่าง

const folat a = 5.23;
const int b = a%2;

โปรแกรมที่ 2-4 การใช้ตัวแปรชนิดข้อแบบค่าคงที่

 #include<stdio.h>
int main(void)
{
const float pi = 3.14159;
float radius;
radius = 3;
printf(“Value of pi  : %f\n”,pi);
printf(“Value of area : %f\n”,pi*(radius*radius));
return 0;
}

ผลการทำงาน:



กิจกรรมนับคาบเรียน

คำสั่ง  ให้นักเรียนเขียนโปรแกรมในโปรแกรม dev-c++  นามสุกลเป็น .C ตามตัวอย่างโปรแกรมที่ 2-4  แล้วส่งคำตอบมาตาม link ข้างล่าง

กดคลิกเื่พื่อตอบ


รายละเอียดการติดตามการเรียน

ให้นักเรียน  บันทึกกิจกรรมที่ส่ง  กดที่นี่

ผู้ปกครองติดตามการเรียนของนักเรียน 
กดที่นี่




Character Constants เป็นค่าคงที่ชนิดตัวอักษร ซึ่งจะต้องอยู่ภายในเครื่องหมาย ‘’เท่านั้น
const char b = ‘t’;

String Constants เป็นค่าคงที่เป็นข้อความ ซึ่งจะต้องอยู่ภายใต้เครื่องหมาย “”เท่านั้น
“”
“h”
“Hello world\n”
“HOW ARE YOU”
“Good Morning!”


โปรแกรมที่ 2-5 การใช้ตัวแปรชนิดข้อมูลแบบค่าคงที่แบบต่าง ๆ

 #include<stdio.h>
int main(void)
{
const int a = 3; /*Integer Constats*/
const flat b = 3.14159; /*Floating – Point Constants*/
const cahr c = ‘P’; /*Character Constants*/
printf(“Value of a: %d\n”,a);
printf(“Value of b: %d\n”,b);
printf(“Value of c: %d\n”,c);
printf(“Good Bye”); /*String Constants*/
return 0;
}

ผลการทำงาน 


 

กิจกรรมนับคาบเรียน

คำสั่ง  ให้นักเรียนเขียนโปรแกรมในโปรแกรม dev-c++  นามสุกลเป็น .C ตามตัวอย่างโปรแกรมที่ 2-5  แล้วส่งคำตอบมาตาม link ข้างล่าง

กดคลิกเื่พื่อตอบ


รายละเอียดการติดตามการเรียน

ให้นักเรียน  บันทึกกิจกรรมที่ส่ง  กดที่นี่

ผู้ปกครองติดตามการเรียนของนักเรียน 
กดที่นี่



Statements
                    statements ในภาษา c คือ คำสั่งต่าง ไ ที่ประกอบขึ้นจนเป็นตัวโปรแกรม ซึ่งในภาษา c นั้นได้แบ่งออกเป็น 6 แบบ คือ Expression Statement และ Compound Statement ณ.ที่นี้จะมีด้วยกัน 2 แบบ

  1. Expression Statement  หรือเรียกอีกอย่างหนึ่งว่า Single Statement ซึ่ง Statement  แบบนั้นจะต้องมีเครื่องหมาย; หลังจาก statement เมื่อภาษา C พบเครื่องหมาย ; จะทำให้มันรู้ว่าจบชุดคำสั่งแล้ว แล้วจึงข้ามไปทำ Statement ชุดต่อไป

       a = 2;
หรือ
     printf(“x contains %d, y contains %d\n”,x,y);

                  Compound Statement คือ ชุดคำสั่งที่มีคำสั่งต่าง ๆ รวมอยู่ด้านใน Block ซึ่งจะใช้เครื่องหมาย {เป็นการเปิดชุดคำสั่ง และใช้} เป็นตัวปิดชุดคำสั่ง ตัวอย่างที่เห็นได้ชัดเจนสำหรับ Statement แบบนี้ คือ ตัวฟังก์ชั่น Main โดยทั่ว ๆ ไปในภาษา C Compound Statement จะเป็นตัวฟังชั่น

ผังงาน
         ผังงาน (Flowchart)  มีไว้เพื่อให้ผู้ใช้ออกแบบขั้นตอนการทำงนของโปรแกรมก่อนที่จะลงมือเขียน โปรแกรม ซึ่งจะช่วยให้ผู้ใช้เขียนโปรแกรมได้ง่ายขึ้นและไม่สับสนซึ่งผังงานที่นิยม ใช้มีมาตรฐานมากมายหลายแบบ  โดยมีสัญลักษณ์ของผังงานดังนี้

1.  Terminator   สัญลักษณ์แทนจุดเริ่มต้นและจุดสิ้นสุด 




       



2.   Process   สัญลักษณ์กระบวนการต่าง ๆ เช่น การประกาศตัวแปร การบวก เป็นต้น 


      



3.      Decision   สัญลักษณ์เงื่อนไข


       



4. Data สัญลักษณ์ติดต่อกับผู้ใช้โดยการรับข้อมูลหรือแสดงข้อมูล




5.  Manual Input สัญลักษณ์การรับข้อมูลจากผู้ใช้




6.Display สัญลักษณ์การแสดงผลออกทางจอภาพ



      

7. Predefined Process สัญลักษณ์ระบุการทำงานย่อยหรือฟังก์ชั่นย่อย



              
8.  Connect  สัญลักษณ์จุดเชื่อม



       

9.   Arrow  สัญลักษณ์เส้นทางการดำเนินงาน


      โดยการออกแบบผังงาน จะมี 3 แบบ ดังนี้


1.  แบบเรียงลำดับ จะเป็นลักษณะการทำงานที่เรียงกันไปเรื่อย ๆ โดยไม่มีการวนซ้ำ ดังรูป
 

                                             

2.  แบบทางเลือก จะเป็นลักษณะการทำงานที่มีทางเลือก ซึ่งจะพบในเรื่องคำสั่งเงื่อนไข เช่น คำสั่ง if…else ดังรูป
               

                                                                                                           

3.  แบบการทำงานซ้ำ จะเป็นลักษณะการทำงานที่วนการทำงานแบบเดิม จนครบตามจำนวนที่ต้องการ ซึ้งจะพบในเรื่องคำสั่ง วนลูป เช่น คำสั่ง do….while ดังรูป

 

 


แบบทดสอบ  เก็บคะแนน  10  คะแนน  ข้อละ  5  คะแนน

ข้อที่   1   ให้นักเรียนเขียนโปรแกรม  เพื่อแสดงผล  คำว่า  Hello the world!  กดคลิกเื่พื่อตอบ

ข้อที่  2  ให้นักเรียนเขียนโปรแกรมการประกาศชนิดข้อมูลและตัวแปร ดังนี้

     a เป็น int  มีค่าเท่ากับ  20

    b  เป็น float  มีค่าเท่ากับ 45.523

    c  เป็น  string  เก็บค่าคือ  "The Big C"

  pi เป็นค่าคงที่ ชนิดข้อมูลแบบ float  มีค่า เท่ากับ 3.1453

กดคลิกเื่พื่อตอบ


รายละเอียดการติดตามการเรียน

ให้นักเรียน  บันทึกกิจกรรมที่ส่ง  กดที่นี่

ผู้ปกครองติดตามการเรียนของนักเรียน 
กดที่นี่

Comments