418115 structured programming 3 4
Download
Skip this Video
Download Presentation
418115: Structured Programming การบรรยายครั้งที่ 3 & 4

Loading in 2 Seconds...

play fullscreen
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]

slide3
โปรแกรม #1
  • โปรแกรมนี้ทำอะไร?
    • ไม่ได้ทำอะไร
    • ข้างในไม่มีคำสั่งอะไรเลย
    • เข้ามาแล้วก็ออกไป
slide4
โปรแกรม #1
  • main() คืออะไร?
    • ฟังก์ชัน
  • ฟังก์ชันคืออะไร?
    • โปรแกรมย่อย
    • ทำหน้าที่เฉพาะตัวอย่างหนึ่ง
    • ให้โปรแกรมใหญ่เรียกใช้
  • แล้วโปรแกรมใหญ่ล่ะ?
    • ระบบปฏิบัติการ (OS)
slide5
โปรแกรม #2

#include <stdio.h>

void main()

{

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

}

slide6
โปรแกรม #2
  • โปรแกรมนี้ทำอะไร?
    • พิมพ์ Hello, world!
slide7
โปรแกรม #2
  • #include <stdio.h> คืออะไร?
    • ใช้บอกว่าเราจะไปเอาฟังก์ชันจากไฟล์ชื่อ stdio.hมาใช้
    • stdio.hเป็นไฟล์ที่เราเรียกว่า header file
    • มันบรรจุชื่อและข้อมูลอื่นๆ ของฟังก์ชันที่ฟังก์ชัน main ของเราจะไปเรียกใช้ได้
slide8
โปรแกรม #2
  • #include <stdio.h> คืออะไร?
    • ใช้บอกว่าเราจะไปเอาฟังก์ชันจากไฟล์ชื่อ stdio.hมาใช้
    • stdio.hเป็นไฟล์ที่เราเรียกว่า header file
    • มันบรรจุชื่อและข้อมูลอื่นๆ ของฟังก์ชันที่ฟังก์ชัน main ของเราจะไปเรียกใช้ได้
  • เราใช้ฟังก์ชันอะไรจาก stdio.h?
    • printf
slide9
โปรแกรม #2
  • printfมีไว้ทำอะไร?
    • พิมพ์ข้อความออกทาง standard output
  • standard output คืออะไร?
    • ช่องทางแสดงผลลัพธ์ที่ระบบปฏิบัติการสร้างให้โปรแกรมตามปกติ
    • ส่วนมากคือหน้าจอ
    • แต่เราสามารถบอกให้ระบบปฏิบัติการต่อ standard output เข้าไฟล์หรือการ์ดเน็ตเวิร์กก็ได้
slide10
โปรแกรม #2
  • “Hello, world!\n” คืออะไร?
    • ข้อมูลประเภทข้อความ
    • ภาษา C เรียกข้อมูลประเภทนี้ว่าสตริง(string)
    • ในภาษา C เราเขียนข้อความประเภท string ได้ด้วยการใช้เครื่องหมายฟันหนู (“) ล้อมรอบข้อความที่ต้องการ
    • ตัวอย่างเช่น “one”, “FranscescaLucchini”, “3.1415”
slide11
โปรแกรม #2
  • อ้าว! ทำไมพิมพ์ออกมาแล้วไม่เห็นมี \n?
    • ข้อความ \n เป็นข้อความพิเศษ
    • เรียกว่า escape sequence
    • ตัว \n แทน การเว้นบรรทัด
slide12
โปรแกรม #3
  • ผลลัพธ์ของโปรแกรมนี้ควรจะเป็นอย่างไร?

#include <stdio.h>

void main()

{

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

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

}

slide13
โปรแกรม #3

one

two

three

four

five

six

slide15
แบบฝึกหัด #1
  • เขียนโปรแกรมเพื่อพิมพ์ข้อความ

a\b\\”c”

de’f’

slide16
แบบฝึกหัด #1

#include <stdio.h>

void main()

{

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

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

}

slide17
แบบฝึกหัด #1

#include <stdio.h>

void main()

{

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

printf(“de’f’”);

}

