EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C...

352
1 2007 Pearson Education, Inc. All rights reserved. 1 1 EEE1008 C Programming Dr. A.M. Koelmans

Transcript of EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C...

Page 1: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

1

2007 Pearson Education, Inc. All rights reserved.

11EEE1008

C Programming

Dr. A.M. Koelmans

Page 2: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

2

2007 Pearson Education, Inc. All rights reserved.

Administrative details

● Dr. A.M. Koelmans

● Location: Merz Court, room E4.14● Telephone: 8155● Web: www.staff.ncl.ac.uk/albert.koelmans/● E-mail: [email protected]

Page 3: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

3

2007 Pearson Education, Inc. All rights reserved.

BOOK

“C How to Program”, by P.J. Deitel, H.M. Deitel, published by Pearson International, 6th edition.

Page 4: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

4

2007 Pearson Education, Inc. All rights reserved.

Web page

http://www.staff.ncl.ac.uk/albert.koelmans/eee1008.html

The web page contains information about the course, and downloads of all the source code used in the lecture slides.

Other material may be made available on Blackboard.

We will follow Deitel's book closely. There are many other books and web sites dedicated to C.

Page 5: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

5

2007 Pearson Education, Inc. All rights reserved.

Course structure

● Basics of computer languages● First look at C: a basic program● Data types and variables● Basic I/O, using keyboard and screen● The main building blocks: expressions,

conditionals, and repetition● Advanced data types: arrays● Functions

Page 6: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

6

2007 Pearson Education, Inc. All rights reserved.

Why study software?

● This course intends to show you that software design is very logical and modular. It is a good case study of good engineering practice.

● A lot of software development is intimately tied to computer architectures:

● Compilers generate code for certain processors● Operating systems control the system hardware● Motors are often controlled by software

● Many embedded systems (from cars, mobile phones and TVs down to microwave ovens and washing machines) need both hardware and software.

Page 7: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

7

2007 Pearson Education, Inc. All rights reserved.

Why study software?

● It is therefore no exaggeration to say that most Electrical and/or Electronic Engineering related jobs have some kind of software aspect. Many traditional Electrical Engineering functions are now performed by microprocessors.

● If you end up in a management position you may well have to take important (and potentially expensive) decisions that are affected by your knowledge about both software and hardware.

● Therefore, understanding and being comfortable with software will greatly enhance your career prospects.

● Professional organisations (such as IET and IEEE) demand that you develop some software skills.

Page 8: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

8

2007 Pearson Education, Inc. All rights reserved.

Course structure

● There are practicals every week, where you do exercises and projects. Details are always on the web page.

● Project deadlines must be strictly adhered to.● Some of the lectures will be devoted to exercises,

quizzes, and self-assessments.

Page 9: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

9

2007 Pearson Education, Inc. All rights reserved.

Second year

● In the first year, you also learn the basics of Computer Architecture (as part of the Digital Electronics I course)

● In the second year, we combine the two topics in EEE2007, where you learn more advanced Machine Architecture, Embedded C, and Assembly language

● You then build and program your own computer, based around a Motorola microprocessor

Page 10: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

10

2007 Pearson Education, Inc. All rights reserved.

1.2 What is a Computer?

● Computer ● Device capable of performing computations and making

logical decisions● Computers process data under the control of sets of

instructions called computer programs ● Hardware

● Various devices comprising a computer● Keyboard, screen, mouse, disks, memory, CD-ROM, and

processing units● Software

● Programs that run on a computer

Page 11: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

11

2007 Pearson Education, Inc. All rights reserved.

The ENIAC

Page 12: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

12

2007 Pearson Education, Inc. All rights reserved.

Computer technology evolution

years1033 hoursreliability

$ 100010-4$ 10Mcost

50W10-310 kWpower consumption

4000M ops/s107150 ops/sspeed

6 cm310-8200 m3size

150M transistors

10418000 tubes

complexity

2005: PENTIUM

Scale factor

1945: ENIAC

Feature

Page 13: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

13

2007 Pearson Education, Inc. All rights reserved.

What if cars had improved like that

10 mg10-81 tonweight

1000 years10001 yearreliability

1 pound10-410K poundscost

50000 mpg10-350 mpgfuel

.. of light10770 m/hourspeed

Page 14: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

14

2007 Pearson Education, Inc. All rights reserved.

1.3 Computer Organization

● Six logical units in every computer:● Input unit

Obtains information from input devices (keyboard, mouse)● Output unit

Outputs information (to screen, to printer, to control other devices)● Memory unit

Rapid access, low capacity, stores input information● Arithmetic and logic unit (ALU)

Performs arithmetic calculations and logic decisions● Central processing unit (CPU)

Supervises and coordinates the other sections of the computer● Secondary storage unit

Cheap, long-term, high-capacity storageStores inactive programs

Page 15: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

15

2007 Pearson Education, Inc. All rights reserved.

1.6 Machine Languages, Assembly Languages, and High-level Languages

● Three types of programming languages● Machine languages

● Strings of numbers giving machine specific instructions● Example:

+1400593419+1300042774+1200274027

● Assembly languages● English-like abbreviations representing elementary computer

operations (translated via assemblers)● Example:

● LOAD BASEPAY● ADD OVERPAY● STORE GROSSPAY

Page 16: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

16

2007 Pearson Education, Inc. All rights reserved.

1.6 Machine Languages, Assembly Languages, and High-level Languages

Three types of programming languages (continued)1. High-level languages

- Codes similar to everyday English

- Use mathematical notations (translated via compilers)

- Example:grossPay = basePay + overTimePay

Page 17: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

17

2007 Pearson Education, Inc. All rights reserved.

1.8 History of C

● C ● Evolved by Ritchie from two previous programming languages,

BCPL and B● Used to develop UNIX● Used to write modern operating systems● Hardware independent (portable)

● Standardization● Many slight variations of C existed, and were incompatible● Committee formed to create a "unambiguous, machine-

independent" definition● Standard created in 1989, updated in 1999

Page 18: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

18

2007 Pearson Education, Inc. All rights reserved.

Portability Tip

Because C is a hardware-independent, widely available language, applications written in C can run with little or no modifications on a wide range of different computer systems.

Page 19: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

19

2007 Pearson Education, Inc. All rights reserved.

1.9 C Standard Library

● C programs consist of pieces/modules called functions

● A programmer can create her own functions● Advantage: the programmer knows exactly how it works● Disadvantage: time consuming

● Programmers will often use the C library functions● Use these as building blocks

● Avoid re-inventing the wheel● If a pre-made function exists, generally best to use it rather

than write your own● Library functions carefully written, efficient, and portable

Page 20: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

20

2007 Pearson Education, Inc. All rights reserved.

Performance Tips

Using Standard C library functions insteadof writing your own comparable versions can improve program performance, because these functions are carefully written to perform efficiently.

This can also improve program portability, because these functions are used in virtually all Standard C implementations.

Page 21: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

21

2007 Pearson Education, Inc. All rights reserved.

1.14 Typical C Program Development Environment

● Phases of C Programs:● Edit: Using a text editor, you create the program and put it into a

file● Preprocess: The C Preprocessor includes system definitions and

removes comments from the file. The result is stored in another file● Compile: The C compiler turns the file into object code, and stores

the result in a file● Link: The Linker combines the object code with libraries, to create

a complete executable file● Load: The Loader (part of the Operating System) puts the

executable file in memory● Execute: The microprocessor executes (runs) the program

Fig. 1.1 | Typical C development environment.

Page 22: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

22

2007 Pearson Education, Inc. All rights reserved.

1.18 General Notes About C

● Program clarity● Programs that are convoluted are difficult to read,

understand, and modify● C is a portable language

● Programs can run on many different computers● However, portability is an elusive goal

● We do a careful walk-through of C● Some details and subtleties are not covered● If you need additional technical details

● Read the C standard document● Read other books – there are many

Page 23: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

23

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practice

Write your C programs in a simple and straightforward manner. This is sometimes referred to as KIS (“keep it simple”). Do not “stretch” the language by trying bizarre usages.

Page 24: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

24

2007 Pearson Education, Inc. All rights reserved.

Software Engineering Observation

Your computer and compiler are good teachers. If you are not sure how a feature of C works, write a sample program with that feature, compile and run the program and see what happens.

Page 25: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

25

2007 Pearson Education, Inc. All rights reserved.

22Introduction

to C Programming

Page 26: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

26

2007 Pearson Education, Inc. All rights reserved.

comments – ignored by compiler

load a particular file

beginning of main function

perform an action

ends the function

end of main function

1 /* Fig. 2.1: fig02_01.c 2 A first program in C */ 3 #include <stdio.h> 4 5 /* function main begins program execution */ 6 int main( void ) 7 { 8 printf( "Welcome to C!\n" ); 9 10 return 0; /* program ended successfully */11 12 } /* end function main */

Line numbers are not part of the program!

Welcome to C!

Page 27: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

27

2007 Pearson Education, Inc. All rights reserved.

2.2 A Simple C Program:Printing a Line of Text

Comments● Text surrounded by /* and */ is ignored by computer● Used to describe program

● #include <stdio.h>● Preprocessor directive

Tells computer to load contents of a certain file● <stdio.h> allows standard input/output operations

Page 28: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

28

2007 Pearson Education, Inc. All rights reserved.

Common Programming Errors

Forgetting to terminate a comment with */ .

Starting a comment with the characters */ or ending a comment with the characters /* .

Page 29: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

29

2007 Pearson Education, Inc. All rights reserved.

2.2 A Simple C Program:Printing a Line of Text

● int main()● C programs contain one or more functions, exactly one of

which must be main● Parenthesis used to indicate a function● int means that main "returns" an integer value● Braces ({ and }) indicate a block

● The bodies of all functions must be contained in braces

Page 30: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

30

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practice

Every function should be preceded by a comment describing the purpose of the function.

Page 31: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

31

2007 Pearson Education, Inc. All rights reserved.

2.2 A Simple C Program:Printing a Line of Text

● printf( "Welcome to C!\n" );● Instructs computer to perform an action

● Specifically, prints the characters within quotes (" ")● Entire line called a statement

● All statements must end with a semicolon (;)● Escape character (\)

● Indicates that printf should do something out of the ordinary● \n is the newline character

Page 32: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

32

2007 Pearson Education, Inc. All rights reserved.

Fig. 2.2 | Some common escape sequences.

Escape Description

\n Newline. Put the cursor at the beginning of the next line.\t Horizontal tab. Move the cursor to the next tab stop.\a Alert. Sound the system bell.\\ Backslash. Insert a backslash character in a string.\" Double quote. Insert a double-quote character in a string.

Page 33: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

33

2007 Pearson Education, Inc. All rights reserved.

Common Programming Error

Typing the name of the output function printf as print in a program.

Page 34: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

34

2007 Pearson Education, Inc. All rights reserved.

2.2 A Simple C Program:Printing a Line of Text

● return 0;● A way to exit a function● return 0 , in this case, means that the program terminated

normally● Right brace }

● Indicates end of main has been reached

● Linker● When a function is called, linker locates it in the library● Inserts it into object program● If function name is misspelled, the linker will produce an error

because it will not be able to find function in the library

Page 35: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

35

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practices

Add a comment to the line containing the right brace, } , that closes every function, including main.

The last character printed by a function that displays output should be a newline (\n). This ensures that the function will leave the screen cursor positioned at the beginning of a new line. Conventions of this nature encourage software reusability—a key goal in software development environments.

Page 36: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

36

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practice

Indent the entire body of each function one level of indentation (we recommend three spaces) within the braces that define the body of the function. This indentation emphasizes the functional structure of programs and helps make programs easier to read. How would you like this instead:/* Fig. 2.1: fig02_01.c A first program in C*/#include <stdio.h>/*function main begins program*/int main(void){printf("Welcome to C!\n");return 0;/*program ended successfully*/}/*end function main*/

Page 37: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

37

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practice

Set a convention for the size of indent you prefer and then uniformly apply that convention. The tab key may be used to create indents, but tab stops may vary. We recommend using three spaces per level of indent.

Page 38: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

38

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 2.3: fig02_03.c 2 Printing on one line with two printf statements */ 3 #include <stdio.h> 4 5 /* function main begins program execution */ 6 int main( void ) 7 { 8 printf( "Welcome " ); 9 printf( "to C!\n" );10 11 return 0; /* indicate that program ended successfully */12 13 } /* end function main */

printf statement starts printing from where the last statement ended, so the text is printed on one line.

Welcome to C!

Page 39: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

39

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 2.4: fig02_04.c 2 Printing multiple lines with a single printf */ 3 #include <stdio.h> 4 5 /* function main begins program execution */ 6 int main( void ) 7 { 8 printf( "Welcome\nto\nC!\n" ); 9 10 return 0; /* indicate that program ended successfully */11 12 } /* end function main */

Newlines move the cursor to the next line

WelcometoC!

Page 40: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

40

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 2.5: fig02_05.c 2 Addition program */ 3 #include <stdio.h> 4 5 /* function main begins program execution */ 6 int main( void ) 7 { 8 int integer1; /* first number to be input by user */ 9 int integer2; /* second number to be input by user */10 int sum; /* variable in which sum will be stored */ 11 12 printf( "Enter first integer\n" ); /* prompt */13 scanf( "%d", &integer1 ); /* read integer */14 15 printf( "Enter second integer\n" ); /* prompt */16 scanf( "%d", &integer2 ); /* read integer */17 18 sum = integer1 + integer2; /* assign total to sum */19 20 printf( "Sum is %d\n", sum ); /* print sum */21 22 return 0; /* program ended successfully */23 24 } /* end function main */

variables

Assigns a value to sum

scanf obtains a value from the user and assigns it to a variable

Page 41: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

41

2007 Pearson Education, Inc. All rights reserved.

Enter first integer45Enter second integer72Sum is 117

Page 42: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

42

2007 Pearson Education, Inc. All rights reserved.

2.3 Another Simple C Program:Adding Two Integers

● As before● Comments, #include <stdio.h> and main

● int integer1, integer2, sum;● Definition of variables, called a declaration

● Variables: locations in memory where a value can be stored● int (its type) means the variables can hold integers (-1 , 3 , 0 ,

47)● Variable names (identifiers)

● integer1, integer2, sum ● Identifiers: consist of letters, digits (cannot begin with a digit) and

underscores( _ )Case sensitive

● Definitions appear before executable statements● If an executable statement references and undeclared variable it will

produce a syntax (compiler) error

Page 43: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

43

2007 Pearson Education, Inc. All rights reserved.

Common Programming Errors

Using a capital letter where a lowercase letter should be used (for example, typing Main instead of main).

Placing variable definitions among executable statements causes syntax errors.

Page 44: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

44

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practice

Choosing meaningful variable names helps make a program self-documenting, i.e., fewer comments are needed.

The first letter of an identifier used as a simple variable name should be a lowercase letter. Later in the text we will assign special significance to identifiers that begin with a capital letter and to identifiers that use all capital letters.

Page 45: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

45

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practice

Multiple-word variable names can help make a program more readable. Avoid running the separate words together as in totalcommissions . Rather, separate the words with underscores as in total_commissions , or, if you do wish to run the words together, begin each word after the first with a capital letter as in totalCommissions . The latter style is preferred.

Page 46: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

46

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practice

Separate the definitions and executable statements in a function with one blank line to emphasize where the definitions end and the executable statements begin.

Page 47: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

47

2007 Pearson Education, Inc. All rights reserved.

2.3 Another Simple C Program:Adding Two Integers

● scanf( "%d", &integer1 );● Obtains a value from the user

scanf uses standard input (usually keyboard)● This scanf statement has two arguments

%d - indicates data should be a decimal integerconversion specifier

&integer1 - location in memory to store variableaddress operator

& is confusing in beginning – for now, just remember to include it with the variable name in scanf statements

● When executing the program the user responds to the scanf statement by typing in a number, then pressing the enter (return) key

Page 48: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

48

2007 Pearson Education, Inc. All rights reserved.

2.3 Another Simple C Program:Adding Two Integers

● = (assignment operator)● Assigns a value to a variable (assignment statement)● Is a binary operator (has two operands)

sum = variable1 + variable2;

sum gets the value (variable1 + variable2);

● Variable receiving value on left● The right hand side is an expression

● printf( "Sum is %d\n", sum );● Similar to scanf

● %d means decimal integer will be printed● sum specifies what integer will be printed

● Calculations can be performed inside printf statementsprintf( "Sum is %d\n", integer1 + integer2 );

Page 49: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

49

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practice

Place spaces on either side of a binary operator. This makes the operator standout and makes the program more readable.

Place a space after each comma (,) to make programs more readable.

Page 50: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

50

2007 Pearson Education, Inc. All rights reserved.

Common Programming Errors

A calculation in an assignment statement must be on the right side of the = operator. It is a syntax error to place a calculation on the left side of an assignment operator.

Forgetting one or both of the double quotes surrounding the format control string in a printf or scanf .

Page 51: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

51

2007 Pearson Education, Inc. All rights reserved.

Common Programming Errors

Forgetting the % in a conversion specification in the format control string of a printf or scanf .

Placing an escape sequence such as \n outside the format control string of a printf or scanf .

Page 52: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

52

2007 Pearson Education, Inc. All rights reserved.

Common Programming Errors

Forgetting to include the expressionswhose values are to be printed in aprintf containing conversion specifiers.

Not providing a conversion specifier when one is needed in a printf format control string to print the value of an expression.

Page 53: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

53

2007 Pearson Education, Inc. All rights reserved.

Common Programming Errors

Placing inside the format control string the comma that is supposed to separate the format control string from the expressionsto be printed.

Forgetting to precede a variable in a scanf statement with an ampersand when that variable should, in fact, be preceded by an ampersand.

Page 54: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

54

2007 Pearson Education, Inc. All rights reserved.

Common Programming Error

Preceding a variable included in a printf statement with an ampersand when, in fact, that variable should not be preceded by an ampersand.

Page 55: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

55

2007 Pearson Education, Inc. All rights reserved.

2.4 Memory Concepts

● Variables ● Variable names correspond to locations in the computer's

memory● Every variable has a name, a type, a size and a value

Types are: int (integer), char (character), float, double (both floating point – they have decimal points in them)

● Whenever a new value is placed into a variable (through scanf, for example), it replaces (and destroys) the previous value (destructive operation)

● Reading variables from memory does not change them, so in: sum = variable1 + variable2; variable1 and variable2 are unchanged (nondestructive operation), but sum is likely to change

