ใบงานที่€¦ · web viewโปรแกรม example2_1_1.c ก บ...

Post on 22-Jul-2020

4 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

ใบความรท 2เรอง องคประกอบพนฐาน ตวดำาเนนการ ในการเขยนโปรแกรมภาษาซ

(ประกอบแผนการสอนท2)รายวชา การโปรแกรมและการประยกต ง 40214

ชวงชนท 4

องคประกอบพนฐานของการเขยนโปรแกรมภาษา Cอกขระ(characters) คาคงท(constants)

ตวแปร(variables) ตวดำาเนนการ(operators) นพจน(expressions) Characters แบงเปน

ตวเลข (digits) คอ ตวเลข 0 ถง 9 และเลขฐานสบหก คอ A B C D E และ F ตวอกษร(letters) คอตวอกษรในภาษาองกฤษ เปนตวพมพใหญและตวพมพเลก คอ A-Z และ a-z

อกขระพเศษ(special characters) คอ ! * + " < # ( = | > % ) ~ : / ^ - [ ; ? , & _ ] ' . space ในภาษาซ ถอวา เครองหมายขดเสนใตเปนตวอกษร ตวหนง characters ตาง ๆ นจะใชเปนคาคงท ตวแปร ตวดำาเนนการ

Constants เปนคาทมคาไมเปลยนแปลง แบงเปนคาคงทประเภทเลขจำานวนเตม (integer constant) คอเลขจำานวน

เตม ทอยระหวาง -32768 ถง 32767 เชน -25 หรอ 0 หรอ 236 คาเหลานแตละคาใชหนวยความจำาในการเกบ 2 ไบต คาเหลานเขยนในรปเลขฐานสบ ฐานแปด(เขยนโดยใชเลขศนยนำาหนา เชน 045) เลขฐานสบหก(เขยนโดย ใชเลขศนยและ x นำาหนา เชน 0x28 0X2AF)

คาคงทชนดตวเลขทศนยม(floating point constants) เปนตวเลขทศนยม เชน 1.0 1.6 E+09 คานใชหนวยความจำาในการเกบคาละ 4 ไบต และมคาอยในชวง 1.2 E -38 ถง 3.4E+38 โดย 3 ไบตแรกเกบคาตวทศนยม สวนไบตสดทายเกบเลขยกกำาลง

คาคงทชนดตวเลขทศนยมความละเอยดสองเทา (double floating point) เรยกสน ๆ วา double เกบจำานวน 2.2E-308 ถง 1.8E+308

เทานน ใชหนวยความจำา 8 ไบต 7 ไบตแรกเกบเลขทศนยม ไบตสดทายเกบเลขยกกำาลง

คาคงทชนดตวอกขระ (single character constant) เกบตวอกขระ 1 ตว โดยใชเครองหมาย ' และ ' ลอม 1 ตวอกขระใช 1 ไบต เชน 'E' 'X'

คาคงทชนดขอความ (string constant) ใชเกบขอความ มความยาวตงแต 1 ตวอกขระ เกบในรปอารเรย แตละตวใชหนวยความจำา 1 ไบต เรยงตอกนโดยไบตสดทายจะตองเกบ \0 (null charactor) เพอบอกวาจบขอความแลว เชน "Bodindecha" ใชหนวยความจำา 11 ไบต

ตวแปร(variables)

เปนชอทตงเพอใชอางองถงขอมลตาง ๆ โดยตวแปรจะมการใชเนอทในหนวยความจำาในปรมาณทตางกนขนกบชนดของขอมล ขอมล พนฐานในภาษาซ ม 5 ชนด คอ อกขระ (char) จำานวนเตม(int) จำานวนจรง(float) จำานวนจรงละเอยด 2 เทา(double) ไมใหคาใด ๆ (void) นอกจากนเพอความสามารถในการใชงานจงมการเพมชนดของตวแปรขนมาดงตาราง

ตารางแสดงชนดของตวแปรคำาประกาศชนดของ

ตวแปรเครองหมาย จำานวนไบต

ทใชคาทเปนไปได

