418115 structured programming 3 4
Download
1 / 110

418115: Structured Programming การบรรยายครั้งที่ 3 & 4 - PowerPoint PPT Presentation


  • 84 Views
  • Uploaded on

418115: Structured Programming การบรรยายครั้งที่ 3 & 4. ประมุข ขันเงิน [email protected] โปรแกรม #1. v oid main() { }. โปรแกรม #1. โปรแกรมนี้ทำอะไร ? ไม่ได้ทำอะไร ข้างในไม่มีคำสั่งอะไรเลย เข้ามาแล้วก็ออกไป. โปรแกรม #1. m ain() คืออะไร ? ฟังก์ชัน ฟังก์ชันคืออะไร ? โปรแกรมย่อย

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' 418115: Structured Programming การบรรยายครั้งที่ 3 & 4' - rafi


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
418115 structured programming 3 4

418115: Structured Programmingการบรรยายครั้งที่ 3 & 4

ประมุข ขันเงิน

[email protected]


โปรแกรม #1

void main()

{

}


โปรแกรม #1

  • โปรแกรมนี้ทำอะไร?

    • ไม่ได้ทำอะไร

    • ข้างในไม่มีคำสั่งอะไรเลย

    • เข้ามาแล้วก็ออกไป


โปรแกรม #1

  • main() คืออะไร?

    • ฟังก์ชัน

  • ฟังก์ชันคืออะไร?

    • โปรแกรมย่อย

    • ทำหน้าที่เฉพาะตัวอย่างหนึ่ง

    • ให้โปรแกรมใหญ่เรียกใช้

  • แล้วโปรแกรมใหญ่ล่ะ?

    • ระบบปฏิบัติการ (OS)


โปรแกรม #2

#include <stdio.h>

void main()

{

printf(“Hello, world!\n”);

}


โปรแกรม #2

  • โปรแกรมนี้ทำอะไร?

    • พิมพ์ Hello, world!


โปรแกรม #2

  • #include <stdio.h> คืออะไร?

    • ใช้บอกว่าเราจะไปเอาฟังก์ชันจากไฟล์ชื่อ stdio.hมาใช้

    • stdio.hเป็นไฟล์ที่เราเรียกว่า header file

    • มันบรรจุชื่อและข้อมูลอื่นๆ ของฟังก์ชันที่ฟังก์ชัน main ของเราจะไปเรียกใช้ได้


โปรแกรม #2

  • #include <stdio.h> คืออะไร?

    • ใช้บอกว่าเราจะไปเอาฟังก์ชันจากไฟล์ชื่อ stdio.hมาใช้

    • stdio.hเป็นไฟล์ที่เราเรียกว่า header file

    • มันบรรจุชื่อและข้อมูลอื่นๆ ของฟังก์ชันที่ฟังก์ชัน main ของเราจะไปเรียกใช้ได้

  • เราใช้ฟังก์ชันอะไรจาก stdio.h?

    • printf


โปรแกรม #2

  • printfมีไว้ทำอะไร?

    • พิมพ์ข้อความออกทาง standard output

  • standard output คืออะไร?

    • ช่องทางแสดงผลลัพธ์ที่ระบบปฏิบัติการสร้างให้โปรแกรมตามปกติ

    • ส่วนมากคือหน้าจอ

    • แต่เราสามารถบอกให้ระบบปฏิบัติการต่อ standard output เข้าไฟล์หรือการ์ดเน็ตเวิร์กก็ได้


โปรแกรม #2

  • “Hello, world!\n” คืออะไร?

    • ข้อมูลประเภทข้อความ

    • ภาษา C เรียกข้อมูลประเภทนี้ว่าสตริง(string)

    • ในภาษา C เราเขียนข้อความประเภท string ได้ด้วยการใช้เครื่องหมายฟันหนู (“) ล้อมรอบข้อความที่ต้องการ

    • ตัวอย่างเช่น “one”, “FranscescaLucchini”, “3.1415”


โปรแกรม #2

  • อ้าว! ทำไมพิมพ์ออกมาแล้วไม่เห็นมี \n?

    • ข้อความ \n เป็นข้อความพิเศษ

    • เรียกว่า escape sequence

    • ตัว \n แทน การเว้นบรรทัด


โปรแกรม #3

  • ผลลัพธ์ของโปรแกรมนี้ควรจะเป็นอย่างไร?

    #include <stdio.h>

    void main()

    {

    printf(“one\ntwo\nthree\n”);

    printf(“four\nfive\nsix\n”);

    }


โปรแกรม #3

one

two

three

four

five

six


Escape sequence
Escape Sequence อื่นๆ


แบบฝึกหัด #1

  • เขียนโปรแกรมเพื่อพิมพ์ข้อความ

    a\b\\”c”

    de’f’


แบบฝึกหัด #1

#include <stdio.h>

void main()

{

printf(“a\\b\\\\\”c\”\n”);

printf(“de\’f\’”);

}


แบบฝึกหัด #1

#include <stdio.h>

void main()

{

printf(“a\\b\\\\\”c\”\n”);

printf(“de’f’”);

}


เครื่องหมายเซมิโคลอน (;)

  • เวลาเราเรียกฟังก์ชันหนึ่งครึ่ง ถือเป็นคำสั่งหนึ่งคำสั่ง

    • มีคำสั่งแบบอื่นๆ อีกมากมายที่จะได้เรียน

  • ทุกคำสั่งต้องจบด้วยเครื่องหมายเซมิโคลอน (;) เสมอ

  • ระวังใส่เครื่องหมายเซมิโคลอนหลังทุกคำสั่งด้วย


