0% found this document useful (0 votes)
461 views

Unit 3. Introduction To Programming in C

This document outlines an introductory course on C programming. It introduces the history and development of the C language, the basic elements of a C program including main functions and input/output instructions, as well as C syntax components like data types, expressions, and statements. The document provides examples of simple C programs and discusses programming languages in general.

Uploaded by

Ignacio Hernani
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
461 views

Unit 3. Introduction To Programming in C

This document outlines an introductory course on C programming. It introduces the history and development of the C language, the basic elements of a C program including main functions and input/output instructions, as well as C syntax components like data types, expressions, and statements. The document provides examples of simple C programs and discusses programming languages in general.

Uploaded by

Ignacio Hernani
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 76

Unit

3
Introduc-on to programming in C

Programming
Grade in Industrial Technology Engineering

2016-2017
Outline

1. Introduc-on to the C programming language


2. Basic program structure
3. Variables and constants
4. Simple data types
5. Expressions and instruc-ons
6. Operators
7. Basic input/output: printf and scanf

2
Outline

1. Introduc-on to the C programming language


2. Basic program structure
3. Variables and constants
4. Simple data types
5. Expressions and instruc-ons
6. Operators
7. Basic input/output: printf and scanf

3
1. Introduc:on to the C programming language
History of C

C is closely related to the development of the UNIX opera:ng system at


AT&T Bell Labs
1968-1971
First versions of UNIX
Towards a beJer programming language: B, NB
1971-1972
C is created (K. Thompson)
UNIX is rewriJen in C; versions of C are developed for other plaOorms (Honeywell 635, IBM 360/370)
1978
Kernighan and Ritchie
Publica:on of The C programming language
Johnson
Development of pcc (C compiler)

1989
C becomes standard (ISO/IEC 9899-1990)

New languages have been developed from C: Objec:ve C, C++, C#, etc.

4
1. Introduc:on to the C programming language
ANSI C

Dierent compilers, development plaOorms and language deriva:ons


may lead to C code targeted to a specic machine
E.g.: Win32 graphic libraries

Unambiguous and machine-independent deni:on of the language C
A program in ANSI C must be compiled by any C compiler and must work in
any plaOorm

ANSI C is a standard subset of the language:
Well-dened syntax
Restricted set of func:ons

Several specica:ons
C89/C90
C99
C11

5
1. Introduc:on to the C programming language
Programs

Program: Set of orders (instruc:ons or sentences) wriJen in a


programming language that are provided to the computer to develop a
task.
Problem Algorithm Program

C Programming Language

High-level programming languages:


Source code must be converted into machine code
Compila:on
In C, there are two steps:
Compila:on
Linking

6
1. Introduc:on to the C programming language
Compila:on + Linking process

Compiler
Object
Source code code

Linker
Object
code Executable

Object
code

High-level Low-level
Low-level Machine
languages Languages
languages language

7
1. Introduc:on to the C programming language
First C program

Development environments
Dev C/C++ (integrated MinGW 3.4.2 compiler)
hJp://www.bloodshed.net/dev/devcpp.html
(Download)

Orwell Dev C++ (integrated MinGW 4.7.0 compiler, portable version)


hJp://orwelldevcpp.blogspot.com.es/
(Download)

code::blocks (integrated MinGW compiler)


hJp://www.codeblocks.org/downloads/26
(Download)

Eclipse IDE for C/C++ developers (no integrated compiler)


hJp://www.eclipse.org/cdt/
(Download)

XCode (integrated LLVM compiler)


hJps://developer.apple.com/xcode/
(download from Mac App Store)

8
1. Introduc:on to the C programming language
First C program

9
1. Introduc:on to the C programming language
Programming languages

A programming language is characterized by:


Alphabet
Allowed characters
Lexicon
Words
Syntax
Rules for word combina:on to make meaningful programs

10
1. Introduc:on to the C programming language
C Alphabet

C alphabet
Symbols that can appear in a C program
LeJers
All but and accents (only in comments!)
Numbers
Special characters
C is case sensi:ve: uppercase and lowercase leJers are
dierent
Keywords are wriJen in lowercase


11
1. Introduc:on to the C programming language
C lexicon

The lexicon includes the primi:ve elements to build sentences


Keywords
Terms with a specic meaning
Lowercase (include, define, main, if, etc.)