char คดเครองหมาย 1 -128 ถง 128int คดเครองหมาย 2 -32768 ถง 32767short คดเครองหมาย 2 -32768 ถง 32767long คดเครองหมาย 4 -2147483648 ถง

2147483647unsigned char

ไมคดเครองหมาย

1 0 ถง 255

unsigned int

ไมคดเครองหมาย

2 0 ถง 65535

unsigned short

ไมคดเครองหมาย

2 0 ถง 65535

unsigned long

ไมคดเครองหมาย

4 0 ถง 4294967295

float คดเครองหมาย 4 3.4E-38 ถง 3.4E+38

double คดเครองหมาย 8 1.7E-308 ถง 1.7E+308

long double

คดเครองหมาย 10 3.4E-4932 ถง 1.1E+4932

การตงชอตวแปร1. ตองขนตนดวยตวอกษรหรอเครองหมาย underscore เทานน

2. ตวตอไปจะเปนตวเลขหรอตวอกษรหรอเครองหมาย underscore 3. ชอมความยาวไมจำากด (ตงยาวเกนได แต compiler จำาแนกไดเพยง 31 ตวแรกเทานน ตงเกนจงไมมประโยชน)4.หามตงชอตรงกบคำาสงวนในภาษาซ ซงม 33 คำา ดงน asm auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while5. ชอตวแปรควรสอความหมายของตวแปรเพอปองกนความสบสนของการพจารณาโปรแกรม

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

ในการจะใชงานตวแปรจะตองมการประกาศชนดและชอของตวแปรนนกอน โดยการประกาศตวแปรใชรปแบบ คอ

ชนดของตวแปร ชอตวแปรโดยถามตวแปรชนดเดยวอาจประกาศพรอมกนโดยใช คอมมา คนระหวาง

ชอของตวแปร ถามการกำาหนดคาใหใชเครองหมาย = และใชเครองหมายแสดงการจบคำาสงเมอสนสด คำาสง ตวอยาง เชน

char name, day = 'S' , surname[20] ="Kodedee";int x=5 ,y,z[100]; float a=5.00 ,b,c; double

k=1.234567, m ;

การประกาศคาคงท(หรอตวคงท)

คาคงทมลกษณะทำานองเดยวกบตวแปร แตเปนตวแปรทมคาไมเปลยนแปลง การประกาศทำาได 2 แบบ คอใชคำาสง const ดงน

const ชนดของขอมล ชอตวแปร = คาของตวแปร;เชน const int num1 = 5; const float vat = 0.07; const char student[10] = ‘Bush’;ใช directive #define (เคยอธบายมาแลว) ดงน #define ชอตวคงท คาคงท เชน #define NUM1 5 #define VAT 0.07 #define STUDENT Bush โปรแกรม MinGW ไดกำาหนดคาคงทมาใหไวดวย โดยคาคงททเปนจำานวนเตมจะเกบไวใน header file คอ limits.h สวนจำานวนจรงจะอยใน float.h ดงตวอยางในโปรแกรม con_max_min.c ทแสดงไว

/* con_max_min.c */#include <stdio.h>#include <limits.h>main(){ printf("\n\tConstants names\tValue\n"); printf("\n\tCHAR_BIT \t%d",CHAR_BIT); printf("\n\tCHAR_MAX \t%d",CHAR_MAX); printf("\n\tCHAR_MIN \t%d",CHAR_MIN); printf("\n\tSCHAR_MAX \t%d",SCHAR_MAX); printf("\n\tSCHAR_MIN \t%d",SCHAR_MIN); printf("\n\tINT_MAX \t%d",INT_MAX); printf("\n\tINT_MIN \t%d",INT_MIN); printf("\n\tLONG_MAX \t%ld",LONG_MAX); printf("\n\tLONG_MIN \t%ld",LONG_MIN); printf("\n\tSHRT_MAX \t%hd",SHRT_MAX); printf("\n\tSHRT_MIN \t%hd",SHRT_MIN); printf("\n\tUCHAR_MAX \t%u",UCHAR_MAX); printf("\n\tUINT_MAX \t%u",UINT_MAX); printf("\n\tULONG_MAX \t%lu",ULONG_MAX); printf("\n\tUSHRT_MAX \t%hu",USHRT_MAX); getch();} เมอโปรแกรมทำางานจะไดผลดงรป