โปรแกรม #4

#include <stdio.h>

void main()

{

printf(“First value is %d.\n”, 5);

printf(“Second value is %d.\n”, 7);

}


โปรแกรม #4

  • printf(“First value is %d.”, 5);

    • ข้อมูลที่เราป้อนให้ฟังก์ชันเวลาสั่งให้มันทำงาน

      เรียกว่า อาร์กิวเมนต์ (argument)

    • เวลามี argument หลายๆ ตัว เราจะคั่นมันด้วยเครื่องหมายคอมมา (,)

    • ตอนนี้ printfมี argument สองตัว

      • สตริง “First value is %d.”

      • ตัวเลขจำนวนเต็ม 5


โปรแกรม #4

  • อาร์กิวเมนต์ตัวแรกของ printfจะต้องเป็นสตริงเสมอ

    • เพราะมันคือข้อความที่เราจะพิมพ์ออกไป

  • แล้วอาร์กิวเมนต์ตัวอื่นๆ ที่ตามมาล่ะ?

    • มันจะถูกนำไปแทนค่าใส่ใน ชุดอักขระจัดรูปแบบ

  • แล้วชุดอักขระจัดรูปแบบที่ว่านั่นอยู่ไหน?

    • “First value is %d.”

    • %dบอกว่ามันจะพิมพ์ค่าที่เอามาแทนเป็น เลขฐานสิบ (decimal)


โปรแกรม #4

  • ผลลัพธ์ของโปรแกรม

    First value is 5.

    Second value is 7.


โปรแกรม #5

#incluce <stdio.h>

void main()

{

printf(“Sum of %d and %d is %d.\n”, 9, 4, 9+4);

printf(“Difference of %d and %d is %d.\n”,9, 4, 9-4);

printf(“Product of %d and %d is %d.\n”, 9, 4, 9*4);

printf(“Quotient of %d by %d is %d\n”, 9, 4, 9/4);

printf(“Modulus of %d by %d is %d\n”, 9, 4, 9%4);

}


โปรแกรม #5

  • ผลลัพธ์

    Sum of 9 and 4 is 13.

    Difference of 9 and 4 is 5.

    Product of 9 and 4 is 36.

    Quotient of 9 and 4 is 2.

    Modulus of 9 and 4 is 1.


โปรแกรม #5

  • printf(“Sum of %d and %d is %d.\n”, 9, 4, 9+4);

    • แสดงให้เราเห็นว่า printfจะมี argument กี่ตัวก็ได้

    • argument ตัวที่ตามหลังมาจะถูกนำไปแทรกที่อักขระจัดรูปแบบตามลำดับที่อักขระจัดรูปแบบปรากฏ


โปรแกรม #5

  • 9+4, 9-4, 9*4, 9/4 และ 9%4

    • เราเรียกพวกนี้ว่า นิพจน์

    • นิพจน์มีผลลัพธ์ ซึ่งจะเป็นค่าหนึ่งค่า

  • เครื่องหมายสำหรับการคำนวณเชิงคณิตศาสตร์

    • เครื่องหมาย +และ -แทนการบวกและการลบ ตามลำดับ

    • เครื่องหมาย *แทนการคูณ

    • เครื่องหมาย /แทนการหาร

      • ถ้าเอาจำนวนเต็มมาหารกันก็จะได้จำนวนเต็ม

    • เครื่องหมาย %แทนการหารเอาเศษ


โปรแกรม #5

  • เครื่องหมายพวกนี้มีลำดับความสำคัญเหมือนกับในทางคณิตศาสตร์

    • + และ – มีความสำคัญเท่ากัน

    • * และ / และ % มีความสำคัญเท่ากัน

    • * และ / และ % มีความสำคัญมากกว่า + และ –

  • เราสามารถใช้วงเล็บเพื่อจัดลำดับการคำนวณได้


แบบฝึกหัด #2

  • ผลลัพธ์ของโปรแกรมนี้คืออะไร?

    #include <stdio.h>

    void main()

    {

    printf(“%d\n”, 7+10%3);

    printf(“%d\n”, (7+10)%3);

    printf(“%d\n”, 7+10%3*4-(5*20));

    }



โปรแกรม #6

#incluce <stdio.h>

void main()

{

printf(“%f + %f = %f\n”, 9.0, 4.0, 9.0+4.0);

printf(“%f - %f = %f\n”, 9.0, 4.0, 9.0-4.0);

printf(“%f * %f = %f\n”, 9.0, 4.0, 9.0*4.0);

printf(“%f / %f = %f\n”, 9.0, 4.0, 9.0/4.0);

}


โปรแกรม #6

  • ผลลัพธ์ของโปรแกรม

    9.000000 + 4.000000 = 13.000000

    9.000000 - 4.000000 = 13.000000

    9.000000 * 4.000000 = 36.000000

    9.000000 / 4.000000 = 2.250000


โปรแกรม #6

  • ภาษา C สามารถจัดการเลขทศนิยมได้เช่นกัน

  • ค่าของเลขทศนิยม เวลาพิมพ์ต้องมีจุดทศนิยม มิฉะนั้นภาษา C จะคิดว่าเป็นจำนวนเต็ม

  • มีเครื่องหมายที่เราใช้ได้สี่เครื่องหมายคือ +, -, *, /

  • เวลาเอาเลขทศนิยมไปหารเลขทศนิยมก็จะได้เลขทศนิยมกลับมา

  • เราสามารถพิมพ์ค่าเลขทศนิยมได้ด้วยอักขระจัดรูปแบบ %f