slide18
เครื่องหมายเซมิโคลอน (;)
  • เวลาเราเรียกฟังก์ชันหนึ่งครึ่ง ถือเป็นคำสั่งหนึ่งคำสั่ง
    • มีคำสั่งแบบอื่นๆ อีกมากมายที่จะได้เรียน
  • ทุกคำสั่งต้องจบด้วยเครื่องหมายเซมิโคลอน (;) เสมอ
  • ระวังใส่เครื่องหมายเซมิโคลอนหลังทุกคำสั่งด้วย
slide19
โปรแกรม #4

#include <stdio.h>

void main()

{

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

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

}

slide20
โปรแกรม #4
  • printf(“First value is %d.”, 5);
    • ข้อมูลที่เราป้อนให้ฟังก์ชันเวลาสั่งให้มันทำงาน

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

    • เวลามี argument หลายๆ ตัว เราจะคั่นมันด้วยเครื่องหมายคอมมา (,)
    • ตอนนี้ printfมี argument สองตัว
      • สตริง “First value is %d.”
      • ตัวเลขจำนวนเต็ม 5
slide21
โปรแกรม #4
  • อาร์กิวเมนต์ตัวแรกของ printfจะต้องเป็นสตริงเสมอ
    • เพราะมันคือข้อความที่เราจะพิมพ์ออกไป
  • แล้วอาร์กิวเมนต์ตัวอื่นๆ ที่ตามมาล่ะ?
    • มันจะถูกนำไปแทนค่าใส่ใน ชุดอักขระจัดรูปแบบ
  • แล้วชุดอักขระจัดรูปแบบที่ว่านั่นอยู่ไหน?
    • “First value is %d.”
    • %dบอกว่ามันจะพิมพ์ค่าที่เอามาแทนเป็น เลขฐานสิบ (decimal)
slide22
โปรแกรม #4
  • ผลลัพธ์ของโปรแกรม

First value is 5.

Second value is 7.

slide23
โปรแกรม #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);

}

slide24
โปรแกรม #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.

slide25
โปรแกรม #5
  • printf(“Sum of %d and %d is %d.\n”, 9, 4, 9+4);
    • แสดงให้เราเห็นว่า printfจะมี argument กี่ตัวก็ได้
    • argument ตัวที่ตามหลังมาจะถูกนำไปแทรกที่อักขระจัดรูปแบบตามลำดับที่อักขระจัดรูปแบบปรากฏ
slide26
โปรแกรม #5
  • 9+4, 9-4, 9*4, 9/4 และ 9%4
    • เราเรียกพวกนี้ว่า นิพจน์
    • นิพจน์มีผลลัพธ์ ซึ่งจะเป็นค่าหนึ่งค่า
  • เครื่องหมายสำหรับการคำนวณเชิงคณิตศาสตร์
    • เครื่องหมาย +และ -แทนการบวกและการลบ ตามลำดับ
    • เครื่องหมาย *แทนการคูณ
    • เครื่องหมาย /แทนการหาร
      • ถ้าเอาจำนวนเต็มมาหารกันก็จะได้จำนวนเต็ม
    • เครื่องหมาย %แทนการหารเอาเศษ
slide27
โปรแกรม #5
  • เครื่องหมายพวกนี้มีลำดับความสำคัญเหมือนกับในทางคณิตศาสตร์
    • + และ – มีความสำคัญเท่ากัน
    • * และ / และ % มีความสำคัญเท่ากัน
    • * และ / และ % มีความสำคัญมากกว่า + และ –
  • เราสามารถใช้วงเล็บเพื่อจัดลำดับการคำนวณได้
slide28
แบบฝึกหัด #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));

}

slide30
โปรแกรม #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);

}

slide31
โปรแกรม #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

slide32
โปรแกรม #6
  • ภาษา C สามารถจัดการเลขทศนิยมได้เช่นกัน
  • ค่าของเลขทศนิยม เวลาพิมพ์ต้องมีจุดทศนิยม มิฉะนั้นภาษา C จะคิดว่าเป็นจำนวนเต็ม
  • มีเครื่องหมายที่เราใช้ได้สี่เครื่องหมายคือ +, -, *, /
  • เวลาเอาเลขทศนิยมไปหารเลขทศนิยมก็จะได้เลขทศนิยมกลับมา
  • เราสามารถพิมพ์ค่าเลขทศนิยมได้ด้วยอักขระจัดรูปแบบ %f
slide33
โปรแกรม #7

#include <stdio.h>

void main()