ตวดำาเนนการ(operator)

ตวดำาเนนการมหลายประเภทลกษณะการดำาเนนการแตกตางกนไป ในทนจะกลาวถงบางประเภทเทานน

ตวดำาเนนการทางคณตศาสตร (mathematical operators)สญลกษณ การดำาเนนการ ตวอยาง

+ การบวก 2+5 ผลลพธ 7- การลบ 7-4 ผลลพธ 3* การคณ 2*6 ผลลพธ 12/ การหาร 8/2 ผลลพธ 4% การหารหาเศษ 9%4 ผลลพธ 1

ตวดำาเนนการความสมพนธหรอการเปรยบเทยบ (relational operators)

สญลกษณ การดำาเนนการ ตวอยาง< นอยกวา 2<3 ผลลพธ จรง(1)> มากกวา 2>3 ผลลพธ

เทจ(false)(0)<= นอยกวาหรอเทากบ 2<= 3 ผลลพธ

จรง(true)>= มากกวาหรอเทากบ 2>= 3 ผลลพธ

เทจ(false)== เทากบ 4==4 ผลลพธ

จรง(true)!= ไมเทากบ 2!= 2 ผลลพธ

เทจ(false)

ตวดำาเนนการตรรกะ (logical operators)สญลกษณ การดำาเนนการ ตวอยาง

&& และ(AND) (2<3)&&(3>1) ผลลพธ จรง

|| หรอ(OR) (2>3)||(4<1) ผลลพธ เทจ(false)

! ไม(NOT) !(2> 3) ผลลพธ จรง(true)

ตวดำาเนนการกำาหนดคา (assignment operators)สญลกษณ การดำาเนนการ ตวอยาง

= กำาหนดคา(assignment

)

a=2 ความหมายคอ กำาหนดใหa มคาเปน 2

+= การบวก(addition)

a+=b ความหมายคอ(a=a+b)

*= การคณ(multiplicat

ion)

a*=b ความหมายคอ(a=a*b)

-= การลบ(subtraction

)

a-=b ความหมายคอ(a=a-b)

/= การหาร(division)

a/=b ความหมายคอ(a=a/b)

%= การหารหาเศษ(remainder

)

a%=b ความหมายคอ(a=a%b)

++ เพมคา(increment)

a++ หรอ ++a ความหมายคอ a=a+1

-- ลดคา(decrement)

a-- หรอ --a ความหมายคอ a=a-1

ลำาดบการดำาเนนการของตวดำาเนนการ (operator precedence)ลำาดบท

ตวดำาเนนการ ลกษณะการทำางาน

1 ( ) [ ] . -> ซาย ไป ขวา2 - ~ | * & ขวา ไป ซาย3 ++ -- ขวา ไป ซาย4 * / % ซาย ไป ขวา5 + - ซาย ไป ขวา6 << >> ซาย ไป ขวา

7 < > <= >= ซาย ไป ขวา8 == != ซาย ไป ขวา9 &(bitwise AND) ซาย ไป ขวา

10 ^(bitwise XOR) ซาย ไป ขวา11 |(bitwise OR) ซาย ไป ขวา12 && ซาย ไป ขวา13 || ซาย ไป ขวา14 ?: ซาย ไป ขวา15 = += -= /= %= ขวา ไป ซาย16 <<= >>= ขวา ไป ซาย

โดยตวดำาเนนการทมลำาดบนอยกวาจะดำาเนนกอนตวดำาเนนการทมลำาดบสงกวา เชน X = 2 + 5 * 3 จะมลำาดบการดำาเนนการ คอ ลำาดบท 1 5 * 3 (เพราะ * มลำาดบเปน 4 สวน + อยลำาดบ 5) ลำาดบท 2 2 + 15 ลำาดบท 3 17 เปนคาของ X นพจน (expression)

