C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated...
Transcript of C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated...
![Page 2: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/2.jpg)
2 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
C Program Structure
Compilation of a program: • gcc –o hello hello.c
• -o specifies the name of the executable file
Other flags: • Wall – turn on all warnings,
useful for debugging purposes
• O2 – turn optimization on
• ansi –use ANSI C
#include <stdio.h> int main ( ) { variable declarations; statements; scanf (“%d”, &var); printf (“…..\n”); return 0; }
![Page 3: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/3.jpg)
3 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Data Types & Operators
Integers
• int short long unsigned
Real numbers
• float double
char
Assignment =
Arithmetics + - * / %
Comparator ==
Others ++ --
![Page 4: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/4.jpg)
4 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Variables
A Variable Is a Symbolic Name for a Computer Memory Location That Holds Some Data
A Data Type Must Be Specified for Each Variable • integer , float, char, ...
Conversion
• int seo = 37.5 * 365.0 ;
• float seong = (float) seo;
![Page 5: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/5.jpg)
5 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Scoping Rules
int global_seo;
void main() {
int seo;
}
int function1 (...) {
int seo = 100;
global_seo = seo;
}
• Declared variables
have “scope”
• Scope defines where the declared variables are visible
![Page 6: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/6.jpg)
6 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Local vs. Global variables
Global variables
• Defined outside any function
• Generally placed at the top of the file after include statements
• Visible everywhere
• Any function can read & modify them
Local variables
• Visible only within the functions where declared
• SAFE !! – they are invisible from outside
• Allows more control
![Page 7: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/7.jpg)
7 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Array
int ages[1000];
• ages[0] ~ ages[999]
• illegal accesses: ages[-1], ages[1000], ages[2000]
two dimensional array
• int table[first_index][second_index];
1002 4998
program binary 72 19 data
ages[0] ages[999]
![Page 8: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/8.jpg)
8 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Easy Initialization
int value[1000] = {75, 78, 65, 99. ….. 104, 120, 77, 48};
int value [row][column]
= { {8, 16, 9, 52},
{3, 15, 27, 6},
{14, 25, 2, 10}};
int value [row][column]
= { 8, 16, 9, 52,
3, 15, 27, 6,
14, 25, 2, 10};
![Page 9: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/9.jpg)
9 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
char and string
char is a single byte
string is an array of chars
• strlen(s);
• strcat(s1, s2); append s2 at the end of s1
• int strcmp(s1, s2); returns – 0 if two strings are equal
– negative if s1 < s2
– positive otherwise
‘s’ ‘e’ ‘o’ ‘ ’ \0 char s[5] ; strcpy(s, “seo ”);
![Page 10: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/10.jpg)
10 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Controls
if-then-else
switch
loop
• for (i=0; i< 100; i++)
a[i] = i;
• while structure
switch (integer_expression) { case value1: statement; break; case value2: statement; break; ….. case valueN: statement; break; default: statement; }
![Page 11: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/11.jpg)
11 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Functions
C programs consist of at least one main() function • Can have other functions as needed
A function definition may be placed before or after “main”
But a function definition cannot be not inside “main”
• A function cannot be inside another function
A single pass compiler needs a prototype
• definition before usage, but implementation later
![Page 12: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/12.jpg)
12 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
void main ( ) { char ForC = “f”; int newTemp, tmp = 106; …. newTemp = tempConvert (ForC, tmp); } int tempConvert (char FC, int temp) { if (FC == ‘F’) return ((temp – 32) * 5 / 9); else return (temp * 9 / 5 + 32); }
Be Careful for
1. Number of parameters
2. Data Types of the parameters
3. Positions of the parameters
4. Return_Data_Type
![Page 13: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/13.jpg)
13 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Libraries
C employs many libraries
• Make it easy to use already written functions in standard libraries
• ISO C standard libarary – header files – interface standard
– implementations are too many
» BSD libc
» GNU glibc.so, ....
» MS Visual C++
![Page 14: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/14.jpg)
14 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
C Standard Libraries
Many of the general purpose functions available in the Standard C library are declared in the following:
math.h
strings.h
stdio.h
stdlib.h
time.h
and many others
![Page 15: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/15.jpg)
15 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
stdio.h
printf formatted printing to stdout
scanf formatted input from stdin
fprintf formatted printing to a file
fscanf formatted input from a file
getc get a character from a stream (e.g, stdin or a file)
putc put a character to a stream (e.g, stdout or a fi;e)
fgets get a string from a stream
fputs write a string to a stream
fopen open a file
fclose close a file
![Page 16: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/16.jpg)
16 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
math.h
abs returns the absolute value of an integer x
cos returns the cosine of x, where x is in radians
exp returns e**x
fabs returns the absolute value of a float x
log returns the logarithm to base e
log10 returns the logarithm to base 10
pow returns x**y
sin returns the sine of x, where x is in radians
sqrt returns the square root of x
tan returns the tangent of x, where x is in radians
ceil ceiling function
floor flooring function
![Page 17: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/17.jpg)
17 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
string.h
strcat concatenates (i.e., adds) two strings
strcmp compares two strings
strcpy copies a string
strlen the length of a string (not including the null)
strstr finds a string within another string
strtok divides a string into tokens (i.e., parts)
memcpy
memmove
memcmp
memset
![Page 18: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/18.jpg)
18 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
stdlib.h and time.h
atof convert a string to a double (not a float)
atoi convert a string to an int
exit terminate a program, return an integer value
free release allocated memory
malloc allocate memory
rand generate a pseudo-random number
srand seed the pseudo-random number generator
system execute an external command
time get the system time
ctime convert the result from time() to something meaningful
![Page 19: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/19.jpg)
19 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
void Dimension(int, double); /* function prototype */ Dimension(n, dn); /* function call */
/*** Dimension does not return any value. */
/*** Dimension must have a side effect. */ /* function definition */ void Dimension(int pn, double pdn) { pn = pn * 3.14 ; pdn = pdn * 3.14; }
/** Dimension has no side effect. */
Function Call: No Return Value
![Page 20: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/20.jpg)
20 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
void Dimension(int, double); /* function prototype */ Dimension(n, dn); /* function call */
/*** Dimension does not return any value. */
/*** Dimension must have a side effect. */ /* function definition */ void Dimension(int pn, double pdn) { pn = pn * 3.14 ; printf (“%d”, pn); pdn = pdn * 3.14; printf (“%f”, pdn): }
/** Dimension has a side effect. */
Function Call: No Return Value
![Page 21: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/21.jpg)
21 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
int radius, height; double circle, rectangle; void Dimension(); void main () { Dimension(); /* function call */ } /* function definition */ void Dimension() { circle = (radius*radius) * PI ; rectangle = (PI * (2*radius)) * height; } /*** Dimension has side effects – new values stored in global variables “circle” & “rectangle” ***/
Variable Scope
![Page 22: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/22.jpg)
22 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
double Dimension(int, double); /* function prototype */ newdn = Dimension(n, dn); /* function call */
/*** Dimension returns a value. */
/*** The function call expression must be assigned to a variable or a part of an expression. */ /* function definition */ double Dimension(int pn, double pdn) { pn = pn * 3.14 ; pdn = pdn * 3.14; return pdn – pn; }
/** Dimension returns a value */
Function Call: Return Value
![Page 23: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/23.jpg)
23 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
void Dimension(); /* function prototype */ Dimension(); /* function call */ /*** Dimension does not return any value. */ /*** Dimension must have a side effect. */ /* function definition */ void Dimension() { circle = (radius*radius) * PI ; rectangle = (PI * (2*radius)) * height; }
Function Call: Return Value
![Page 24: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/24.jpg)
24 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Pointer Variables
Type and Variable Declaration
• int *iptr, inum; – Data type of iptr is int *
– iptr is to hold the memory address of an integer variable
– so are float *fptr; char *cptr;
![Page 25: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/25.jpg)
25 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Address Operator
Address Operator: &
int ival, *ptr;
ptr = &ival;
• obtains the memory address of variable ival
• stores it in ptr
![Page 26: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/26.jpg)
26 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Indirection Operator
Indirection (Dereferencing) Operator: *
int ival, newval, *ptr;
ptr = &ival;
*ptr
• Obtains the address stored in ptr – (what ptr points to)
• Bad notation – conflict with “multiply”, and comment
*ptr = 300; /* gets the address stored in ptr */
newval = *ptr * 27 /* dereferences ival */
![Page 27: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/27.jpg)
27 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Example (1/2)
float *fptr; int *iptr; float fvalue; int ivalue; ivalue = 200; fvalue = 314.72; iptr = &ivalue; /* iptr has address of ivalue */ fptr = &fvalue; /* fptr has address of fvalue */ *fptr = *fptr – 300.0; /* *fptr refers to fvalue */ *iptr = *iptr + 300; /* *iptr refers to ivalue */
![Page 28: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/28.jpg)
28 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Some Illegal Constructs
&327
&(I + 99)
double dnum; int *ptr; ptr = &dnum;
7 **ptr /* 7;
![Page 29: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/29.jpg)
29 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Need for Pointers
Avoid Copying Data
Updates to Data by Different Programs
Need for Linking Data
• logical links – hot links on Web pages
– common values in columns of different tables
• physical link for speed
![Page 30: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/30.jpg)
30 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Singly Linked List: Concept
apple ptr1
banana ptr2
cherry ptr3
insert “orange”
pear null
ptr0
![Page 31: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/31.jpg)
31 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Function (Call by Reference)
![Page 32: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/32.jpg)
32 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Call by Reference (Address)
Pass to Function an Address as an Argument
• address = pointer to memory address
• Cannot be an “expression to be evaluated”
The Called Function Can Change the Arguments in the Calling Function
• side effects
• way to return multiple values
![Page 33: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/33.jpg)
33 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Example int main () { void newVal (float *); /* function prototype */ float testval; printf (“\nEnter a number: “); scanf (“%f”, &testval); newVal (&testval); /* function call */ return 0; } void newVal (float *num) /* function definition */ { *num = *num + 20.2; }
![Page 34: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/34.jpg)
34 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Example: Function Returning Multiple Values
void newVal (int val1, int val2, float *sum, float *remain) { *sum = val1 + val2; *remain = val1 % val2; } /* returns two values */ /* side effects – same as global variables */
![Page 35: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/35.jpg)
35 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Passing an Array to a Function
To Save Storage and Compute Time
The Starting Address of the First Element of an Array Is Passed
The Original Array Can Be Changed by the Function
Must Be Very Very Careful with Array Overflow and Underflow
![Page 36: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/36.jpg)
36 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Array and Pointer
The Name of an Array Is a Constant Pointer to the First Element of the Array
A String Is a Char Array
• string variable
• string constant
char s[100], num[1000];
• s is a pointer to s[0]
• num is a pointer to num[0]
![Page 37: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/37.jpg)
37 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
#define MAXNUM 1000 void findMax (int [MAXNUM]); int main () { int numList[1000]; …. findMax(numList); …. return 0; }
void findMax (int local_array[]) { int I, max = local_array[0]; for (i=1; i<MAXNUM; i=i+1) if (max < local_array[i]) max = local_array[i]; }
![Page 39: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/39.jpg)
39 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Structure
Array: Collection of Same Types of Data
Structure: Collection of Different Types of Data
struct { char name[20]; int age; float salary; char hobby[3][20]; } employee; /* name, age, salary, hobby: members */ /* employee: variable of type struct { } */
![Page 40: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/40.jpg)
40 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Structure tag name
struct EMPRECORD { char name[20]; int age; float salary; char hobby[3][20]; } employee, former_employee; /* EMPRECORD: tag name for { } */ /* struct EMPRECORD employee, former_employee; */
![Page 41: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/41.jpg)
41 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Member Data Types
Primitive Types
• int, float, double, char
• pointer
Array
Structure
• other struct
• defining struct
![Page 42: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/42.jpg)
42 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Structure Member Access
struct { char name[20]; int age; float salary; char hobby[3][20]; } employee; struct_variable.member_name /* employee.name */ /* employee.hobby[3][15] */
![Page 43: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/43.jpg)
43 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Struct Member Initialization struct { char name[20]; int age; float salary; char hobby[3][20]; } employee; employee.name[] = “Neil Diamond”; employee hobby[3][] =“tennis and walking”; employee = {“hong gildong”, 25, 35000.0, “jump”};
![Page 44: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/44.jpg)
44 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Member Name Scope struct EMPRECORD { char name[20]; int age; float salary; char hobby[3][20]; } employee, former_employee; struct PERSON { char name[20]; int age; char address[30]’ };
/* unique only within a single structure */
![Page 45: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/45.jpg)
45 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Structure: Use Example – IP Packet
IP Header
UDP Header
Timestamp
Synchronization Source ID
First Contributing Source ID
Last Contributing Source ID
Application Data
Sequence Number
……
V P X M ..
Real-Time Packet Transfer Protocol Message Format
![Page 46: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/46.jpg)
46 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Pointer and Self-Referential Structure
struct NODE { int key; struct NODE *next; } node node1, node2, node3; node1.key = 100; node2.key = 250; node3.key = 467; node1.next = node2.next = node3.next = NULL; ;
100 null
node1
250 null
node2
467 null
node3
![Page 47: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/47.jpg)
47 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Example (cont’d)
node1.next = &node2; node2.next = &node3;
100
node1
250
node2
467 null
node3
struct NODE { int key; struct NODE *next; } node node1, node2, node3;
![Page 48: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/48.jpg)
48 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Member Access via a pointer
100
node1
250
node2
467 null
node3
node1.next -> key 250 node1.next -> next -> key 467
![Page 49: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/49.jpg)
49 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Example: Passing a Copy struct EMPRECORD { char name[20]; int age; float salary; char hobby[3][20]; } employee; struct EMPRECORD update_records (struct EMPRECORD emp) { emp.age = 25; return emp; }
![Page 50: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/50.jpg)
50 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Example: Passing an Address struct EMPRECORD { char name[20]; int age; float salary; char hobby[3][20]; } employee; update_records (&employee); void update_records (struct EMPRECORD *emp) { emp -> age = 25; }
![Page 52: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/52.jpg)
52 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
File I/O
Create a Data File
Declare a File • FILE *myFile;
• ** pointer to an internal file descriptor data structure
Open the File • #include <stdio.h>
• char myFileName[15];
• myFileName = “prices.dat”
• myFile = fopen (myFileName, “r”);
• ** r(read), w(write), a(append) modes
Close the File • fclose (myFile)
![Page 53: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/53.jpg)
53 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Example #include <stdio.h> int main () { FILE *myFile; char myFileName[15]; gets(myFileName); myFile = fopen(myFileName, “r”); if (myFile == NULL) printf (“\nFile Could Not Be Opened”); else { ….. } return 0; }
![Page 54: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/54.jpg)
54 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Writing and Reading Data From a File
Same as Writing and Reading Data from the Terminal
fprintf, fscanf
fputs, fgets
fputc, fgetc
#include <stdio/h>
![Page 55: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/55.jpg)
55 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Example int main () { int I; FILE *myFile; char myFileName[15]; double price[] = (139.25, 19.03); char *description[] = (“glove”, “CD”); gets(myFileName); myFile = fopen(myFileName, “r”); if (myFile == NULL) printf (“\nFile Could Not Be Opened”); else { for (i=0; I<2; i=i+1) fprintf (myFile, “%-9s %6.2\n”, description[i], price[i]; fclose (myFile); } return 0; }
![Page 56: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/56.jpg)
56 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Stack and Queue
List
• insert/delete an element at any location
Queue
• insert at the head
• delete at the tail
• First-In-First-Out (FIFO)
Stack
• only one position to insert and delete
• Last-In-First-Out (LIFO)
![Page 57: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/57.jpg)
57 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Stack
Operations
• push(x, S) inserts x onto a stack S
• pop(S) deletes the most new elements from S, and returns it to the callee
• initialize(S) creates a new empty stack
• Full(S), Empty(S) check if the stack S is full/empty
![Page 58: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/58.jpg)
58 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Stack Implementation
data structures
• array - S
• pointer – top
full/empty
#define MAX_STACK_SIZE 100
struct stack{
int data[MAX_STACK_SIZE];
int top = -1;
} s1, s2, ...;
int empty(stack s)
{
if (s.top < 0 )
return (1);
else
return (0);
}
int full(stack s)
{
if (s.top >= MAX_STACK_SIZE)
return (1);
else
return (0);
}
![Page 59: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/59.jpg)
59 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
int pop(stack s)
{
if empty(s)
return stack_empty();
return s.data[s.top--];
}
void push(int x, stack s)
{
if (full(s)) {
stack_full();
return;
}
s.data[++top] = x;
}
![Page 60: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/60.jpg)
60 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
List, Queue
queue is similar to a stack
but list is a little bit difficult
• how to insert an element to an array?
• what if the delete?
• better be implemented as a linked list
![Page 61: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/61.jpg)
61 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Jolly Jumpers
![Page 62: C Review - KOCWcontents.kocw.net/KOCW/document/2015/sungkyunkwan/... · free release allocated memory malloc allocate memory rand generate a pseudo-random number srand seed the pseudo-random](https://reader033.fdocuments.in/reader033/viewer/2022042114/5e915a6dbf12e062c14ad23d/html5/thumbnails/62.jpg)
62 SWE2004: Principles in Programming | Spring 2014 | Euiseong Seo ([email protected])
Jolly Jumpers