โปรแกรม #7

#include <stdio.h>

void main()

{

int age;

age = 15;

printf(“The child age is %d\n”, age);

}


โปรแกรม #7

  • ผลลัพธ์ของโปรแกรม

    The child age is 15.


Variable
ตัวแปร (Variable)

  • ตำแหน่งในหน่วยความจำ เก็บข้อมูลหนึ่งชิ้น

  • ตัวแปรต้องมี ชื่อ

  • ตัวแปรช่วยให้เราแทน ข้อมูล ด้วย ชื่อ ทำให้ไม่จำเป็นต้องรู้ค่าของมัน

  • ในโปรแกรม #7 มีตัวแปรหนึ่งตัว ชื่อ age

  • เราพิมพ์ค่าของ age ออกทางด้วย printfได้เหมือนกับพิมพ์ค่าตัวเลข

    printf(“The child age is %d\n”, age);


การประกาศตัวแปร

  • เป็นการบอกว่า

    • มีตัวแปรชื่อนี้

    • ตัวแปรชื่อที่เราประกาศชนิดอะไร

  • ถ้าจะประกาศตัวแปรแค่ตัวเดียว ให้สั่ง

    ชนิดข้อมูล ชื่อตัวแปร1;

  • หรือถ้าจะประกาศพร้อมกันทีละหลายๆ ตัวก็ได้

    ชนิดข้อมูล ชื่อตัวแปร 1, ชื่อตัวแปร 2, ชื่อตัวแปร 3, …, ชื่อตัวแปร n;


ตัวอย่าง

intage;

intx, y, z;

float area, length;

  • intคือชนิดของตัวแปรที่เก็บจำนวนเต็มแบบหนึ่ง

  • float คือชนิดของตัวแปรที่เก็บจำนวนจริงแบบหนึ่ง


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

  • ใช้เครื่องหมายเท่ากับ (=) โดยมีรูปแบบดังนี้

    ชื่อตัวแปร = นิพจน์;

    ยกตัวอย่างเช่น x = 5; หรือ y = (10*3)%7;

  • ตัวแปรก็สามารถเข้าไปอยู่ในนิพจน์ได้ เช่น x = 10*y+y/5;

  • แม้แต่ตัวแปรตัวเดียวกันก็สามารถไปอยู่ทั้งสองฟากของเครื่องหมายเท่ากับได้

    • x = x+1;

    • z = z*z + 2*z + 1

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

    • ถ้า x เท่ากับ 5 หลังจากสั่ง x = x+1 จะได้ x เท่ากับ 6

    • ถ้า z เท่ากับ 3 หลังจากสั่ง z = z*z + 2*z + 1 แล้ว z จะมีค่าเท่ากับ 16


แบบฝึกหัด #3

#include <stdio.h>

void main()

{

int x, y, z;

x = 2; y = 5; z = 6;

x = x+y*z;

z = y–x-z;

y = 4*x/y

printf(“%d %d %d\n”, x, y, z);

}


แบบฝึกหัด #3

#include <stdio.h>

void main()

{

int x, y, z;

x = 2; y = 5; z = 6;

x = x+y*z;

z = y–x-z;

y = 4*x/y

printf(“%d %d %d\n”, x, y, z);

}

2


แบบฝึกหัด #3

#include <stdio.h>

void main()

{

int x, y, z;

x = 2; y = 5; z = 6;

x = x+y*z;

z = y–x-z;

y = 4*x/y

printf(“%d %d %d\n”, x, y, z);

}

2

5


แบบฝึกหัด #3

#include <stdio.h>

void main()

{

int x, y, z;

x = 2; y = 5; z = 6;

x = x+y*z;

z = y–x-z;

y = 4*x/y

printf(“%d %d %d\n”, x, y, z);

}

2

5

6


แบบฝึกหัด #3

#include <stdio.h>

void main()

{

int x, y, z;

x = 2; y = 5; z = 6;

x = x+y*z;

z = y–x-z;

y = 4*x/y

printf(“%d %d %d\n”, x, y, z);

}

32

2

5

6


แบบฝึกหัด #3

#include <stdio.h>

void main()

{

int x, y, z;

x = 2; y = 5; z = 6;

x = x+y*z;

z = y–x-z;

y = 4*x/y

printf(“%d %d %d\n”, x, y, z);

}

32

2

5

6

5


แบบฝึกหัด #3

#include <stdio.h>

void main()

{

int x, y, z;

x = 2; y = 5; z = 6;

x = x+y*z;

z = y–x-z;

y = 4*x/y

printf(“%d %d %d\n”, x, y, z);

}

32

2

5

6

5

32


แบบฝึกหัด #3

#include <stdio.h>

void main()

{

int x, y, z;

x = 2; y = 5; z = 6;

x = x+y*z;

z = y–x-z;

y = 4*x/y

printf(“%d %d %d\n”, x, y, z);

}

32

2

5

6

5

32

6


แบบฝึกหัด #3

#include <stdio.h>

void main()

{

int x, y, z;

x = 2; y = 5; z = 6;

x = x+y*z;

z = y–x-z;

y = 4*x/y

printf(“%d %d %d\n”, x, y, z);

}

32

2

5

6

-33

5

32

6


แบบฝึกหัด #3

#include <stdio.h>

void main()