Delimiters
Blank spaces, tabs, line breaks
Operators
Represent opera:ons: arithme:c, logic, assignment, etc. (+, -, *, etc.)
Iden-ers
Keywords cannot be used as iden:ers
Variable names (user_age) cannot start with a number
Func:on names (printf, scanf)
Literals
Values that do not change:
Numbers: 2, 3.14159
Strings: "Hello world"
Characters: 'a'

12
1. Introduc:on to the C programming language
C syntax

Data
Values processed by the program

Expressions
Combina:on of operands and operators with a single value as a result
May include func:on calls, even though they do not return a value
user_age >= 18
3.14159*radius*radius

Statements/Instruc-ons/Statements
Complete ac+on
area=3.14159*radius*radius;
printf("Hello world");
int a;

Blocks or compound statements
Group of statements
Braces { }
The statements of the main func:on are enclosed in a block
13
1. Introduc-on to the C programming language

Data
3.14159, radius, area

Expressions
3.14159*radius*radius

Instruc-ons
area = 3.14159*radius*radius;
printf(%f \n, area);
Blocks

14
1. Introduc:on to the C programming language
Example

15
1. Introduc:on to the C programming language
Example

Lesson 4. Control
flow and loops

16
Outline

1. Introduc-on to the C programming language


2. Basic program structure
3. Variables and constants
4. Simple data types
5. Expressions and instruc-ons
6. Operators
7. Basic input/output: printf and scanf

17
2. Basic program structure
Program elements

File inclusion

Main func-on

Output instruc-on

No-ce the parentheses and the braces!

18
2. Basic program structure
main func:on

The basic building block in C is the func-on


A C program is a collec:on of func:ons
A func:on is a piece of code that performs a task
when it is called/invoked
Input values >> Output values

Lesson 6.
Func:ons include: Functions

Variable declara:on (for storing data)


Statements (for performing opera:ons)


19
2. Basic program structure
main func:on

All C programs have a main func:on
Star:ng point of the program
Automa:cally started when the program is run
The simplest C program:
int main(void) {}
Valid, but useless
return is op:onal, but recommended

main func-on structure