{

int age;

age = 15;

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

}

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

The child age is 15.

variable
ตัวแปร (Variable)
  • ตำแหน่งในหน่วยความจำ เก็บข้อมูลหนึ่งชิ้น
  • ตัวแปรต้องมี ชื่อ
  • ตัวแปรช่วยให้เราแทน ข้อมูล ด้วย ชื่อ ทำให้ไม่จำเป็นต้องรู้ค่าของมัน
  • ในโปรแกรม #7 มีตัวแปรหนึ่งตัว ชื่อ age
  • เราพิมพ์ค่าของ age ออกทางด้วย printfได้เหมือนกับพิมพ์ค่าตัวเลข

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

slide36
การประกาศตัวแปร
  • เป็นการบอกว่า
    • มีตัวแปรชื่อนี้
    • ตัวแปรชื่อที่เราประกาศชนิดอะไร
  • ถ้าจะประกาศตัวแปรแค่ตัวเดียว ให้สั่ง

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

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

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

slide37
ตัวอย่าง

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
slide39
แบบฝึกหัด #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);

}

slide40
แบบฝึกหัด #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

slide41
แบบฝึกหัด #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

slide42
แบบฝึกหัด #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

slide43
แบบฝึกหัด #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

slide44
แบบฝึกหัด #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

slide45
แบบฝึกหัด #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

slide46
แบบฝึกหัด #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

slide47
แบบฝึกหัด #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

slide48
แบบฝึกหัด #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

slide49
แบบฝึกหัด #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

slide50
แบบฝึกหัด #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

slide51
โปรแกรม #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
slide54
ตัวแปรชนิดต่างๆ
  • มีตัวแปรพื้นฐานอยู่ 5 แบบ
    • int = เลขจำนวนเต็ม
    • float = เลขทศนิยมความละเอียดต่ำ
    • double = เลขทศนิยมความละเอียดสูง (กว่า float 2 เท่า)
    • char = ตัวอักขระ
    • void = ไม่ระบุชนิด
slide55
ตัวแปรชนิดต่างๆ
  • สำหรับตัวแปรประเภท 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 ได้

slide57
ตัวแปรชนิดต่างๆ
  • สมัยนี้ (ต่างกับประมาณ 10 ปีก่อน) intกับ long มีความหมายเดียวกัน
  • ถ้าอยากใช้เลข 64 บิตจริง ให้ใช้ตัวแปรชนิด long long
    • ค่าต่ำสุด -9,223,372,036,854,775,808
    • ค่าสูงสุด 9,223,372,036,854,775,807
slide58
โปรแกรม #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);

}

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

1000000000 -13824 1000000000 100000000

slide60
โปรแกรม #8
  • เราสามารถใช้ %d กับข้อมูลประเภท int, short, long, และ long longได้
    • แต่บางครั้งค่าของ long longที่พิมพ์จะไม่ถูกต้อง (เราจะดูเรื่องนี้ในโปรแกรม #9)
  • เราสามารถกำหนดค่าที่เกินขอบเขตให้ตัวแปรใดก็ได้
    • ภาษา C จะไม่บ่น ไม่ฟ้อง compile error
    • แต่ค่าที่ตัวแปรนั้นเก็บไว้จริงๆ จะไม่ต้องกับค่าที่เรากำหนดให้
    • เช่น กำหนดค่า 1,000,000,000 ให้ b แต่ความจริงมันเก็บ -13,824
  • ต้องระวังไม่ให้ค่าที่เรากำหนดให้ตัวแปรเกินขอบเขตของมัน
slide61
โปรแกรม #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);

}

slide62
โปรแกรม #9
  • เรากำหนดค่า 1,000,000,000,000 ให้กับตัวแปรทุกตัว
  • ค่านี้เกินขอบเขตของ intและ long (ไม่ต้องพูดถึง short)
  • ดังนั้นน่าจะได้ผลลัพธ์คือเลขตัวสุดท้ายที่พิมพ์ออกมาน่าจะเท่ากับ 1,000,000,000,000 แค่ตัวเดียว
  • แต่ผลลัพธ์ที่ได้จริงๆ คือ:

-727379968 4096 -727379968 -727379968

