Lecture 2 Introduction to C Programming Arne Kutzner Hanyang University / Seoul Korea.

43
Lecture 2 Introduction to C Programming Arne Kutzner Hanyang University / Seoul Korea

Transcript of Lecture 2 Introduction to C Programming Arne Kutzner Hanyang University / Seoul Korea.

Lecture 2

Introduction to C Programming

Arne Kutzner

Hanyang University / Seoul Korea

Introduction to C Programming L2.2

This week …

• You will learn:– From the first Computers to the C

Programming Languages• Von Neumann Architecture• The Idea of “binary computing”• Origins of Programming Languages

– About Flowcharts and Algorithms

Von Neumann’s Computer Architecture

Foundations of modern Computers and their

Programming

Introduction to C Programming L2.4

Computers until the second world war and before

• The earliest computing machines had fixed programs. – The earliest computers were not so much

"programmed" as they were "designed".– "Reprogramming", when it was possible at all, was

a laborious process, starting with flow charts and paper notes, followed by detailed engineering designs, and then the often arduous process of physically rewiring and rebuilding the machine.

Introduction to C Programming L2.5

Examples of “fixed program computers”

• Colossus Mark I (Dec. 1943) / Colossus Mark II (June 1944)

INFO in the Web: http://en.wikipedia.org/wiki/Colossus_computer

Purpose:Message Decoding during World War 2 (was used to help decipher teleprinter messages which had been encrypted using the Lorenz SZ40/42 machine (Enigma))

Introduction to C Programming L2.6

Von Neumann Architecture (proposed 1945)

Memory

Control UnitArithmetic Logic

Unit

Accumulator

Input Output

Introduction to C Programming L2.7

Von Neumann Architecture (2)

• The Control Unit “understands” instructions like e.g. copy data from the memory to the accumulator => Instruction Set Architecture

• The Arithmetic Logic Unit performs arithmetic operations and Boolean operations.

