Sie sind auf Seite 1von 63

CHAPTER 4: The Basic of C

CSEB113 PRINCIPLES of
PROGRAMMING CSEB134
PROGRAMMING I
by
Badariah Solemon
BS (May 2012)

Topics
1.
2.
3.
4.
5.
6.

C Tokens
Basic Data Types
Variables
Constants
Reading Data from the Keyboard
Arithmetic Operators and
Expressions
7. Single Character Data
BS (May 2012)

Topic 1
C TOKENS
BS (May 2012)

Tokens & Types of Tokens


Token the basic element on a C program
recognized
by the
/* Example
Case:compiler
Apples

reserv
ed
words

Author: Mdm Badariah Solemon


*/
#include <stdio.h>
int main()
identifiers
{
int Qty;
double Cost=0.0, Total=0.0;

string
literals

printf ("Enter quantity of apples purchased (in Kg):");


scanf("%d", &Qty);
printf ("Enter the cost per Kg of apples (in RM per Kg):");
scanf("%lf",&Cost); operator
Total = Cost * Qty;
printf("\nTotal cost of apples = %.2f\n",Total);
}

return 0;

punctuatio
n
BS (May 2012)

1. Reserved Words
Keywords that identify language
entities such as statements, data
types, language attributes, etc.
Have special meaning to the
compiler, cannot be used as
identifiers in our program.
Should be typed in lowercase.
MUST NOT be used as identifiers!!
Ex: auto, double, else, void, i
BS (May 2012)

Task: Identify the Keywords


Data Type-related

Flow of Controlrelated

Miscellaneous

int

if

enum

BS (May 2012)

2. Identifiers
Words used to represent and reference certain
program entities (variables, constant,
function names, etc).
Also known as programmer-defined words.
Example:
int myName;
variable.
#define TAXRATE 26

myName is program
TAXRATE is a

constant.
void CalculateTotal(int value);
CalculateTotal is a function
name.
BS (May 2012)

Identifiers: Rules
Rules

Example

Can contain a mix of characters and numbers.


However it cannot start with a number

H2o

First character must be a letter or underscore

Number1; _area

Can be of mixed cases including underscore


character

XsquAre

Cannot contain any arithmetic operators

my_num
R*S+T

or any other punctuation marks

#@x%!!

Cannot be a C keyword/reserved word

struct; printf;

Cannot contain a space

My height

identifiers are case sensitive

Tax
TaX
TAX
BS (May 2012)

are different
8

Identifiers: Naming Styles


Avoid excessively short and cryptic
names such as x, or wt.
Use reasonably descriptive name
such as student_name and StudentID.
Use userscores or capital letters to
separate words in identifiers that
consist of two or more words.
Example: StudentName, student_name, or
studentname
BS (May 2012)

3. String Literals
A sequence of any number of characters
surrounded by double quotation marks
.
Example:
This is a string constant.
Hello \John\.

printf(My
name is
Beckham.\n);
Example
of usage
inDavid
C program:

Produces
output:
My name
is David

Beckham.

BS (May 2012)

10

4. Operators
Tokens that result in some kind of
computation or action when applied
to variables or other elements in an
expression.
Example of operators:
* + = - / < >

Usage example:
result = total1 + total2;

BS (May 2012)

11

5. Punctuators
Symbols used to separate different parts of
the C program.
These punctuators include:
[ ] ( ) { } , ; : * #

Usage example:
main()
{
printf(Testing.);
}
To be discussed when we come to the proper language feature
in the coming chapters.

BS (May 2012)

12

Exercise
1. Valid/invalid variables or constant
Variables/
Constant

Valid/
Invalid
?

Variable/
Constant

CO2

const

_prs

Formula #1

2ndDay

Last.Name

First_name

account#

NetPRIce

engine 1

my name

main

index

Main

m*cee

First+Last

mx_2ndcovera
ge

typedef
BS (May 2012)

Valid/
Invalid?

13

Topic 2
BASIC DATA TYPES
BS (May 2012)

14

Basic Data Types


int

float

Whole numbers, positive and


negative
Ex:
int number = 12;

Fractional parts, positive and


negative
Ex:float short = 0.000983;

int sum = -3678;

float income =
1234567890.12;

char*
double
To declare floating point variable
of higher precision or higher
range of numbers - exponential
numbers, positive and negative
Ex:
double bigvalue = 12E-3;
//equals to 12x10-3

Single character:
1.Numeric digits: 0 - 9
2.Lowercase/uppercase letters: a
- z and A - Z
3.White space
4.Special characters: , . ; ? / ( ) [
]{}*&%^<>
Ex:
char initial = B;