int main(void) {
system("pause")
In old versions of Dev C++ (Windows

return 0;
}

20
2. Basic program structure
File inclusion

C encourages the use of previous code


New func:ons can be created and reused
C provides func-ons in libraries that can be used in
our programs
Input and output func:ons in stdio.h
printf() and scanf()

To include a le, use the direc:ve #include with


the name of the le:
#include "file.h" Searches in the current folder
#include <file.h> Searches in the default compiler folder
21
2. Basic program structure
Comments

Comments are notes to the code that are not


executed
The compiler ignores comments (they are not real code)
They can be used at any point of the program
Its very important to comment the code well:
Make the code readable and understandable
Although we now know perfectly what a program does, maybe we will
have to reuse it in the future
Perhaps other programmers reuse our code and need to understand it
It is a good prac:ce to introduce a comment at the beginning of each le
describing what it does

22
2. Basic program structure
Comments

Syntax for mul:-line comments


/* : Open comment block
*/ : Close comment block
/* print radius? on the screen */
/* This program solves a
second grade equation. */

Comments can span several lines
Comments cannot be nested

In-line comments
// : The remainder of the line is considered a comment
printf("%f \n", area); // print area value

23
Outline

1. Introduc-on to the C programming language


2. Basic program structure
3. Variables and constants
4. Simple data types
5. Expressions and instruc-ons
6. Operators
7. Basic input/output: printf and scanf

24
3. Variables and constants
Storing and using values

25
3. Variables and constants
Storing and using values

26
3. Variables and constants
Program data

Data
Informa:on processed by the program
Read, used in calcula:ons, wriJen

Types of data
Variables
Symbols whose value change during the program execu:on
radius, area
Constants
Symbols whose value do not change during the program
execu:on
PI

27
3. Variables and constants
Characteris:cs of variables and constants

Variables and constants have:


Name
Label or iden:er of the symbol
radius, area, PI

Type
Determines which values that can be assigned to the symbol
Integer number, real number, single leJer,

Value
Value of the symbol at a given moment
2, 12.566360

28
3. Variables and constants
Deni:on of variable

Variables can be seen as a piece of the memory to store a


piece of data
User-dened name for a group of cells of the memory
When the name (or iden:er) of the variable is used in the program,
the informa:on at the address of the variable is accessed
The memory size allocated for the variable depends on its type, which
must be set when the variable is declared

0 0 0 0 1 1 0 1 0 26
265
1 2.00 radius
2 0000 256 0 1 0 0 0 0 0 1 A
3 12.5 257 0 1 1 0 1 1 1 0 n
4 6636 area
258 0 1 1 0 0 0 0 1 a
259 0 1 1 0 0 0 0 1 97

29
3. Variables and constants
Variable declara:on

Before using a variable, it is necessary to declare it


The declara:on instruc:on allocates a piece of the memory to
store the value of the variable
In the declara:on, we specify:
name of the variable
data type

A variable can be declared only once



Syntax
<data type> <variable name>;

Examples
float average_mark;
int num1, sum;
char letter;

30
3. Variables and constants
Variable declara:on

Self-explanatory names in lowercase are recommended


but not too long
counter = counter + 1;
num_registered_students = 56;

Variables should be declared at the beginning of the block in
which they are used. They are valid only in this block (scope)!
int main(void) {
int a;
int b;

a = 10;
printf("%i", a);
}

31
3. Variables and constants
Data types (see later)

Type Descrip-on Size (bytes) Range

int Integer number 2 bytes 32768 to 32767

Real number with simple precision


float 4 bytes 3.4x10-38 to 3.4x1038
(7 decimal values)
Real number with double precision
double 8 bytes 1.7x10-308 to 1.7x10308
(up to 16 decimal values)

char Alphanumeric characters 1 byte Unsigned: 0 to 255

32
3. Variables and constants
Assignment

Assigning a value to a variable means that the value on


the right is stored on the variable on the lew
A single value or the result of an expression can be assigned
variable <---- value or expression

A variable can be assigned several -mes
The previous value is overwriJen

The assignment operator is =
x=3;
Value 3 is stored at the memory posi:on assigned to x
x=(a+b)/2;
Result of the expression (a+b)/2 is stored at the memory posi:on assigned to x
x=x+3;
Result of the expression x+3 is stored at the memory assigned to x

33
3. Variables and constants
Type matching

Assignments can must done between a variable and


an expressions with compa-ble types
same type
int <--- int

compa:ble types
oat <--- int adds .0 to the int
int <--- char assigns the ASCII code of the char to the int
char <--- int if the value of the int is out of range, it is truncated
int <--- oat the decimal part of the oat is truncated

int a=5, b;
char c='Z';
float x, y=3.1;
b=a;
x=a;
b=c;
c=a;
b=y;

34
3. Variables and constants
Ini:aliza:on

Variable ini:aliza:on: rst value assignment


In the declara:on:
int a=8;

Awer the declara:on:


int a;

a = 8;


Mul:ple declara:on/ini:aliza:on is allowed
int a, b, c;
int a=5, b=4, c=8;
int a=1, b, c=a;

Unini-alized variables have junk values


We cannot assume that they are 0

35
3. Variables and constants
Constants

A C constant is a symbol whose value is set at the beginning


of the program and does not change later
Two alterna:ves:
#define direc:ve
#define <name> <value>
#define PI 3.14159
#define KEY 'a'
#define MESSAGE "Press INTRO to continue"

const qualier to a variable


const <type> <name> = <value>;
const float PI = 3.14159;
const char KEY = 'a';
const char MESSAGE [] = "Press INTRO to continue";

Constant iden:ers are usually wriJen in uppercase leeers
36
3. Variables and constants
Constants

From this point


on, the symbol
PI represents the
value 3.14159

37
3. Variables and constants
Constants

From this point


on, the symbol
PI represents the
value 3.14159

38
3. Variables and constants
#define and const

Dierences between const and #define


const declara:ons are for typed variables, nish with ;, and
are assigned just like variables
#define is a direc:ve, does not specify a data type, does not
use an assignment instruc:on, and does not nish with ;

Advantages of const versus #define
The compiler generates more ecient code
The compiler can check if the type and the assigned value
are compa:ble

Advantages of #define versus const
const values cannot be used in places where the compiler
expects a literal value (e.g., array deni:on)
39
3. Variables and constants
Operate with data

Constant deni-on

Variable declara-on

Read value

Assign result of the


calcula-on

Print value

40
Outline

1. Introduc-on to the C programming language


2. Basic program structure
3. Variables and constants
4. Simple data types
5. Expressions and instruc-ons
6. Operators
7. Basic input/output: printf and scanf

41
4. Simple data types
Data types

Data can be structured or unstructured
Simple data types
Symbols with a single element and a single value
Numbers: integer numbers, real numbers,
Characters: single leJers

Structured data types


Symbols with an internal structure, not a single element
Character strings
Lesson 5. Structured
Arrays and matrices data types
Structures

42
4. Simple data types
C simple data types

Type Descrip-on Size (bytes) Range

int Integer number 2 bytes 32768 to 32767

Real number with simple precision


float 4 bytes 3.4x10-38 to 3.4x1038
(7 decimal values)
Real number with double precision
double 8 bytes 1.7x10-308 to 1.7x10308
(up to 16 decimal values)

char Alphanumeric characters 1 byte Unsigned: 0 to 255

Size in bytes may be dierent in dierent opera:ng systems and plaOorms


Other simple data types
void
Pointers

Modiers
int, char: signed, unsigned
int: long, short

43
4. Simple data types
int type

int datatype is used to represent integer values


int literals
int variables
int expressions

%i specier in printf and scanf

int literals can be expressed with dierent nota:ons
(conversely, integers can be formaJed to dierent nota:ons see later)
Decimal (base 10): 2013
Octal (base 8): 011 (leading 0)
Hexadecimal (base 16): 0x2B (leading 0x)

printf("number: %i \n", 2013); // 2013
printf("number: %i \n", -2013); // -2013
printf("number: %i \n", 011); // 1*8+1*1 --> 9
printf("number: %i \n", 0x2B); // 2*16+11 --> 43

44

4. Simple data types
float and double types

float and double data types are used to represent real values
double more precision, but also larger memory size

%f specier in printf and scanf


The decimal separator for literals is .
Scien:c nota:on can be used
Regular: 82.3473
Without leading 0: .34
Scien:c nota:on: 2.4E-4

printf("number: %f \n", 82.3473); // 82.34730
printf("number: %f \n", 2.4E-4); // 0.000240

45
4. Simple data types
char type

char data type is used to represent ASCII characters


Literals are enclosed in single quota:on marks ' '
%c specier in printf and scanf

char letter = 'b';

printf("%c", letter);

Special and escape characters can be used


char lineBreak = '\n';

46
4. Simple data types
void type

void data type is used to indicate that no value is expected in


specic parts of the program
1. A func-on has no parameters
int main(void)
is equivalent to
int main()

2. A func:on does not return any value


void main(void)

3. Generic pointers
void *p;


void variables are not allowed

47
4. Simple data types
Character strings

Character strings are used to represent a sequence of characters


Stored in the memory as a strip of characters ended with the
null character '\0'
%s specier in printf and scanf

String literals are enclosed in double quota:on marks " "

String variables and constants are declared as arrays:


char message [] = "Hello world"; // string constant

char name[100]; // string variable of 100 characters at most


scanf("%s", name); // beware: & is not used with strings
// error if name has more than 100 chars
// do not consider text after blank space

48
Outline

1. Introduc-on to the C programming language


2. Basic program structure
3. Variables and constants
4. Simple data types
5. Expressions and instruc-ons
6. Operators
7. Basic input/output: printf and scanf

49
5. Expressions and instruc:ons
Deni:on of expression

An expression is a combina:on of data by means of one


or several operators
Data can be literal values, variables, constants, and other
expressions
Even calls to func:ons can be included

Data symbols in an expression are called operands

operator

operand operand
a + b

Expression composi:on is guided by rules
Operands must have a concrete type to be used in an opera:on

50
5. Expressions and instruc:ons
Examples of expressions

Examples
a + b
x == y
x <= y

51
5. Expressions and instruc:ons
Operator types

Number of operands
Unary
-: nega:ve number
++: variable increment

--: variable decrement
!: logic nega:on

Binary

Opera-on type
Arithme-c Rela-onal
+ : Addi:on or posi:ve sign == : Equal
- : Subtrac:on or nega:ve sign < : Less than
*: Product <= : Less or equal than
/: Division > : Larger than
%: Module >= : Larger or equal than
!= : Dierent from

Assignment
= : Assign Logical
<op>= : Opera:on and assignment ! : NOT (nega:on)
&, &&: AND (conjunc:on)
|, ||: OR (disjunc:on)
52
5. Expressions and instruc:ons
Deni:on of instruc:on

Instruc-ons or sentences
Orders of the program to accomplish a task
Keywords: short terms interpreted as a command by the computer
Are applied on operators and expressions

Types
According to the func:on
Declara:on
Assignment
Input and output
Control
According to the overall structure of the program
Data process
Input
Output

53
5. Expressions and instruc:ons
Example

Variable declara-on

Read value

Assign result of the


expression

Print value

54
Outline

1. Introduc-on to the C programming language


2. Basic program structure
3. Variables and constants
4. Simple data types
5. Expressions and instruc-ons
6. Operators
7. Basic input/output: printf and scanf

55
6. Operators
Arithme:c operators

Operator Opera-on
+ Addi:on
- Substrac:on
* Mul:plica:on
/ Division
% Remainder or Module

The result of arithme:c operators is a numerical value. The


type of the result depends on the type of the operands
The % operator requires two integer operands, being the second one dierent to 0
The / requires the second operand to be dierent to 0. When both operands are
integers, the result is also an integer value (no decimals!)
There is no operator for exponen:a:on, but the pow func:on of the mathema:cal
library math.h can be used (sqrt for square roots)
56
6. Operators
Arithme:c operators - Example

57
6. Operators
Arithme:c operators pow and sqrt

58
6. Operators
Arithme:c operators

Unary operators
++ --
Increase / decrease a variable

They can be used in prex or sux mode:
++x : increment x in 1 and then proceed with the expression evalua:on
x++ : evaluate the expression and then increment x in 1

int a=100, b=10;


1) Pre-increment
c = a + ++b; // --> c=100+11=111, a=100, b=11
2) Post-increment
c = a + b++; // --> c=100+10=110, a=100, b=11