Page 56: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

56

2007 Pearson Education, Inc. All rights reserved.

Fig. 2.8 | Memory locations after a calculation.

integer1

integer2

sum

45

72

117

Page 57: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

57

2007 Pearson Education, Inc. All rights reserved.

2.5 Arithmetic

● Arithmetic calculations● Use * for multiplication and / for division● Integer division truncates remainder

7 / 5 evaluates to 1● Modulus operator(%) returns the remainder

7 % 5 evaluates to 2, because 7 = 5*1 + 2● Operator precedence

● Some arithmetic operators act before others (i.e. multiplication before addition)

Use parenthesis when needed● Example: Find the average of three variables a, b and c

Do not use: a + b + c / 3 Use: (a + b + c ) / 3

Page 58: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

58

2007 Pearson Education, Inc. All rights reserved.

Fig. 2.9 | Arithmetic operators.

C operation operator Algebraic C Addition + f + 7 f + 7

Subtraction – p – c p - c

Multiplication * bm b * m

Division / x / y x / y

Remainder % r mod s r % s

Page 59: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

59

2007 Pearson Education, Inc. All rights reserved.

Common Programming Error

An attempt to divide by zero is normally undefined on computer systems and generally results in a fatal error, i.e., an error that causes the program to terminate immediately without having successfully performed its job. Nonfatal errors allow programs to run to completion, often producing incorrect results.

Page 60: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

60

2007 Pearson Education, Inc. All rights reserved.

Fig. 2.10 | Precedence of arithmetic operators.

Operator(s) Operation(s) Order of evaluation (precedence)

( ) Parentheses Evaluated first. If the parentheses are nested, the expression in the innermost pair is evaluated first. If there are several pairs of parentheses “on the same level” (i.e., not nested),they are evaluated left to right.

*/

%

MultiplicationDivisionRemainder

Evaluated second. If there are several, they are evaluated left to right.

+-

AdditionSubtraction

Evaluated last. If there are several, they are evaluated left to right.

Page 61: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

61

2007 Pearson Education, Inc. All rights reserved.

Fig. 2.11 | Order in which a second-degree polynomial is evaluated.

Step 1. y = 2 * 5 * 5 + 3 * 5 + 7; /* leftmost multiplication */ 2 * 5 is 10

Step 2. y = 10 * 5 + 3 * 5 + 7; /* leftmost multiplication */ 10 * 5 is 50

Step 3. y = 50 + 3 * 5 + 7; /* multiplication first */ 3 * 5 is 15

Step 4. y = 50 + 15 + 7; /* leftmost addition */ 50 + 15 is 65

Step 5. y = 65 + 7; /* last addition */

Step 6. y = 72;

Page 62: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

62

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practice

Using redundant parentheses in complex arithmetic expressions can make the expressions clearer.

Page 63: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

63

2007 Pearson Education, Inc. All rights reserved.

2.6 Decision Making: Equality and Relational Operators

● Statements:● Perform actions (calculations, input/output of data)● Perform decisions

May want to print "pass" or "fail" given the value of a test grade● if control statement

● Simple version in this section, more detail later● If a condition is true , then the body of the if statement

executed0 is false and non-zero is true

● Control always resumes after the if structure● Keywords

● Special words reserved for C● Cannot be used as identifiers or variable names

Page 64: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

64

2007 Pearson Education, Inc. All rights reserved.

Keywords

auto double int struct

break else long switch

case enum register typedef

char extern return union

const float short unsigned

continue for signed void

default goto sizeof volatile

do if static while

C’s keywords.

Page 65: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

65

2007 Pearson Education, Inc. All rights reserved.

Standard algebraicequality operator orrelational operator

C equality orrelationaloperator

Example ofC condition

Meaning of C condition

Equality operators

= == x == y x is equal to y

≠ != x != y x is not equal to y

Relational operators

> > x > y x is greater than y

< < x < y x is less than y

≥ >= x >= y x is greater than or equal to y

≤ <= x <= y x is less than or equal to y

Fig. 2.12 | Equality and relational operators.

Page 66: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

66

2007 Pearson Education, Inc. All rights reserved.

Common Programming Errors

A syntax error will occur if the two symbols in any of the operators == , != , >= and <= are separated by spaces.

A syntax error will occur if the two symbols in any of the operators != , >= and <= are reversed as in =! , => and =< , respectively.

Page 67: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

67

2007 Pearson Education, Inc. All rights reserved.

Common Programming Errors

Confusing the equality operator == with the assignment operator = .

Placing a semicolon immediately to the right of the right parenthesis after the condition in an if statement.

Page 68: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

68

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practices

Indent the statement(s) in the body of an if statement.

Place a blank line before and after everyif statement in a program for readability.

Although it is allowed, there should be nomore than one statement per line in a program.

Page 69: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

69

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practice

Consistently applying responsible indentation conventions greatly improves program readability.

In this course, we use three blanks per indent.

Page 70: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

70

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 2.13: fig02_13.c 2 Using if statements, relational 3 operators, and equality operators */ 4 #include <stdio.h> 5 6 /* function main begins program execution */ 7 int main( void ) 8 { 9 int num1; /* first number to be read from user */10 int num2; /* second number to be read from user */11 12 printf( "Enter two integers, and I will tell you\n" );13 printf( "the relationships they satisfy: " );14 15 scanf( "%d%d", &num1, &num2 ); /* read two integers */16 17 if ( num1 == num2 ) { 18 printf( "%d is equal to %d\n", num1, num2 );19 } /* end if */20 21 if ( num1 != num2 ) {22 printf( "%d is not equal to %d\n", num1, num2 );23 } /* end if */

Checks if num1 is equal to num2

Checks if num1 is not equal to num2

........ Continued on next slide .......

Page 71: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

71

2007 Pearson Education, Inc. All rights reserved.

25 if ( num1 < num2 ) { 26 printf( "%d is less than %d\n", num1, num2 );27 } /* end if */28 29 if ( num1 > num2 ) { 30 printf( "%d is greater than %d\n", num1, num2 );31 } /* end if */32 33 if ( num1 <= num2 ) { 34 printf( "%d is less than or equal to %d\n", num1, num2 );35 } /* end if */36 37 if ( num1 >= num2 ) {38 printf( "%d is greater than or equal to %d\n", num1, num2 );39 } /* end if */40 41 return 0; /* indicate that program ended successfully */42 }

Checks if num1 is less than num2

Checks if num1 is greater than num2

Checks if num1 is less than or equal to num2

Checks if num1 is greater than equal to num2

Page 72: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

72

2007 Pearson Education, Inc. All rights reserved.

Enter two integers, and I will tell you the relationships they satisfy: 3 73 is not equal to 73 is less than 73 is less than or equal to 7

Enter two integers, and I will tell you

the relationships they satisfy: 22 12 22 is not equal to 1222 is greater than 1222 is greater than or equal to 12

Enter two integers, and I will tell you the relationships they satisfy: 7 77 is equal to 77 is less than or equal to 77 is greater than or equal to 7

Page 73: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

73

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practice

A lengthy statement may be spread over several lines. If a statement must be split across lines, choose breaking points that make sense (such as after a comma in a comma-separated list).

If a statement is split across two or more lines, indent all subsequent lines.

Page 74: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

74

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practice

Refer to the operator precedence chart when writing expressions containing many operators. Confirm that the operators in the expression are applied in the proper order.

If you are uncertain about the order of evaluation in a complex expression, use parentheses to group expressions or break the statement into several simpler statements.

Page 75: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

75

2007 Pearson Education, Inc. All rights reserved.

Operators Associativity

( ) left to right

* / % left to right

+ - left to right

< <= > >= left to right

== != left to right

= right to left

Fig. 2.14 | Precedence and associativity of the operators discussed so far.

Page 76: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

76

2007 Pearson Education, Inc. All rights reserved.

33Structured Program

Development in C

Page 77: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

77

2007 Pearson Education, Inc. All rights reserved.

3.1 Introduction

● Before writing a program:● Have a thorough understanding of the problem ● Carefully plan an approach for solving it

● While writing a program: ● Know what “building blocks” are available● Use good programming principles

Page 78: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

78

2007 Pearson Education, Inc. All rights reserved.

3.2 Algorithms

● Computing problems ● All can be solved by executing a series of actions in a

specific order

● Algorithm: procedure in terms of● Actions to be executed ● The order in which these actions are to be executed

● Program control ● Specify order in which statements are to be executed

Page 79: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

79

2007 Pearson Education, Inc. All rights reserved.

3.3 Pseudocode

● Pseudocode● Artificial, informal language that helps us develop

algorithms● Similar to everyday English● Not actually executed on computers ● Helps us “think out” a program before writing it

● Easy to convert into a corresponding program● Consists only of executable statements

Page 80: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

80

2007 Pearson Education, Inc. All rights reserved.

3.4 Control Structures

● Sequential execution ● Statements executed one after the other in the order written

● Transfer of control● When the next statement executed is not the next one in

sequence● Building blocks

● All programs written in terms of 3 control structures● Sequence structures: Built into C. Programs executed sequentially

by default● Selection structures: C has three types: if, if…else, and switch

● Repetition structures: C has three types: while, do…while and for

Page 81: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

81

2007 Pearson Education, Inc. All rights reserved.

Fig. 3.1 | Flowcharting C’s sequence structure.

Add grade to total

Add 1 to counter

total = total + grade;

counter = counter + 1;

Page 82: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

82

2007 Pearson Education, Inc. All rights reserved.

3.4 Control Structures

● Flowchart ● Graphical representation of an algorithm● Drawn using certain special-purpose symbols connected by

arrows called flowlines● Rectangle symbol (action symbol):

● Indicates any type of action● Oval symbol:

● Indicates the beginning or end of a program or a section of code

● Single-entry/single-exit control structures ● Connect exit point of one control structure to entry point of the

next (control-structure stacking)● Makes programs easy to build

Page 83: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

83

2007 Pearson Education, Inc. All rights reserved.

3.5 The if selection statement

● Selection structure: ● Used to choose among alternative courses of action● Pseudocode:

If student’s grade is greater than or equal to 60Print “Passed”

● If condition true ● Print statement executed and program goes on to next

statement● If false, print statement is ignored and the program goes

onto the next statement● Indenting makes programs easier to read

● C ignores whitespace characters

Page 84: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

84

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practice

Pseudocode is often used to “think out” a program during the program design process. Then the pseudocode program is converted to C.

Page 85: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

85

2007 Pearson Education, Inc. All rights reserved.

3.5 The if selection statement

● Pseudocode statement in C:if ( grade >= 60 ) printf( "Passed\n" );

● C code corresponds closely to the pseudocode

● Diamond symbol (decision symbol)● Indicates decision is to be made● Contains an expression that can be true or false● Test the condition, follow appropriate path

Page 86: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

86

2007 Pearson Education, Inc. All rights reserved.

Fig. 3.2 | Flowcharting the single-selection if statement.

print “passed”true

false

grade >= 60

Page 87: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

87

2007 Pearson Education, Inc. All rights reserved.

3.6 The if…else selection statement

● if● Only performs an action if the condition is true

● if…else● Specifies an action to be performed both when the

condition is true and when it is false● Pseudocode:

If student’s grade is greater than or equal to 60Print “Passed”

elsePrint “Failed”

● Note spacing/indentation conventions

Page 88: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

88

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practices

Indent both body statements of an if...else statement.

If there are several levels of indentation, each level should be indented the same additional amount of space.

Page 89: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

89

2007 Pearson Education, Inc. All rights reserved.

3.6 The if…else selection statement

● C code:if ( grade >= 60 ) printf( "Passed\n");else

printf( "Failed\n"); ● Ternary conditional operator (? :)

● Takes three arguments (condition, value if true, value if false)● Our pseudocode could be written:

printf( "%s\n", grade >= 60 ? "Passed" : "Failed" ); ● Or it could have been written:

grade >= 60 ? printf( “Passed\n” ) : printf( “Failed\n” );

Page 90: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

90

2007 Pearson Education, Inc. All rights reserved.

Fig. 3.3 | Flowcharting the double-selection if...else statement.

print “passed”truefalse

grade >= 60print “failed”

Page 91: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

91

2007 Pearson Education, Inc. All rights reserved.

3.6 The if…else selection statement

● Nested if…else statements ● Test for multiple cases by placing if…else selection

statements inside if…else selection statement● Once condition is met, rest of statements skipped● Deep indentation usually not used in practice

Page 92: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

92

2007 Pearson Education, Inc. All rights reserved.

3.6 The if…else selection statement

● Pseudocode for a nested if…else statement

If student’s grade is greater than or equal to 90Print “A”

else If student’s grade is greater than or equal to 80 Print “B”else If student’s grade is greater than or equal to 70 Print “C” else If student’s grade is greater than or equal to 60 Print “D” else Print “F”

Page 93: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

93

2007 Pearson Education, Inc. All rights reserved.

3.6 The if…else selection statement

● Compound statement: ● Set of statements within a pair of braces● Example:

if ( grade >= 60 ) printf( "Passed.\n" );else { printf( "Failed.\n" ); printf( "You must take this course again.\n" );

} ● Without the braces, the statement

printf( "You must take this course again.\n" );

would be executed automatically

Page 94: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

94

2007 Pearson Education, Inc. All rights reserved.

Software Engineering Observation

A compound statement can be placed anywhere in a program that a single statement can be placed.

It is also possible to have no statement at all, i.e., the empty statement. The empty statement is represented by placing a semicolon (;) where a statement would normally be.

Page 95: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

95

2007 Pearson Education, Inc. All rights reserved.

Common Programming Error

Forgetting one or both of the braces that delimit a compound statement.

This usually leads the compiler to issue error messages that make little sense initially – they may occur much later in the program.

Page 96: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

96

2007 Pearson Education, Inc. All rights reserved.

Common Programming Error

Placing a semicolon after the condition in anif statement as in if ( grade >= 60 ); leads to a logic error in single-selection if statements and a syntax error in double-selection if statements.

Page 97: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

97

2007 Pearson Education, Inc. All rights reserved.

Error-Prevention Tip

Typing the beginning and ending braces of compound statements before typing the individual statements within the braces helps avoid omitting one or both of the braces, preventing syntax errors and logic errors (where both braces are indeed required).

Page 98: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

98

2007 Pearson Education, Inc. All rights reserved.

3.7 The while repetition statement

● Repetition structure● Programmer specifies an action to be repeated while some

condition remains true● Pseudocode:

While there are more items on my shopping list Purchase next item and cross it off my list

● while loop repeated until condition becomes false● Example:

int product = 2;

while ( product <= 1000 )product = 2 * product;

Page 99: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

99

2007 Pearson Education, Inc. All rights reserved.

Common Programming Errors

Not providing the body of a while statement with an action that eventually causes the condition in the while to become false. Normally, such a repetition structure will never terminate—an error called an “infinite loop.”

Spelling the keyword while with an uppercase W as in While (remember that C is a case-sensitive language). All of C’s reserved keywords such as while, if and else contain only lowercase letters.

Page 100: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

100

2007 Pearson Education, Inc. All rights reserved.

Fig. 3.4 | Flowcharting the while repetition statement.

product = 2 * producttrue

false

product <= 1000

Page 101: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

101

2007 Pearson Education, Inc. All rights reserved.

3.8 Counter-Controlled Repetition

● Counter-controlled repetition● Loop repeated until counter reaches a certain value● Definite repetition: number of repetitions is known ● Example: A class of ten students took a quiz. The grades

(integers in the range 0 to 100) for this quiz are available to you. Determine the class average on the quiz.

Page 102: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

102

2007 Pearson Education, Inc. All rights reserved.

1 Set total to zero

2 Set grade counter to one

3

4 While grade counter is less than or equal to ten

5 Input the next grade

6 Add the grade into the total

7 Add one to the grade counter

8

9 Set the class average to the total divided by ten10 Print the class average

Fig. 3.5 | Pseudocode algorithm that uses counter-controlled repetition tosolve the class average problem.

Page 103: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

103

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 3.6: fig03_06.c 2 Class average program with counter-controlled repetition */ 3 #include <stdio.h> 4 5 /* function main begins program execution */ 6 int main( void ) 7 { 8 int counter; /* number of grade */ 9 int grade; /* grade value */10 int total; /* sum of grades input by user */11 int average; /* average of grades */12 13 /* initialization phase */14 total = 0; /* initialize total */15 counter = 1; /* initialize loop counter */16 17 /* processing phase */18 while ( counter <= 10 ) { /* loop 10 times */19 printf( "Enter grade: " ); /* ask for input */20 scanf( "%d", &grade ); /* read grade */21 total = total + grade; /* add grade to total */22 counter = counter + 1; /* increment */23 } /* end while */

........ Continued on next slide .......

Counter to control while loop

Initialize counter to 1

while loop iterates as long as counter <= 10

Increment the counter

Page 104: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

104

2007 Pearson Education, Inc. All rights reserved.

25 /* termination phase */26 average = total / 10; /* integer division */27 28 printf( "Class average is %d\n", average ); /* result */29 30 return 0;31 32 } /* end function main */

Calculate the average

Enter grade: 98Enter grade: 76Enter grade: 71Enter grade: 87Enter grade: 83Enter grade: 90Enter grade: 57Enter grade: 79Enter grade: 82Enter grade: 94Class average is 81

Page 105: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

105

2007 Pearson Education, Inc. All rights reserved.

Common Programming Error

If a counter or total is not initialized, the results of your program will probably be incorrect. This is an example of a logic error.

You must initialize all counters and totals.

Page 106: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

106

2007 Pearson Education, Inc. All rights reserved.

3.9 Formulating Algorithms with Top-Down, Stepwise Refinement

● Problem becomes: Develop a class-averaging program that will process an arbitrary number of grades each time the program is run.

● Unknown number of students● How will the program know to end?

● Use sentinel value ● Also called signal value, dummy value, or flag value● Indicates “end of data entry.”● Loop ends when user inputs the sentinel value● Sentinel value chosen so it cannot be confused with a

regular input (such as -1 in this case)

Page 107: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

107

2007 Pearson Education, Inc. All rights reserved.

Common Programming Error

Choosing a sentinel value that is also a legitimate data value.

Page 108: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

108

2007 Pearson Education, Inc. All rights reserved.

3.9 Formulating Algorithms with Top-Down, Stepwise Refinement

● Top-down, stepwise refinement ● Begin with a pseudocode representation of the top:

Determine the class average for the quiz● Divide top into smaller tasks and list them in order:

Initialize variablesInput, sum and count the quiz gradesCalculate and print the class average

● Many programs have three phases:● Initialization: initializes the program variables● Processing: inputs data values and adjusts program

variables accordingly● Termination: calculates and prints the final results

Page 109: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

109

2007 Pearson Education, Inc. All rights reserved.

3.9 Formulating Algorithms with Top-Down, Stepwise Refinement

● Refine the initialization phase from Initialize variables to:

Initialize total to zeroInitialize counter to zero

● Refine Input, sum and count the quiz grades to Input the first grade (possibly the sentinel)While the user has not as yet entered the sentinel Add this grade into the running total Add one to the grade counter Input the next grade (possibly the sentinel)

Page 110: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

110

2007 Pearson Education, Inc. All rights reserved.

3.9 Formulating Algorithms with Top-Down, Stepwise Refinement

● Refine Calculate and print the class average toIf the counter is not equal to zero Set the average to the total divided by the counter Print the averageelse Print “No grades were entered”

Page 111: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

111

2007 Pearson Education, Inc. All rights reserved.

Fig. 3.7 | Pseudocode algorithm that uses sentinel-controlled repetition tosolve the class average problem.

1 Initialize total to zero

2 Initialize counter to zero

3

4 Input the first grade

5 While the user has not as yet entered the sentinel

6 Add this grade into the running total

7 Add one to the grade counter

8 Input the next grade (possibly the sentinel)

9

10 If the counter is not equal to zero

11 Set the average to the total divided by the counter

12 Print the average

13 else

14 Print “No grades were entered”

Page 112: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

112

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practice

When performing division by an expression whose value could be zero, explicitly test for this case and handle it appropriately in your program (such as printing an error message) rather than allowing the fatal error to occur.

Page 113: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

113

2007 Pearson Education, Inc. All rights reserved.

Software Engineering Observation

Many programs can be divided logically into three phases: an initialization phase that initializes the program variables; a processing phase that inputs data values and adjusts program variables accordingly; and a termination phase that calculates and prints the final results.

Page 114: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

114

2007 Pearson Education, Inc. All rights reserved.

Software Engineering Observation

You terminate the top-down, stepwise refinement process when the pseudocode algorithm is specified in sufficient detail for you to be able to convert the pseudocode to C.

Implementing the C program is then normally straightforward.

Page 115: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

115

2007 Pearson Education, Inc. All rights reserved.

Floating point numbers

● Integer numbers have obvious limitations● No fractions – needed in most scientific and engineering

applications● Integers are relatively small

● Numbers with fractions (i.e. decimal point) are called floating point numbers, and are declared as float or double

● Double allows larger numbers● Printed with %f● Examples: 1.0 3.14 9.99999999999997 etc.

Page 116: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

116

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 3.8: fig03_08.c 2 Class average program with sentinel-controlled repetition */ 3 #include <stdio.h> 4 5 /* function main begins program execution */ 6 int main( void ) 7 { 8 int counter; /* number of grades entered */ 9 int grade; /* grade value */10 int total; /* sum of grades */11 12 float average; /* number with decimal point*/13 14 /* initialization phase */15 total = 0; /* initialize total */16 counter = 0; /* initialize loop counter */17 18 /* processing phase */19 /* get first grade from user */20 printf( "Enter grade, -1 to end: " ); /* prompt for input */21 scanf( "%d", &grade ); /* read grade from user */

float type indicates variable can be a non-integer

........ Continued on next slide .......

Page 117: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

117

2007 Pearson Education, Inc. All rights reserved.

23 /* loop while sentinel value not yet read from user */

24 while ( grade != -1 ) {25 total = total + grade; /* add grade to total */26 counter = counter + 1; /* increment counter */27 28 /* get next grade from user */29 printf( "Enter grade, -1 to end: " ); /* prompt for input */30 scanf("%d", &grade); /* read next grade */31 } /* end while */32 33 /* termination phase */34 /* if user entered at least one grade */35 if ( counter != 0 ) {36 37 /* calculate average of all grades entered */38 average = ( float ) total / counter; /* avoid truncation */

39 40 /* display average with two digits of precision */41 printf( "Class average is %.2f\n", average ); 42 } /* end if */

while loop repeats until user enters a value of -1

Ensures the user entered at least one grade

Converts total to float type

Prints result with 2 digits after decimal point

........ Continued on next slide .......

Page 118: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

118

2007 Pearson Education, Inc. All rights reserved.

43 else { /* if no grades were entered, output message */44 printf( "No grades were entered\n" );45 } /* end else */46 47 return 0;48 49 } /* end function main */

Enter grade, -1 to end: 75Enter grade, -1 to end: 94Enter grade, -1 to end: 97Enter grade, -1 to end: 88Enter grade, -1 to end: 70Enter grade, -1 to end: 64Enter grade, -1 to end: 83Enter grade, -1 to end: 89Enter grade, -1 to end: -1Class average is 82.50

Enter grade, -1 to end: -1No grades were entered

Page 119: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

119

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practice

In a sentinel-controlled loop, the prompts requesting data entry should explicitly remind the user what the sentinel value is.

Page 120: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

120

2007 Pearson Education, Inc. All rights reserved.

Print width specification

● Integers are printed with %d● Prints from current position● Not helpful if you want align numbers in vertical

direction● A print width specification (also called “padding”)

can be inserted between the % and the d● For example: %6d says print at least 6 characters,

and print spaces first if necessary● Example on next slide

Page 121: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

121

2007 Pearson Education, Inc. All rights reserved.

1 /* Example of print width specification */ 2 #include <stdio.h> 3 4 int main( void ) 5 { 6 int i = 3; 7 int j = 850; 8 int k = 12345678912345; 910 printf( "%d\n%d\n\n", i, j );11 printf( "%6d\n%6d\n\n", i, j );12 printf( "%6d\n", k );13 return 0; /* program ended successfully */14 15 } /* end function main */

3850

3 850

12345678912345

Page 122: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

122

2007 Pearson Education, Inc. All rights reserved.

Print width specification

● Examples of printing of floating point numbers:

%f print from current position%20f print at least 20 characters%.2f print two digits after decimal point%20.2f print at least 20 characters, with two

after the decimal point● If you use %f, you often get many digits after the

decimal point, which is not necessarily what you want

Page 123: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

123

2007 Pearson Education, Inc. All rights reserved.

1 /* Example of float print width specification */ 2 #include <stdio.h> 3 4 int main( void ) 5 { 6 7 float f = 10.0 / 7.0; 8 9 printf( "%f\n", f );10 printf( "%20f\n", f );11 printf( "%.2f\n", f );12 printf( "%20.2f\n", f );1314 return 0; /* program ended successfully */15 16 } /* end function main */

1.428571 1.4285711.43 1.43

Page 124: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

124

2007 Pearson Education, Inc. All rights reserved.

Common Programming Errors

Using precision in a conversion specification in the format control string of a scanf statement is wrong. Precisions are used only in printf conversion specifications.

Using floating-point numbers in a manner that assumes they are represented precisely can lead to incorrect results. Floating-point numbers are represented only approximately by most computers.

Do not compare floating-point values for equality.

Page 125: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

125

2007 Pearson Education, Inc. All rights reserved.

3.10 Nested Control Structures

● Problem ● A college has a list of test results (1 = pass, 2 = fail) for 10

students● Write a program that analyzes the results

If more than 8 students pass, print "Raise Tuition"

● Notice that● The program must process 10 test results

Counter-controlled loop will be used● Two counters can be used

One for number of passes, one for number of fails● Each test result is a number—either a 1 or a 2

If the number is not a 1, we assume that it is a 2

Page 126: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

126

2007 Pearson Education, Inc. All rights reserved.

3.10 Nested Control Structures

● Top level outlineAnalyze exam results and decide if tuition should be raised

● First RefinementInitialize variablesInput the ten quiz grades and count passes and failuresPrint a summary of the exam results and decide if tuition should

be raised ● Refine Initialize variables to

Initialize passes to zeroInitialize failures to zeroInitialize student counter to one

Page 127: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

127

2007 Pearson Education, Inc. All rights reserved.

3.10 Nested Control Structures

● Refine Input the ten quiz grades and count passes and failures to

While student counter is less than or equal to tenInput the next exam resultIf the student passed Add one to passeselse Add one to failuresAdd one to student counter

● Refine Print a summary of the exam results and decide if tuition should be raised to

Print the number of passesPrint the number of failuresIf more than eight students passed

Print “Raise tuition”

Page 128: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

128

2007 Pearson Education, Inc. All rights reserved.

Fig. 3.9 | Pseudocode for examination results problem.

1 Initialize passes to zero

2 Initialize failures to zero

3 Initialize student to one

4

5 While student counter is less than or equal to ten

6 Input the next exam result

7

8 If the student passed

9 Add one to passes

10 else

11 Add one to failures

12

13 Add one to student counter

14

15 Print the number of passes

16 Print the number of failures

17 If more than eight students passed 18 Print “Raise tuition”

Page 129: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

129

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 3.10: fig03_10.c 2 Analysis of examination results */ 3 #include <stdio.h> 4 6 int main( void ) 7 { 8 /* initialize variables in definitions */ 9 int passes = 0; /* number of passes */10 int failures = 0; /* number of failures */11 int student = 1; /* student counter */12 int result; /* one exam result */13 14 /* process 10 students using counter-controlled loop */15 while ( student <= 10 ) {16 17 /* prompt user for input and obtain value from user */18 printf( "Enter result ( 1=pass,2=fail ): " );19 scanf( "%d", &result );

while loop continues until 10 students processed

Page 130: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

130

2007 Pearson Education, Inc. All rights reserved.

21 /* if result 1, increment passes */22 if ( result == 1 ) { 23 passes = passes + 1;24 } /* end if */25 else { /* otherwise, increment failures */26 failures = failures + 1;27 } /* end else */28 29 student = student + 1; /* increment student counter */ 30 } /* end while */31 32 /* termination phase; display number of passes and failures */33 printf( "Passed %d\n", passes );34 printf( "Failed %d\n", failures );35 36 /* if more than eight students passed, print "raise tuition" */37 if ( passes > 8 ) {38 printf( "Raise tuition\n" );39 } /* end if */40 41 return 0;42 43 }

if and else statements are nested inside while loop

Page 131: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

131

2007 Pearson Education, Inc. All rights reserved.

Enter Result (1=pass,2=fail): 1Enter Result (1=pass,2=fail): 1Enter Result (1=pass,2=fail): 1Enter Result (1=pass,2=fail): 2Enter Result (1=pass,2=fail): 1Enter Result (1=pass,2=fail): 1Enter Result (1=pass,2=fail): 1Enter Result (1=pass,2=fail): 1Enter Result (1=pass,2=fail): 1Enter Result (1=pass,2=fail): 1Passed 9Failed 1Raise tuition

Page 132: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

132

2007 Pearson Education, Inc. All rights reserved.

Performance Tip

Initializing variables when they are defined can help reduce a program’s execution time.

Many of the performance tips we mention result in nominal improvements, so the reader may be tempted to ignore them. Note that the cumulative effect of all these performance enhancements can make a program perform significantly faster. Also, significant improvement is realized when a supposedly nominal improvement is placed in a loop that may repeat a large number of times.

Page 133: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

133

2007 Pearson Education, Inc. All rights reserved.

3.11 Assignment Operators

● Assignment operators abbreviate assignment expressionsc = c + 3;

can be abbreviated as c += 3; using the addition assignment operator

● Statements of the formvariable = variable operator expression;

can be rewritten asvariable operator= expression;

● Examples of other assignment operators:d -= 4 (d = d - 4)e *= 5 (e = e * 5)f /= 3 (f = f / 3)g %= 9 (g = g % 9)

Page 134: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

134

2007 Pearson Education, Inc. All rights reserved.

Assignment operator

Sampleexpression

Explanation Assigns

Assume: int c = 3, d = 5, e = 4, f = 6, g = 12;

+= c += 7 c = c + 7 10 to c

-= d -= 4 d = d - 4 1 to d

*= e *= 5 e = e * 5 20 to e

/= f /= 3 f = f / 3 2 to f

%= g %= 9 g = g % 9 3 to g

Fig. 3.11 | Arithmetic assignment operators.

Page 135: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

135

2007 Pearson Education, Inc. All rights reserved.

3.12 Increment and Decrement Operators

● Increment operator (++)● Can be used instead of c+=1

● Decrement operator (--)● Can be used instead of c-=1

● Preincrement● Operator is used before the variable (++c or --c) ● Variable is changed before the expression it is in is evaluated

● Postincrement● Operator is used after the variable (c++ or c--)● Expression executes before the variable is changed

Page 136: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

136

2007 Pearson Education, Inc. All rights reserved.

3.12 Increment and Decrement Operators

● If c equals 5, then printf( "%d", ++c );

● Prints 6 printf( "%d", c++ );

● Prints 5 ● In either case, c now has the value of 6

● When variable not in an expression● Preincrementing and postincrementing have the same effect

++c; printf( “%d”, c );

● Has the same effect asc++; printf( “%d”, c );

Page 137: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

137

2007 Pearson Education, Inc. All rights reserved.

Operator Sample expression Explanation

++ ++a Increment a by 1, then use the newvalue of a in the expression in which aresides.

++ a++ Use the current value of a in theexpression in which a resides, thenincrement a by 1.

-- --b Decrement b by 1, then use the newvalue of b in the expression in which bresides.

-- b-- Use the current value of b in theexpression in which b resides, thendecrement b by 1.

Fig. 3.12 | Increment and decrement operators.

Page 138: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

138

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 3.13: fig03_13.c 2 Preincrementing and postincrementing */ 3 #include <stdio.h> 4 5 /* function main begins program execution */ 6 int main( void ) 7 { 8 int c; /* define variable */ 9 10 /* demonstrate postincrement */11 c = 5; /* assign 5 to c */12 printf( "%d\n", c ); /* print 5 */13 printf( "%d\n", c++ ); /* print 5 then postincrement */14 printf( "%d\n\n", c ); /* print 6 */15 16 /* demonstrate preincrement */17 c = 5; /* assign 5 to c */18 printf( "%d\n", c ); /* print 5 */19 printf( "%d\n", ++c ); /* preincrement then print 6 */20 printf( "%d\n", c ); /* print 6 */21 22 return 0;23 24 } /* end function main */

c is printed, then incremented

c is incremented, then printed

Page 139: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

139

2007 Pearson Education, Inc. All rights reserved.

5

5

6

5

6

6

Page 140: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

140

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practice

Unary operators should be placed directly next to their operands with no intervening spaces.

Page 141: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

141

2007 Pearson Education, Inc. All rights reserved.

Common Programming Error

Attempting to use the increment or decrement operator on an expression other than a simple variable name is a syntax error, e.g., writing ++(x + 1) .

Page 142: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

142

2007 Pearson Education, Inc. All rights reserved.

Operators Associativity Type

++(post) -- (post) right to left postfix

+ - (type) ++ (pre) -- (pre) right to left unary

* / % left to right multiplicative

+ - left to right additive

< <= > >= left to right relational

== != left to right equality

?: right to left conditional

= += -= *= /= %= right to left assignment

Fig. 3.14 | Precedence of the operators encountered so far in the text.

Page 143: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

143

2007 Pearson Education, Inc. All rights reserved.

Debugging

● Your program compiles, but it does not run correctly!

● What to do now?● Ask your more knowledgeable colleagues?● Read the lecture notes● Read a C textbook● Read the code statement by statement

• Walk-through● Check the effect of each statement on the state of the program

Page 144: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

144

2007 Pearson Education, Inc. All rights reserved.

Debugging

● Read the code statement by statement● Walk-through:

● Check the effect of each statement on the state of the program● State = Values of attributes of each object

● Value of each simple variable● Value of individual attributes of other program elements

● Make a table ……

Page 145: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

145

2007 Pearson Education, Inc. All rights reserved.

Debugging table

variableStatement

a 23 23 24 24 24 0b 12 23 25 0 24 24c ? ? ? 0 0 1d ? T T T F F

s1 s2 s3 s4 s5 s6

Uninitialised(A common source of problems!)

Page 146: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

146

2007 Pearson Education, Inc. All rights reserved.

Debugging table

• A mental version of it will often suffice

• Key idea: walk through the program, examining effect of each statement

● The program looks fine! The computer still doesn’t run it correctly! Now what?● Add some debugging statements

● Add a few printf’s to the program● But where?

Page 147: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

147

2007 Pearson Education, Inc. All rights reserved.

Debugging with printf

● Add some printf statements to the program, showing

● the values of variables● where you are in the program

● Critical points are:● Before and after each loop (e.g. what is the value of 'a'?)● Start of each loop (e.g. what is the counter value?)● Start and end of each function (e.g. what value is returned?)● Any point in the program that you suspect is not right

Page 148: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

148

2007 Pearson Education, Inc. All rights reserved.

23 24 while ( grade != -1 ) {25 total = total + grade;26 counter = counter + 1; 27 /* get next grade from user */28 printf( "Enter grade, -1 to end: " );29 scanf("%d", &grade);30 } /* end while */31

23 printf(“Entering while loop\n”);24 while ( grade != -1 ) {25 printf(“start while, grade=%d\n”, grade);26 total = total + grade;27 counter = counter + 1;28 printf(“total=%d, count=%d\n”, total, count);29 /* get next grade from user */30 printf( "Enter grade, -1 to end: " );31 scanf("%d", &grade);32 } /* end while */33 printf(“Exit while loop\n”);

This becomes:

Original:

Page 149: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

149

2007 Pearson Education, Inc. All rights reserved.

44C Program

Control

Page 150: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

150

2007 Pearson Education, Inc. All rights reserved.

4.1 Introduction

● This chapter introduces● Additional repetition control structures

● for

● do…while

● switch multiple selection statement● break statement

● Used for exiting immediately and rapidly from certain control structures

● continue statement● Used for skipping the remainder of the body of a repetition

structure and proceeding with the next iteration of the loop

Page 151: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

151

2007 Pearson Education, Inc. All rights reserved.

4.2 Repetition Essentials

● Loop● Group of instructions computer executes repeatedly while

some condition remains true● Counter-controlled repetition

● Definite repetition: know how many times loop will execute● Control variable used to count repetitions

● Sentinel-controlled repetition● Indefinite repetition● Used when number of repetitions not known● Sentinel value indicates "end of data"