เกดจากการนำา คาคงท หรอ ตวแปร และตวดำาเนนการมาประกอบกน โดยนพจนมหลายชนด เชนนพจนทางคณตศาสตร นพจนทางตรรกะ นพจนทางการเปรยบเทยบ นพจนเกยวกบเงอนไข นพจนเกยวกบขอความ เชน

2 + x * 5 เปนตวอยางของนพจนทางคณตศาสตร (2>3)&&(5>=4) เปน

นพจนทางตรรกะและการเปรยบเทยบ !(a) เปนนพจนทางตรรกะ if(x==y) เปนนพจนเงอนไข

ตวอยาง การหาผลลพธของนพจน กำาหนด int a = 10 , b = 12, c =3; จงหาผลลพธของ 2 * a + b % c ดำาเนนการดงน (2 * a) + (b %c) ผลลพธ คอ 20 + 0 คอ 20

จากขอกำาหนดดานบน จงหาผลลพธ ของ (a>b)&&(c<=b) ซงเราอาจพจารณา ดงน

(เทจ)&& (จรง) ดงนน ผลลพธ คอ เทจ จากความรทเรยนมาในใบความรท 1 และ 2 ควรจะเขยนโปรแกรมเปนภาษาซไดบางแลว

ตวอยาง 2.1 กำาหนดให x y z เปนจำานวนเตม จงเขยนโปรแกรม หา คา ของ z ทมความสมพนธกบ x y เปนสมการทางคณตศาสตร ดงน z = 5x + 10y โดย x มคาเปน 6 สวน y มคา 7 และแสดงผลลพธทางจอภาพโปรแกรม อาจเปนทำานองน/* program example2_1_1.c */#include <stdio.h>int x = 6,y=7,z; /* declare variable */main(){ z = (5 * x) +( 10 * y); /* compute value of z */ printf("value of x = %d \t value of y = %d \t value of z = %d",x,y,z); getch(); /* wait for keyboard pressing */}

หรอ

/* program example2_1_2.c */#include <stdio.h>int x = 6,y=7,z;main(){ printf("value of x = %d \t value of y = %d \t value of z = %d",x,y,5*x+10*y); getch(); /* wait for keyboard pressing */}

โปรแกรม example2_1_1.c กบ example2_1_2.c จะใหผลทแสดงออกเหมอนกน ตางกนทขนตอนการดำาเนนการ example2_1_1.c มการประกาศตวแปรทใชทวไปตลอดโปรแกรม และมการคำานวณ คา z เกบไวในหนวยความจำากอน จงแสดงผลลพธ สวนโปรแกรม example2_1_2.c ประกาศตวแปรทใชไดเฉพาะในฟงกชน main() เทานน และไมมการคำานวณหาคา z แตคำานวณแลวแสดงผลลพธออกทางจอภาพเลยโดยไมมการเกบคาทคำานวณไดไวในตวแปร z

ตวอยางท2.2 จาก ขนตอนวธหรอรหสจำาลอง ตอไปน เรมตน

กำาหนดคาความยาวฐาน = 5กำาหนดคาความสง = 4คำานวณพนท = 0.5 x ความยาวของฐาน x ความสงพมพหวรายงานพมพความยาวของฐาน

พมพความสงพมพพนท

จบจงเขยนโปรแกรมททำางานตามขนตอนวธ ดงกลาวจากขนตอนวธ ดงกลาว อาจเขยนโปรแกรมได ดงโปรแกรม example2_2.c ดงน/* program example2_2.c */#include <stdio.h> int lengt , high ;float area;main(){ /* begin the program */ lengt = 5; /* assign the length of triangle */ high = 4; /* assign the height of triangle */ area = 0.5 * lengt * high ; /* compute the area of triangle */ printf("\tDetermination of triangle area\n"); /* print report title */ printf("\tThe length of triangle = %d\n ",lengt); /* print length */ printf("\tThe height of triangle = %d\n ",high); /* print height */ printf("\tThe area of triangle = %.2f\n",area); /* print area */