• The Memory stores data and Program (Series of control unit instructions

• The Input takes data in form of an data stream from some medium

• The Output receives data in form of data stream and delivers them to some output medium

Introduction to C Programming L2.8

Von Neumann Architecture (3)

• Von Neumann’s approach was revolutionary because:He created an instruction set architecture and detailed the computation as the execution of a series of instructions (the program) stored in the memory.– Program and data share the memory !!

• Highly flexible computer design

Introduction to C Programming L2.9

Structure of Memory

• Ordered sequence of storage locations called memory cells.

• Each memory cell is identified by a unique address

43

87

06

00

12

0000

0001

0002

0003

0004

000005

Addresses Memory Cells

Content of a memory cell

Introduction to C Programming L2.10

Instruction representation

• Instruction are encoded using sequences of bits

• Example PDP-11(single operand instructions):

15

6 5 3 2 0

OP-Code Mode Register

3 bit3 bit10 bit16 bit = 2 byte

INFO in the Web: http://en.wikipedia.org/wiki/PDP-11

Introduction to C Programming L2.11

Computer nowadays?• Almost all modern computer have still a

Von Neumann Architecture

Main Memory

Input Output

CPU

How to program “von Neumann” computer ?

Introduction to C Programming L2.13

Assembler Code

• Sequence of processor instructions in human readable text-form – this is called Assembler Code

• Example for PDP-11 Assembler Code:.TITLE HELLO WORLD .MCALL .TTYOUT,.EXIT

HELLO:: MOV #MSG,R1 ;STARTING ADDRESS OF STRING1$: MOVB (R1)+,R0 ;FETCH NEXT CHARACTER BEQ DONE ;IF ZERO, EXIT LOOP .TTYOUT ;OTHERWISE PRINT IT BR 1$ ;REPEAT LOOPDONE: .EXIT

MSG: .ASCIZ /Hello, world!/ .END HELLO

This PDP-11 Assembler Code prints “Hello World”

Introduction to C Programming L2.14

Assembler and Programming Languages

• Assembler was the first form of some primitive (low-level) programming language

• Definition:A programming language is a set of rules that provides a way of telling a computer what operations to perform.

Introduction to C Programming L2.15

Disadvantages of Assembler Code

• Low level of abstraction– Code is processor (vendor)-specific

Therefore: Non portable

• The code is unstructured– Difficult to read– Risk of “spaghetti-structure”

• Time intensive to learn and to program

Introduction to C Programming L2.16

High-level Programming Languages

• The wish for some programming medium that is more abstract than assembler lead to the development of High-level Programming Languages

• Definition:A high-level programming language is a programming language that, in comparison to low-level programming languages, may be more abstract, easier to use, or more portable across platforms.

Introduction to C Programming L2.17

Early high-level programming languages

• Fortran:For programming in the scientific area (number crunching)

• Cobol:For programming of business applications (e.g. banking applications)

• Lisp:Development originally motivated be research in the Artificial Intelligence area

Introduction to C Programming L2.18

Fortran Code Examplec23456789012345678901234567890123456789012345678901234567890123456789012

PROGRAM spherec This program determines the surface area and volume of a sphere, given c its radius.c Variable declarations

REAL rad, area, volume, pic Definition of variablesc rad = radius, area = surface area, volume = volume of the spherec Assign a value to the variable pi.

pi = 3.141593c Input the value of the radius and echo the inputted value.

PRINT *, 'Enter the radius of the sphere. 'READ *, radPRINT *, rad, ' is the value of the radius. '

c Compute the surface area and volume of the sphere.area = 4.0 * pi * rad**2volume = (4.0/3.0) * pi * rad**3

c Print the values of the radius (given in cm), the surface area (sq cm),c and the volume (cubic cm).

PRINT *,'In a sphere of radius', rad, ' , the surface area is', + area, ' and its volume is', volume, '. '

STOPEND

Introduction to C Programming L2.19

COBOL Code Example $ SET SOURCEFORMAT"FREE"IDENTIFICATION DIVISION.PROGRAM-ID. Multiplier.AUTHOR. Michael Coughlan.* Example program using ACCEPT, DISPLAY and MULTIPLY to* get two single digit numbers from the user and multiply them together

DATA DIVISION.

WORKING-STORAGE SECTION.01 Num1 PIC 9 VALUE ZEROS.01 Num2 PIC 9 VALUE ZEROS.01 Result PIC 99 VALUE ZEROS.

PROCEDURE DIVISION.

DISPLAY "Enter first number (1 digit) : " WITH NO ADVANCING. ACCEPT Num1. DISPLAY "Enter second number (1 digit) : " WITH NO ADVANCING. ACCEPT Num2. MULTIPLY Num1 BY Num2 GIVING Result. DISPLAY "Result is = ", Result.

STOP RUN.

Introduction to C Programming L2.20

Programming Languages

Introduction to C Programming L2.21

Why was C created ?

• The origin of C is closely tied to the development of the Unix operating system – Originally Unix was implemented in Assembler for

the PDP-7 (1970)– 1973 Unix was “rewritten” for the PDP-11

architecture using the newly developed C Programming Language

• An older language “B” was unsuitable for this purpose due to some language design lacks

Introduction to C Programming L2.22

Characteristics of C

• Primitive but fast

• Quite “low-level” compared to e.g. Java– Some people say: “More or less like

assembler but independent of any specific instruction set”

• Strange and quite cryptic syntax

• Difficult to grasp

The Idea of Binary Computing

Binary Number, Hexadecimal Number and the encoding of

characters

Introduction to C Programming L2.24

Binary Numbers

• A sequence of 1s and 0s can be interpreted as a decimal numbere.g. 101 = 1*22 +0*21 +1*20 = 5

• These type of number (0 and 1 represented) is called Binary Number

Introduction to C Programming L2.25

8 bits = 1 Byte

• Todays computer architectures are based on a 8 bits (= 1 Byte) approach.– E.g. one memory cell has nowadays 1 Byte

1 0 1 0 1 1 0 0 = 172

7 6 5 4 3 2 1 0

Introduction to C Programming L2.26

Hexadecimal Numbers (1)

• Counting on the foundation of 16 digits (0 – F)

• Reasonable in the context of the decomposition of binary number into blocks of 4 bits

decimal binary hex

0 0000 0

1 0001 1

2 0010 2

3 0011 3

4 0100 4

5 0101 5

6 0110 6

7 0111 7

8 1000 8

9 1001 9

10 1010 A

11 1011 B

12 1100 C

13 1101 D

14 1110 E

15 1111 F

Introduction to C Programming L2.27

Hexadecimal Numbers (2)

• Example:

0 1 1 0 1 1 1 0 1 1 1 0 0 1 1 1

6 E E 7

28391

binary

hex

decimal

8 bit (1 Byte) 8 bit (1 Byte)

16 bit

Introduction to C Programming L2.28

Exercise

• What is the number 01000111 in decimal notation?

• What is the number 156 in hexadecimal notation?

Introduction to C Programming L2.29

Characters and Numbers

• Using a Code Table numbers can be mapped to characters of some alphabet.Example (part of the ASCII table):

Character Code (decimal)

‘A’ 65

‘B’ 66

‘C’ 67

‘D’ 68

Introduction to C Programming L2.30

Sequences of Characters (Strings)

• Text is represented as a sequence of characters (numbers)

• Such sequences are called Strings

• Example:

H E L L O

72 69 76 76 79The Text "Hello" as sequence of characters (numbers)

Algorithms and Flowcharts

Binary Number, Hexadecimal Number and the encoding of

characters

Introduction to C Programming L2.32

Algorithms - Introduction

• In order to solve some problem, we need some description how to solve it.E.g. Cooking some eggs:How to cook eggs?1. Put some water into a pot2. Heat the water until it cooks3. Put the eggs into the water4. Wait 3 Minutes 5. Take the eggs out of the pot and cool them under floating

water

• Such a description of a problem solution is called an Algorithm

Introduction to C Programming L2.33

Algorithms described as Flowcharts

put water into pot

Heat water

Water cooking ?

Wait 3 Minutes

No

Yes

Water in pot ?

Yes

No

Take eggs out of pot

Cool the eggs

START

END

Our “Cook-eggs”-Algorithm as Flowchart:

Introduction to C Programming L2.34

Flowchart Atoms

• Statement – Some operation as e.g. “put the eggs into water”

put water into pot

Statement

Introduction to C Programming L2.35

Flowchart Atoms (cont.)

• Condition: Some yes/no question (condition). Depending on the answer Yes (True) or No (False) we go different ways.

ConditionNo

Yes

Introduction to C Programming L2.36

Combined Flowchart Constructs

• If/else – alternative: Construct where select on of two alternative sequences of statements, depending on the result of the condition

ConditionYes No

Statement

Statement

Statement

Statement

if side else side

Introduction to C Programming L2.37

Combined Flowchart Constructs (cont.)

• If/else example: (Here we do nothing on one side, but this is ok)

put water into pot

Water in pot ?

Yes

No

Introduction to C Programming L2.38

Combined Flowchart Constructs (cont.)

• Loop: Special construct with a Condition where one alternative of the Condition creates a circular flow

Statement n

Question

Statement 1

Introduction to C Programming L2.39

Combined Flowchart Constructs (cont.)

• Loop Example:

Heat water

Water not cooking ?YES

Introduction to C Programming L2.40

Algorithmic Description

• Solutions for all realistic Problems can be algorithmically described by combing the introduced elements:

–Statements

–If/else alternatives

–Loops

Introduction to C Programming L2.41

Variables

• Variables are named containers that store some type of data, e.g. a number.Example:

read x from user input

x 0

user input is 93

x 93

Variable x Value of x

User input is typically something typed on the keyboard

Introduction to C Programming L2.42

Variables in Flowcharts

• Example: Calculation of the maximum of two numbers:

read x from user input

read y from user input

x > y

set max to xset max to y

print max on output

YesNo

Introduction to C Programming L2.43

Exercise

• Take a piece of paper and draw a flowchart that:

1. reads the value of three variables x and y and z

2. calculates the minimum of the three variables read before