{

int x, y, z;

x = 2; y = 5; z = 6;

x = x+y*z;

z = y–x-z;

y = 4*x/y

printf(“%d %d %d\n”, x, y, z);

}

32

2

5

6

-33

5

32

6

32


แบบฝึกหัด #3

#include <stdio.h>

void main()

{

int x, y, z;

x = 2; y = 5; z = 6;

x = x+y*z;

z = y–x-z;

y = 4*x/y

printf(“%d %d %d\n”, x, y, z);

}

32

2

5

6

-33

5

32

6

32

5


แบบฝึกหัด #3

#include <stdio.h>

void main()

{

int x, y, z;

x = 2; y = 5; z = 6;

x = x+y*z;

z = y–x-z;

y = 4*x/y

printf(“%d %d %d\n”, x, y, z);

}

32

2

5

6

-33

5

32

6

32

5

24


โปรแกรม #3

  • ผลลัพธ์ของโปรแกรม

    32 24 -33


Identifier
ชื่อ (Identifier)

  • ชื่อในภาษา C จะต้องเป็นไปตามกฏดังนี้

    • ประกอบขึ้นจากตัวเลข ตัวอักษร หรือเครื่องหมาย underscore(_)

      • name, student, a10, light_saber, _times, _101

      • one man ไม่ใช่ชื่อชื่อเดียว แต่เป็นชื่อสองชื่อ

      • [email protected]

    • ตัวอักขระตัวแรกต้องไม่เป็นตัวเลข

      • 10a ไม่ใช่ชื่อที่ถูกต้อง

    • ตัวพิมพ์ใหญ่และตัวพิมพ์เลขถือเป็นคนละชื่อกัน

      • salary, Salary, SALARY คนละชื่อกันทั้งสิ้น

    • ชื่อจะต้องไม่ซ้ำกับคำสงวน (reserved words)


Reserved words
คำสงวน (Reserved Words)

  • คำที่เป็นส่วนประกอบของภาษา C โดยตรง ห้ามใช้เป็นชื่อ

  • มี 36 คำ

  • สังเกตง่ายๆ เวลาพิมพ์โปรแกรมใน IDE เกือบทุกตัวแล้วสีของมันจะแตกต่างกับชื่ออื่นๆ

  • ตอนนี้เรารู้ reserved words สองคำ คือ

    • void

    • int


ตัวแปรชนิดต่างๆ

  • มีตัวแปรพื้นฐานอยู่ 5 แบบ

    • int = เลขจำนวนเต็ม

    • float = เลขทศนิยมความละเอียดต่ำ

    • double = เลขทศนิยมความละเอียดสูง (กว่า float 2 เท่า)

    • char = ตัวอักขระ

    • void = ไม่ระบุชนิด


ตัวแปรชนิดต่างๆ

  • สำหรับตัวแปรประเภท intเราสามารถใส่คำเพิ่มเพื่อกำหนดเครื่องหมายและความสั้นยาวได้

    • unsigned = เก็บเฉพาะค่าที่ไม่เป็นลบ

    • short = ให้ใช้หน่วยความจำน้อยลงครึ่งหนึ่ง

    • long = ให้ใช้หน่วยความจำเพิ่มขึ้นสองเท่า

  • ดังนั้นมีชนิดตัวแปรแบบ intที่เป็นไปได้อยู่ 6 แบบ

    int, unsigned int,

    short int, unsigned short int,

    long int, unsigned long int

  • short intสามารถเขียนย่อเป็น short ได้

    long intสามารถเขียนย่อเป็น long ได้



ตัวแปรชนิดต่างๆ

  • สมัยนี้ (ต่างกับประมาณ 10 ปีก่อน) intกับ long มีความหมายเดียวกัน

  • ถ้าอยากใช้เลข 64 บิตจริง ให้ใช้ตัวแปรชนิด long long

    • ค่าต่ำสุด -9,223,372,036,854,775,808

    • ค่าสูงสุด 9,223,372,036,854,775,807


โปรแกรม #8

#include <stdio.h>

void main()

{

int a = 1000000000;

short b = 1000000000;

long c = 1000000000;

long longd = 1000000000;

printf(“%d %d %d %d\n”, a, b, c, d);

}


โปรแกรม #8

  • ผลลัพธ์ของโปรแกรม

    1000000000 -13824 1000000000 100000000