59
6. Operators
Rela:onal operators

The result of rela-onal operators is a boolean value


true: 1, false: 0

Operator Operation

< Less than

<= Less or equal than

> Larger than

>= Larger or equal than

== Equals

!= Dierent from

60
6. Operators
Logic operators
AND
AND, OR, NOT
Operand values
They are applied on boolean T F
expressions which may be the
T T F
result of rela:onal opera:ons or
other logic opera:ons F F F

Examples: Result of the
expression
To pass the lecture, exam and
exercises must be passed OR
Pass =
Pass_Exer AND Pass_Exam T F NOT

T T T T F
To pass the lecture, at least one
of the parts needs to be passed F T F F T
Pass =
Pass_Exer OR Pass_Exam
61
6. Operators
Logic operators

Opera-on Operator

and &&
or ||
not !

Let us suppose that i=7, f=5.5, c=w

Expression Result Value

c == 'w' True 1

c == "w" False 0

(i >= 6 ) && (c == 'w' ) True 1

(i >= 6) || (c == 119) True 1

(c != 'p') || ( (i+f) <= 10 ) True 1

!(i > f) False 0

62
6. Operators
Assignment

Basic assignment
= opera:on for seng the value of a variable
The previous value, if any, is replaced

Opera-on and assignment


Change the value of the variable on the lew by the result of the operator applied on
the same variable and the expression on the right
+= -= *= /= %=
<var> <op>= <exp> is equivalent to <var> = <var> <op> (<exp>)
int x = 10, y = 2;
y += x; // y = y + x; (y : 12, x : 10)
y -= ++x; // y = y (++x); (y : -9, x : 11)

