Download - Pointers Variables and Memory Address
1
Pointers Variables and MemoryAddress
When a variable (of type int, double, char, etc.) is declared in a C program code, the operating system allocates a locati on for the variable somewhere in the memory. The value of the
variable is stored at this location. 0int num = ;
1000 num TTT 1002TTTTTTT TT TTT TTTTTTTT TTT
1004100610081010
An address (e.g. 1 0 0 2 ), assigned to the variable, identifie s t he memory location of that variable. Every time the variable is
used in a program, the operating system goes to that location and reads and modifies dataaccordingly.
0
2
Variables and MemoryAddress So far, we have not been concerned about memory
addresses. However, C l anguage off er s a powerful tool to access and manipulate the addresses of variables by means
ofpoi nt er s. The & (address of)operator
Recall the use of the scanffunction:scanf(“%d”,&num); The & operator, evaluates the address of the variable num.
In the previous example: &num is equal to 1 0 0 2 .
3
Pointers• A pointer is a variable, but unlike the other types of
variables that we have seen, it contains a memory address as its value.• This memory address is
usually the address of another variable. To declare a pointer variable, a “* ” should be put
before the name: *int p; /* p is a pointer to an integer i.e., it
can keep the address of an integer variable */
double *dd; */ dd is a pointer to a double
variable*/
4
Pointersint num; 1000 num = 0; 1002pointerint *ptr_num; 1004 declaration ptr_num = # 1006 1008 1010• ptr_num is declared as a pointer to an integer variable.• then, it is assigned the address of the integer variable num which was declaredbefore.• ptr_num “ indirectlyreferences ” the value of the variable num.
ptr_num = bbb 0 * 0ptr_num =
/
0
1002
num
ptr_num
5
Pointers& mean “address of” or “point at”* mean value of “what am I pointing at”num 0
ptr_num 1002*ptr_num num 0 # 1002 1002&*ptr_numptr_numptr_num is a pointer to the integer variable num:
*ptr_num is equal to 0 (the value of num) ptr_num indirectly references the value 0.
/
ptr_num
num0
6
Pointer Types• Pointers can be declared to
point to variables of any type.Examples:
int * ptr_num1 ; (pointer to an integer or integer
poi nt er ). double * ptr_num2 ;
(pointer to a floating point number).
char *ptr_letter; (pointer to a character).
7
Example Program # include <stdio.h> int main ( ){1002 int num1 , num2 , product;1004 int * ptr_num1 , * ptr_num2 ;1006 num1 = 5 ;1008 num2 = 7 ;1010 ptr_num1 = &num1 ;1012 ptr_num2 = &num2 ;1014 product = num1 * ( * ptr_num2 ); printf(“The address of num1 is %p\n”, &num1 ); printf(“The value of ptr_num1 is 1%p\n”, ptr_num ); TTTTT TT TTT T TT 1 1%d\n”, num ); * 1printf(“The value of ptr_num * 1is %d\n”, ptr_num ); printf(“The value of product TT TTTTTT TToduct);return 0;}
num1productnum2
ptr_num1ptr_num2
8
Brain Exercise on Pointers What is the output of the
following code segment?#include<stdio.h>
void main() { 5 0 1 2 3 4int x[ ] = { , , , , }; *int yptr, i;
yptr = &x[1]; 0 3for ( i= ; i< ; i++)
-yptr[ i ] = 1; 0 5for (i= ; i< ; i++)
printf(“%d ”, x[i]);} - - - 0 1 1 1 4
9
Exercise # include <stdio.h>
void main(){ double x[4 ] = {1 .0 ,
2.0, 3.0, 4.0}; *double xptr;
int k; 2xptr = &x[ ];
-* 1 10(xptr+ ) = . ; for (k=0; k<4; k++)
printf(“%f ”, x[k]);} -1.0 2.0 3.0 1.0
10
พอยนเตอร (Pointer)Pointer คอ ตวแปรชนดหนงททำ� หน�ทเกบตำ�แหนงทอย
( address) ของตวแปรแทนทจะเกบขอมล ต�งๆก�รกำ�หนดชนดของตวแปรพอยนเตอร
ตวแปรทจะทำ�หน�ทเปนตวแปรพอยนเตอรจะตองมก�รกำ�หนดไวกอนตอนตนของโปรแกรมโดยมรปแบบดงน
type *var_name type - ชนดของตวแปร
* - เปนเครองหม�ยทแสดงว�ตวแปรทต�มหลง เครองหม�ยนเปนตวแปรPointer
var _name - ชอตวแปรตวอย�ง int *a
11
เครองหม�ยทใชในตวแปรพอยนเตอร 1. เครองหม�ย & เปนเครองหม�ยทใชสำ�หรบใหค�
ตำ�แหนงทอย ( address ) ของตวแปรซง อยหลงเครองหม�ย &ตวอย�ง
int a = 5 , *b;b = &a;
ค�ในหนวยคว�มจำ�a b
ค�ขอมล 5 1000address 1000
12
เครองหม�ยทใชในตวแปรพอยนเตอร ( ตอ) 2. เครองหม�ย * จะใหค�ของขอมลซงเกบอยใน
ตำ�แหนงทอย (address) ทตวแปรPointer นนชอยออกม�ตวอย�ง
int a , b , *c;a = 10;c = &a;b = *c;
ค�ในหนวยคว�มจำ�a c b
ค�ขอมล 10 2000 10address 2000
13
ตวแปรพอยนเตอรททำ�หน�ทเปน Pointer เปนก�รกำ�หนดตวแปร Pointer ใหส�ม�รถเกบตำ�แหนงท
อย (address) ของตวแปร Pointer อก ตวหนง ลกษณะแบบนอ�จ เรยกว� Indirect pointer
ตวแปร pointer_1pointer_2 ก�รกำ�หนดตวแปร pointer ของ pointer มรปแบบดงน
type **pointer_var
14
ตวอย�ง * 1 ** 2int a , p_ , p_ ; int b;
15a = ; 1p_ = &a; 2 1p_ = &p_ ;
b = **p_2; T 1p_ 2p_b
15 1000 200015addr ess 1000 20003000
15
Functions:Introduction• Functions are the
program modules written to perform a specific task or
a collection of tasks.• For example, printf that we used in previous lectures is a function to
display a given string on the screen.
16
Function Calls Format :
FunctionName( argumentlist );
Arguments may be• constants• variables• expressions
Argument list consists of arguments separated by commas. .
17
Function Calls• Functions may be called
as a part of assignment: Example: y=sqrt(x);
Here sqrt is a predefined function which takes the sq
uare root of its argument. In the above statement, the va lue calculated by sqrt is assi
gned to y.• Functions may be called
without an assignment: Example: printf(“HelloWorld”);
18
Functions:Classification• We can classify functions
into two main groups:• (Predefined) Library
Functions: Example : printf
• User Defined Functions: We’ll learn how to write ou r own functions…
19
(Predefined) LibraryFunctions• Functions that are
implemented as a part of C toolkit.
Example: printf• If a library function is used, then the corresponding header file should be included at the top of the program using
preprocessor directive. Example:
# include <stdio. h> for printf function.
20
Some Mathematical Library Functions Defined in math.h
bbbbbbbb Purpose double ceil (doublex) returns th
e smallest integer not less than x double exp (double x) returns ex
double fabs (double x) returns the absolute value of x
double floor (double x) returns the largest integer not greater than x
double log (double x) returns th e natural logarithm of x
double log10 (double x) returns the base 10 logarithm of x
21
Some Mathematical Library Functions Defined in math.h Function Purpose
double sin (double x) returns the sine of x (x is in radians)
double cos (double x) returns the cosine of x (x is in radians)
double tan (double x) returns the tangent of x (x is in radians)
double sqrt (double x) returns the square root of x
double pow (double x,double y) returns xy
Defined in stdlib.h int abs(int x) returns the
absolute value of x
22
# < . > /*include stdio h def initions of , */ # *include <math.h> / def inition of sqrt*/ ( ) { , , _ , second_sqrt, sum_sqrt;
T TT TTTTT TTT TTT TTT TTTTTTT TTT TTTTTT /* *root. / printf("Enter the first number> "); scanf("%lf", &first); first_sqrt = sqrt(first); printf("The square root of the first number % .2 " , _); */ Get second number and display its *square root. / printf("Enter the second number> "); scanf("%lf", &second); second_sqrt = sqrt(second); printf("The square root of the second number is %.2f\n", second_sqrt); T TTTTTT TTT TTTTTT TTTT TT TTT TTT TT/* TT. * / sum_sqrt = sqrt(first + second); printf("The square root of the sum of th 2e two numbers is %. f\n", sum_sqrt); 0return ( );}
23
Question? What is the output of the
following code? int k, l, m;
f loat x = 2 5 .0 , y;T T TTTTTTTT
k = y; l = x – k;
m = sqrt(3 );printf(“y=%f,k=%d,l=%d,m=T TTTTTTTTTT TT
y=5.0, k=5, l=20, m=1
24
จงเขยนโปแกรมเพอแกสมก�รห�ค� x ททำ�ใหค�f(x) = 0 เมอกำ�หนดสมก�รใหดงน
f(x) = 3x + sin(x) – ex
ใหใชวธก�รของนวตนในก�รแกสมก�รซงมสตรดงน
โดยมเงอนไขในก�รหยดก�รคำ�นวณเมอค�สมบรณของ | x1 - x0 | < 0.00001 แตถ�เงอนไขนไมจรงใหแทนค� x0 ดวย x1 แลวคำ�นวณใหมไปเรอยๆจนกว�เงอนไขทกำ�หนดไวเปนจรง จะได x1 เปนคำ�ตอบ
)0(')0(01
xfxfxx
25
- User defined Functions• Takes data (called arguments)
• Can take as many arguments as needed
• Returns data (called returntype)
• Can only return one piece of data
26
Function Definition• Syntax:
return_typefname(input_arguments)
{ local variable
declarations executable statements
}
27
Example: Power2 function /* Finds the square of its
*input argument / double power2 (double
inp){
double out; *out = inp inp;
TTTTTT TTTT}
28
Functions Without Arguments & Return
Value• Syntax:
void fname(void){
local variabledeclarations
executable statements}
29
Example: Function declaration and
definition in a program A function named example
2that takes input arguments, and returns no data, would loo
k like: void example(double, int); int main(){ int b; . . . 52example( . , b) . . .} void example(double a, int b){ . . .}
30
Declaring and Defining aFunction• TTT TTTTTTTT T TTTT-TTTTTTT
function, we need: 1 . Function declaration
(prototype), 2 . Function definition
(implementation)
31
Function Declarations• Function declarationformat - -return value type - function name ( arguments ’ type );
• - - Return value type: data type of the result
(default i nt ) void T TTTTTTTTT TTTT TTT
function returns nothing• - Function name: any valididentifier• Arguments’ type: comma
separated list of arguments’ type
32
Function DeclarationExample• TTT TT T TTTTTTTT TTT TT
my_function takes two - double type arguments
-and one int type argument, and returns a
- double type, the function declaration would be:
doubl e my_function(double,
double, int);
• - Each user defined function needs to be declared• All function declarations appear between• The preprocessor
directives, and• T he main function
33
Example: Right Triangle TTTTTTT TTTT TTTTTTTTTT TTTTTTTTTT TT T TTTT/*
t triangle * / # < . > /*include stdio h because we are using p
rintf, scanf * / # *include <math.h> / because we are using s
*qrt in program / double calculate_hypotenuse(double, double);
( ){ double side1 , side2 , hypotenuse;
printf(“Please provide length of the first side :”);scanf(“%l ” , &1 ); printf(“\n Please provide length of the second sid
:”);scanf(“%l 2f”, &side ); hypotenuse = calculate_hypotenuse(side1 , sid
2e ); printf(“\n Hypotenuse = %f \n”, hypotenuse);
return 0 ;} double calculate_hypotenuse(double inp1, doubl
2e inp ){ doubleout ;
1* 1 2* 2out=sqrt(inp inp +inp inp ); returnout ;}
34
- Top Down Design( divide and conquer)• -A problem solving method in which you f irst break a problem into its
major subproblems.• Then solve the
subproblems to derive the solution TT TTT TTTTTTTT TTTTTTT T• Subproblems areTTTTTTTTT TTTTTT TT TTT TT functions.
35
* */ Draws a stick f igure / #include <stdio.h>
* */ function declarations (prototypes) / void draw_circle(void); */ Draws
*acircle/ void draw_intersect(void);
* */ Draws intersecting lines / void draw_base(void);
* */ Draws a base line / void draw_triangle(void);
* */ Draws a triangle / int main(void)
{ * */ Draw a circle. /
draw_circle(); * */ Draw a triangle. /
draw_triangle(); * */ Draw intersecting lines. /
draw_intersect(); 0return ( );
}
36
* */ Draws a circle / void draw_circle(void){ printf(" * \n"); printf(“ * *\n"); printf(" * * \n");} * */ Draws a base line /
void draw_base(void){ --------- printf(“ \n");} * */ Draws a intersecting lines / void draw_intersect(void){
printf(" / \\ \n"); printf(“ / \\ \n"); printf(“/ \\ \n");} * */ Draws a triangle /
void draw_triangle(void){draw_intersect();draw_base();}
37
ฟงกชน (Function)ฟงกชน คอ สวนของโปรแกรมทมลกษณะก�รทำ�ง�น
แบบโปรแกรมยอย (Subprogram) ซงบ�งฟงกชนผเขยนโปรแกรมส�ม�รถเรยกม�ใชง�นไดเพร�ะเปนฟงกชนม�ตรฐ�น
ทมม�กบภ�ษ�คอมพวเตอร สำ�หรบในภ�ษ�C จะแบงฟงกชน ออกเปน 2 ชนด คอ
1. Library Function หรอStandard Function2. ฟงกชนทผเขยนโปรแกรมกำ�หนดขนเอง 1. Library Function จะเปนฟงกชนม�ตรฐ�นทม�พรอมกบ ภ�ษ� C เกบไวในสวน Library ผเขยนโปรแกรมส�ม�รถเรยกใช
ได โดยใชคำ�สง #include แฟมขอมล ของฟงกชนนน ดงน#include <file_name>
38
ตอไปนจะกล�วถงฟงกชนม�ตรฐ�นท ควรทร�บ คอ ฟงกชนคณตศาสตร(Mathematic Function)
ฟงกชนคณตศ�สตรจะอยในแฟมขอมล math.h จงตอง ระบ #include <math.h> ในตอนตนของโปรแกรมซงจะม
ฟงกชนต�งๆ ในก�รคำ�นวณท�ง คณตศ�สตร ตวแปรทใชใน ฟงกชนจะตองเปนชนดเลขจำ�นวนจรงdouble ผลลพธจะเปน
เลขจำ�นวนขรง doubleฟงกชนท�งคณตศ�สตรทใชในโปรแกรมมดงนsin(x) ใชห�ค� sine ของ x โดย x จะตองเปนมมใน
หนวยเรเดยนcos(x) ใชห�ค� cosine ของ x โดย x จะตองเปนมม
ในหนวยเรเดยน
39
tan(x) ใชห�ค� tangent ของ x โดย x จะตองเปนมม ในหนวยเรเดยน
TTTT(x) ใชห�ค�มมในหนวย เรเดยนของค� sine ของ xacos(x) ใชห�ค�มมในหนวย เรเดยนของค� cosine
ของ xat an(x) ใชห�ค�มมในหนวย เรเดยนของค� tangent
ของ xsinh(x) ใชห�ค� hyperbolic sine ของ x cosh(x) ใชห�ค� hyperbolic cosine ของ xtanh(x) ใชห�ค� hyperbolic tangent ของ x
40
sqrt(x) ใชห�ค�ร�กทสองของ x pow(x,y) ใชห�ค�ของ x ยกกำ�ลง y (xy)log(x) ใชห�ค� natural logarithm ของ x (logex)log10(x) ใชห�ค� log ฐ�น 10 ของ xexp(x) ใชห�ค� e ยกกำ�ลง x (ex)(e = 2.718282)fabs(x) ใชห�ค�สมบรณของ x ( absolute value) |x|ceil(x) ใชห�ค�เลขจำ�นวนเตมทมค�ม�กกว�หรอ
เท�กบค� xfloor(x) ใชห�ค�เลขจำ�นวนเตมทมค�นอยกว�หรอ
เท�กบค� x
41
ฟงกชนเกยวกบสตรงก (String Function) ฟงกชนเกยวกบ string จะอยในแฟม ขอมล string.h จง
ตองระบ #include <string.h> ในตอนตนของโปรแกรมซงจะม ฟงกชนต�งๆ ดงน คอ
strcpy (str1 , str2) ใชในก�ร copy ค� str2 ไปยง str1
ตวอย�ง strcpy(str1,”Kmutt”);strcat(str1 , str2)
ใชในก�รเชอมตอ str1 และ str2 ผลลพธ จะถกเกบไวใน str1 ดง นน str1 จะตองมขน�ดใหญพอทจะเกบผล รวมของ string ทง 2
42
strlen(str) ใชห�ค�คว�มย�วของ string
strcmp(str1 , str2) ใชในก�รเปรยบเทยบ str1 และ str2 โดยใช ค� ASCII เปนหลก
ผลของก�รเปรยบเทยบจะเปนดงน ถ� str1 < str2 จะไดผลลพธนอยกว�ศนย ถ� str1 = str2 จะไดผลลพธเปนศนย ถ� str1 > str2 จะไดผลลพธม�กกว�ศนย
43
String Comparison strcmp(“thrill”, “throw”);
returns a negative integer strcmp(“read”, “readable”);
returns a negative integer strcmp(“shrimp”, “crab”);
returns a positive integer strcmp(“end”, “end”);
returns zero strncmp:Prototype: int strncmp(char *s1, char*s2, unsignedn);
Purpose: Compares the first n characters of s1 and s2 returning
positive, zero, and negative values a s does strcmp.
Example: strncmp(“read”, “readable”, 1);
strncmp(“read”, “readable”,2 );
strncmp(“read”, “readable”,3); All returns zero
strncmp(“read”, “readable”, 4 );
44
ฟงกชนเกยวกบตวอกษรฟงกชนเกยวกบตวอกษรจะอยในแฟม ขอมล ctype.h จง
ตองระบ #include <ctype.h> ในตอนตนของโปรแกรมซงจะม ฟงกชนต�งๆ ดงน คอ
tolower(ch) ใชในก�รเปลยนตวอกษรจ�กตวใหญเปนตวเลก
toupper(ch) ใชในก�รเปลยนตวอกษรจ�กตวเลกเปนตว ใหญ
isalnum(ch) จะใหค�เลขจำ�นวน เตมซงไมเท�กบศนย ถ� ch มค�เปนตวอกษร หรอตวเลข และ จะให ค�เปนศนย ถ� ch ไมไดมค�เปนตวอกษร หรอตวเลข
45
isalpha(ch) จะใหค�เลขจำ�นวนเตมซงไมเท�กบศนย ถ�ch มค�เปนตวอกษร
และ จะใหค�เปนศนย ถ� ch ไมไดมค�เปนตวอกษรรวมถงเครองหม�ยต�งๆ
isdigit(ch) จะใหค�เลขจำ�นวนเตมซงไมเท�กบศนย ถ�ch มค�เปนตวเลข
- 0 9 และ จะใหค�เปนศนย ถ� ch ไมไดมค�เปนตวเลขislower(ch)
จะใหค�เลขจำ�นวนเตมซงไมเท�กบศนย ถ�ch มค�เปนตวอกษร ตวเลกและ จะใหค�เปนศนย ถ� ch เปนตวอกษรอนๆ
isupper(ch) จะใหค�เลขจำ�นวนเตมซงไมเท�กบศนย ถ�ch มค�เปนตวอกษร
ตวใหญและ จะใหค�เปนศนย ถ� ch เปนตวอกษรอนๆ
46
ispunct(ch) จะใหค�เลขจำ�นวนเตมซงไมเท�กบศนย ถ�ch มค�เปน
เครองหม�ยวรรคตอนและ จะใหค�เปนศนย ถ� ch ไมเปนเครองหม�ยวรรคตอน
isxdigit(ch) จะใหค�เลขจำ�นวนเตมซงไมเท�กบศนย ถ�ch มค�เปนตวเลข
ในระบบเลขฐ�นสบหกไดแก - 0 9 , A-F หรอ a-f และ จะใหค� เปนศนย ถ� ch เปนตวอกษรอนๆ
isprint(ch)iscntrl(ch)isgraph(ch)isspace(ch)
47
ฟงกชนอนๆ ทวไป ฟงกชนอนๆ นอกจ�กทกล�วม�แลว จะอยในแฟมขอมล
stdlib.h จงตองระบ #include <stdlib.h> ในตอนตนของ โปรแกรมซงจะมฟงกชนต�งๆ ดงน คอ
abs(x) ใชห�ค�สมบรณของ T ซงเปนเลขจำ�นวนเตมl abs(x) ใชห�ค�สมบรณของ T ซงเปนเลขจำ�นวนเตม
ย�วabort() ใชในก�รยกเลกก�รทำ�ง�นของโปรแกรม
ขณะนน และมขอคว�มAbnormal program termination ปร�กฏบนจอภ�พ
48
ฟงกชนอนๆ ทวไป(ตอ)atof(str) ทำ�หน�ทเปลยน string เปนขอมลเลขทศนยม
ละเอยดสองเท�atoi(str) ทำ�หน�ทเปลยน string เปนขอมลเลขจำ�นวน
เตมatol(str) ทำ�หน�ทเปลยน string เปนขอมลเลขจำ�นวน
เตมย�วclrscr() ใชในก�ร clear จอภ�พใหว�งclreol() ใชลบขอคว�มในบรรทดทcursor อยไปจนจบ
บรรทดนน
49
Converting a String Into an i nt Using atoi
#include <stdio.h> #include <stdlib.h>
int main(){
1char str [] =1243 87" z yu ";
-2 34char str [] = " . "; * 3 24char str = "e ";
1 1printf("str : %d\n", atoi(str )); 2 2printf("str : %d\n", atoi(str )); 3 3printf("str : %d\n", atoi(str ));
0return ;}
Output:
1str :124
-2 : 3str 30str :
50
ฟงกชนอนๆ ทวไป(ตอ)gotoxy(x , y)
ใชสำ�หรบก�รเลอน cursor ไปยงตำ�แหนงทตองก�รบนจอภ�พ โดยท x เปนตำ�แหนงคอลมน และ y เปนตำ�แหนงบรรทด
exit(status) ใชยกเลกก�รทำ�ง�นของโปรแกรมขณะนน ค� status ปกตจะม
ค�เปนศนยถ�เปนก�รจบโปรแกรมต�มปกต สวนกรณอนๆ จะเปนก�รใชแทนขอผดพล�ดต�งๆ
delline() ใชลบบรรทดท cursor อยแลวเลอนบรรทดทอยข�งล�งขนม�
แทนท
51
ฟงกชนอนๆ ทวไป(ตอ)insline() ใชแทรกบรรทดว�งลงไป ใตบรรทดท cursor
อยอก 1 บรรทดsizeof(x) ใชตรวจสอบขน�ดของตวแปรว�มขน�ดก
ไบทsystem(“command”) ใหผเขยนโปรแกรมส�ม�รถใช
คำ�สงในMS-DOS ไดขณะทอย ในภ�ษ� C ตวอย�ง
system(“dir”);
52
2. ฟงกชนทผเขยนโปรแกรมกำาหนดขนเอง นอกจ�กฟงกชนม�ตรฐ�นในภ�ษ� C ทไดกล�วไปแลว
นน ผเขยนโปรแกรมส�ม�รถกำ�หนดฟงกชนขนม�ใชง�นได เองต�มวตถประสงคของผเขยนโปรแกรมลกษณะก�รทำ�ง�น
ของฟงกชนจะมก�รสงค�หรอรบค�ระหว�ง โปรแกรมหลก( main) กบฟงกชนทสร�งขน รปแบบก�รกำ�หนดฟงกชน
function type function_name (data_type var…){ …
…statement;…
return (value);}
53
ก�รเรยกใชฟงกชนทกำ�หนดขนเองมรปแบบดงนfunction_name (arg1 , arg2 , arg3 , … , argn)
ลกษณะก�รเขยนโปรแกรมหลก main( ) และ ฟงกชนmain( ){ ...statement;… function_name( );…} function_name( ){ …statement;… return ( );}
54
ตวแปร Local และตวแปร Global ตวแปร Local เปนตวแปรทกำ�หนดขน ภ�ยใน block
( เครองหม�ย { } ) ของฟงกชน ซงตแปรLocal จะมผลเฉพ�ะในฟงกชนนนๆ
ตวแปร Global เปนตวแปรทใชรวมกนไดทกฟงกชนใน โปรแกรมเดยวกน โดยจะถกเขยนไวนอกฟงกชนใดๆ
#include <stdio.h>int a,b,c;float x,y,z;main( ){int m,n;float f,h;
Global variables
Local variables
55
LOCAL VARIABLES• Each function has its own
local variables.• T TTTTTTT TTTTTTTTT
(including main()) can have the local variables with
the same name.• Although they may have
same name, they are TTT TTT TTT T TTTTTTTTT
56
EXAMPLE: LOCAL VARIABLE #include <stdio.h>
(); ( ){ = 1; (“ % ” , ) ;(); printf(“main local variable x is still %d”,x); return 0;} void myfunc(void){ int x;2x= ; printf(“ myfunc local variable x is %d”,x);}
57
วธการเขยนโปรแกรมแบบ Recursion (การเรยกซำา)เปนวธก�รเขยนฟงกชนขนม�ใชเองและภ�ยในฟงกชน
นนมก�รเรยกใชฟงกชนนนซำ�ภ�ยในตวของ มนเอง สงทจะ ตองกำ�หนดขนภ�ยในฟงกชนเมอเขยนแบบrecursion คอ
1. Base cases2. Making progress
ตวอย�งfac(int x){ if(x == 0) return 1; else return (x*fac(x-1));
58
Preprocessor เปนก�รนำ�เอ�คำ�สงอนๆ ม�รวมเข�กบโปรแกรมทผเขยน
โปรแกรมเขยนขนเอง กอนทำ�ก�รcompile โปรแกรม ก�รเขยนคำ�สง preprocessor จะม เครองหม�ย # นำ�หน�
และจบคำ�สงโดยไมตองมเครองหม�ย ; ใน preprocessor จะประกอบดวยpreprocessor
directive อยจำ�นวนม�ก ซงจะแนะนำ�บ�งตวใหทร�บดงน# define
ใชกำ�หนดค�ขอมลใหกบชอแมคโคร(macro_name) ท ตงขน ถ�มก�รเรยกใชชอแมคโครนน กจะม ค�ต�มทกำ�หนด ม
รปแบบคำ�สงดงน#define macro_name string
59
ชอแมคโคร (macro_name) อ�จจะเขยนดวยอกษรตว ใหญหรอตวเลกกได แตทนยนมเขยนดวยตวอกษรตวใหญ
Defined constants (#define)You can define your own names for constants that youuse very often without having to resort to memory-consuming variables, simply by using the #preprocessor directive . Its format is:
#define identifier valueFor example :
#define PI 3.14159265#define NEWLINE '\n' #define ABC(a,b,c) (a>b && a>c) ? 1:0
60
Conditional operator ( ? )The conditional operator evaluates an expression returning a value if that expression is true and a different one if the expression is evaluated as false . Its format is :condition ? result1 :result2If TTTTTTTTT is true the expression will return result1, if it is not it will return 2result .7TT5 ? 4 : 3 TTTTTTT T T 3
7 5since is not equal to . 7TT5+2 ? 4 : 3 4 7// returns , since is equal 5 2to + . 5>3 ? a : b TT TTTTTTT TTT value of a, since 5 is greater 3than. a>b ? a : b TT TTTTTTT whichever is greater, a or b.
61
#include ใชบอกใหตวแปลภ�ษ� (compiler) นำ�แฟมขอมลอนม�
ใชรวมกบคำ�สงทอยภ�ยในโปรแกรมทเขยนขนเองมรปแบบคำ�สงดงน
#include “file_name”หรอ #include <file_name>
62
คำาสง switch( )ก�รเขยนโปรแกรมทประกอบดวยหล�ยเงอนไขส�ม�รถ
ใชคำ�สง switch() ได ดงรปแบบคำ�สงตอไปน switch (v) {case constant1 :statement;break;case constant2 :statement;break;..default :statement;}
63
switch Statement• To select one of several alternatives.• Selection is based on the
value of an expression.• Expression could be a singlevalue.• The type of expression can
be either int or char type, but not double.
64
switch StatementSyntax: switch (expression){ -case const expr: statements; break; -case const expr: statements; break; . -case const expr: statements; break; default: statements; break; }
65
#include <conio.h>#include <stdio.h>void main(){char code; clrscr(); printf("input ship code : "); scanf("%c",&code); switch (code) { case 'B' : case 'b' : printf("Battership\n"); break; case 'C' : case 'c' : printf("Cruiser\n"); break; case 'D' : case 'd' : printf("Destroyer\n"); break; case 'F' : case 'f' : printf("Frigate\n"); break; default : printf("Unknown ship calss %c\n",code); }}input ship code : fFrigate
66
#include <conio.h>#include <stdio.h>void main(){char sw;float a,b,c; clrscr(); printf("input expresion : "); scanf("%f%c%f",&a,&sw,&b); switch (sw) { case '+' : c = a + b; break; case '-' : c = a - b; break; case '*' : c = a * b; break; case '/' : c = a / b; break; } printf("output c = %f",c);}input expression : 1.5*1.5output c = 2.250000
67
ขอมลชนดโครงสราง(Structure) เปนก�รรวมกลมของตวแปรเข�ดวยกนภ�ยใตชอโครง
สร�งเดยวกน โดยมรปแบบดงน
struct structure_name {type var_name-1;
-2type var_name ;..
type -var_name n; } sturcture_var;
68
ตวอย�งstruct student_data {TTT TTT
char name[40]; char address[50];
TTT TTTT } student;
ก�รอ�งถงตวแปรทอยในโครงสร�ง มรปแบบดงนstructure_var.var_name
เชน student.name
69
ก�รกำ�หนดตวแปรใหมโครงสร�งเหมอนกบกลมโครงสร�งท มอยแลว มรปแบบดงน
struct structure_name structure_var;
เชนstruct student_data chem,math;
70
ขอมลแบบยเนยน(union)เปนขอมลชนดหนงคล�ยกบขอมลแบบ โครงสร�ง โดย
สม�ชกทกตวจะใชหนวยคว�มจำ�เดยวกนโดยมรปแบบดงน
TTTTT union_name {type var_name-1;
-2type var_name ;..
type -var_name n; } union_var;
71
ตวอย�งTTTTT data_ab {
TTT TT char b;
} var_ab; ก�รกำ�หนดค�หรออ�งถงขอมลใน union
var_ab.a = 25;ab
72
การเปดแฟมขอมล (File)ก�รเปดแฟมขอมลมรปแบบดงนFILE *fpfp = fopen(f_name,mode);
fp เปน file pointer ของขอมลแบบ โครงสร�งชนด FILEfopen เปนฟงกชนทใชในก�รเปดแฟมขอมลf_name เปนชอแฟมขอมลmode เปน status ของก�รเปดแฟมขอมล
“r” เปดไฟลเพอก�รอ�นขอมล“w” สร�งไฟลใหมเพอบนทกขอมล“a” เปดไฟลเพอเพมขอมลตอท�ยไฟล
73
รปแบบขอมลกำาหนดได 2 แบบt บนทกขอมลแบบขอคว�ม Textb บนทกขอมลแบบเลขฐ�นสองBinary
การปดแฟมขอมล fclose(fp);
ฟงกชน fprintf() และ fscanf() เปนก�รเขยนและอ�นขอมลกบไฟล มรปแบบดงน
fprintf(fp,control_string,var_list);fscanf(fp,control_string,var_list);
74
#include <stdio.h>#include <conio.h>T TTTTT{TTT TT
*FILE mathf ile;T TTTTTTT T fopen(“a:test.txt”,”wt”);clrscr()for(i=1;i<=20;i++) fprintf(mathfile,”%d\n”,i);fclose(mathfile);}
75
#include <stdio.h>#include <conio.h>main(){ i nt i,a; FILE * mathf ile;
T TTTTTTT T fopen(“a:test.txt”,”Tt”);clrscr()for(i=1;i<=5 TTTTT{ f scanf(mathfile,”%d”,&a); printf(“a[%d] = %d\n”,i,a);}fclose(mathfile);}
76
#include <conio.h>#include <stdio.h>void main(){int i,j,id,price;char name[20],author[20]; FILE *stfile; stfile = fopen("book.dat","wt"); for(i=1;;i++) { clrscr(); gotoxy(20T5);printf("record no # %d",i); gotoxy(20T6 );printf("book id :"); gotoxy(20T7 ;printf("book name :"); gotoxy(20T8);printf("author :"); gotoxy(20T9 );printf("price :"); gotoxy(32T6);scanf("%d",&id); if(id==0)break;
77
gotoxy(32T7);scanf("%s",&name); gotoxy(32T8);scanf("%s",&author); gotoxy(32T9);scanf("%d",&price); fprintf(stfile,"%d %s %s %d\n",id,name,author,price); } fclose(stfile);}
78
#include <conio.h>#include <stdio.h>void main(){int i,j,id,price;char name[20],author[20]; FILE *stfile; stfile = fopen("book.dat","rt"); clrscr(); printf("No. Book_id NAME "); printf("AUTHOR PRICE\n"); for(i=1 ;;i++) { fscanf(stfile,"%d%s%s%d",&id,&name,&author,&price); if(feof(stfile)!=0 break; printf("%-5 d%-10d%-20s%-20s%d\n",i,id,name,author,price); } fclose(stfile);}
79
ในก�รใชฟงกชน fopen( ) จะใหค� NULL ถ�ไมส�ม�รถเปดFile ไดตวอย�ง#include <stdio.h>main( ){FILE *fp;If((fp=fopen(“math.dat”,”w”))==NULL) {
printf(“cannot open file\n”);return 0;
80
ฟงกชน fputs() และ fgets()เปนก�รเขยนและอ�นขอมล string กบ ไฟล มรปแบบดงน
fputs(str , fp);fgets(str , num , fp);
81
#include <conio.h>#include <stdio.h>#include <string.h>void main(){int i,j;char name[20],author[20],sp[1],id[5],price[7];FILE *stfile; stfile = fopen("book4.dat","wt"); for(i=1;;i++) { clrscr(); gotoxy(20T5);printf("record no # %d",i); gotoxy(20T6);printf("book id :"); gotoxy(20T7);printf("book name :"); gotoxy(20T8);printf("author :"); gotoxy(20T9);printf("price :"); gotoxy(32T6);gets(id); if(id[0]=='\0')break;
82
gotoxy(32T7);gets(name); gotoxy(32T8);gets(author); gotoxy(32T9);gets(price); strcat(id,"\n"); fputs(id,stfile); strcat(name,"\n"); fputs(name,stfile); strcat(author,"\n"); fputs(author,stfile); strcat(price,"\n"); fputs(price,stfile); } fclose(stfile);}
83
#include <conio.h>#include <stdio.h>#include <stdlib.h>void del(char a[20]);void main(){int i,j,i_id,i_price;char name[20],author[20],id[5 ] ,price[7 ] ; FILE *bfile; bfile = fopen("book4.dat","rt"); FILE *bfile2 ; bfile T 2fopen("report.dat","wt"); clrscr(); fprintf(bfile2 ,"No. Book_id NAME "); fprintf(bfile2 ,"AUTHOR PRICE\n"); for(i=1 ;;i++) { fgets(id,5 ,bfile); fgets(name,20,bfile);
84
fgets(author,20,bfile); fgets(price,7 ,bfile); if(feof(bfile)!=0)break; i_id = atoi(id); i_price = atoi(price); del(name); del(author); fprintf(bfile2 ,"%-4 d%-9 d%-20s",i,i_id,name); fprintf(bfile2 ,"%-20s%d\n",author,i_price); } fclose(bfile); fclose(bfile2);}void del(char a[20]){int i; for(i=0 ;i<20;i++) if(a[i]=='\n')break; a[i] = '\0 ';}
85
ฟงกชน fwrite() และ fread() ในการสราง file แบบ record เปนก�รเขยนและอ�นขอมลกบไฟล มรปแบบดงน
fwrite(pt , bytes , n , fp);fread(pt , bytes , n , fp);
pt เปน pointer ของตวแปรbytes เปนขน�ดของตวแปรn เปนจำ�นวนขอมลfp เปน file pointer
86
#include <conio.h>#include <stdio.h>#include <string.h>struct data { int id; char name[20]; char author[20]; int price;}book;void main(){int i,j;char sp[1]; FILE *stfile; stfile = fopen("book3.dat","wb"); for(i=1;;i++) { clrscr(); gotoxy(20T5);printf("record no # %d",i); gotoxy(20T6);printf("book id :"); gotoxy(20T7);printf("book name :"); gotoxy(20T8);printf("author :");
87
gotoxy(20T9);printf("price :"); gotoxy(32T6);scanf("%d",&book.id); if(book.id==0)break; gets(sp); gotoxy(32T7);gets(book.name); gotoxy(32T8);gets(book.author); gotoxy(32T9);scanf("%d",&book.price); fwrite(&book,sizeof book,1,stfile); } fclose(stfile);}
88
#include <conio.h>#include <stdio.h>struct data { int id; char name[20]; char author[20]; int price;}book;void main(){int i,j; FILE *stfile; stfile = fopen("book3.dat","rb"); clrscr(); printf("No. Book_id NAME "); printf("AUTHOR PRICE\n");
89
for(i=1;;i++) { fread(&book,sizeof book,1,stfile); if(feof(stfile)!=0)break; printf("%-4 d%-9 d%-20s",i,book.id,book.name); printf("%-20s %d\n",book.author,book.price); } fclose(stfile);}