BS (Feb 2012)

15

Topic 3
VARIABLES
BS (May 2012)

16

What are Variables?


Are memory locations within the computer
which allows pieces of data to be stored.
The word variable comes from the word vary,
which means that whatever you place within
a variable can be changed.
A variable can be viewed as a container used
to store things (numbers, character, string
etc )
Types of operations:
1. Declaring variables names
2. Assigning variable values
3. Manipulating variable values
ex: display on the screen
BS (Feb 2012)

17

Declaring Variables
A variable is declared by specifying
the DATA TYPE of the variable name
Ex:
Data Type
Variable Name
int Age;

Several variables of the same data


type may be declared in the same
statement.
Variable Names
Data Type
Ex:
int Age, Weight;
Comma to separate variables
BS (Feb 2012)

18

Assigning Values to Variable


A variable is assigned with a value
using an assignment operator =.
Ex: 17 is assigned to Age 60 is assigned to Weight
Age = 17;

Weight = 60;

During program execution, may be


conceptually viewed as:
Variable
Name

Data
Type

Data
Value

Memory Cell
Address*

Age

int

17

ffff8

Weight

int

60

ffff2

BS (Feb 2012)

19

Assigning Values to Variables During


Declaration

Variables may be assigned with


values even during the variables
declaration.
Variable Name
Ex:
int Age = 17;
Data Type
int Age = 17, Weight = 60;
Comma to separate variables

BS (Feb 2012)

20

Printing Variable Values


Use the printf() function to display the value of a
variable on the computer screen.
Syntax:
printf(FormatString, PrintList);
FormatString is a combination of characters,
placeholders and escape sequence.
PrintList is any constants, variables, expressions, and
functions calls separatedplaceholder
by commas.

Example:
int age = 80;
float cgpa = 4.00;
printf(Your age: %d\n, age);
printf(CGPA: %f\n, cgpa);
printf(My CGPA: %.2f\n, cgpa);
BS (Feb 2012)

Your age: 80
CGPA: 4.000000
My CGPA: 4.00

21

Placeholders in printf()
Function

Placeholders (or also known as format


specifiers) always begin with the symbol %
Are used to format and display the
variable/constant values on the screen
Common placeholders:
Placeholder

Data Type

%d

int

%f

double/float

%c

char

%s

String

BS (Feb 2012)

Refer Table
12.2, pg 647
(Hanly &
Koffman)

22

More About Printing Variable


Values

Recall this syntax:

printf(FormatString, PrintList);

FormatString can have multiple placeholders if


the Printlist in printf() function has several
variables.

Example:
#include <stdio.h>