Special abbrevia:on involving boolean expressions:


<variable> =
<logical expression> ?
<value if true> : <value if false>;


63
6. Operators
Precedence

If more than one operator appears in an expression,


precedence rules are applied to determine which
operators are rstly evaluated
a + b > c || c < 0

Precedence rules are very similar in all programming
languages

Parenthesis should be used
Expressions enclosed with parenthesis are evaluated rst,
from the inner-most to the outer-most
( (a + b) > c ) || (c < 0)

64
6. Operators

Operators are classied according to their precedence


From higher to lower precedence (a, b are expressions with proper type)
Expressions with operators of the same category are evaluated from lew to right

Category
Unary ! NOT (negacin lgica) !a
++ Increment ++a
-- Decrement --a
- Sign change -b
* Indirec:on *p
& Address &a
Mul-plica-on * Mul:plica:on a*b
/ Division a/b
% Module a%b
Addi-on + Addi:on a+b
- Substrac:on a-b
Rela-onal < Less than a<b
<= Less or equal than a<=b
> Larger than a>b
>= Larger or equal than a>=b
Equality == Equals to a == b
!= Dierent to a != b
Logic && AND a && b
|| OR a || b
Assignment = assignment a = b
Outline

1. Introduc-on to the C programming language


2. Basic program structure
3. Variables and constants
4. Simple data types
5. Expressions and instruc-ons
6. Operators
7. Basic input/output: printf and scanf