slide63
โปรแกรม #9
  • เกิดอะไรขึ้น?
  • เวลาใช้ %d มันจะคิดว่าค่าที่ให้มาเป็น intซึ่งมีขนาด 32 บิต
  • หากต้องการพิมพ์ค่า 64 บิตของ long longจะต้องใช้ %lldแทน
slide64
โปรแกรม #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);

}

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

-727379968 4096 -727379968 1000000000000

  • อธิบายได้หรือไม่?
    • ตัวแปร a, b, และ c ถูกกำหนดค่าที่เกินความสามารถของมัน ดังนั้นจึงเก็บค่าที่ผิดอยู่แล้ว
    • ตัวแปร d เป็นตัวแปรประเภท long longเมื่อพิมพ์ค่าด้วย %lldจึงทำให้ได้ค่าที่ถูกต้องออกมา แต่ถ้าใช้ %d มันจะถูกคิดว่าเป็น int
slide66
อักขระจัดรูปแบบอื่นๆ สำหรับตัวแปรประเภทจำนวนเต็ม
  • ถ้าอยากให้คิดว่าค่าที่ให้เป็น long longให้เติม llไปข้างหน้า
    • %lld, %llo, %llx, %llX, %llu
  • ถ้าอยากให้คิดว่าค่าที่ให้เป็น short ให้เติม h ไปข้างหน้า
    • %hd, %ho, %hx, %hX, %hu
  • ถ้าอยากให้คิดว่าค่าที่ให้เป็น long ให้เติม l ไปข้างหน้า
    • %ld, %lo, %lx, %lX, %lu
slide67
โปรแกรม #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);

}

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

253 253 375 fdFD

-253 4294967043 37777777403 ffffff03 FFFFFF03

slide69
โปรแกรม #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)
slide71
โปรแกรม #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));

}

slide72
โปรแกรม #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.

slide73
ตัวแปรประเภท char
  • เราสามารถคิดว่ามันแทนค่าได้สองแบบ
    • ตัวอักษร เช่น a, B, c, +, -, ., !
    • เลข 8 บิต มีค่าตั้งแต่ -128 ถึง 127
  • เวลาจะพิมพ์ค่าของ char
    • ใช้ %d ถ้าต้องการพิมพ์ค่าตัวเลขตั้งแต่ -128 ถึง 127
    • ใช้ %u ถ้าต้องการพิมพ์ค่าตัวเลขตั้งแต่ 0 ถึง 255
    • ใช้ %c ถ้าต้องการพิมพ์ตัวอักษร
slide74
โปรแกรม #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);

}

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

x as a number is 65.

x as a character is A.

ascii
รหัส ASCII
  • ทำไมค่า 65 ถึงพิมพ์ออกมาแล้วได้ตัว A?
    • เพราะ 65 คือรหัส ASCII ของตัวอักษร A
    • รหัส ASCII คือรหัสที่ยอมรับกันเป็นมาตราฐานให้ใช้แทนตัวอักษรที่ปรากฏอยู่บนคีย์บอร์ดและตัวอักษรที่ใช้บ่อยหลายๆ ตัว
slide77
ตัวแปรประเภท char
  • เราสามารถเขียนค่าตัวอักษรในภาษา C ได้
  • ให้ใช้เครื่องหมายฟันหนู (‘) ล้อมรอบตัวอักษรนั้น
    • ‘a’
    • ‘B’
    • ‘+’
    • ‘9’
slide78
โปรแกรม #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);

}

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

x as a number is 57.

x as a character is 9.

slide80
ตัวแปรประเภท 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);
slide82
โปรแกรม #14

#include <stdio.h>

void main()

{

char *name;

name = "Dennis Ritchie";

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

name);

}

slide83
โปรแกรม #15
  • ผลลัพธ์

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

slide84
โปรแกรม #15
  • สามารถเขียนให้สั้นลงเล็กน้อยได้ดังนี้

#include <stdio.h>

void main()

{

char *name= "Dennis Ritchie";

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

name);

}

slide85
ตัวแปรที่เก็บค่าจำนวนจริงตัวแปรที่เก็บค่าจำนวนจริง
  • มีรวมทั้งหมด 3 ชนิด
    • float ขนาด 32 บิต
    • double ขนาด 64 บิต
    • long double ขนาด 64 บิต
  • long double กับ double จะเหมือนกันในสายตาของส่วนมาก แต่สำหรับคอมไพเลอร์บางตัว long double จะมีขนาด 128 บิต
  • อักขระจัดรูปแบบที่ใช้แสดงผลตัวแปรรูปแบบต่างๆ ได้แต่
    • float ใช้ %f
    • double และ long double ใช้ %lf