getch(); /* wait for keyboard pressing */} /* end program */ผลการทำางานของโปรแกรมน จะลกษณะ ดงรป

ตวอยาง 2.3 จงเขยนโปรแกรมหา พนทวงกลมทมรศม 2.00 หนวยวธการ เนองจากขนตอนการทำางานไมยงยากและคดวานกเรยนคงสามารถสรางขนตอนในสมองได จงไมเขยนรหสลำาลองกอน โปรแกรมอาจเขยนได ดง โปรแกรม example2_3.c ดงน/* program 2_3.c */#include <stdio.h>#define pi 3.14float radius,area;main() { radius = 2.00; area = pi * radius * radius; printf("\tArea of circle\n "); printf("\tRadius = %.2f \n",radius); printf("\tArea = %.2f \n",area); getch(); }

พจารณาตำาแหนงน

ตวอยาง 2.4 การหารจำานวนเตมและการหาจำานวนจรง ใหนกเรยนศกษาการทำางานของโปรแกรม example2_4.c ซงมคำาสง ดงน/* program example2_4.c */ #include <stdio.h>main(){ int x,y; float a,b,c,d; x = 5; y = 2; a = 5; b = 2; c = 5.0; d = 2.0; printf("\n\tInteger division\n"); printf("\t x/y = %d \n\t y/x = %d \n",x/y,y/x); printf("\t 5/2 = %d \n\t 2/5 = %d \n",5/2,2/5); printf("\n\tFloating point division\n"); printf("\t a/b = %f \n\t b/a = %f \n",a/b,b/a); printf("\t c/d = %f \n\t d/c = %f \n",c/d,d/c); printf("\t 5/2 = %f \n\t 2/5 = %f \n" ,5/2 , 2/5); printf("\t 5./2. = %f \n\t 2./5. = %f \n",5./2.,2./5.); printf("\t 5.0/2.0 = %f \n\t 2.0/5.0 = %f \n",5.0/2.0,2.0/5.0); getch(); }เมอโปรแกรมทำางานจะไดผลลพธดงรป

ตวดำาเนนการเอกภาค (unary operator)

คอ ตวดำาเนนการทดำาเนนกบตวแปรตวเดยว เชน ++x หรอ ++x หรอ –y หรอ y— ซงมลกษณะการใช 2 แบบ คอ ตวดำาเนนการเอกภาคเตม

หนา( prefix mode ) เชน ++x หรอ – y ตวดำาเนนการแบบนจะทำางานกอนทจะทำาตามคำาสงอน กบ ตวดำาเนนการเอกภาคเตมหลง (postfix mode) เชน x++ หรอ y-- ตวดำาเนนการแบบนจะทำางานหลงจากททำาคำาสงอน แลว

ตวอยาง 2.5 โปรแกรม example2_5.c แสดงการใชตวดำาเนนการเอกภาคทำางานรวมกบการทำางานอน ๆในคำาสงเดยวกน /* program example2_5.c */ #include <stdio.h>main(){ int a,b; a = b = 0; printf("\n\ta\tb"); printf("\n\t%d\t%d",a++,++b); /* จะมการพมพคา a เปน 0 กอนเพมคา a เปน 1 สวน b จะเพมคาเปน 1 กอนพมพคา */ printf("\n\t%d\t%d",a++,++b); /* จะมการพมพคา a เปน 1 กอนเพมคา a เปน 2 สวน b จะเพมคาเปน 2 กอนพมพคา */ b = a++ ; /* กำาหนด คา b ใหมคา เทากบ a คอ 2 แลวเพมคา a อก 1 เปน 3 printf("\n"); printf("\n\t%d\t%d",a,b); /* พมพ a คอ 3 และ b คอ 2 */ b = ++a ; /* เพมคา a อก 1 เปน 4 แลวใหเปนคาของ b ดงนน b มคาเปน 4 */ printf("\n"); printf("\n\t%d\t%d",a,++b); / พมพคา a คอ 4 และ เพมคา b อก 1 เปน 5 แลวจงพมพ คา b คอ 5 b = b + ++a ; /* เพมคา a อก 1 เปน 5 แลวนำาไปบวก กบ b เดมคอ 5 ทำาให b มคาเปน 10 */ printf("\n"); printf("\n"); printf("\n\t%d\t%d",a,b); /* พมพคา a คอ 5 สวน b คอ 10 b = a-- - a ; /* นำาคา a คอ 5 ลบกน ได 0 ทำาให b มคาเปน 0 แลวลดคา a อก 1 ทำาให a มคาเปน 4 */ printf("\n"); printf("\n\t%d\t%d",a,b); /* พมพ คา a คอ 4 และ b คอ 0 b = ++a - a ; */ เพมคา a จาก 4 เปน 5 แลวลบกน เปน คา b ทำาให b มคาเปน 0 */ printf("\n"); printf("\n\t%d\t%d",a,b); /* พมพคา a คอ 5 สวน b คอ 0 */ b = a - --a ; /* ลดคา a ลง 1 ทำาให a มคา เปน 4 แลวนำามาลบกนเปนคาของ b ทำาให b มคาเปน 0 */