66
Outline

1. Introduc-on to the C programming language


2. Basic program structure
3. Variables and constants
4. Simple data types
5. Expressions and instruc-ons
6. Operators
7. Basic input/output: printf and scanf

67
8. Basic input and output
I/O func:ons

Programs receive input data (e.g., keyboard) and


provide output data (e.g., screen)

Input and output (I/O) func:ons allow reading and
prin:ng data
C does not provide input/output instruc:ons
I/O is achieved with func-ons included in the standard
library this library is part of the core of the language

It is necessary to include at the beginning of the
program the le stdio.h, where these func:ons are
declared
#include <stdio.h>

68
8. Basic input and output
printf

printf()
Prints informa:on on the standard output device
Usually, on the screen
Syntax
printf("argument format", arguments)

#include <stdio.h>

int main ( ) {
int n=10;
printf ( "%i", n);

return 0;
}

69
8. Basic input and output
printf

Placeholders
%[flags][width][.precision][length]<type>
Flags
+ : prints number sign
space: prexes non-nega:ve values with a blank space
- : lew-aligns the output
# : trailing numbers and decimal values are always printed
0: uses 0 instead of spaces for padding

Width
Minimum number of characters to output (pads if necessary)

Precision
Maximum limit of characters to output (rounds if necessary)

70
8. Basic input and output
printf

Type Argument format


%c Character

%d, %i Integer

%O Integer, octal format

%u Integer, unsigned

%x Hexadecimal

%f Float

%e Float, scien:c nota:on

%lf Double

%s Character string

%p Pointer

71
8. Basic input and output
Special characters

Special characters
\n : Line break
\t : Tabula:on
\b : backspace

Escape characters
\' : to print the ' character
\" : to print the " character
\\ : to print the \ character

72
8. Basic input and output
scanf

scanf()
Reads informa:on from the standard input device
Usually, the keyboard

Syntax
scanf("argument format", &variable)

The & operator means that the variable in the arguments is passed by reference
Pass by reference: the address of the variable is passed; the value is changed in the func:on
More than one variable can be read in the same scanf instruc:on
#include <stdio.h>

int main ( void ) {


int n;
float mark;

printf ( "Enter student number and mark:\n");


scanf ("%i %f", &n, &mark);
printf ("\n The mark of the student %i is %f\n", n, mark);
}
73
8. Basic input and output
scanf

Reading strings with scanf
Do not use &
char name[100];
scanf("%s", name);

scanf %s stops reading when it nds a blank space in the input
scanf("%s", name);
Miguel de Cervantes
printf("Hello %s", name);
Hello Miguel

To read a string including blank spaces we use:
scanf ("%[^\n]", name);
%[^\n] means that scanf reads un:l a line break character is found


74
Structure of a C program

#include Pre-processor directives


#define

/* Global declarations */
Function prototypes

/* Main function */
int main (void)
{
Local variable and constant declaration
Instructions
}

/* Definition of other functions */


type function_name (...)
{
...
}

75
Bibliography
Recommended lectures

Basic
Ivor Horton. Beginning C: From Novice to Professional. Apress,
2006 (4th Edi:on) Chapters 1, 2
Stephen G. Kochan. Programming in C. Sams, 2004 (3rd
Edi:on), Programming in C Chapters 3, 4

Addi5onal informa5on
Stephen Prata. C Primer Plus. Sams, 2004 (5th Edi:on)
Chapters 1-4

76

You might also like