Page 152: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

152

2007 Pearson Education, Inc. All rights reserved.

4.3 Counter-Controlled Repetition

● Counter-controlled repetition requires● The name of a control variable (or loop counter)● The initial value of the control variable● An increment (or decrement) by which the control variable

is modified each time through the loop● A condition that tests for the final value of the control

variable (i.e., whether looping should continue)

Page 153: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

153

2007 Pearson Education, Inc. All rights reserved.

4.3 Counter-Controlled Repetition

● Example: int counter = 1; /* initialization */while ( counter <= 10 ) { /* condition */ printf( "%d\n", counter ); ++counter; /* increment */}

● The statementint counter = 1;

● Names counter● Defines it to be an integer● Reserves space for it in memory● Sets it to an initial value of 1

Page 154: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

154

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 4.1: fig04_01.c 2 Counter-controlled repetition */ 3 #include <stdio.h> 4 5 /* function main begins program execution */ 6 int main( void ) 7 { 8 int counter = 1; /* initialization */ 9 10 while ( counter <= 10 ) { /* repetition condition */11 printf ( "%d\n", counter ); /* display counter */12 counter++; /* increment */ 13 } /* end while */14 15 return 0; /* program ended successfully */16 17 } /* end function main */

Definition and assignment are performed simultaneously

Page 155: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

155

2007 Pearson Education, Inc. All rights reserved.

1

2

3

4

5

6

7

8

9

10

Page 156: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

156

2007 Pearson Education, Inc. All rights reserved.

4.3 Counter-Controlled Repetition

● Condensed code● C Programmers would make the program more concise● Initialize counter to 0

● while ( ++counter <= 10 )printf( “%d\n, counter );

Page 157: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

157

2007 Pearson Education, Inc. All rights reserved.

Common Programming Error

Because floating-point values may be approximate, controlling counting loops with floating-point variables may result in imprecise counter values and inaccurate tests for termination.

You should control counting loops with integer values.

Page 158: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

158

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practices

Indent the statements in the body of each control statement.

Put a blank line before and after each control statement to make it stand out in a program.

Too many levels of nesting can make a program difficult to understand. As a general rule, try to avoid using more than three levels of nesting.

Page 159: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

159

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practice

The combination of vertical spacing before and after control statements and indentation of the bodies of control statements within the control-statement headers gives programs a two-dimensional appearance that greatly improves program readability.

Page 160: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

160

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 4.2: fig04_02.c 2 Counter-controlled repetition with the for statement */ 3 #include <stdio.h> 4 5 6 int main( void ) 7 { 8 int counter; /* define counter */ 9 10 /* initialization, repetition condition, and increment 11 are all included in the for statement header. */12 for ( counter = 1; counter <= 10; counter++ ) {13 printf( "%d\n", counter );14 } /* end for */15

16 return 0; /* indicate program ended successfully */17 18 } /* end function main */

for loop begins by setting counter to 1 and repeats while counter <= 10. Each time the end of the loop is reached, counter is incremented by 1.

Page 161: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

161

2007 Pearson Education, Inc. All rights reserved.

Fig. 4.3 | for statement header components.

for ( counter = 1; counter <= 10; counter++ )

Controlvariable

Requiredsemicolon

Final value ofcontrol variable

Requiredsemicolon

Initial value ofcontrol variable

Loopcontinuationcondition

Increment ofcontrol variable

Page 162: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

162

2007 Pearson Education, Inc. All rights reserved.

Common Programming Error

Using an incorrect relational operator or using an incorrect initial or final value of a loop counter in the condition of a while or for statement can cause off-by-one errors.

Page 163: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

163

2007 Pearson Education, Inc. All rights reserved.

Error-Prevention Tip

Using the final value in the condition of a while or for statement and using the <= relational operator will help avoid off-by-one errors. For a loop used to print the values 1 to 10, for example, the loop-continuation condition should be counter <= 10 rather than counter < 11 or counter < 10 .

Although the value of the control variable can be changed in the body of a for loop, this can lead to subtle errors. It is best not to change it.

Page 164: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

164

2007 Pearson Education, Inc. All rights reserved.

4.4 for Repetition Statement

● Format when using for loopsfor ( initialization; loopContinuationTest; increment )

statement

● Example: for( int counter = 1; counter <= 10; counter++ )

printf( "%d\n", counter );

● Prints the integers from one to ten

Page 165: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

165

2007 Pearson Education, Inc. All rights reserved.

4.4 for Repetition Statement

● For loops can usually be rewritten as while loops:initialization;while ( loopContinuationTest ) { statement; increment;}

● Initialization and increment ● Can be comma-separated lists● Example:

for (i = 0, j = 0; j + i <= 10; j++, i++) printf( "%d\n", j + i );

Page 166: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

166

2007 Pearson Education, Inc. All rights reserved.

Software Engineering Observation

Place only expressions involving the control variables in the initialization and increment sections of a for statement. Manipulations of other variables should appear either before the loop (if they execute only once, like initialization statements) or in the loop body (if they execute once per repetition, like incrementing or decrementing statements).

Page 167: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

167

2007 Pearson Education, Inc. All rights reserved.

Common Programming Errors

Using commas instead of semicolons in a for header is a syntax error.

Placing a semicolon immediately to the right of a for header makes the body of that for statement an empty statement. This is normally a logic error.

Page 168: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

168

2007 Pearson Education, Inc. All rights reserved.

4.5 for Statement : Notes and Observations

● Arithmetic expressions● Initialization, loop-continuation, and increment can contain

arithmetic expressions. If x equals 2 and y equals 10 for ( j = x; j <= 4 * x * y; j += y / x )

is equivalent tofor ( j = 2; j <= 80; j += 5 )

● Notes about the for statement:● "Increment" may be negative (decrement)● If the loop continuation condition is initially false

● The body of the for statement is not performed● Control proceeds with the next statement after the for statement

● Control variable● Often printed or used inside for body, but not necessary

Page 169: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

169

2007 Pearson Education, Inc. All rights reserved.

Fig. 4.4 | Flowcharting a typical for repetition statement.

printf (“%d”, counter);true

false

counter <= 10 counter++

counter = 1

Page 170: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

170

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 4.5: fig04_05.c 2 Summation with for */ 3 #include <stdio.h> 4 5 /* function main begins program execution */ 6 int main( void ) 7 { 8 int sum = 0; /* initialize sum */ 9 int number; /* number to be added to sum */10 11 for ( number = 2; number <= 100; number += 2 ) {12 sum += number; /* add number to sum */ 13 } /* end for */14 15 printf( "Sum is %d\n", sum ); /* output sum */16 17 return 0; /* indicate program ended successfully */18 19 } /* end function main */

Note that number has a different value each time this statement is executed

Sum is 2550

Page 171: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

171

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practices

Although statements preceding a for and statements in the body of a for can often be merged into the for header, avoid doing so because it makes the program more difficult to read.

Limit the size of control-statement headers to a single line if possible.

Page 172: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

172

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 4.6: fig04_06.c 2 Calculating compound interest */ 3 #include <stdio.h> 4 #include <math.h> 5 7 int main( void ) 8 { 9 double amount; /* amount on deposit */10 double principal = 1000.0; /* starting principal */11 double rate = .05; /* annual interest rate */12 int year; /* year counter */13 14 /* output table column head */15 printf( "%4s%21s\n", "Year", "Amount on deposit" );16 17 /* calculate amount on deposit for each of ten years */18 for ( year = 1; year <= 10; year++ ) {19 20 /* calculate new amount for specified year */21 amount = principal * pow( 1.0 + rate, year );22 23 /* output one table row */24 printf( "%4d%21.2f\n", year, amount ); 25 } /* end for */

additional header

pow function calculates the value of the first argument raised to the power of the second argument

Page 173: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

173

2007 Pearson Education, Inc. All rights reserved.

27 return 0;2829 }

Year Amount on deposit 1 1050.00 2 1102.50 3 1157.63 4 1215.51 5 1276.28 6 1340.10 7 1407.10 8 1477.46 9 1551.33 10 1628.89

Page 174: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

174

2007 Pearson Education, Inc. All rights reserved.

4.7 switch Multiple-Selection Statement

● switch● Useful when a variable or expression is tested for all the values it

can assume and different actions are taken● Format

● Series of case labels and an optional default caseswitch ( value ){

case '1':actions

case '2':actions

default:actions

}● break; exits from statement

Page 175: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

175

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 4.7: fig04_07.c 2 Counting letter grades */ 3 #include <stdio.h> 4 5 6 int main( void ) 7 { 8 int grade; /* one grade */ 9 int aCount = 0; /* number of As */10 int bCount = 0; /* number of Bs */11 int cCount = 0; /* number of Cs */12 int dCount = 0; /* number of Ds */13 int fCount = 0; /* number of Fs */14 15 printf( "Enter the letter grades.\n" );16 printf( "Enter the EOF character to end input.\n" );17 18 /* loop until user types end-of-file key sequence */19 while ( ( grade = getchar() ) != EOF ) {20

21 /* determine which grade was input */22 switch ( grade ) { /* switch nested in while */

EOF stands for “end of file;” this character varies from system to system

switch statement checks each of its nested cases for a match

Page 176: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

176

2007 Pearson Education, Inc. All rights reserved.

24 case 'A': /* grade was uppercase A */25 case 'a': /* or lowercase a */26 ++aCount; /* increment aCount */27 break; /* necessary to exit switch */2829 case 'B': /* grade was uppercase B */30 case 'b': /* or lowercase b */31 ++bCount; /* increment bCount */32 break; /* exit switch */33 34 case 'C': /* grade was uppercase C */35 case 'c': /* or lowercase c */36 ++cCount; /* increment cCount */37 break; /* exit switch */38 39 case 'D': /* grade was uppercase D */40 case 'd': /* or lowercase d */41 ++dCount; /* increment dCount */42 break; /* exit switch */43 44 case 'F': /* grade was uppercase F */45 case 'f': /* or lowercase f */46 ++fCount; /* increment fCount */47 break; /* exit switch */

break statement makes program skip to end of switch

Page 177: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

177

2007 Pearson Education, Inc. All rights reserved.

49 case '\n': /* ignore newlines, */50 case '\t': /* tabs, */51 case ' ': /* and spaces in input */52 break; /* exit switch */5354 default: /* catch all other characters */55 printf( "Incorrect letter grade entered." ); 56 printf( " Enter a new grade.\n" ); 57 break; /* optional; will exit switch anyway */58 } /* end switch */59 60 } /* end while */61 62 /* output summary of results */63 printf( "\nTotals for each letter grade are:\n" );64 printf( "A: %d\n", aCount ); /* display number of A grades */65 printf( "B: %d\n", bCount ); /* display number of B grades */66 printf( "C: %d\n", cCount ); /* display number of C grades */67 printf( "D: %d\n", dCount ); /* display number of D grades */68 printf( "F: %d\n", fCount ); /* display number of F grades */69 70 return 0; /* indicate program ended successfully */71 72 } /* end function main */

default case occurs if none of the cases are matched

Page 178: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

178

2007 Pearson Education, Inc. All rights reserved.

Enter the letter grades.Enter the EOF character to end input.abcCAdfCEIncorrect letter grade entered. Enter a new grade.

DAb^D

Totals for each letter grade are:

A: 3B: 2C: 3D: 2F: 1

Page 179: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

179

2007 Pearson Education, Inc. All rights reserved.

Portability Tips

The keystroke combination for entering EOF (end of file) is CTRL D.

Testing for the symbolic constant EOF rather than –1 makes programs more portable. The C standard states that EOF is a negative integral value (but not necessarily –1). Thus, EOF could have different values on different systems.

Page 180: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

180

2007 Pearson Education, Inc. All rights reserved.

Common Programming Error

Forgetting a break statement when one is needed in a switch statement is a logic error.

Page 181: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

181

2007 Pearson Education, Inc. All rights reserved.

Fig. 4.8 | switch multiple-selection statement with breaks .

Case a actionstrue

false

Case a break

Case b actionstrue

false

Case b break

Default actions

.

.

.

Page 182: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

182

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practice

Provide a default case in switch statements. Cases not explicitly tested in a switch are ignored. The default case helps prevent this by focusing the programmer on the need to process exceptional conditions. There are situations in which no default processing is needed.

Page 183: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

183

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practices

Although the case clauses and the default case clause in a switch statement can occur in any order, it is considered good programming practice to place the default clause last.

The break statement is then not required. But some programmers include this break for clarity and symmetry with other cases .

Page 184: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

184

2007 Pearson Education, Inc. All rights reserved.

4.8 do…while Repetition Statement

● The do…while repetition statement ● Similar to the while structure● Condition for repetition only tested after the body of the

loop is performed● All actions are performed at least once

● Format:do {

statement;

} while ( condition );

Page 185: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

185

2007 Pearson Education, Inc. All rights reserved.

4.8 do…while Repetition Statement

● Example (letting counter = 1):do {

printf( "%d ", counter );

} while (++counter <= 10);

● Prints the integers from 1 to 10

Page 186: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

186

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practice

Some programmers always include braces in a do...while statement even if the braces are not necessary. This helps eliminate ambiguity between the do...while statement containing one statement and the while statement.

Page 187: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

187

2007 Pearson Education, Inc. All rights reserved.

Common Programming Error

Infinite loops are caused when the loop-continuation condition in a while , for or do...while statement never becomes false. To prevent this, make sure there is not a semicolon immediately after the header of a while or for statement. In a counter-controlled loop, make sure the control variable is incremented (or decremented) in the loop. In a sentinel-controlled loop, make sure the sentinel value is eventually input.

Page 188: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

188

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 4.9: fig04_09.c 2 Using the do/while repetition statement */ 3 #include <stdio.h> 4 5 /* function main begins program execution */ 6 int main( void ) 7 { 8 int counter = 1; /* initialize counter */ 9 10 do {11 printf( "%d ", counter ); /* display counter */12 } while ( ++counter <= 10 ); /* end do...while */1314 return 0; /* indicate program ended successfully */15 16 } /* end function main */

increments counter then checks if it is less than or equal to 10

1 2 3 4 5 6 7 8 9 10

Page 189: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

189

2007 Pearson Education, Inc. All rights reserved.

Fig. 4.10 | Flowcharting the do...while repetition statement.

true

false

condition

actions

Page 190: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

190

2007 Pearson Education, Inc. All rights reserved.

4.9 break and continue Statements

● break● Causes immediate exit from a while , for , do…while

or switch statement● Program execution continues with the first statement after

the structure● Common uses of the break statement:

● Escape early from a loop● Skip the remainder of a switch statement

Page 191: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

191

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 4.11: fig04_11.c 2 Using the break statement in a for statement */ 3 #include <stdio.h> 4 5 /* function main begins program execution */ 6 int main( void ) 7 { 8 int x; /* counter */ 9 10 /* loop 10 times */11 for ( x = 1; x <= 10; x++ ) {12 13 /* if x is 5, terminate loop */14 if ( x == 5 ) {15 break; /* break loop only if x is 5 */16 } /* end if */17 18 printf( "%d ", x ); /* display value of x */19 } /* end for */20 21 printf( "\nBroke out of loop at x == %d\n", x ); 23 return 0;25 } /* end main */

break immediately ends for loop

1 2 3 4Broke out of loop at x == 5

Page 192: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

192

2007 Pearson Education, Inc. All rights reserved.

4.9 break and continue Statements

● continue● Skips the remaining statements in the body of a while , for or do…while statement

● Proceeds with the next iteration of the loop● while and do…while

● Loop-continuation test is evaluated immediately after the continue statement is executed

● for● Increment expression is executed, then the loop-continuation

test is evaluated

Page 193: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

193

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 4.12: fig04_12.c 2 Using the continue statement in a for statement */ 3 #include <stdio.h> 4 5 /* function main begins program execution */ 6 int main( void ) 7 { 8 int x; /* counter */ 9 10 /* loop 10 times */11 for ( x = 1; x <= 10; x++ ) {12 13 /* if x is 5, continue with next iteration of loop */14 if ( x == 5 ) { 15 continue; /* skip remaining */16 } /* end if */17 18 printf( "%d ", x ); /* display value of x */19 } /* end for */20 21 printf( "\nUsed continue to skip printing the value 5\n" ); 23 return 0; /* indicate program ended successfully */ 25 } /* end function main */

continue skips to end of for loop and performs next iteration

1 2 3 4 6 7 8 9 10Used continue to skip printing the value 5

Page 194: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

194

2007 Pearson Education, Inc. All rights reserved.

4.10 Logical Operators

● && ( logical AND ) ● Returns true if both conditions are true

● || ( logical OR ) ● Returns true if either of its conditions are true

● ! ( logical NOT, logical negation )● Reverses the truth/falsity of its condition● Unary operator, has one operand

● Useful as conditions in loopsExpression Resulttrue && false falsetrue || false true!false true

Page 195: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

195

2007 Pearson Education, Inc. All rights reserved.

Truth table for the logical operators.

Expression1 expression2 && || !Expression1 0 0 0 0 1 0 nonzero 0 1 1 nonzero 0 0 1 0 nonzero nonzero 1 1 0

Page 196: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

196

2007 Pearson Education, Inc. All rights reserved.

Performance Tip

In expressions using operator && , make the condition that is most likely to be false the leftmost condition. In expressions using operator || , make the condition that is most likely to be true the leftmost condition. This can reduce a program’s execution time.

Page 197: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

197

2007 Pearson Education, Inc. All rights reserved.

Operators Associativity Type

++ (postfix) -- (postfix) right to left postfix

+ - ! ++ (prefix) -- (prefix) (type) right to left unary

* / % left to right multiplicative

+ - left to right additive

< <= > >= left to right relational

== != left to right equality

&& left to right logical AND

|| left to right logical OR

?: right to left conditional

= += -= *= /= %= right to left assignment

, left to right comma

Fig. 4.16 | Operator precedence and associativity.

Page 198: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

198

2007 Pearson Education, Inc. All rights reserved.

4.11 Confusing Equality (==) and Assignment (=) Operators

● Dangerous error● Does not ordinarily cause syntax errors● Any expression that produces a value can be used in

control structures ● Nonzero values are true , zero values are false● Example using ==:

if ( payCode == 4 )

printf( "You get a bonus!\n" ); ● Checks payCode , if it is 4 then a bonus is awarded

Page 199: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

199

2007 Pearson Education, Inc. All rights reserved.