โปรแกรม #8

  • เราสามารถใช้ %d กับข้อมูลประเภท int, short, long, และ long longได้

    • แต่บางครั้งค่าของ long longที่พิมพ์จะไม่ถูกต้อง (เราจะดูเรื่องนี้ในโปรแกรม #9)

  • เราสามารถกำหนดค่าที่เกินขอบเขตให้ตัวแปรใดก็ได้

    • ภาษา C จะไม่บ่น ไม่ฟ้อง compile error

    • แต่ค่าที่ตัวแปรนั้นเก็บไว้จริงๆ จะไม่ต้องกับค่าที่เรากำหนดให้

    • เช่น กำหนดค่า 1,000,000,000 ให้ b แต่ความจริงมันเก็บ -13,824

  • ต้องระวังไม่ให้ค่าที่เรากำหนดให้ตัวแปรเกินขอบเขตของมัน


โปรแกรม #9

#include <stdio.h>

void main()

{

int a = 1000000000000;

short b = 1000000000000;

long c = 1000000000000;

long long d = 1000000000000;

printf(“%d %d %d %d\n”, a, b, c, d);

}


โปรแกรม #9

  • เรากำหนดค่า 1,000,000,000,000 ให้กับตัวแปรทุกตัว

  • ค่านี้เกินขอบเขตของ intและ long (ไม่ต้องพูดถึง short)

  • ดังนั้นน่าจะได้ผลลัพธ์คือเลขตัวสุดท้ายที่พิมพ์ออกมาน่าจะเท่ากับ 1,000,000,000,000 แค่ตัวเดียว

  • แต่ผลลัพธ์ที่ได้จริงๆ คือ:

    -727379968 4096 -727379968 -727379968


โปรแกรม #9

  • เกิดอะไรขึ้น?

  • เวลาใช้ %d มันจะคิดว่าค่าที่ให้มาเป็น intซึ่งมีขนาด 32 บิต

  • หากต้องการพิมพ์ค่า 64 บิตของ long longจะต้องใช้ %lldแทน


โปรแกรม #10

#include <stdio.h>

void main()

{

int a = 1000000000000;

short b = 1000000000000;

long c = 1000000000000;

long long d = 1000000000000;

printf(“%lld %lld %lld %lld\n”, a, b, c, d);

}


โปรแกรม #10

  • ผลลัพธ์ของโปรแกรม

    -727379968 4096 -727379968 1000000000000

  • อธิบายได้หรือไม่?

    • ตัวแปร a, b, และ c ถูกกำหนดค่าที่เกินความสามารถของมัน ดังนั้นจึงเก็บค่าที่ผิดอยู่แล้ว

    • ตัวแปร d เป็นตัวแปรประเภท long longเมื่อพิมพ์ค่าด้วย %lldจึงทำให้ได้ค่าที่ถูกต้องออกมา แต่ถ้าใช้ %d มันจะถูกคิดว่าเป็น int


อักขระจัดรูปแบบอื่นๆ สำหรับตัวแปรประเภทจำนวนเต็ม

  • ถ้าอยากให้คิดว่าค่าที่ให้เป็น long longให้เติม llไปข้างหน้า

    • %lld, %llo, %llx, %llX, %llu

  • ถ้าอยากให้คิดว่าค่าที่ให้เป็น short ให้เติม h ไปข้างหน้า

    • %hd, %ho, %hx, %hX, %hu

  • ถ้าอยากให้คิดว่าค่าที่ให้เป็น long ให้เติม l ไปข้างหน้า

    • %ld, %lo, %lx, %lX, %lu


โปรแกรม สำหรับตัวแปรประเภทจำนวนเต็ม#10

#include <stdio.h>

void main()

{

int x = 253;

int y = -1*x;

printf(“%d %u %o %x %X\n”, x, x, x, x, x);

printf(“%d %u %o %x %X\n”, y, y, y, y, y);

}


โปรแกรม สำหรับตัวแปรประเภทจำนวนเต็ม#10

  • ผลลัพธ์ของโปรแกรม

    253 253 375 fdFD

    -253 4294967043 37777777403 ffffff03 FFFFFF03


โปรแกรม สำหรับตัวแปรประเภทจำนวนเต็ม#10

  • ทำไม -253 พิมพ์ออกมาด้วย %u แล้วได้ค่า 4294967043?

    • เพราะการเก็บค่าของ -253 ในตัวแปรชนิด intใช้รูปแบบของบิตเดียวกันกับ 4294667043 ในตัวแปรชนิด unsigned int

    • เราจะดูรูปแบบของบิตได้ที่ไหน?

      • ดูที่เลขฐาน 16 หรือเลขฐาน 8

    • ถ้าอยากรู้ความหมายของรูปแบบบิตเหล่านี้ ให้ดูการเก็บข้อมูลจำนวนเต็มแบบ Two’s Complement

    • สังเกตว่าการพิมพ์ตัวเลขในรูปเลขฐาน 8 และเลขฐาน 16 จะคิดว่าเลขไม่ใช่ลบเสมอ

      เพราะมันจะพิมพ์ไปตามรูปแบบของบิต


Sizeof
sizeof สำหรับตัวแปรประเภทจำนวนเต็ม

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

    sizeof(ชนิดของข้อมูล)

  • ยกตัวอย่างเช่น

    • sizeof(int)

    • sizeof(unsigned long long)

    • sizeof(short)

    • sizeof(unsigned long)


โปรแกรม สำหรับตัวแปรประเภทจำนวนเต็ม#11

#include <stdio.h>

void main()

{

printf("The number of bytes in an int is %d.\n", sizeof(int));

printf("The number of bytes in a short int is %d.\n", sizeof(short));

printf("The number of bytes in a long int is %d.\n", sizeof(long));

printf("The number of bytes in a long long is %d.\n", sizeof(long long));

}


โปรแกรม สำหรับตัวแปรประเภทจำนวนเต็ม#11

  • ผลลัพธ์ของโปรแกรม

    The number of bytes in an int is 4.

    The number of bytes in a short int is 2.

    The number of bytes in a long int is 4.

    The number of bytes in a long long is 8.


ตัวแปรประเภท สำหรับตัวแปรประเภทจำนวนเต็มchar

  • เราสามารถคิดว่ามันแทนค่าได้สองแบบ

    • ตัวอักษร เช่น a, B, c, +, -, ., !

    • เลข 8 บิต มีค่าตั้งแต่ -128 ถึง 127

  • เวลาจะพิมพ์ค่าของ char

    • ใช้ %d ถ้าต้องการพิมพ์ค่าตัวเลขตั้งแต่ -128 ถึง 127

    • ใช้ %u ถ้าต้องการพิมพ์ค่าตัวเลขตั้งแต่ 0 ถึง 255

    • ใช้ %c ถ้าต้องการพิมพ์ตัวอักษร


โปรแกรม สำหรับตัวแปรประเภทจำนวนเต็ม#12

#include <stdio.h>

void main()

{

char x = 65;

printf("x as a number is %d.\n", x);

printf("x as a character is %c.\n", x);

}


โปรแกรม สำหรับตัวแปรประเภทจำนวนเต็ม#12

  • ผลลัพธ์ของโปรแกรม

    x as a number is 65.

    x as a character is A.


Ascii
รหัส สำหรับตัวแปรประเภทจำนวนเต็มASCII

  • ทำไมค่า 65 ถึงพิมพ์ออกมาแล้วได้ตัว A?

    • เพราะ 65 คือรหัส ASCII ของตัวอักษร A

    • รหัส ASCII คือรหัสที่ยอมรับกันเป็นมาตราฐานให้ใช้แทนตัวอักษรที่ปรากฏอยู่บนคีย์บอร์ดและตัวอักษรที่ใช้บ่อยหลายๆ ตัว


ตัวแปรประเภท สำหรับตัวแปรประเภทจำนวนเต็มchar

  • เราสามารถเขียนค่าตัวอักษรในภาษา C ได้

  • ให้ใช้เครื่องหมายฟันหนู (‘) ล้อมรอบตัวอักษรนั้น

    • ‘a’

    • ‘B’

    • ‘+’

    • ‘9’


โปรแกรม สำหรับตัวแปรประเภทจำนวนเต็ม#13

#include <stdio.h>

void main()

{

char x = '9';

printf("x as a number is %d.\n", x);

printf("x as a character is %c.\n", x);

}


โปรแกรม สำหรับตัวแปรประเภทจำนวนเต็ม#13

  • ผลลัพธ์ของโปรแกรม

    x as a number is 57.

    x as a character is 9.


ตัวแปรประเภท สำหรับตัวแปรประเภทจำนวนเต็มchar

  • เนื่องจากตัวแปรประเภท char จริงๆ แล้วคือตัวเลขจำนวนเต็ม ดังนั้นคุณจึงสามารถทำอย่างนี้ได้

    • ‘A’ + 5

    • ‘B’ * ‘x’

    • 100 / ‘a’

  • เป็นประโยชน์มากสามารถใช้เป็น

    • ‘A’ + 5 มีค่าเท่ากับ 70 ซึ่งคือรหัส ASCII ของตัว ‘F’ ซึ่งเป็นตัวอักษรที่อยู่หลัง A 5 ตัว

    • ‘x’ – ‘a’ มีค่าเท่ากับ 23 ซึ่งหมายความว่า ‘x’ อยู่หลัง ‘a’ ไป 23 ตัว


String
ตัวแปรประเภท สำหรับตัวแปรประเภทจำนวนเต็มstring

  • เราสามารถประกาศตัวแปรประเภท string ได้ด้วยคำสั่ง

    char *ชื่อตัวแปร;

    • เช่น char *name;

  • หลังจากนั้นก็สามารถกำหนดค่าให้มันได้โดยใช้เครื่องหมายเท่ากับ (=)

    • เช่น name = “Dennis Richie”

  • เวลาจะพิมพ์ค่า string ด้วยคำสั่ง printfให้ใช้ตัวอักขระจัดรูปแบบ %s

    • เช่น printf(“%s\n”, name);


โปรแกรม สำหรับตัวแปรประเภทจำนวนเต็ม#14

#include <stdio.h>

void main()

{

char *name;

name = "Dennis Ritchie";

printf("%s is the creator of the C language.\n",

name);

}


โปรแกรม สำหรับตัวแปรประเภทจำนวนเต็ม#15

  • ผลลัพธ์

    Dennis Ritchie is one of the creator of the C language.


โปรแกรม สำหรับตัวแปรประเภทจำนวนเต็ม#15

  • สามารถเขียนให้สั้นลงเล็กน้อยได้ดังนี้

    #include <stdio.h>

    void main()

    {

    char *name= "Dennis Ritchie";

    printf("%s is the creators of the C language.\n",

    name);

    }


ตัวแปรที่เก็บค่าจำนวนจริงตัวแปรที่เก็บค่าจำนวนจริง

  • มีรวมทั้งหมด 3 ชนิด

    • float ขนาด 32 บิต

    • double ขนาด 64 บิต

    • long double ขนาด 64 บิต

  • long double กับ double จะเหมือนกันในสายตาของส่วนมาก แต่สำหรับคอมไพเลอร์บางตัว long double จะมีขนาด 128 บิต

  • อักขระจัดรูปแบบที่ใช้แสดงผลตัวแปรรูปแบบต่างๆ ได้แต่

    • float ใช้ %f

    • double และ long double ใช้ %lf


อักขระจัดรูปแบบสำหรับค่าประเภทจำนวนจริงอักขระจัดรูปแบบสำหรับค่าประเภทจำนวนจริง

  • %f คือการพิมพ์จำนวนจริงธรรมดา

  • %e คือการพิมพ์จำนวนจริงในรูปแบบ scientific notation

    • เช่น 123.45 จะพิมพ์เป็น 1.234500e+02 หมายความถึง 1.2345  102

  • %E คือการพิมพ์แบบ scientific notation เหมือนกัน แต่ใช้ตัว E พิมพ์ใหญ่


โปรแกรม อักขระจัดรูปแบบสำหรับค่าประเภทจำนวนจริง#16

#include <stdio.h>

void main()

{

float score;

score = 300.545;

printf("Score are %f, %e, and %E\n",

score, score, score);

}


โปรแกรมอักขระจัดรูปแบบสำหรับค่าประเภทจำนวนจริง #16

  • ผลลัพธ์ของโปรแกรม

    Score are 300.545013, 3.005450e+002, and 3.005450E+002


โปรแกรม อักขระจัดรูปแบบสำหรับค่าประเภทจำนวนจริง#16

  • ทำไมมันถึงพิมพ์ 300.545013 ทั้งๆ ที่เราสั่ง 300.545?

    • นี่เป็นเพราะว่าจำนวนจริงมีอยู่นับไม่ถ้วน

    • แต่เราใช้พื้นที่เพียง 32 บิต (ตัวแปรประเภท float) เก็บค่านั้น

    • ทำให้เราเก็บจำนวนจริงได้แค่บางตัว

    • 300.545 เป็นหนึ่งในจำนวนจริงที่เก็บไม่ได้

    • เลยต้องใช้ค่าที่ใกล้มันมากที่สุดที่เก็บได้ คือ 300.545013

    • 0.000013 ที่เกินมาเรียกว่า round-off error


โปรแกรม อักขระจัดรูปแบบสำหรับค่าประเภทจำนวนจริง#16

  • ทำอย่างไร round-off error จะหายไป?

    • มันหายไปไม่ได้ นี่เป็นข้อจำกัดทางทฤษฎี!

  • แต่เราสามารถทำให้มันลดลงได้ด้วยการใช้ตัวแปรที่ให้ความละเอียดสูงขึ้น

  • ใช้ double แทน float

    • อย่างไรก็ดีจะใช้ก็ต้องคิดดีๆ

    • ใช้แล้วหน่วยความจำสำหรับเก็บข้อมูลจะเพิ่มขึ้นสองเท่า!


โปรแกรม อักขระจัดรูปแบบสำหรับค่าประเภทจำนวนจริง#17

#include <stdio.h>

void main()

{

double score;

score = 300.545;

printf("Score are %f, %e, and %E\n",

score, score, score);

}


โปรแกรม อักขระจัดรูปแบบสำหรับค่าประเภทจำนวนจริง#17

  • ผลลัพธ์ของโปรแกรม

    Score are 300.545000, 3.005450e+002, and 3.005450E+002


การกำหนดจำนวนตัวเลขและจำนวนตัวเลขหลังทศนิยมการกำหนดจำนวนตัวเลขและจำนวนตัวเลขหลังทศนิยม

  • เราสามารถกำหนดจำนวนตัวเลขและจำนวนตัวเลขหลังทศนิยมได้ด้วยตัวอักขระจัดรูปแบบ

    %w.df

    โดยที่ w และ d เป็นจำนวนเต็มที่ไม่เป็นลบ

    • w แทนจำนวนตำแหน่งทั้งหมดในการแสดงผล รวมจุดทศนิยมหนึ่งตำแหน่ง

    • d แทนจำนวนตำแหน่งหลังจุดทศนิยม

  • ถ้าข้อมูลมีน้อยกว่า w ตำแหน่ง โปรแกรมเติมช่องว่างหน้าข้อมูลจนครบ w ตำแหน่ง

  • ยกตัวอย่างเช่น ถ้าเราพิมพ์ค่า 12.35 ด้วยอักษรจัดข้อความ %7.2f เราจะได้ข้อความ


โปรแกรม การกำหนดจำนวนตัวเลขและจำนวนตัวเลขหลังทศนิยม#18

#include <stdio.h>

void main()

{

double temp;

temp = 12.34;

printf("%7.2f, %10.3E, %10.3e\n", temp, temp, temp);

temp = 1.2365e-5;

printf("%7.2f, %10.3E, %10.3e\n", temp, temp, temp);

temp = 584.365E+17;

printf("%7.2f, %10.3E, %10.3e\n", temp, temp, temp);

}


โปรแกรม การกำหนดจำนวนตัวเลขและจำนวนตัวเลขหลังทศนิยม#18

  • ผลลัพธ์ของโปรแกรม

    12.34, 1.234E+001, 1.234e+001

    0.00, 1.237E-005, 1.237e-005

    58436500000000000000.00, 5.844E+019, 5.844e+019


โปรแกรม การกำหนดจำนวนตัวเลขและจำนวนตัวเลขหลังทศนิยม#18

  • ผลลัพธ์ของโปรแกรม

    __12.34, 1.234E+001, 1.234e+001

    ___0.00, 1.237E-005, 1.237e-005

    58436500000000000000.00, 5.844E+019, 5.844e+019


+=, -=, *=, /=, %=การกำหนดจำนวนตัวเลขและจำนวนตัวเลขหลังทศนิยม

  • สมมติว่า เป็นเครื่องหมาย

  • ถ้าสั่ง

    ตัวแปร= นิพจน์;

    จะมีความหมายเหมือนกับ

    ตัวแปร = ตัวแปร  (นิพจน์);

  • เช่น x += 1; มีความหมายเหมือนกับ x = x+1;

    y -= x*5;มีความหมายเหมือนกับ y = y – (x*5);


โปรแกรม การกำหนดจำนวนตัวเลขและจำนวนตัวเลขหลังทศนิยม#19

#include <stdio.h>

void main()

{

int a = 0, b = 5;

a += 4;

printf("a is %d\n", a);

a *= 3;

printf("a is %d\n", a);

a /= 4;

printf("a is %d\n", a);

a %= 5;

printf("a is %d\n", a);

a = 7;

a /= a - b;

printf("a is %d\n", a);

b *= b + a;

printf("b is %d\n", b);

}


โปรแกรมการกำหนดจำนวนตัวเลขและจำนวนตัวเลขหลังทศนิยม #19

  • ผลลัพธ์ของโปรแกรม

    a is 4

    a is 12

    a is 3

    a is 3

    a is 3

    b is 40


++, --การกำหนดจำนวนตัวเลขและจำนวนตัวเลขหลังทศนิยม

  • คำสั่ง x+=1;สามารถย่อเป็น x++;หรือ ++x; ก็ได้ฃ

  • คำสั่ง x-=1;สามารถย่อเป็น x--;หรือ --x; ก็ได้


โปรแกรม การกำหนดจำนวนตัวเลขและจำนวนตัวเลขหลังทศนิยม#20

#include <stdio.h>

void main()

{

int x = 8;

printf("x is %d\n", x);

x++;

printf("x is %d\n", x);

++x;

printf("x is %d\n", x);

x--;

printf("x is %d\n", x);

--x;

printf("x is %d\n", x);

}


โปรแกรม การกำหนดจำนวนตัวเลขและจำนวนตัวเลขหลังทศนิยม#20

  • ผลลัพธ์ของโปรแกรม

    x is 8

    x is 9

    x is 10

    x is 9

    x is 8


Scanf
คำสั่ง การกำหนดจำนวนตัวเลขและจำนวนตัวเลขหลังทศนิยมscanf

  • ใช้รับข้อมูลจากทาง standard input

    • ทำหน้าที่กลับกันกับ printf

  • อยู่ใน stdio.hเหมือนกับ printf

  • รูปแบบการใช้งาน

    scanf(ข้อความ, &ชื่อตัวแปร 1, &ชื่อตัวแปร 2, …, &ชื่อตัวแปร n);

  • ข้อความที่ให้เป็นอาร์กิวเมนต์ของ scanfไปจะต้องมีอักขระจัดรูปแบบเท่ากับจำนวนตัวแปรที่ให้เป็นอาร์กิวเมนต์ต่อท้าย

  • scanfจะอ่านข้อความเข้ามาหนึ่งข้อความ แล้วพยายามเอาข้อความส่วนที่ตรงกับอักขระจัดรูปแบบไปใส่ในตัวแปรที่ตรงกับอักขระจัดรูปแบบนั้น


Scanf1
คำสั่ง การกำหนดจำนวนตัวเลขและจำนวนตัวเลขหลังทศนิยมscanf

  • ยกตัวอย่างเช่น ถ้าเราสั่ง

    scanf(“%d %d”, &x, &y);

    แล้วผู้ใช้ป้อนข้อความ

    10 20

    จะได้ว่า x จะมีค่าเท่ากับ 10 และ y มีค่าเท่ากับ 20


โปรแกรม การกำหนดจำนวนตัวเลขและจำนวนตัวเลขหลังทศนิยม#21

#include <stdio.h>

void main()

{

intval;

printf("Enter a decimal integer: ");

scanf("%d", &val);

printf("The value is %o in octal, and %x in \

hexadecimal.\n", val, val);

printf("Enter an octal integer: ");

scanf("%o", &val);

printf("The value is %d in decimal.\n", val);

printf("Enter a hexadecimal integer: ");

scanf("%x", &val);

printf("The value is %d in decimal.\n", val);

}


โปรแกรม การกำหนดจำนวนตัวเลขและจำนวนตัวเลขหลังทศนิยม#21

  • ผลลัพธ์ของโปรแกรม

    Enter a decimal integer: 78

    The value is 116 in octal, and 4e in hexadecimal.

    Enter an octal integer: 116

    The value is 78 in decimal.

    Enter a hexadecimal integer: 4e

    The value is 58446 in decimal.

    (หมายเหตุ ตัวอักษรตัวพิมพ์หนาคือข้อความที่ผู้ใช้ป้อนเข้าทางคีย์บอร์ด)


แบบฝึกหัด การกำหนดจำนวนตัวเลขและจำนวนตัวเลขหลังทศนิยม#4

  • เขียนโปรแกรมรับเลขจำนวนเต็มหนึ่งตัว สมมติว่าตัวแปรนั้นคือ x เสร็จแล้วพิมพ์ค่า x, x2, และ x3


แบบฝึกหัด การกำหนดจำนวนตัวเลขและจำนวนตัวเลขหลังทศนิยม#4

#include <stdio.h>

void main()

{

int x;

scanf("%d\n", &x);

printf("%d %d %d\n", x, x*x, x*x*x);

}


แบบฝึกหัด การกำหนดจำนวนตัวเลขและจำนวนตัวเลขหลังทศนิยม#5

  • จงเขียนโปรแกรมรับรัศมีของวงกลม แล้วพิมพ์พื้นที่และเส้นรอบวงของวงกลมนั้นโดยประมาณออกทางหน้าจอ


แบบฝึกหัด การกำหนดจำนวนตัวเลขและจำนวนตัวเลขหลังทศนิยม#5

#include <stdio.h>

void main()

{

float r;

float pi = 3.14159265;

scanf("%f\n", &r);

float area = pi * r * r;

float circumference = 2 * pi * r;

printf("%f %f\n", area, circumference);

}


ad