printf("\n"); printf("\n\t%d\t%d",a,b); /* พมพ คา a คอ 4 สวน b คอ 0 */ b = --a - --a ; /* ลดคา a ครงละ 1 จำานวน 2 ครง ทำาให a เปน 2 สวน b เปน 0 */ printf("\n"); printf("\n\t%d\t%d",a,b); b = a++ + ++a ; /* เพมคา a จาก 2 เปน 3 บวกกนทำาให b เปน 6 แลวเพมคา a อก 1 เปน 4 printf("\n"); printf("\n\t%d\t%d",a,b); getch(); }ผลการทำางานของโปรแกรมเปนดงรป

การแปลงชนดของขอมล การเปลยนชนดของขอมล ทำาไดหลายวธขนกบชนดของขอมล วธการทจะกลาวถง คอ กำาหนดชนดหนาขอมล มรปแบบคอ

ตวแปร = (ชนดขอมล) นพจน;

ดงตวอยาง ในโปรแกรม example2_6.c

ตวอยางท 2.6 โปรแกรม example2_6.c แสดงตวอยางการเปลยนชนดของขอมล /* program example2_6.c */#include <stdio.h>main(){ int a,b; a = 2.7 + 3.9 ; /* บวกกอน ได 6.5 แตเนองจาก a เปน int จงตดทศนยมทงได a เปน 6 */ printf("\n\ta = %d ",a); b = (int) 2.7 + (int) 3.9 ; /* เปลยน 2.7 เปน int ได 2 และเปลยน 3.9 เปน int ได 3 บวกกนได 5 */ printf("\n\tb = %d ",b); int num1 =5 , num2 =4; float x,y; x = num1/num2; /* ผลหารได 1.25 แตทง num1 และ num2 เปน int จงตดเศษทง แลวจงกำาหนดคาให x จงมคาเปน 1 แต x เปน float จงมทศนยม */ printf("\n\tx = %f",x); /* พมพ x เปนแบบ %f ถาไมระบตำาแหนงจะให 6 ตำาแหนงจงเปน 1.000000 */ y = (float)num1/num2; /* เปลยน num1 เปน float กอน แลวจงหาร จงไดผลลพธเปน 1.25 */ printf("\n\ty = %f",y); /* พมพแบบ float จงไดผลลพธเปน 1.250000 getch();}ผลการทำางานของโปรแกรมไดเปนa = 6b = 5x = 1.000000y = 1.250000

กรณทนพจนนนประกอบดวยขอมลหลายชนด จะมการเปลยนเปนขอมลชนดเดยวกนกอน จงดำาเนนการอนตอ โดยการเปลยนจะเปลยนจากขอมลทเลกกวาเปนขอมลชนดทใหญกวา เชนขอมลชนด int มการดำาเนนการ

กบขอมลชนด float จะมการเปลยนขอมลชนด int เปน float กอน จงดำาเนนการอนตอไป

top related