4.11 Confusing Equality (==) and Assignment (=) Operators

● Example, replacing == with =:if ( payCode = 4 )

printf( "You get a bonus!\n" );

This sets payCode to 4

4 is nonzero, so expression is true , and bonus awarded no matter what the payCode was

● Logic error, not a syntax error● Suggestion: write the condition the other way round

if ( 4 == payCode ) .....This is correct, but if ( 4 = payCode ) .....is a syntax error, so it won't compile!

Page 200: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

200

2007 Pearson Education, Inc. All rights reserved.

4.11 Confusing Equality (==) and Assignment (=) Operators

● lvalues● Expressions that can appear on the left side of an equation ● Their values can be changed, such as variable names

● x = 4;

● rvalues● Expressions that can only appear on the right side of an equation● Constants, such as numbers

● Cannot write 4 = x;● Must write x = 4;

● lvalues can be used as rvalues, but not vice versa● y = x;

Page 201: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

201

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practice

When an equality expression has a variable and a constant, as in x == 1 , some programmers prefer to write the expression with the constant on the left and the variable name on the right (e.g. 1 == x as protection against the logic error that occurs when you accidentally replace operator == with = .

Page 202: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

202

2007 Pearson Education, Inc. All rights reserved.

4.12 Structured Programming Summary

● All programs can be broken down into 3 controls● Sequence – handled automatically by compiler● Selection – if , if…else or switch ● Repetition – while , do…while or for● Any selection can be rewritten as an if statement, and any

repetition can be rewritten as a while statement

Page 203: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

203

2007 Pearson Education, Inc. All rights reserved.

55C Functions

Page 204: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

204

2007 Pearson Education, Inc. All rights reserved.

5.1 Introduction

● Divide and conquer ● Construct a program from smaller pieces or components● These smaller pieces are called modules● Each piece more manageable than the original program● Need to modify and debug only once

Page 205: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

205

2007 Pearson Education, Inc. All rights reserved.

5.2 Program Modules in C

● Functions● Modules in C● Programs combine user-defined functions with library functions

● C standard library has a wide variety of functions● Function calls

● Invoking functions● Provide function name and arguments (data)● Function performs operations or manipulations● Function returns results

● Function call analogy:● Boss asks worker to complete task

Worker gets information, does task, returns resultInformation hiding: boss does not know details

Page 206: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

206

2007 Pearson Education, Inc. All rights reserved.

Software Engineering Observations

Avoid reinventing the wheel. When possible, use C Standard Library functions instead of writing new functions. This can reduce program development time.

Using the functions in the C Standard Library helps make programs more portable.

Page 207: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

207

2007 Pearson Education, Inc. All rights reserved.

5.3 Math Library Functions

● Math library functions ● perform common mathematical calculations● #include <math.h>

● Format for calling functions● FunctionName( argument );

● If multiple arguments, use comma-separated list● printf( "%.2f", sqrt( 900.0 ) );

● Calls function sqrt , which returns the square root of its argument

● All math functions return data type double● Arguments may be constants, variables, or expressions

Page 208: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

208

2007 Pearson Education, Inc. All rights reserved.

Error-Prevention Tip

Include the math header by using the preprocessor directive #include <math.h> when using functions in the math library.

Compile as follows:gcc program.c -lm

Page 209: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

209

2007 Pearson Education, Inc. All rights reserved.

sqrt( x ) square root of x sqrt( 900.0 ) is 30.0 sqrt( 9.0 ) is 3.0

exp( x ) exponential function ex exp( 1.0 ) is 2.718282 exp( 2.0 ) is 7.389056

log( x ) natural logarithm of x (base e) log( 2.718282 ) is 1.0log( 7.389056 ) is 2.0

log10( x ) logarithm of x (base 10) log10( 1.0 ) is 0.0log10( 10.0 ) is 1.0log10( 100.0 ) is 2.0

fabs( x ) absolute value of x fabs( 5.0 ) is 5.0fabs( 0.0 ) is 0.0fabs( -5.0 ) is 5.0

Page 210: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

210

2007 Pearson Education, Inc. All rights reserved.

ceil( x ) rounds x to the higher integer ceil( 9.2 ) is 10.0ceil( -9.8 ) is -9.0

floor( x ) rounds x to the lower integer floor( 9.2 ) is 9.0floor( -9.8 ) is -10.0

pow( x, y ) x raised to power y (xy) pow( 2, 7 ) is 128.0pow( 9, .5 ) is 3.0

fmod( x, y ) remainder of x/y as a float fmod( 13.657, 2.333 ) is 1.992

Page 211: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

211

2007 Pearson Education, Inc. All rights reserved.

5.4 Functions

● Functions● Modularize a program● All variables defined inside functions are local variables

● Known only in function defined● Parameters

● Communicate information between functions● Local variables

● Benefits of functions● Divide and conquer

● Manageable program development● Software reusability

● Use existing functions as building blocks for new programs● Abstraction - hide internal details (library functions)

● Avoid code repetition

Page 212: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

212

2007 Pearson Education, Inc. All rights reserved.

Software Engineering Observation

In programs containing many functions, main is often implemented as a group of calls to functions that perform the bulk of the program’s work.

Each function should be limited to performing a single, well-defined task, and the function name should effectively express that task.

Page 213: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

213

2007 Pearson Education, Inc. All rights reserved.

5.5 Function Definitions

● Function definition formatreturn-value-type function-name( parameter-list ){ declarations and statements}

● Function-name: any valid identifier● Return-value-type: data type of the result (default int)

● void – indicates that the function returns nothing● Parameter-list: comma separated list, declares parameters

● A type must be listed explicitly for each parameter unless, the parameter is of type int

Page 214: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

214

2007 Pearson Education, Inc. All rights reserved.

5.5 Function Definitions

● Function definition format (continued)return-value-type function-name( parameter-list ){ declarations and statements}

● Definitions and statements: function body (block)● Variables can be defined inside blocks (can be nested)● Functions can not be defined inside other functions

● Returning control● If nothing returned

return; or, until reaches right brace

● If something returned return expression;

Page 215: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

215

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practice

Place a blank line between function definitions to separate the functions and enhance program readability.

Page 216: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

216

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 5.3: fig05_03.c 2 Creating and using a programmer-defined function */ 3 #include <stdio.h> 4 5 int square( int y ); /* function prototype */ 6 8 int main( void ) 9 {10 int x; /* counter */12 /* loop 10 times and calculate square of x each time */13 for ( x = 1; x <= 10; x++ ) {14 printf( "%d ", square( x ) ); /* call */15 } /* end for */17 printf( "\n" ); 19 return 0; /* indicates successful termination */21 } /* end main */22 23 /* square function definition returns square of parameter */24 int square( int y ) /* y is a copy of argument to function */25 {26 return y * y; /* returns square of y as an int */28 } /* end function square */

Function definition

Function prototype indicates function will be defined later in the program

Call to square function

1 4 9 16 25 36 49 64 81 100

Page 217: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

217

2007 Pearson Education, Inc. All rights reserved.

Common Programming Errors

Omitting the return-value-type in a function definition is a syntax error if the function prototype specifies a return type other than int .Forgetting to return a value from a function that is supposed to return a value can lead to unexpected errors. The C standard states that the result of this omission is undefined.

Returning a value from a function with a void return type is a syntax error.

Page 218: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

218

2007 Pearson Education, Inc. All rights reserved.

Common Programming Error

Specifying function parameters of the same type as double x , y instead of double x , double y might cause errors in your programs. The parameter declaration double x , y would actually make y a parameter of type int because int is the default.

Page 219: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

219

2007 Pearson Education, Inc. All rights reserved.

Common Programming Errors

Placing a semicolon after the right parenthesis enclosing the parameter list of a function definition is a syntax error.

Defining a function parameter again as a local variable within the function is a syntax error.

Defining a function inside another function is a syntax error.

Page 220: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

220

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practices

Include the type of each parameter in the parameter list, even if that parameter is of the default type int .Do not use the same names for the arguments passed to a function and the corresponding parameters in the function definition. This helps avoid ambiguity.

Choosing meaningful function names and meaningful parameter names makes programs more readable and helps avoid excessive use of comments.

Page 221: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

221

2007 Pearson Education, Inc. All rights reserved.

Software Engineering Observations

A function should generally be no longer than one page. Better yet, functions should generally be no longer than half a page. Small functions promote software reusability.

Programs should be written as collections of small functions. This makes programs easier to write, debug, maintain and modify.

Page 222: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

222

2007 Pearson Education, Inc. All rights reserved.

Software Engineering Observations

A function requiring a large number of parameters may be performing too many tasks. Consider dividing the function into smaller functions that perform the separate tasks. The function header should fit on one line if possible.

The function prototype, function header and function calls should all agree in the number, type, and order of arguments and parameters, and in the type of return value.

Page 223: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

223

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 5.4: fig05_04.c 2 Finding the maximum of three integers */ 3 #include <stdio.h> 4 5 int maximum( int x, int y, int z ); /* function prototype */ 6 7 8 int main( void ) 9 {10 int number1; /* first integer */11 int number2; /* second integer */12 int number3; /* third integer */13 14 printf( "Enter three integers: " );15 scanf( "%d%d%d", &number1, &number2, &number3 );16 17 /* number1, number2 and number3 are arguments 18 to the maximum function call */19 printf( "Maximum is: %d\n", maximum( number1, number2, number3 ) );20 21 return 0;22 23 } /* end main */

Page 224: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

224

2007 Pearson Education, Inc. All rights reserved.

25 /* Function maximum definition */26 /* x, y and z are parameters */27 int maximum( int x, int y, int z )28 {29 int max = x; /* assume x is largest */30 31 if ( y > max ) { /* if y is larger than max, assign y to max */32 max = y;33 } /* end if */34 35 if ( z > max ) { /* if z is larger than max, assign z to max */36 max = z;37 } /* end if */38 39 return max; /* max is largest value */40 41 } /* end function maximum */

Enter three integers: 22 85 17Maximum is: 85Enter three integers: 85 22 17Maximum is: 85Enter three integers: 22 17 85Maximum is: 85

Page 225: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

225

2007 Pearson Education, Inc. All rights reserved.

5.6 Function Prototypes

● Function prototype ● Function name● Parameters – what the function takes in● Return type – data type function returns (default int)● Used to validate functions● Prototype only needed if function definition comes after use in

program● The function with the prototype

int maximum( int x, int y, int z );● Takes in 3 ints● Returns an int

Page 226: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

226

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practice 5.7

Include function prototypes for all functions to take advantage of C’s type-checking capabilities. Use #include preprocessor directives to obtain function prototypes for the standard library functions from the headers for the appropriate libraries, or to obtain headers containing function prototypes for functions developed by you and/or your group members.

Page 227: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

227

2007 Pearson Education, Inc. All rights reserved.

Common Programming Errors

Forgetting the semicolon at the end of a function prototype is a syntax error.

Forgetting a function prototype causes a syntax error if the return type of the function is not int and the function definition appears after the function call in the program. Otherwise, forgetting a function prototype may cause a runtime error or an unexpected result.

Page 228: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

228

2007 Pearson Education, Inc. All rights reserved.

5.8 Headers

● Header files● Contain function prototypes for library functions● <stdio.h> , <math.h> , etc● Load with #include <filename>

#include <math.h>

● Custom header files● Create file with functions ● Save as filename.h● Load in other files with #include "filename.h"● Reuse functions

Page 229: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

229

2007 Pearson Education, Inc. All rights reserved.

Standard library header Explanation

<math.h> Contains function prototypes for mathlibrary functions.

<setjmp.h> Contains function prototypes for functionsthat allow bypassing of the usual functioncall and return sequence.

<signal.h> Contains function prototypes and macros tohandle various conditions that may ariseduring program execution.

<stdarg.h> Defines macros for dealing with a list ofarguments to a function whose number andtypes are unknown.

<stddef.h> Contains common definitions of types used byC for performing certain calculations.

Fig. 5.6 | Some of the standard library headers.

Page 230: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

230

2007 Pearson Education, Inc. All rights reserved.

Standard library header Explanation

<stdio.h> Contains function prototypes for thestandard input/output library functions, andinformation used by them.

<stdlib.h> Contains function prototypes for conversionsof numbers to text and text to numbers,memory allocation, random numbers, and otherutility functions.

<string.h> Contains function prototypes for string-processing functions.

<time.h> Contains function prototypes and types formanipulating the time and date.

Fig. 5.6 | Some of the standard library headers

Page 231: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

231

2007 Pearson Education, Inc. All rights reserved.

Local and global variables

Variables declared inside a function a called local variables. They are accessible only from within the function.

Variables declared at the top of the program (outside any function) are called global variables. They are accessible from within all functions in the program.

Local variables may have the same name as global variables – local variables are always used if available.

This is called a scope – local scope takes preference over global scope. Example on the next slides.

Page 232: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

232

2007 Pearson Education, Inc. All rights reserved.

Global variables

Local variable

1 /* Example of variable scopes */ 2 #include <stdio.h> 3 4 int i = 10; 5 int j = 42; 6 7 int main( void ) 8 { 9 int i = 83;1011 printf( "i = %d, j = %d\n", i, j );12 13 return 0; /* program ended successfully */14 15 } /* end function main */

i = 83, j = 42

Page 233: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

233

2007 Pearson Education, Inc. All rights reserved.

Global variables

1 /* Example of variable scopes */ 2 #include <stdio.h> 3 4 int i = 10; 5 int j = 42; 6 7 int main( void ) 8 { 9 1011 printf( "i = %d, j = %d\n", i, j );12 13 return 0; /* program ended successfully */14 15 } /* end function main */

i = 10, j = 42

No local variables

Page 234: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

234

2007 Pearson Education, Inc. All rights reserved.

Software Engineering Observation

Variables used only in a particular function should be defined as local variables in that function rather than as external variables.

Page 235: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

235

2007 Pearson Education, Inc. All rights reserved.

66C Arrays

Page 236: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

236

2007 Pearson Education, Inc. All rights reserved.

6.1 Introduction

● Arrays ● Structures of related data items● Static entity – same size throughout program● Mathematical notation: x

i where i = 1..N

● Unfortunately, subscripts are not available in normal text● C uses x[ i ] instead

Page 237: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

237

2007 Pearson Education, Inc. All rights reserved.

6.2 Arrays

● Array● Group of consecutive memory locations ● Same name and type

● To refer to an element, specify● Array name● Position number

● Format:arrayname[ position number ]

● First element at position 0● n element array named c:

● c[ 0 ], c[ 1 ]...c[ n – 1 ]

Page 238: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

238

2007 Pearson Education, Inc. All rights reserved.

Fig. 6.1 | 8-element array.

342928

342924

342920

342916

342912

342908

342904

342900

62

0

-89

1543

72

20

6

-45

c[7]

c[6]

c[5]

c[4]

c[3]

c[2]

c[1]

c[0]Memory Addresses

Array Index/Subscript

Array Element

Note: Index starts with 0, not with 1

Page 239: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

239

2007 Pearson Education, Inc. All rights reserved.

6.2 Arrays

● Array elements are like normal variablesc[ 0 ] = 3;

printf( "%d", c[ 0 ] );

● Perform operations in subscript. If x equals 3c[ 5 - 2 ] == c[ 3 ] == c[ x ]

Page 240: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

240

2007 Pearson Education, Inc. All rights reserved.

Common Programming Error

It is important to note the difference between the “seventh element of the array” and “array element seven.” Because array subscripts begin at 0, the “seventh element of the array” has a subscript of 6, while “array element seven” has a subscript of 7 and is actually the eighth element of the array. This is a source of “off-by-one” errors.

Page 241: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

241

2007 Pearson Education, Inc. All rights reserved.

Operators Associativity Type

[] () left to right highest

++ -- ! (type) right to left unary

* / % left to right multiplicative

+ - left to right additive

< <= > >= left to right relational

== != left to right equality

&& left to right logical AND

|| left to right logical OR

?: right to left conditional

= += -= *= /= %= right to left assignment

, left to right comma

Fig. 6.2 | Operator precedence.

Page 242: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

242

2007 Pearson Education, Inc. All rights reserved.

6.3 Defining Arrays

● When defining arrays, specify● Name● Type of array● Number of elements

arrayType arrayName[ numberOfElements ];

● Examples:int c[ 10 ];

float myArray[ 3284 ];

● Defining multiple arrays of the same type● Format similar to regular variables● Example:

int b[ 100 ], x[ 27 ];

Page 243: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

243

2007 Pearson Education, Inc. All rights reserved.

6.4 Array Examples

● Initializersint n[ 5 ] = { 1, 2, 3, 4, 5 };

● If not enough initializers, rightmost elements become 0int n[ 5 ] = { 0 };

● All elements 0● If too many initializers, a syntax error occurs● C arrays have no bounds checking

● If size omitted, initializers determine itint n[ ] = { 1, 2, 3, 4, 5 };

● 5 initializers, therefore 5 element array

Page 244: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

244

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 6.3: fig06_03.c 2 initializing an array */ 3 #include <stdio.h> 4 5 /* function main begins program execution */ 6 int main( void ) 7 { 8 int n[ 10 ]; /* n is an array of 10 integers */ 9 int i; /* counter */10 11 /* initialize elements of array n to 0 */12 for ( i = 0; i < 10; i++ ) {13 n[ i ] = 0; /* set element i to 0 */14 } /* end for */15 16 printf( "%s%13s\n", "Element", "Value" );17 18 /* output contents of array n in tabular format */19 for ( i = 0; i < 10; i++ ) {20 printf( "%7d%13d\n", i, n[ i ] );21 } /* end for */22 23 return 0; /* indicates successful termination */24 25 } /* end main */

for loop initializes each array element separately

for loop outputs all array elements

Page 245: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

245

2007 Pearson Education, Inc. All rights reserved.

Element Value 0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0

Page 246: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

246

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 6.4: fig06_04.c 2 Initializing an array with a initializer list */ 3 #include <stdio.h> 4 5 /* function main begins program execution */ 6 int main( void ) 7 { 8 /* use initializer list to initialize array n */ 9 int n[ 10 ] = { 32, 27, 64, 18, 95, 14, 90, 70, 60, 37 };10 int i; /* counter */1112 printf( "%s%13s\n", "Element", "Value" );13 14 /* output contents of array in tabular format */15 for ( i = 0; i < 10; i++ ) {16 printf( "%7d%13d\n", i, n[ i ] );17 } /* end for */18 19 return 0;20 21 } /* end main */

initializer list initializes all array elements simultaneously

Page 247: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

247

2007 Pearson Education, Inc. All rights reserved.

Element Value 0 32 1 27 2 64 3 18 4 95 5 14 6 90 7 70 8 60 9 37

Page 248: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

248

2007 Pearson Education, Inc. All rights reserved.

Common Programming Errors

Forgetting to initialize the elements of anarray whose elements should be initialized.

Providing more initializers in an arrayinitializer list than there are elementsin the array is a syntax error.

Page 249: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

#define

• #define - Define a symbol #define EPSILON 0.01

• Whenever pre-processor finds EPSILONit substitutes 0.01

• Pre-processor is text processor only!• Substitutes text strings for other strings

if ( dx < EPSILON ) break;

if ( dx < 0.01 ) break;

Program inputto pre-processor

Text seenby compiler

Page 250: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

#define• #define - Text substitution

#define ABC R$<r&t*

• Will happily substitute R$<r&t*for ABC

if ( dx < ABC ) break;

if ( dx < R$<r&t* ) break;

Program inputto pre-processor

Text seenby compiler

Compiler will obviously complainabout this!

Page 251: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

#define

• #define - Arbitrary text substitution #define MAX_COUNT 500

#define NEW_LINE printf(“\n”);

• Use backslash to continue over multiple lines #define SUM total = 0; \

for(k=0;k<n;k++) { \

total = total + x[k]; \ }

• Substitutions can be as complex as you like • But remember to keep the code readable

Page 252: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

#define

• Definitions can use other defined symbols

#define RESET 0#define IDLE (RESET+1)#define MEM_WAIT (IDLE+1)#define MEM_READ (MEM_WAIT+1)

If you put MEM_READ in your program, the compiler will see:

(MEM_WAIT+1)

((IDLE+1)+1) (((RESET+1)+1)+1)

MEM_READ (((0+1)+1)+1)

Page 253: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

253

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 6.5: fig06_05.c 2 Initialize the elements of array s to 3 the even integers from 2 to 20 */ 4 #include <stdio.h> 5 #define SIZE 10 6 7 /* function main begins program execution */ 8 int main( void ) 9 { 10 /* const SIZE used to specify array size */11 int s[ SIZE ]; /* array s has 10 elements */12 int j; /* counter */1314 for ( j = 0; j < SIZE; j++ ) {15 s[ j ] = 2 + 2 * j; /*set the values */16 } /* end for */17 18 printf( "%s%13s\n", "Element", "Value" );19 20 /* output contents of array s in tabular format */21 for ( j = 0; j < SIZE; j++ ) { 22 printf( "%7d%13d\n", j, s[ j ] );23 } /* end for */

#define directive tells compiler to replace all instances of the word SIZE with 10

SIZE is replaced with 10 by the compiler, so array s has 10 elements

for loop initializes each array element separately

Page 254: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

254

2007 Pearson Education, Inc. All rights reserved.

25 return 0; /* indicates successful termination */26 27 } /* end main */