main()
{
int age = 80;
float cgpa = 3.512, weight = 60.4778;

printf(Age: %d and CGPA: %.2f\n, age, cgpa);


printf(CGPA: %.2f and Age: %d\n, cgpa, age);
printf(CGPA: %.1f\tWeight2: %.2f\n, cgpa, weight);
printf(Weight3: %.3f\t, weight);
printf(Weight4: %.4f\n, weight);
BS (Feb 2012)

23

Exercise
Do hand-out exercise declare & assign variables
What happen if you try to print an int with
%f or a float with %d?
What is the output for the following program?
#include <stdio.h>
main()
{
int yearS = 4;
float cgpa = 3.88, gpa = 4.00;
double
printf(How long it takes to complete ur study?\n%d\n,yearS);
printf(GPA\t\tCGPA\n);
printf(%.2f\t\t%.2f,gpa, cgpa);
printf(Excellent!\n);
printf(Now, test your skill\n);
printf(CGPA in 1 decimal point = %.1f\n, cgpa);
printf(CGPA = %f\n, cgpa)
}
BS (May 2012)

24

Topic 4
CONSTANTS
BS (May 2012)

25

Constants
Entities that appear in the program
code as fixed values.
Types of operations:
1. Declaring and assigning constant
values
2. Operating constant values
Almost similar treatment like variables but
CANNOT change the values after
declaration!

BS (Feb 2012)

26

Declaring Constants
1. As constant macro created using
a preprocessor directives using
<stdio.h>
define#include
keyword
#define PI 3.14159
Ex:

#define DAYS_IN_YEARS 365


main()
{

DATA TYPE?

2. Within a function using the const


#include <stdio.h>
keyword.
main()
Ex:

{
}

const double KMS_PER_MILES = 1.609

BS (Feb 2012)

27

Types of Constants
Integer Constant

Floating-point Constant

Positive or negative whole


numbers
Ex:
#define MAX 10
const int MIN = -90;

Positive or negative decimal


numbers
Ex:#define PI 3.412
const float PI = 3.412;
#define VAL 0.5877e2
const double VAL = 0.5877e2;
//stands for 0.5877 x 102

Character Constant

Enumeration

A character enclosed in a single


quotation mark
Ex:

Values are given as a list


Ex:

#define LETTER n
const char NUMBER = 1;

BS (Feb 2012)

enum Language {
English
Arabic
Mandarin
}

28

Printing Constant Values


Similar to printing variable values
#include <stdio.h>
#define DAYS 365
#define VAL 0.5877
void main(void)
{
const double PI = 3.412;
printf(pi = %.3f\n, PI);
printf(In a year, there are %d days\n, DAYS);
printf(Value = %.4f\n, VAL);
}

What is the output of the program?


BS (Feb 2012)

29

Topic 6
READING DATA FROM THE
KEYBOARD
BS (May 2012)

30

Using scanf() Function


To read data from the standard input device
(usually keyboard) and store it in a variable.
The general format is pretty much the same
as printf() function.
Syntax:
scanf(FormatString, InputList);

InputList one or more variables addresses, each


corresponding to a placeholder in the FormatString
One placeholder for each variable in InputList.
The two or more variables in InputList must be
separated by commas.
Each element of InputList must be an address of a
memory cell(using prefix & address operator)

BS (Feb 2012)

31

Placeholders in scanf()
Function

Are used to format and display the


variable/constant values keyed-in by the user
Common placeholders in scanf() function are
very similar to placeholders in printf()
function:
Refer Table
Placeholder

Data Type

%d

int

%f

float

%lf

double

%c

char

%s

String

BS (Feb 2012)

12.2, pg 647
(Hanly &
Koffman)

32

Example
int Age;
float income;

Address operator

printf(Enter your age: );


scanf(%d, &Age);
printf(Enter income: );
scanf(%f, &income);
printf(Your age is: %d\nIncome: %.2f, Age, income);

int Age;
double income;
printf(Enter your age and income);
scanf(%d %lf, &Age, &income);
printf(Your age: %d\n, Age);
printf(Your income: %f\n, income);
BS (Feb 2012)

If you want the


user to enter
more than one
value, you
serialise the
inputs.
33

Exercise
Write a simple C program that read two
integer values and print them on the
screen in one same line separated by one
vertical tab. Follow
thisinteger:
sample80output:
Enter first
Enter second integer: 99
80
99

Write another simple C program that read


3 real numbers and print them on the
screen in reverse order. Follow this sample
Enter three real numbers: 5.6 7.8 9.3
output
:
In reverse order: 9.3 7.8 5.6
BS (May 2012)

34

Topic 5
ARITHMETIC OPERATORS AND
EXPRESSIONS
BS (May 2012)

35

Arithmetic Expressions
A syntactically correct and meaningful
combination of operators and operands
is known as an Expression.
= is the basic assignment operator
Syntax:
Variable = ArithmeticExpression;
12 is assigned to variable month

Example:

operands

month = 12;
Expression:

cityTax = CITYTAXRATE * grossIncome;


assignment operator
BS (May 2012)

arithmetic operator
36

Arithmetic Operators
There are 2 types of arithmetic operators in
C:
operand

1. Unary operators are operators that require


only one operand.
second = -first;

Example: prs = -34;


2. Binary operators areoperands
operators that require
two operands.
third = first / second;

Example: sum = 30 + 76;

Note that wefirst


CANNOT
write arithmetic
/ second
= third; expressions
X
like the following:
30 + 76 = sum;
X
BS (May 2012)

37

1. Unary Operators

Initial value of a is 10 and b is 5

postfix (after a variable)

prefix (before a variable)

BS (May 2012)

38

Prefix/Postfix Increment
a++ or ++a is equals to a = a + 1 but they work
differently
Prefix Increment (+
+a)

Postfix Increment
(a++)

1. Add the value of a by 1


2. Return the value a

1. Return the value a


2. Add the value of a by 1

Example:
int a=9;
printf(%d\n, a);
printf(%d\n, ++a);
printf(%d, a);
Output:
9
10
10

Example:
int a=9;
printf(%d\n, a);
printf(%d\n, a++);
printf(%d, a);
Output:
9
9
10

BS (May 2012)

39

Prefix/Postfix Decrement
Similarly, --a or a-- is equals to a = a - 1 but
they work differently
Prefix Decrement (--a)
1. Subtract the value of
a by 1
2. Return the value a

Postfix Decrement
(a--)
1. Return the value a
2. Subtract the value of
a by 1

Example:
Example:
int a=9
int a=9;
printf(%d\n, a);
printf(%d\n, a);
printf(%d\n, --a);
printf(%d\n, a--);
printf(%d, a);
printf(%d, a);
Output:
Output:
9
9
8
9
BS (May 2012)
8
8

40

2. Binary Operators
If all operands in an arithmetic expression are of type double/float, the result is also of type double/float except for
modulus operator.
If all operands in an arithmetic expression are of type int, the result is also of type int.

Value of a is 9

BS (May 2012)

41

Modulus Operator (%)


You could only use modulus (%)
operation on integer
variables/integer division
Modulus will result in the remainder
7/2
3
integral
of an operation
2
7
-6
Example:
1

7 % 2 is 1

7%2
remainder

But 2 % 7 is 2. Any idea why?


BS (May 2012)

42

Example
A simple C program that find an
average of two real numbers.
#include <stdio.h>
void main(void)
{
float no1, no2, sum, avg;
printf(Enter three real numbers: );
scanf(%f %f, &no1, &no2);
sum
avg

=
=

no1
sum

+
/

no2;
2;

printf(Average: %.2f, avg);


}
BS (May 2012)

43

Exercise
Write a simple C program that sum up 4
integer numbers and display the computed
sum.
Covert the pseudocode/flowchart prepared
to solve the following problems (refer slide
39 in Chapter 2) into complete C programs
that:
1. compute and display the average of three
numbers.
2. read the value of the height, width and length
of a box from the user and print its volume.
BS (May 2012)

44

Compound Assignment
Operator

Are combinations operators with the


basic assignment operator =
Initial value of a is 8:

BS (May 2012)

45

Exercise
What is the output of the following
program?
#include <stdio.h>
void main(void)
{
int first;
printf("Enter a value: ");
scanf("%d", &first);
printf("\nNew
printf("\nNew
printf("\nNew
printf("\nNew

value
value
value
value

is:
is:
is:
is:

%d\n\n",
%d\n\n",
%d\n\n",
%d\n\n",

first+=4);
first*=4);
first-=4);
first%=4);

}
BS (May 2012)

46

Operations of Mixed or Same


Types
int
int
int

float

Examples:
5 + 3 is 8
WHY?
5/3 is 1

float

5.2 + 3.1 is 8.3


5.0/3.0 is 1.6

float

5.2 + 3 is 8.2
5.0/3 is 1.6
5/3.0 is 1.6

float

float
int

BS (May 2012)

47

Operations of Mixed or Same


Types
m is 1
p is
1.0

n is 1
q is
1.6

in
t

int/int int
5/3 is 1

floa
t

in
t

int/float
float
5/3 is 1.6

floa
t
BS (May 2012)

48

Type Casting
You can modify the way C uses types in
arithmetic operations by using cast operators.
The syntax:
(type) expression
Recall:

5/3 result in 1

So what can you do to ensure that the operation


produces 1.6 instead of 1?
To ensure that you did not loose any data from
(float)5/3
the operation,
you may apply type casting as

follows: 5/(float)3
(float)5/(float)3
((float)5)/((float)3)
BS (May 2012)

49

Guidelines in Writing Arithmetic


Expressions
If it is division operation, make sure it does not
involve two integer variables or constants (unless
you want the fractional part to be cut off)

When writing your code, a float type variable is


on the left side of an assignment statement.
Example:
int sum = 87;
float avg;

avg = sum / 4;

When int type variable is on the left side of an


assignment statement, make sure that the
statement is meant to create an integer value.
BS (May 2012)

50

C Rules for Evaluating


Expressions
We must know the C rules for evaluating expression when

there is multiple mix of operators in the expression.


In this example, which operator should be evaluated first?

= x / y + z
s evaluating
The rules for
expressions are:
1. Parentheses rule: all expressions in () must be evaluated
separately. Nested parentheses innermost first .
Parentheses can be used to control the order of operator
evaluation
2. Precedence rule: specifies which of the operators will be
evaluated first.
3. Associativity rule: specifies which of the multiple
occurrences of the same operators will be evaluated first.

BS (May 2012)

51

Precedence and Associativity of


Operations

For details, refer to Appendix C (Hanly &Koffman)


Precedence
Highest
(evaluated
first)

Lowest
(evaluated
L
from
last)

Operation

Associativ
ity
[ ] ( )

postfix++ postfix--

prefix++ prefix-- unary+ unary- unary&

unary*

* / %

binary+ binary-

= +=
left to right

-= R
*=/=
%=
from

BS (May 2012)

right to left
52

Example 1
s = x / y + z
The order:

Evaluation steps (assume initial value of s is 2, x is 9, y

is 1, z = 2):

Step 1: s = 9 / 1 + z
Step 2: s = 9 + 2
Step 3: s = 11

i += j 2

Other option?
Use parentheses
Evaluation steps (assume initial value of i is 1, j is 7):
The order:

Step 1: i += 7 - 2
Step 2: i = 6 (i += 5 i = 1 + 5)
BS (May 2012)

53

Example 2
v = (p2 p1) / (t2 t1)

The order:

Evaluation steps (assume initial value of p1 is 4.5, p2 is 9.0, t1


is 0.0, t2 is 60.0):
Step
Step
Step
Step

1:
2:
3:
4:

v
v
v
v

=
=
=
=

(9.0 4.5) / (t2 t1)


4.5 / (60.0 0.0)
4.5 / 60.0
0.075

Note:
The expression inside a parentheses will be evaluated
first.
The associativity rule of parentheses is left to right
BS (May 2012)

54

Exercise 1
Find output of the program fragment
...
int i=5, c=10, x;
x = +i++;
printf("a) x = %d, i = %d\n", x, i);
x = ++x;
printf("b) x = %d, i = %d\n", x, i);
x = c++ + i;
printf("c) x = %d, i = %d\n", x, i);
x = --c + --i;
printf("d) x = %d, i = %d\n", x, i);
x = i + -x;
printf("e) x = %d, i = %d\n", x, i);
...
BS (May 2012)

55

Exercise 2
Find output of the program fragment
...
int x, y=5,z=10, s=3, p, q, r;
x = z/3 + -y;
printf("%d\n", x);
x = (x % 2) + (y 3));
printf("%d\n", x);
x = ++z + z * 2;
printf("%d\n", x);
p = y * z s + x /
q = y * (z s) + x
r = y * z s + x /
printf(%d\n, x);

z;
/ z;
z;

...
BS (May 2012)

56

Topic 7
SINGLE CHARACTER DATA
BS (May 2012)

57

The Set of C Characters


The characters that can be used to form
words, number and expressions (depend upon
the computer on which the program is run)

Are grouped into 4 categories:


Letters

Digits

Uppercase A to Z
Lowercase a to z

0 to 9

White Space
Blank space
Horizontal tab
(\t)
Carriage return
(r)

Special Characters

New line (\n)


Form feed (\)

BS (May 2012)

See next page

58

C Special Characters

BS (May 2012)

59

Working with char Data


Type
Declaring character variables. Example:
char c1;
char c2, c3, c4;

Assigning a character constant to character


variables.
c1 = Example:
p;

Each character is
enclosed in single
quotes

c2 = \n;
c3 = #;

Using printf(%c\n,
printf() function to print characters. Example:
c1);
printf(%c\n, c1);
printf(%c %c, c1, c2);

Using scanf() function to input characters. Example:


scanf(%c %c , &c1, c2);
scanf(%c%c, &c3, &c4);

No spaces in the string


literal

BS (May 2012)

60

Character Input Output


Functions
getchar() to read a character from standard input

putchar() to write a character to standard output

Example:

#include <stdio.h>
main()
{
char myC;
printf(Please type a character: );
myC = getchar();
printf(\nYou have typed this character:
);
putchar(myC);
printf(\n);
To be discussed
further in Chapter 8: Characters and Strings
}

BS (Feb 2012)

61

Input Buffer & Flushing the


Buffer
The getchar() function works with the input
buffer to get the information typed at the
keyboard.
Buffer a portion of memory reserved for temporarily
holding information that is being transferred.

When getchar()function is used, it is easy to see


an execution that is different than it should be.
So, what you can do is to flush or empty the input
buffer by using fflush (stdin); statement.
char c1, c2;
Example: printf(Enter 2 characters:);
fflush(stdin);
c1 = getchar();
c2 = getchar();
fflush(stdin);

BS (May 2012)

62

Summary
Basic elements (tokens) in C: reserved words,
identifiers, string literals, operators, punctuators
Working with variables and constants of types
int, float, double, char
Reading data using scanf() function
The C rules when evaluating expression with
multiple mix of operators in arithmetic
expression:
Parentheses rule, precedence rule & associativity rule

Pre/post fix - effects the result of statement


Working with single character data including
getchar() and putchar() functions
BS (May 2012)

63