slide86
อักขระจัดรูปแบบสำหรับค่าประเภทจำนวนจริงอักขระจัดรูปแบบสำหรับค่าประเภทจำนวนจริง
  • %f คือการพิมพ์จำนวนจริงธรรมดา
  • %e คือการพิมพ์จำนวนจริงในรูปแบบ scientific notation
    • เช่น 123.45 จะพิมพ์เป็น 1.234500e+02 หมายความถึง 1.2345  102
  • %E คือการพิมพ์แบบ scientific notation เหมือนกัน แต่ใช้ตัว E พิมพ์ใหญ่
slide87
โปรแกรม #16

#include <stdio.h>

void main()

{

float score;

score = 300.545;

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

score, score, score);

}

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

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

slide89
โปรแกรม #16
  • ทำไมมันถึงพิมพ์ 300.545013 ทั้งๆ ที่เราสั่ง 300.545?
    • นี่เป็นเพราะว่าจำนวนจริงมีอยู่นับไม่ถ้วน
    • แต่เราใช้พื้นที่เพียง 32 บิต (ตัวแปรประเภท float) เก็บค่านั้น
    • ทำให้เราเก็บจำนวนจริงได้แค่บางตัว
    • 300.545 เป็นหนึ่งในจำนวนจริงที่เก็บไม่ได้
    • เลยต้องใช้ค่าที่ใกล้มันมากที่สุดที่เก็บได้ คือ 300.545013
    • 0.000013 ที่เกินมาเรียกว่า round-off error
slide90
โปรแกรม #16
  • ทำอย่างไร round-off error จะหายไป?
    • มันหายไปไม่ได้ นี่เป็นข้อจำกัดทางทฤษฎี!
  • แต่เราสามารถทำให้มันลดลงได้ด้วยการใช้ตัวแปรที่ให้ความละเอียดสูงขึ้น
  • ใช้ double แทน float
    • อย่างไรก็ดีจะใช้ก็ต้องคิดดีๆ
    • ใช้แล้วหน่วยความจำสำหรับเก็บข้อมูลจะเพิ่มขึ้นสองเท่า!
slide91
โปรแกรม #17

#include <stdio.h>

void main()

{

double score;

score = 300.545;

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

score, score, score);

}

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

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

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

%w.df

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

    • w แทนจำนวนตำแหน่งทั้งหมดในการแสดงผล รวมจุดทศนิยมหนึ่งตำแหน่ง
    • d แทนจำนวนตำแหน่งหลังจุดทศนิยม
  • ถ้าข้อมูลมีน้อยกว่า w ตำแหน่ง โปรแกรมเติมช่องว่างหน้าข้อมูลจนครบ w ตำแหน่ง
  • ยกตัวอย่างเช่น ถ้าเราพิมพ์ค่า 12.35 ด้วยอักษรจัดข้อความ %7.2f เราจะได้ข้อความ
slide94
โปรแกรม #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);

}

slide95
โปรแกรม #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

slide96
โปรแกรม #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

slide97
+=, -=, *=, /=, %=
  • สมมติว่า เป็นเครื่องหมาย
  • ถ้าสั่ง

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

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

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

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

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

slide98
โปรแกรม #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);

}

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

a is 4

a is 12

a is 3

a is 3

a is 3

b is 40

slide100
++, --
  • คำสั่ง x+=1;สามารถย่อเป็น x++;หรือ ++x; ก็ได้ฃ
  • คำสั่ง x-=1;สามารถย่อเป็น x--;หรือ --x; ก็ได้
slide101
โปรแกรม #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);

}

slide102
โปรแกรม #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

slide105
โปรแกรม #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);

}

slide106
โปรแกรม #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.

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

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

#include <stdio.h>

void main()

{

int x;

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

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

}

slide109
แบบฝึกหัด #5
  • จงเขียนโปรแกรมรับรัศมีของวงกลม แล้วพิมพ์พื้นที่และเส้นรอบวงของวงกลมนั้นโดยประมาณออกทางหน้าจอ
slide110
แบบฝึกหัด #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