Element Value 0 2 1 4 2 6 3 8 4 10 5 12 6 14 7 16 8 18 9 20

Page 255: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

255

2007 Pearson Education, Inc. All rights reserved.

Common Programming Errors

Ending a #define or #include preprocessor directive with a semicolon. Remember that preprocessor directives are not C statements.

Assigning a value to a symbolic constant inan executable statement is a syntax error.A symbolic constant is not a variable. Nospace is reserved for it by the compiler as with variables that hold values at execution time.

Page 256: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

256

2007 Pearson Education, Inc. All rights reserved.

Good Programming Practice

Use only uppercase letters for symbolic constant names. This makes these constants stand out in a program and reminds you that symbolic constants are not variables.

In multiword symbolic constant names, use underscores to separate the words for readability.

Page 257: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

257

2007 Pearson Education, Inc. All rights reserved.

Array Example program

● Write a program that computes the sum of all the elements in an array

● Array has 12 elements● Use variable 'total' to store the result● Use a for loop to do the calculation

Page 258: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

258

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 6.6: fig06_06.c 2 Compute the sum of the elements of the array */ 3 #include <stdio.h> 4 #define SIZE 12 5 6 /* function main begins program execution */ 7 int main( void ) 8 { 9 /* use initializer list to initialize array */10 int a[ SIZE ] = { 1, 3, 5, 4, 7, 2, 99, 16, 45, 67, 89, 45 };11 int i; /* counter */ 12 int total = 0; /* sum of array */13 14 /* sum contents of array a */15 for ( i = 0; i < SIZE; i++ ) {16 total += a[ i ];17 } /* end for */18 19 printf( "Total of array element values is %d\n", total );20 21 return 0; /* indicates successful termination */22 23 } /* end main */

for loop adds each element of the array to variable total

Total of array element values is 383

Page 259: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

259

2007 Pearson Education, Inc. All rights reserved.

Array Example program

● We have 40 student questionnaires (about the quality of the food in a University cafe), each containing a mark of 1 to 10

● Count the frequency of each response● Print a table showing the results (the number of

times each mark is awarded)

Page 260: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

260

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 6.7: fig06_07.c 2 Student poll program */ 3 #include <stdio.h> 4 #define RESPONSE_SIZE 40 /* define array sizes */ 5 #define FREQUENCY_SIZE 11 6 7 /* function main begins program execution */ 8 int main( void ) 9 { 10 int answer; /* counter to loop through 40 responses */11 int rating; /* counter to loop through frequencies 1-10 */12 13 /* initialize frequency counters to 0 */14 int frequency[ FREQUENCY_SIZE ] = { 0 };15 16 /* place the survey responses in the responses array */17 int responses[ RESPONSE_SIZE ] = { 1, 2, 6, 4, 8, 5, 9, 7, 8, 10,18 1, 6, 3, 8, 6, 10, 3, 8, 2, 7, 6, 5, 7, 6, 8, 6, 7, 5, 6, 6, 19 5, 6, 7, 5, 6, 4, 8, 6, 8, 10 };20 21 /* for each answer, select value of an element of array responses22 and use that value as subscript in array frequency to 23 determine element to increment */24 for ( answer = 0; answer < RESPONSE_SIZE; answer++ ) {25 ++frequency[ responses [ answer ] ];26 } /* end for */

Page 261: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

261

2007 Pearson Education, Inc. All rights reserved.

28 /* display results */29 printf( "%s%17s\n", "Rating", "Frequency" );30 31 /* output the frequencies in a tabular format */32 for ( rating = 1; rating < FREQUENCY_SIZE; rating++ ) {33 printf( "%6d%17d\n", rating, frequency[ rating ] );34 } /* end for */35 36 return 0; /* indicates successful termination */37 38 } /* end main */

Rating Frequency 1 2 2 2 3 2 4 2 5 5 6 11 7 5 8 7 9 1 10 3

Page 262: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

262

2007 Pearson Education, Inc. All rights reserved.

Common Programming Error

Referring to an element outside the array bounds.

When looping through an array, the array subscript should never go below 0 and should always be less than the total number of elements in the array (size – 1). Make sure the loop-terminating condition prevents accessing elements outside this range.

Page 263: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

263

2007 Pearson Education, Inc. All rights reserved.

Error-Prevention Tip

Programs should validate the correctness of all input values to prevent erroneous information from affecting a program’s calculations.

Page 264: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

264

2007 Pearson Education, Inc. All rights reserved.

Array Example program

● We have an array with integer values● Display the array in the form of a histogram● Each line is displayed as a number of * symbols● Number of stars is equal to array element value

Page 265: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

265

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 6.8: fig06_08.c 2 Histogram printing program */ 3 #include <stdio.h> 4 #define SIZE 10 5 6 /* function main begins program execution */ 7 int main( void ) 8 { 9 /* use initializer list to initialize array n */10 int n[ SIZE ] = { 19, 3, 15, 7, 11, 9, 13, 5, 17, 1 };11 int i; /* outer for counter for array elements */12 int j; /* inner for counter counts *s in each histogram bar */13 14 printf( "%s%13s%17s\n", "Element", "Value", "Histogram" );15 16 /* for each element of array n, output a bar of the histogram */17 for ( i = 0; i < SIZE; i++ ) {18 printf( "%7d%13d ", i, n[ i ]) ;19 20 for ( j = 1; j <= n[ i ]; j++ ) { /* print one bar */21 printf( "%c", '*' );22 } /* end inner for */23 24 printf( "\n" ); /* end a histogram bar */25 } /* end outer for */

nested for loop prints n[ i ] asterisks on the ith line

Page 266: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

266

2007 Pearson Education, Inc. All rights reserved.

27 return 0; /* indicates successful termination */28 29 } /* end main */

Element Value Histogram 0 19 ******************* 1 3 *** 2 15 *************** 3 7 ******* 4 11 *********** 5 9 ********* 6 13 ************* 7 5 ***** 8 17 ***************** 9 1 *

Page 267: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

267

2007 Pearson Education, Inc. All rights reserved.

Characters

● These are used to represent 8-bit text, but can also represent small integers (0-255). The representation used in the “western world” is called ASCII.

● It means American Standard Code for Information Interchange. It has been standardised by ISO (International Standardization Organization).

● The characters are classed as● graphic characters (printable or displayable symbols)● control characters (to be used for control

functions, such as vertical motion, and data communications). These have codes below 32.

Page 268: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

268

2007 Pearson Education, Inc. All rights reserved.

Characters

● There are of course many more character sets than the one used in the western world. These can be described using Unicode. This is a 16-bit character set, so can accommodate many more.

● Unicode includes some well known sets such as Greek, Cyrillic, Arabic and Hebrew. It also includes some not so well known sets such as Gurmukhi, Orija, Myanmar, and Bopomofo. It even includes artificial languages such as Klingon.

● Full details at www.unicode.org. In this course, we stick to ASCII.

Page 269: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

269

2007 Pearson Education, Inc. All rights reserved.

ASCII control codes

0 00 NUL null 1 01 SOH start of heading 2 02 STX start of text 3 03 ETX end of text 4 04 EOT end of transmission 5 05 ENQ enquiry 6 06 ACK acknowledge 7 07 BEL bell 8 08 BS backspace 9 09 HT horizontal tabulation 10 0a LF line feed 11 0b VT vertical tabulation 12 0c FF form feed 13 0d CR carriage return 14 0e SO shift-out 15 0f SI shift-in 16 10 DLE data link escape

Page 270: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

270

2007 Pearson Education, Inc. All rights reserved.

ASCII control codes

17 11 DC1 device control 1 18 12 DC2 device control 2 19 13 DC3 device control 3 20 14 DC4 device control 4 21 15 NAK negative acknowledge 22 16 SYN synchronous idle 23 17 ETB end transmission block 24 18 CAN cancel 25 19 EM end of medium 26 1a SUB substitute character 27 1b ESC escape 28 1c FS file separator 29 1d GS group separator 30 1e RS record separator 31 1f US unit separator

Page 271: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

271

2007 Pearson Education, Inc. All rights reserved.

ASCII punctuation marks

32 20 space (blank) 33 21 ! exclamation mark 34 22 " quotation mark 35 23 # number sign 36 24 $ dollar sign 37 25 % percent sign 38 26 & ampersand (and sign) 39 27 ' apostrophe 40 28 ( left parenthesis 41 29 ) right parenthesis 42 2a * asterisk (star) 43 2b + plus sign 44 2c , comma 45 2d - minus sign or hyphen 46 2e . period, full stop 47 2f / solidus (slash)

Page 272: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

272

2007 Pearson Education, Inc. All rights reserved.

ASCII digits

48 30 0 digit zero 49 31 1 digit one 50 32 2 digit two 51 33 3 digit three 52 34 4 digit four 53 35 5 digit five 54 36 6 digit six 55 37 7 digit seven 56 38 8 digit eight 57 39 9 digit nine

Page 273: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

273

2007 Pearson Education, Inc. All rights reserved.

ASCII punctuation marks

58 3a : colon 59 3b ; semicolon 60 3c < less-than sign 61 3d = equals sign 62 3e > greater-than sign 63 3f ? question mark 64 40 @ commercial at

Page 274: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

274

2007 Pearson Education, Inc. All rights reserved.

ASCII uppercase letters

65 41 A capital A 66 42 B capital B 67 43 C capital C 68 44 D capital D 69 45 E capital E 70 46 F capital F 71 47 G capital G . . . . . . 82 52 R capital R 83 53 S capital S 84 54 T capital T 85 55 U capital U 86 56 V capital V 87 57 W capital W 88 58 X capital X 89 59 Y capital Y 90 5a Z capital Z

Page 275: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

275

2007 Pearson Education, Inc. All rights reserved.

ASCII punctuation marks

91 5b [ left square bracket 92 5c \ reverse solidus 93 5d ] right square bracket 94 5e ^ circumflex accent 95 5f _ underscore 96 60 ` grave accent

Page 276: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

276

2007 Pearson Education, Inc. All rights reserved.

ASCII lowercase letters

97 61 a small a 98 62 b small b 99 63 c small c 100 64 d small d 101 65 e small e 102 66 f small f ............... 115 73 s small s 116 74 t small t 117 75 u small u 118 76 v small v 119 77 w small w 120 78 x small x 121 79 y small y 122 7a z small z

Page 277: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

277

2007 Pearson Education, Inc. All rights reserved.

ASCII punctuation marks

123 7b { left curly bracket 124 7c | vertical line 125 7d } right curly bracket 126 7e ~ tilde (wavy line) 127 7f DEL delete

Page 278: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

278

2007 Pearson Education, Inc. All rights reserved.

Characters

● Note the following:● The string “Hello” is treated as the following

sequence of numbers:

72 101 108 108 111● You print characters with %c● You write them in single quotes, e.g. 'H'. The

compiler replaces this by the ASCII code.● A string such as “Hello” is an array of characters!

c1 = ‘A’; c2 = 66;printf (“The first two letters of the ”);printf (“alphabet are %c and %c\n”, c1, c2);

Page 279: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

279

2007 Pearson Education, Inc. All rights reserved.

6.4 Array Examples

● Character arrays● String “first” is really a array of characters● Character arrays can be initialized using string literals

char string1[] = "first";● Null character '\0' terminates strings● string1 actually has 6 elements

It is equivalent tochar string1[] = { 'f', 'i', 'r', 's', 't', '\0' };● Can access individual characters

string1[ 3 ] is character ‘s’● Array name is address of array, so & not needed for scanf

scanf( "%s", string2 );● Reads characters until whitespace encountered● Be careful not to write past end of array, as it is possible to do so

Page 280: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

280

2007 Pearson Education, Inc. All rights reserved.

Common Programming Error

Not providing scanf with a character array large enough to store a string typed at the keyboard can result in destruction of data in a program and other runtime errors. This can also make a system susceptible to worm and virus attacks.

Page 281: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

281

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 6.10: fig06_10.c 2 Treating character arrays as strings */ 3 #include <stdio.h> 4 5 /* function main begins program execution */ 6 int main( void ) 7 { 8 char string1[ 20 ]; /* reserves 20 characters */ 9 char string2[] = "string literal"; /* reserves 15 characters */10 int i; /* counter */11 12 /* read string from user into array string1 */13 printf("Enter a string: ");14 scanf( "%s", string1 ); /* input ended by whitespace character */15 16 /* output strings */17 printf( "string1 is: %s\nstring2 is: %s\n"18 "string1 with spaces between characters is:\n",19 string1, string2 );20

string2 array is defined with one element for each character, so 15 elements including null character \0

Page 282: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

282

2007 Pearson Education, Inc. All rights reserved.

21 /* output characters until null character is reached */22 for ( i = 0; string1[ i ] != '\0'; i++ ) {23 printf( "%c ", string1[ i ] );24 } /* end for */25 26 printf( "\n" );27 28 return 0; /* indicates successful termination */29 30 } /* end main */

for loop prints characters of string1 array with spaces in between

Enter a string: Hello therestring1 is: Hello

string2 is: string literalstring1 with spaces between characters is:H e l l o

Page 283: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

283

2007 Pearson Education, Inc. All rights reserved.

Code conversion

Suppose I have a character array with some contents that forms a number:

char num[10] = { '1', '2', '3', '\0'};

Perhaps this was typed by the user.

We have 3 characters, and we would like to convert this into an integer (called code conversion).

How to do this?

Page 284: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

284

2007 Pearson Education, Inc. All rights reserved.

Code conversion

Please note that '0' has ASCII value 48.

'5' has ASCII value 53, so '5' – '0' has value 53-48 = 5,so this corresponds to the integer conversion of '5'.

To convert any char c in the range '0'..'9' to an integer, calculate c-'0'.

To convert a number with more than one digit, multiply by appropriate powers of 10.

Page 285: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

285

2007 Pearson Education, Inc. All rights reserved.

Code conversion

int i, total;

i = total = 0; while (num[i]) { total *= 10; total += (num[i] - '0'); i++; }

printf("%d\n", total);

Page 286: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

286

2007 Pearson Education, Inc. All rights reserved.

Code conversion

In the example, variable total takes the following values during the while loop:

0 1 10 12 120 123

The while loop stops as soon as the NULL character is reached. We then have the value we want.

We should of course also check that the array contains only digits. This can be done beforehand, or during the conversion.

Page 287: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

287

2007 Pearson Education, Inc. All rights reserved.

6.5 Passing Arrays to Functions

● Passing arrays● To pass an array argument to a function, specify the name of the

array without any brackets int myArray[ 24 ];myFunction( myArray, 24 );

● Array size usually passed to function ● Name of array is address of first element● Function knows where the array is stored

● Modifies original memory locations● Passing array elements

● Pass subscripted name (i.e., myArray[ 3 ]) to function

Page 288: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

288

2007 Pearson Education, Inc. All rights reserved.

6.8 Searching Arrays

● Search an array for a key value● Linear search

● Simple ● Compare each element of array with key value● Useful for small and unsorted arrays

Page 289: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

289

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 6.18: fig06_18.c 2 Linear search of an array */ 3 #include <stdio.h> 4 #define SIZE 100 5 6 /* function prototype */ 7 int linearSearch( int array[], int key, int size ); 8 9 /* function main begins program execution */10 int main( void )11 { 12 int a[ SIZE ]; /* create array a */13 int x; /* counter for initializing elements 0-99 of array a */14 int searchKey; /* value to locate in array a */15 int element; /* variable to hold location of searchKey or -1 */16 17 /* create data */18 for ( x = 0; x < SIZE; x++ ) { 19 a[ x ] = 2 * x;20 } /* end for */21 22 printf( "Enter integer search key:\n" );23 scanf( "%d", &searchKey );

Page 290: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

290

2007 Pearson Education, Inc. All rights reserved.

25 /* attempt to locate searchKey in array a */26 element = linearSearch( a, searchKey, SIZE );27 28 /* display results */29 if ( element != -1 ) {30 printf( "Found value in element %d\n", element );31 } /* end if */32 else {33 printf( "Value not found\n" );34 } /* end else */35 36 return 0; /* indicates successful termination */37 38 } /* end main */

Page 291: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

291

2007 Pearson Education, Inc. All rights reserved.

40 /* compare key to every element of array until location is found41 or until end of array is reached; return subscript of element42 if key or -1 if key is not found */43 int linearSearch( int array[], int key, int size )44 {45 int n; /* counter */46 47 /* loop through array */48 for ( n = 0; n < size; ++n ) {49 50 if ( array[ n ] == key ) { 51 return n; /* return location of key */52 } /* end if */53 54 } /* end for */55 56 return -1; /* key not found */57 58 } /* end function linearSearch */

Linear search algorithm searches through every element in the array until a match is found

Page 292: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

292

2007 Pearson Education, Inc. All rights reserved.

Enter integer search key:36Found value in element 18 Enter integer search key:37Value not found

Page 293: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

293

2007 Pearson Education, Inc. All rights reserved.

Searching Arrays

● Binary search ● For sorted arrays only● Compares middle element with key

● If equal, match found● If key < middle , looks in first half of array● If key > middle , looks in last half● Repeat

● Very fast; at most n steps, where 2n > number of elements● 30 element array takes at most 5 steps

25 > 30 so at most 5 steps

Page 294: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

294

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 6.19: fig06_19.c 2 Binary search of an array */ 3 #include <stdio.h> 4 #define SIZE 15 5 6 /* function prototypes */ 7 int binarySearch( int b[], int searchKey, int low, int high ); 8 void printHeader( void ); 9 void printRow( int b[], int low, int mid, int high );10 11 /* function main begins program execution */12 int main( void )13 {14 int a[ SIZE ]; /* create array a */15 int i; /* counter for initializing elements 0-14 of array a */16 int key; /* value to locate in array a */17 int result; /* variable to hold location of key or -1 */18 19 /* create data */20 for ( i = 0; i < SIZE; i++ ) {21 a[ i ] = 2 * i;22 } /* end for */23 24 printf( "Enter a number between 0 and 28: " );25 scanf( "%d", &key );

Page 295: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

295

2007 Pearson Education, Inc. All rights reserved.

27 printHeader();28 29 /* search for key in array a */30 result = binarySearch( a, key, 0, SIZE - 1 );31 32 /* display results */33 if ( result != -1 ) {34 printf( "\n%d found in array element %d\n", key, result );35 } /* end if */36 else {37 printf( "\n%d not found\n", key );38 } /* end else */39 40 return 0; /* indicates successful termination */41 42 } /* end main */43

Page 296: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

296

2007 Pearson Education, Inc. All rights reserved.

44 /* function to perform binary search of an array */45 int binarySearch( int b[], int searchKey, int low, int high )46 {47 int middle; /* variable to hold middle element of array */48 49 /* loop until low subscript is greater than high subscript */50 while ( low <= high ) {51 52 /* determine middle element of subarray being searched */53 middle = ( low + high ) / 2;54 55 /* display subarray used in this loop iteration */56 printRow( b, low, middle, high );57 58 /* if searchKey matched middle element, return middle */59 if ( searchKey == b[ middle ] ) {60 return middle;61 } /* end if */

Page 297: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

297

2007 Pearson Education, Inc. All rights reserved.

63 /* if searchKey less than middle element, set new high */64 else if ( searchKey < b[ middle ] ) {65 high = middle - 1; /* search low end of array */66 } /* end else if */67 68 /* if searchKey greater than middle element, set new low */69 else {70 low = middle + 1; /* search high end of array */71 } /* end else */72 73 } /* end while */74 75 return -1; /* searchKey not found */76 77 } /* end function binarySearch */

Page 298: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

298

2007 Pearson Education, Inc. All rights reserved.

79 /* Print a header for the output */80 void printHeader( void )81 {82 int i; /* counter */83 84 printf( "\nSubscripts:\n" );85 86 /* output column head */87 for ( i = 0; i < SIZE; i++ ) {88 printf( "%3d ", i );89 } /* end for */90 91 printf( "\n" ); /* start new line of output */92 93 /* output line of - characters */94 for ( i = 1; i <= 4 * SIZE; i++ ) {95 printf( "-" );96 } /* end for */97 98 printf( "\n" ); /* start new line of output */99 } /* end function printHeader */

Page 299: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

299

2007 Pearson Education, Inc. All rights reserved.

101 /* Print one row of output showing the current 102 part of the array being processed. */ 103 void printRow( int b[], int low, int mid, int high ) 104 { 105 int i; /* counter for iterating through array b */ 106 107 /* loop through entire array */ 108 for ( i = 0; i < SIZE; i++ ) { 109 110 /* display spaces if outside current subarray range */ 111 if ( i < low || i > high ) { 112 printf( " " ); 113 } /* end if */ 114 else if ( i == mid ) { /* display middle element */ 115 printf( "%3d*", b[ i ] ); /* mark middle value */ 116 } /* end else if */ 117 else { /* display other elements in subarray */ 118 printf( "%3d ", b[ i ] ); 119 } /* end else */ 120 121 } /* end for */ 122 123 printf( "\n" ); /* start new line of output */ 124 } /* end function printRow */

Page 300: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

300

2007 Pearson Education, Inc. All rights reserved.

Enter a number between 0 and 28:

Subscripts:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

------------------------------------------------------------

0 2 4 6 8 10 12 14* 16 18 20 22 24 26 28

0 2 4 6* 8 10 12

8 10* 12

8*

8 found in array element 4

Enter a number between 0 and 28:

Subscripts:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

------------------------------------------------------------

0 2 4 6 8 10 12 14* 16 18 20 22 24 26 28

0 2 4 6* 8 10 12

6 found in array element 3

Page 301: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

301

2007 Pearson Education, Inc. All rights reserved.

6.6 Sorting Arrays

● Sorting data● Important computing application● Virtually every organization must sort some data

● Bubble sort ● Several passes through the array ● Successive pairs of elements are compared

● If increasing order (or identical ), no change● If decreasing order, elements exchanged

● Repeat● Large elements “bubble” upwards

Page 302: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

302

2007 Pearson Education, Inc. All rights reserved.

Bubble sort example

7 3 10 5 8

3 7 5 8 10

3 5 7 8 10

3 5 7 8 10

Original

After pass 1

After pass 2

After pass 3 and 4

The code is simple, but inefficient: it always makes n-1 passes, regardless of whether this is necessary (usually not).

Page 303: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

303

2007 Pearson Education, Inc. All rights reserved.

Performance Tip

Often, the simplest algorithms perform poorly. Their virtue is that they are easy to write, test and debug. However, more complex algorithms are often needed to realize maximum performance.

Page 304: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

304

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 6.15: fig06_15.c 2 This program sorts an array's values into ascending order */ 3 #include <stdio.h> 4 #define SIZE 10 5 6 /* function main begins program execution */ 7 int main( void ) 8 { 9 /* initialize a */10 int a[ SIZE ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 }; 11 int pass; /* passes counter */12 int i; /* comparisons counter */13 int hold; /* temporary location used to swap array elements */14 15 printf( "Data items in original order\n" );16 17 /* output original array */18 for ( i = 0; i < SIZE; i++ ) {19 printf( "%4d", a[ i ] );20 } /* end for */

Page 305: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

305

2007 Pearson Education, Inc. All rights reserved.

22 /* bubble sort */23 /* loop to control number of passes */24 for ( pass = 1; pass < SIZE; pass++ ) { 25 26 /* loop to control number of comparisons per pass */27 for ( i = 0; i < SIZE - 1; i++ ) { 28 29 /* compare adjacent elements and swap them if first 30 element is greater than second element */31 if ( a[ i ] > a[ i + 1 ] ) { 32 hold = a[ i ]; 33 a[ i ] = a[ i + 1 ];34 a[ i + 1 ] = hold;35 } /* end if */36 37 } /* end inner for */38 39 } /* end outer for */40 41 printf( "\nData items in ascending order\n" );42 43 /* output sorted array */44 for ( i = 0; i < SIZE; i++ ) {45 printf( "%4d", a[ i ] );46 } /* end for */

Page 306: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

306

2007 Pearson Education, Inc. All rights reserved.

48 printf( "\n" );49 50 return 0; /* indicates successful termination */51 52 } /* end main */

Data items in original order 2 6 4 8 10 12 89 68 45 37Data items in ascending order 2 4 6 8 10 12 37 45 68 89

Page 307: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

307

2007 Pearson Education, Inc. All rights reserved.

Bubble sort

● Improving the performance● The final passes are often unnecessary● Worst case occurs when smallest number is top element● Smallest number moves left one position during each pass● Quit if we don't make changes during a pass● Track this with variable 'changed'

● Further improvement:● After first pass, largest element is in position ● After second pass, second largest is in position● etc.● Reduce number of iterations with each pass

Page 308: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

308

2007 Pearson Education, Inc. All rights reserved.

22 /* bubble sort */23 /* loop to control number of passes */24 for ( pass = 1; pass < SIZE; pass++ ) { 25 changed = 0;26 /* loop to control number of comparisons per pass */27 for ( i = 0; i < SIZE - pass; i++ ) { 2829 /* compare adjacent elements and swap them if first 30 element is greater than second element */31 if ( a[ i ] > a[ i + 1 ] ) { 32 hold = a[ i ]; 33 a[ i ] = a[ i + 1 ];34 a[ i + 1 ] = hold; changed = 1;35 } /* end if */36 37 } /* end inner for */38 if (!changed) break;39 } /* end outer for */40 41 printf( "\nData items in ascending order\n" );42 43 /* output sorted array */44 for ( i = 0; i < SIZE; i++ ) {45 printf( "%4d", a[ i ] );46 } /* end for */

Page 309: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

309

2007 Pearson Education, Inc. All rights reserved.

Insertion sort

● Insertion sort ● Several passes through the array ● Consider elements one at a time ● Each new element is inserted into its correct position● Must make room by moving the other elements● After N passes N elements are in the right order● Pseudocode:

for i=1 to n-1 do

find the position of A[i] in A[0],…,A[i-1];

shift the array elements to make room;

insert element A[i] into its correct position.

Page 310: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

310

2007 Pearson Education, Inc. All rights reserved.

5 7 0 3 4 2 6 15 7 0 3 4 2 6 10 5 7 3 4 2 6 10 3 5 7 4 2 6 10 3 4 5 7 2 6 10 2 3 4 5 7 6 10 2 3 4 5 6 7 10 1 2 3 4 5 6 7

Insertion Sort example

Page 311: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

311

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 6.15a: fig06_15a.c 2 This program sorts an array's values using insertion sort */ 3 #include <stdio.h> 4 #define SIZE 10 5 6 /* function main begins program execution */ 7 int main( void ) 8 { 9 /* initialize a */10 int A[ SIZE ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 };11 int pass; /* passes counter */12 int i,j,key,size;13 int hold; /* temporary location used to swap array elements */1415 printf( "Data items in original order\n" );1617 /* output original array */18 for ( i = 0; i < SIZE; i++ ) {19 printf( "%4d", A[ i ] );20 } /* end for */

Page 312: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

312

2007 Pearson Education, Inc. All rights reserved.

21 /* insertion sort loop */22 for (i = 1; i < SIZE; i++) {23 key = A[i];24 j = i;25 while((j > 0) && (key < A[j-1])) {26 A[j]=A[j-1];27 j = j-1;28 }29 A[j] = key;30 }3132 printf( "\nData items in ascending order\n" );3334 /* output sorted array */35 for ( i = 0; i < SIZE; i++ ) {36 printf( "%4d", A[ i ] );37 } /* end for */3839 printf( "\n" );4041 return 0; /* indicates successful termination */4243 } /* end main */

Page 313: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

313

2007 Pearson Education, Inc. All rights reserved.

6.7 Case Study: Computing Mean, Median and Mode Using Arrays

● Mean – average● Median – number in middle of sorted list

● 1, 2, 3, 4, 5 ● 3 is the median

● Mode – number that occurs most often● 1, 1, 1, 2, 3, 3, 4, 5 ● 1 is the mode

Page 314: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

314

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 6.16: fig06_16.c 2 This program introduces the topic of survey data analysis. 3 It computes the mean, median and mode of the data */ 4 #include <stdio.h> 5 #define SIZE 99 6 7 /* function prototypes */ 8 void mean( int answer[] ); 9 void median( int answer[] );10 void mode( int freq[], int answer[] ) ;11 void bubbleSort( int a[] );12 void printArray( int a[] );13 14 /* function main begins program execution */15 int main( void )16 {17 int frequency[ 10 ] = { 0 }; /* initialize array frequency */18 19 /* initialize array response */20 int response[ SIZE ] = 21 { 6, 7, 8, 9, 8, 7, 8, 9, 8, 9,22 7, 8, 9, 5, 9, 8, 7, 8, 7, 8,23 6, 7, 8, 9, 3, 9, 8, 7, 8, 7,24 7, 8, 9, 8, 9, 8, 9, 7, 8, 9,25 6, 7, 8, 7, 8, 7, 9, 8, 9, 2,

Page 315: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

315

2007 Pearson Education, Inc. All rights reserved.

26 7, 8, 9, 8, 9, 8, 9, 7, 5, 3,27 5, 6, 7, 2, 5, 3, 9, 4, 6, 4,28 7, 8, 9, 6, 8, 7, 8, 9, 7, 8,29 7, 4, 4, 2, 5, 3, 8, 7, 5, 6,30 4, 5, 6, 1, 6, 5, 7, 8, 7 };31 32 /* process responses */33 mean( response );34 median( response );35 mode( frequency, response );36 37 return 0; /* indicates successful termination */38 39 } /* end main */40 41 /* calculate average of all response values */42 void mean( int answer[] )43 {44 int j; /* counter for totaling array elements */45 int total = 0; /* variable to hold sum of array elements */46 47 printf( "%s\n%s\n%s\n", "********", " Mean", "********" );

Page 316: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

316

2007 Pearson Education, Inc. All rights reserved.

49 /* total response values */50 for ( j = 0; j < SIZE; j++ ) {51 total += answer[ j ];52 } /* end for */53 54 printf( "The mean is the average value of the data\n"55 "items. The mean is equal to the total of\n"56 "all the data items divided by the number\n"57 "of data items ( %d ). The mean value for\n"58 "this run is: %d / %d = %.4f\n\n",59 SIZE, total, SIZE, ( double ) total / SIZE );60 } /* end function mean */61 62 /* sort array and determine median element's value */63 void median( int answer[] )64 {65 printf( "\n%s\n%s\n%s\n%s", 66 "********", " Median", "********", 67 "The unsorted array of responses is" );68 69 printArray( answer ); /* output unsorted array */70 71 bubbleSort( answer ); /* sort array */72 73 printf( "\n\nThe sorted array is" );74 printArray( answer ); /* output sorted array */

Page 317: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

317

2007 Pearson Education, Inc. All rights reserved.

76 /* display median element – SIZE must be odd*/77 printf( "\n\nThe median is element %d of\n"78 "the sorted %d element array.\n"79 "For this run the median is %d\n\n",80 SIZE / 2, SIZE, answer[ SIZE / 2 ] );81 } /* end function median */82 83 /* determine most frequent response */84 void mode( int freq[], int answer[] )85 {86 int rating; /* counter for access elements 1-9 of array freq */87 int j; /* counter for summarize elements 0-98 of array answer */88 int h; /* counter for display histograms of array freq */89 int largest = 0; /* represents largest frequency */90 int modeValue = 0; /* represents most frequent response */91 92 printf( "\n%s\n%s\n%s\n", 93 "********", " Mode", "********" );94 95 /* initialize frequencies to 0 */96 for ( rating = 1; rating <= 9; rating++ ) {97 freq[ rating ] = 0;98 } /* end for */

Page 318: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

318

2007 Pearson Education, Inc. All rights reserved.

100 /* summarize frequencies */ 101 for ( j = 0; j < SIZE; j++ ) { 102 ++freq[ answer[ j ] ]; 103 } /* end for */ 104 105 /* output headers for result columns */ 106 printf( "%s%11s%19s\n\n%54s\n%54s\n\n", 107 "Response", "Frequency", "Histogram", 108 "1 1 2 2", "5 0 5 0 5" ); 109 110 /* output results */ 111 for ( rating = 1; rating <= 9; rating++ ) { 112 printf( "%8d%11d ", rating, freq[ rating ] ); 113 114 /* keep track of mode value and largest freq value */ 115 if ( freq[ rating ] > largest ) { 116 largest = freq[ rating ]; 117 modeValue = rating; 118 } /* end if */ 119 120 /* output histogram bar representing frequency value */ 121 for ( h = 1; h <= freq[ rating ]; h++ ) { 122 printf( "*" ); 123 } /* end inner for */ 124 125 printf( "\n" ); /* being new line of output */ 126 } /* end outer for */

Page 319: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

319

2007 Pearson Education, Inc. All rights reserved.

128 /* display the mode value */ 129 printf( "The mode is the most frequent value.\n" 130 "For this run the mode is %d which occurred" 131 " %d times.\n", modeValue, largest ); 132 } /* end function mode */ 133 134 /* function that sorts an array with bubble sort algorithm */ 135 void bubbleSort( int a[] ) 136 { 137 int pass; /* pass counter */ 138 int j; /* comparison counter */ 139 int hold; /* temporary location used to swap elements */ 140 141 /* loop to control number of passes */ /* code as before - see previous slide */

157 158 } /* end function bubbleSort */

Page 320: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

320

2007 Pearson Education, Inc. All rights reserved.

160 /* output array contents (20 values per row) */ 161 void printArray( int a[] ) 162 { 163 int j; /* counter */ 164 165 /* output array contents */ 166 for ( j = 0; j < SIZE; j++ ) { 167 168 if ( j % 20 == 0 ) { /* new line every 20 values */ 169 printf( "\n" ); 170 } /* end if */ 171 172 printf( "%2d", a[ j ] ); 173 } /* end for */ 174 175 } /* end function printArray */

Page 321: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

321

2007 Pearson Education, Inc. All rights reserved.

******** Mean********The mean is the average value of the dataitems. The mean is equal to the total ofall the data items divided by the numberof data items ( 99 ). The mean value forthis run is: 681 / 99 = 6.8788

******** Median********The unsorted array of responses is 6 7 8 9 8 7 8 9 8 9 7 8 9 5 9 8 7 8 7 8 6 7 8 9 3 9 8 7 8 7 7 8 9 8 9 8 9 7 8 9 6 7 8 7 8 7 9 8 9 2 7 8 9 8 9 8 9 7 5 3 5 6 7 2 5 3 9 4 6 4 7 8 9 6 8 7 8 9 7 8 7 4 4 2 5 3 8 7 5 6 4 5 6 1 6 5 7 8 7

The sorted array is 1 2 2 2 3 3 3 3 4 4 4 4 4 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8

9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9

Page 322: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

322

2007 Pearson Education, Inc. All rights reserved.

The median is element 49 ofthe sorted 99 element array.For this run the median is 7

******** Mode********Response Frequency Histogram

1 1 2 2 5 0 5 0 5

1 1 * 2 3 *** 3 4 **** 4 5 ***** 5 8 ******** 6 9 ********* 7 23 *********************** 8 27 *************************** 9 19 *******************The mode is the most frequent value.

For this run the mode is 8 which occurred 27 times.

Page 323: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

323

2007 Pearson Education, Inc. All rights reserved.

6.9 Multiple-Subscripted Arrays

● Multiple subscripted arrays ● Tables with rows and columns (m by n array)● Like matrices: specify row, then column

● Initialization● int b[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } }; ● Initializers grouped by row in braces ● If not enough, unspecified elements set to zero

int b[ 2 ][ 2 ] = { { 1 }, { 3, 4 } };

● Referencing elements● Specify row, then column

printf( "%d", b[ 0 ][ 1 ] );

Page 324: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

324

2007 Pearson Education, Inc. All rights reserved.

Common Programming Error

Referencing a double-subscripted array element as a[ x, y ] instead of a[ x ][ y ] .

C interprets a[ x, y ] as a[ y ] , and as such it does not cause a syntax error.

Page 325: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

325

2007 Pearson Education, Inc. All rights reserved.

Fig. 6.20 | Double-subscripted array with four rows and three columns.

Column 0 Column 1 Column 2

Row 0 a[ 0 ][ 0 ] a[ 0 ][ 1 ] a[ 0 ][ 2 ]

Row 1 a[ 1 ][ 0 ] a[ 1 ][ 1 ] a[ 1 ][ 2 ]

Row 2 a[ 2 ][ 0 ] a[ 2 ][ 1 ] a[ 2 ][ 2 ]

Row 3 a[ 3 ][ 0 ] a[ 3 ][ 1 ] a[ 3 ][ 2 ]

column index row index array name

Page 326: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

326

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 6.21: fig06_21.c 2 Initializing multidimensional arrays */ 3 #include <stdio.h> 4 5 void printArray( int a[][ 3 ] ); /* function prototype */ 6 7 /* function main begins program execution */ 8 int main( void ) 9 {10 /* initialize array1, array2, array3 */11 int array1[ 2 ][ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 } };12 int array2[ 2 ][ 3 ] = { 1, 2, 3, 4, 5 };13 int array3[ 2 ][ 3 ] = { { 1, 2 }, { 4 } };14 15 printf( "Values in array1 by row are:\n" );16 printArray( array1 );17 18 printf( "Values in array2 by row are:\n" );19 printArray( array2 );20 21 printf( "Values in array3 by row are:\n" );22 printArray( array3 );23 24 return 0; /* indicates successful termination */25 26 } /* end main */

array1 is initialized with both rows full

array2 and array3 are initialized only partially

Page 327: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

327

2007 Pearson Education, Inc. All rights reserved.

28 /* function to output array with two rows and three columns */29 void printArray( int a[][ 3 ] )30 {31 int i; /* row counter */32 int j; /* column counter */33 34 /* loop through rows */35 for ( i = 0; i <= 1; i++ ) {36 37 /* output column values */38 for ( j = 0; j <= 2; j++ ) {39 printf( "%d ", a[ i ][ j ] );40 } /* end inner for */41 42 printf( "\n" ); /* start new line of output */43 } /* end outer for */44 45 } /* end function printArray */

Page 328: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

328

2007 Pearson Education, Inc. All rights reserved.

Values in array1 by row are:1 2 34 5 6Values in array2 by row are:1 2 34 5 0Values in array3 by row are:1 2 04 0 0

Page 329: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

329

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 6.22: fig06_22.c 2 Double-subscripted array example */ 3 #include <stdio.h> 4 #define STUDENTS 3 5 #define EXAMS 4 6 7 /* function prototypes */ 8 int minimum( int grades[][ EXAMS ], int pupils, int tests ); 9 int maximum( int grades[][ EXAMS ], int pupils, int tests );10 double average( int setOfGrades[], int tests );11 void printArray( int grades[][ EXAMS ], int pupils, int tests );12 13 /* function main begins program execution */14 int main( void )15 {16 int student; /* student counter */17 18 /* initialize student grades for three students (rows) */19 int studentGrades[ STUDENTS ][ EXAMS ] = 20 { { 77, 68, 86, 73 },21 { 96, 87, 89, 78 },22 { 70, 90, 86, 81 } };

Each row in the array corresponds to a single student’s set of grades

Page 330: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

330

2007 Pearson Education, Inc. All rights reserved.

24 /* output array studentGrades */25 printf( "The array is:\n" );26 printArray( studentGrades, STUDENTS, EXAMS );27 28 /* determine smallest and largest grade values */29 printf( "\n\nLowest grade: %d\nHighest grade: %d\n",30 minimum( studentGrades, STUDENTS, EXAMS ),31 maximum( studentGrades, STUDENTS, EXAMS ) );32 33 /* calculate average grade for each student */34 for ( student = 0; student < STUDENTS; student++ ) {35 printf( "The average grade for student %d is %.2f\n", 36 student, average( studentGrades[ student ], EXAMS ) );37 } /* end for */38 39 return 0; /* indicates successful termination */40 41 } /* end main */

average function is passed a row of the array

Page 331: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

331

2007 Pearson Education, Inc. All rights reserved.

43 /* Find the minimum grade */44 int minimum( int grades[][ EXAMS ], int pupils, int tests )45 {46 int i; /* student counter */47 int j; /* exam counter */48 int lowGrade = 100; /* initialize to highest possible grade */49 50 /* loop through rows of grades */51 for ( i = 0; i < pupils; i++ ) {52 53 /* loop through columns of grades */54 for ( j = 0; j < tests; j++ ) {55 56 if ( grades[ i ][ j ] < lowGrade ) {57 lowGrade = grades[ i ][ j ];58 } /* end if */59 60 } /* end inner for */61 62 } /* end outer for */63 64 return lowGrade; /* return minimum grade */ 65 66 } /* end function minimum */

Page 332: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

332

2007 Pearson Education, Inc. All rights reserved.

68 /* Find the maximum grade */69 int maximum( int grades[][ EXAMS ], int pupils, int tests )70 {71 int i; /* student counter */72 int j; /* exam counter */73 int highGrade = 0; /* initialize to lowest possible grade */74 75 /* loop through rows of grades */76 for ( i = 0; i < pupils; i++ ) {77 78 /* loop through columns of grades */79 for ( j = 0; j < tests; j++ ) {80 81 if ( grades[ i ][ j ] > highGrade ) {82 highGrade = grades[ i ][ j ];83 } /* end if */84 85 } /* end inner for */86 87 } /* end outer for */88 89 return highGrade; /* return maximum grade */90 91 } /* end function maximum */

Page 333: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

333

2007 Pearson Education, Inc. All rights reserved.

93 /* Determine the average grade for a particular student */ 94 double average( int setOfGrades[], int tests ) 95 { 96 int i; /* exam counter */ 97 int total = 0; /* sum of test grades */ 98 99 /* total all grades for one student */100 for ( i = 0; i < tests; i++ ) {101 total += setOfGrades[ i ];102 } /* end for */103 104 return ( double ) total / tests; /* average */105 106 } /* end function average */

Page 334: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

334

2007 Pearson Education, Inc. All rights reserved.

108 /* Print the array */109 void printArray( int grades[][ EXAMS ], int pupils, int tests )110 {111 int i; /* student counter */112 int j; /* exam counter */113 114 /* output column heads */115 printf( " [0] [1] [2] [3]" );116 117 /* output grades in tabular format */118 for ( i = 0; i < pupils; i++ ) {119 120 /* output label for row */121 printf( "\nstudentGrades[%d] ", i );122 123 /* output grades for one student */124 for ( j = 0; j < tests; j++ ) {125 printf( "%-5d", grades[ i ][ j ] );126 } /* end inner for */127 128 } /* end outer for */129 130 } /* end function printArray */

Page 335: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

335

2007 Pearson Education, Inc. All rights reserved.

The array is: [0] [1] [2] [3]studentGrades[0] 77 68 86 73studentGrades[1] 96 87 89 78studentGrades[2] 70 90 86 81

Lowest grade: 68Highest grade: 96The average grade for student 0 is 76.00The average grade for student 1 is 87.50The average grade for student 2 is 81.75

Page 336: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

336

2007 Pearson Education, Inc. All rights reserved.

Random Number Generation

● rand function● Load <stdlib.h>● Returns "random" number between 0 and RAND_MAX (at least 32767)

i = rand();

● Pseudorandom● Preset sequence of "random" numbers● Same sequence for every function call

● Scaling● To get a random number between 1 and n

1 + ( rand() % n )● rand() % n returns a number between 0 and n - 1● Add 1 to make random number between 1 and n

1 + ( rand() % 6)

number between 1 and 6

Page 337: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

337

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 5.7: fig05_07.c 2 Shifted, scaled integers produced by 1 + rand() % 6 */ 3 #include <stdio.h> 4 #include <stdlib.h> 5 6 /* function main begins program execution */ 7 int main( void ) 8 { 9 int i; /* counter */10 11 /* loop 20 times */12 for ( i = 1; i <= 20; i++ ) {13 14 /* pick random number from 1 to 6 and output it */15 printf( "%10d", 1 + ( rand() % 6 ) );16 17 /* if counter is divisible by 5, begin new line of output */18 if ( i % 5 == 0 ) {19 printf( "\n" );20 } /* end if */21 22 } /* end for */23 24 return 0; /* indicates successful termination */25 26 } /* end main */

Generates a random numberbetween 1 and 6

Page 338: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

338

2007 Pearson Education, Inc. All rights reserved.

6 6 5 5 6 5 1 1 5 3 6 6 2 4 2 6 2 3 4 1

Page 339: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

339

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 5.8: fig05_08.c 2 Roll a six-sided die 6000 times */ 3 #include <stdio.h> 4 #include <stdlib.h> 5 6 /* function main begins program execution */ 7 int main( void ) 8 { 9 int frequency1 = 0; /* rolled 1 counter */10 int frequency2 = 0; /* rolled 2 counter */11 int frequency3 = 0; /* rolled 3 counter */12 int frequency4 = 0; /* rolled 4 counter */13 int frequency5 = 0; /* rolled 5 counter */14 int frequency6 = 0; /* rolled 6 counter */15 16 int roll; /* roll counter, value 1 to 6000 */17 int face; /* represents one roll of the die, value 1 to 6 */18 19 /* loop 6000 times and summarize results */20 for ( roll = 1; roll <= 6000; roll++ ) {21 face = 1 + rand() % 6; /* random number from 1 to 6 */

Page 340: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

340

2007 Pearson Education, Inc. All rights reserved.

23 /* determine face value and increment appropriate counter */24 switch ( face ) {25 26 case 1: /* rolled 1 */27 ++frequency1;28 break;29 30 case 2: /* rolled 2 */31 ++frequency2;32 break;33 34 case 3: /* rolled 3 */35 ++frequency3;36 break;37 38 case 4: /* rolled 4 */39 ++frequency4;40 break;41 42 case 5: /* rolled 5 */43 ++frequency5;44 break;45 46 case 6: /* rolled 6 */47 ++frequency6;48 break; /* optional */49 } /* end switch */

Page 341: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

341

2007 Pearson Education, Inc. All rights reserved.

51 } /* end for */52 53 /* display results in tabular format */54 printf( "%s%13s\n", "Face", "Frequency" );55 printf( " 1%13d\n", frequency1 );56 printf( " 2%13d\n", frequency2 );57 printf( " 3%13d\n", frequency3 );58 printf( " 4%13d\n", frequency4 );59 printf( " 5%13d\n", frequency5 );60 printf( " 6%13d\n", frequency6 );61 62 return 0; /* indicates successful termination */63 64 } /* end main */

Face Frequency 1 1003 2 1017 3 983 4 994 5 1004 6 999

Page 342: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

342

2007 Pearson Education, Inc. All rights reserved.

Random Number Generation

● srand function● <stdlib.h>● <time.h>● Takes an integer seed and jumps to that location in its

"random" sequencesrand( seed );

● srand( time( NULL ) );● time( NULL )

Returns the number of seconds that have passed since January 1, 1970

“Randomizes" the seed

Page 343: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

343

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 5.9: fig05_09.c 2 Randomizing die-rolling program */ 3 #include <stdlib.h> 4 #include <stdio.h> 5 6 /* function main begins program execution */ 7 int main( void ) 8 { 9 int i; /* counter */10 unsigned seed; /* number used to seed random number generator */11 12 printf( "Enter seed: " );13 scanf( "%u", &seed ); /* note %u for unsigned */14 15 srand( seed ); /* seed random number generator */

Seeds the rand function

Page 344: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

344

2007 Pearson Education, Inc. All rights reserved.

17 /* loop 10 times */18 for ( i = 1; i <= 10; i++ ) {19 20 /* pick a random number from 1 to 6 and output it */21 printf( "%10d", 1 + ( rand() % 6 ) );22 23 /* if counter is divisible by 5, begin a new line of output */24 if ( i % 5 == 0 ) {25 printf( "\n" );26 } /* end if */27 28 } /* end for */29 30 return 0; /* indicates successful termination */31 32 } /* end main */

Page 345: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

345

2007 Pearson Education, Inc. All rights reserved.

Enter seed: 67 6 1 4 6 2 1 6 1 6 4 Enter seed: 867 2 4 6 1 6 1 1 3 6 2 Enter seed: 67 6 1 4 6 2 1 6 1 6 4

Page 346: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

346

2007 Pearson Education, Inc. All rights reserved.

Example: A Game of Chance

● Craps simulator● Rules

● Roll two dice● 7 or 11 on first throw, player wins● 2, 3, or 12 on first throw, player loses● 4, 5, 6, 8, 9, 10 - value becomes player's "point"

● Player must roll his point before rolling 7 to win

Page 347: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

347

2007 Pearson Education, Inc. All rights reserved.

1 /* Fig. 5.10: fig05_10.c 2 Craps */ 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include <time.h> /* contains prototype for function time */ 6 7 /* constants represent game status */ 8 #define CONTINUE 0 8 #define WON 1 8 #define LOST 2 9 10 int rollDice( void ); /* function prototype */11 12 /* function main begins program execution */13 int main( void )14 { 15 int sum; /* sum of rolled dice */16 int myPoint; /* point earned */17 18 int gameStatus; /* can contain CONTINUE, WON, or LOST */19 20 /* randomize random number generator using current time */21 srand( time( NULL ) );22 23 sum = rollDice(); /* first roll of the dice */

Page 348: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

348

2007 Pearson Education, Inc. All rights reserved.

25 /* determine game status based on sum of dice */26 switch( sum ) {27 28 /* win on first roll */29 case 7: 30 case 11: 31 gameStatus = WON;32 break;33 34 /* lose on first roll */35 case 2: 36 case 3: 37 case 12: 38 gameStatus = LOST;39 break;40 41 /* remember point */42 default: 43 gameStatus = CONTINUE;44 myPoint = sum;45 printf( "Point is %d\n", myPoint );46 break; /* optional */47 } /* end switch */

Page 349: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

349

2007 Pearson Education, Inc. All rights reserved.

49 /* while game not complete */50 while ( gameStatus == CONTINUE ) { 51 sum = rollDice(); /* roll dice again */52 53 /* determine game status */54 if ( sum == myPoint ) { /* win by making point */55 gameStatus = WON; /* game over, player won */56 } /* end if */57 else {58 59 if ( sum == 7 ) { /* lose by rolling 7 */60 gameStatus = LOST; /* game over, player lost */61 } /* end if */62 63 } /* end else */64 65 } /* end while */

Page 350: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

350

2007 Pearson Education, Inc. All rights reserved.

67 /* display won or lost message */68 if ( gameStatus == WON ) { /* did player win? */69 printf( "Player wins\n" );70 } /* end if */71 else { /* player lost */ 72 printf( "Player loses\n" );73 } /* end else */74 75 return 0; /* indicates successful termination */76 77 } /* end main */

Page 351: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

351

2007 Pearson Education, Inc. All rights reserved.

79 /* roll dice, calculate sum and display results */80 int rollDice( void )81 {82 int die1; /* first die */83 int die2; /* second die */84 int workSum; /* sum of dice */85 86 die1 = 1 + ( rand() % 6 ); /* pick random die1 value */87 die2 = 1 + ( rand() % 6 ); /* pick random die2 value */88 workSum = die1 + die2; /* sum die1 and die2 */89 90 /* display results of this roll */91 printf( "Player rolled %d + %d = %d\n", die1, die2, workSum );92 93 return workSum; /* return sum of dice */94 95 } /* end function rollDice */

Page 352: EEE1008 C Programming - rishadshafik.netrishadshafik.net/onewebmedia/EEE1008.pdf · EEE1008 C Programming ... Telephone: 8155 ... The bodies of all functions must be contained in

352

2007 Pearson Education, Inc. All rights reserved.

Player rolled 5 + 6 = 11 Player wins Player rolled 4 + 1 = 5 Point is 5 Player rolled 6 + 2 = 8 Player rolled 2 + 1 = 3 Player rolled 3 + 2 = 5 Player wins Player rolled 1 + 1 = 2 Player loses Player rolled 6 + 4 = 10 Point is 10 Player rolled 3 + 4 = 7 Player loses