CSE 5311 Fundamentals of Computer Science

33
CSE 5311 Fundamenta ls of Computer Science C++ Programming

description

CSE 5311 Fundamentals of Computer Science. C++ Programming. C++ Profile. C++ was developed by Bjarne Stroustrup in the early 80’s at Bell Labs. C++ is a high-level language hybrid language. It supports both object-oriented programming and procedural-based (structured) programming. - PowerPoint PPT Presentation

Transcript of CSE 5311 Fundamentals of Computer Science

Page 1: CSE 5311 Fundamentals of Computer Science

CSE 5311 Fundamentals of Computer

Science

C++ Programming

Page 2: CSE 5311 Fundamentals of Computer Science

C++ Profile C++ was developed by Bjarne Stroustrup in the early

80’s at Bell Labs. C++ is a high-level language hybrid language.

It supports both object-oriented programming and procedural-based (structured) programming.

C++ grew out of C, which contributed to its rapid growth in popularity.

C++ is a compiled language (as opposed to an interpreted language such as visual basic or Java).

C is a subset of C++. A C++ compiler can compile any C program.

Page 3: CSE 5311 Fundamentals of Computer Science

The C++ Compilation

Process

C++ Source Code

C++ Compiler Object file

Linker

Executable

C Library

C++ Library

ProgrammerLibrary

Page 4: CSE 5311 Fundamentals of Computer Science

C/C++ Primitive Data Types

Primitive data types have a predefined meaning. The compiler has an intuitive understanding

of the attributes of each primitive type. Primitive data types can be broadly

categorized as either character or numeric. Numeric data types can be categorized as

either integer or floating point.

Page 5: CSE 5311 Fundamentals of Computer Science

C/C++ Primitive Data Types Integer data types

unsigned long int long int unsigned int int unsigned short int short int

Signed integer values are stored in 2’s complement format

Page 6: CSE 5311 Fundamentals of Computer Science

C/C++ Primitive Data Types Floating point data types

long double double float

Floating point values are usually stored in IEEE format

Page 7: CSE 5311 Fundamentals of Computer Science

IEEE Floating Point Formats

The sign is represented by a single bit. A 1 bit represents a negative number and a 0 bit represents a positive numberIEEE Short Real exponents are stored as a 8-bit unsigned integer with a bias of 127 decimal (01111111 binary)

Page 8: CSE 5311 Fundamentals of Computer Science

2’s Complement Representation Most modern computers use 2’s complement representation

to store signed integers. The high-order bit of an integer stored in 2’s complement

representation will contain a 0 if the number is positive and a 1 if the number is negative.

By taking the 2’s complement of an integer you are effectively multiplying the number by -1.

The 2’s complement of a positive integer results in its negative representation.

The 2’s complement of a negative integer results in its absolute value.

Page 9: CSE 5311 Fundamentals of Computer Science

2’s Complement Representation Taking the 2’s complement of an integer is a 2-step

process. Step 1 - Flip all the bits in the number (0’s become 1’s

and 1’s become 0’s). This is also known as taking the 1’s complement of the number.

Step 2 - Add 1 to the 1’s complement representation of the number).

• In the process of adding 1, any carry out of the high-order position is lost. This is normal and not a problem in the world of computer arithmetic.

Page 10: CSE 5311 Fundamentals of Computer Science

2’s Complement Representation Assume we are storing a positive 9 in a one-byte (8-bit

field) using 2’s complement representation. In binary it would appear as 00001001.

Now, take the 2’s complement of the number. Step 1 - flip the bits. 11110110 Step 2 - add 1. + 1 11110111

The result, 11110111, is the 2’s complement representation of -9.

If we were to take the 2’s complement of 11110111 (-9), we would get 00001001 (+9).

Page 11: CSE 5311 Fundamentals of Computer Science

2’s Complement Arithmetic To confirm that 11110111 really does represent -9, we

should be able to add it to +9 and get a result of 0. Remember we are doing binary addition: 1 + 1 = 10.

11110111 (-9) + 00001001 (+9)

00000000 (0) As pointed out earlier, a carry out of the high-order position

is lost.

Page 12: CSE 5311 Fundamentals of Computer Science

C/C++ Primitive Data Types

Character data types char Note: Neither C or C++ has a primitive

string type. Character values are stored in ASCII

Page 13: CSE 5311 Fundamentals of Computer Science

C/C++ Primitive Data Types One of the frustrating things about the C/C++ primitive

data types is that the number of bytes allocated to each type may vary from platform to platform.

This can be a major hindrance to portability. Use the sizeof operator to find out the storage

allocation for a particular platform. For example

• cout << sizeof(int);• cout << sizeof(float);• cout << sizeof(double);

Page 14: CSE 5311 Fundamentals of Computer Science

C++ OperatorsOperator Associativity Type( ) [ ] left to right (highest pres.)++ -- + - ! & * right to left unary* / % left to right multiplicative+ - left to right additive<< >> left to right shift = = != left to right equality&& || left to right logical and/or?: right to left conditional= += -= *= /= %= right to left assignment, left to right comma

Page 15: CSE 5311 Fundamentals of Computer Science

Program Structure

A C program is made up of a main function and optionally one more additional functions that work together to carry out some task.

A C++ program is made up of a main function and optionally one or more additional functions and/or classes that work together to carry out some task.

Page 16: CSE 5311 Fundamentals of Computer Science

Function Structure

returnType functionName (parameter list) { // function body } Neither C or C++ allow function definitions to be

nested within other function definitions. However, blocks { } may be nested within other blocks.

Every C/C++ statement must be terminated by a semicolon.

Page 17: CSE 5311 Fundamentals of Computer Science

Our First C++ Program#include <iostream.h> //This program prompts the user for two integers and then//displays the sum of the two integers.void main( ) { int value1, value2; cout << “Input an integer and press return: “; cin >> value1; cout << “Input another integer and press return: “; cin >> value2; cout << “The sum of “ << value1 << “ and “ << value2 << “ is “ << value1 + value2 << endl;}

Page 18: CSE 5311 Fundamentals of Computer Science

Our First C++ Program Program components:

iostream.h - header file main - function name value1 and value2 - user defined variables.

• Variables are symbolic names that refer to areas of memory reserved for holding data.

cout - output stream object. << - stream insertion member function defined in cout. cin - input stream object. >> - stream extraction member function defined in cin. ; (semicolon) - statement terminator. Value1 + value2 - arithmetic expression. { } - block delimiters.

Page 19: CSE 5311 Fundamentals of Computer Science

Control Structures Control structures determine the flow of control

through a program. Flow of control refers the the order that

instructions within a program are executed. Control structures may be categorized as

either sequential structures, selection structures or repetition structures.

Page 20: CSE 5311 Fundamentals of Computer Science

Control Structures Sequential structures

Represented by the absence of any specific selection or repetition structure.

Selection structures if if/else switch ?: (conditional operator - same as if/else)

Repetition structures while do/while for

Page 21: CSE 5311 Fundamentals of Computer Science

Selection Structures if if (conditional test) { statement(s) } if/else if (conditional test) { statement(s) } else { statement(s) }

Page 22: CSE 5311 Fundamentals of Computer Science

Repetition Structures

while while (conditional test) { statement(s) } do/while do { statement(s) while (conditional test); Note: braces { } may be omitted from around the body

of a selection or repetition structure if the body only contains a single statement.

Page 23: CSE 5311 Fundamentals of Computer Science

The For Loop Of the repetition structures, the for loop is the most

complex.Initialize control variables Modify control variables

Conditional test

for (expression1; expression2; expression3) statement; The for and while loops test for entry to the loop body

at the top of the loop. The do/while tests for re-entry at the bottom of the loop.

Page 24: CSE 5311 Fundamentals of Computer Science

Conditional Expressions

Conditional expressions are primarily composed of relational and logical operators. For example:

if (a < b && c != j) { statement(s) } while (c = = k) { statement(s) } do { statement(s) } while (b >= (j+n)); for (int i = 0; i < 100; i++) { statement(s) }

Page 25: CSE 5311 Fundamentals of Computer Science

Conditional ExpressionsWatch out!!! - A common mistake is to use the assignment

operator (=) where where the equality operator (= =) was intended. For example:

if (j = 100) { } This is syntactically correct but logically wrong.

100 will be assigned to j then the value in j will be used to determine if the condition is true or false. A value of 0 means false; a non-zero value means true.

Page 26: CSE 5311 Fundamentals of Computer Science

Pass By Value#include <iostream.h>int cubeByValue(int); //function prototype

void main() {int number = 5;cout << ”Number equals "

<< number << endl;number = cubeByValue(number);cout << ”Number now equals "

<< number << endl;}int cubeByValue(int n)

{ return n * n * n; }

5

5

number

n

Page 27: CSE 5311 Fundamentals of Computer Science

Pass By Reference

#include <iostream.h>void cubeByReference(int &); void main() {

int number = 5;cout << ”Number equals "

<< number << endl;cubeByReference(number);cout << ”Number now equals "

<< number << endl;}void cubeByReference(int &n)

{ n = n * n * n; }

5number

n(n is a constant pointer)

Page 28: CSE 5311 Fundamentals of Computer Science

Pass By Reference with Pointer#include <iostream.h>void cubeByPointer(int *);

//function prototypemain() {

int number = 5;cout << ”Number equals "

<< number << endl;cubeByPointer(&number);cout << ”Number now equals "

<< number << endl;}void cubeByPointer(int *n)

{ *n = *n * *n * *n; }

5number

n

(n is a non-constant pointer)

Page 29: CSE 5311 Fundamentals of Computer Science

Pointers Pointers are a major component of C/C++

programming. Many persons consider pointers the most difficult

aspect of C/C++ to master. A pointer is a variable that contains an address. There are two operators that are commonly used when

working with pointers. * - the indirection operator which also doubles as the

multiplication operator. & - the address operator.

Page 30: CSE 5311 Fundamentals of Computer Science

Pointer Examples

#include <iostream.h>void main() {int i = 20;int *iptr = &i;cout << i << endl; //20cout << &i << endl; //0x8f47fff2cout << iptr << endl; //0x8f47fff2cout << &iptr << endl; //0x8f47fff0cout << *iptr << endl; //20

}

Page 31: CSE 5311 Fundamentals of Computer Science

Pointer Examples

void main() {int *iptr, iarr[5] = {10,20,30,40,50};iptr = iarr;cout << iarr << endl; //0x8f47ffe6cout << iptr << endl; //0x8f47ffe6cout << iarr[0] << endl; //10cout << *iptr << endl; //10cout << *iarr << endl; //10cout << iptr[0] << endl; //10cout << iarr[2] << endl; //30iptr += 2;cout << *iptr << endl; //30cout << *(iptr-1) << endl;//20

}

Page 32: CSE 5311 Fundamentals of Computer Science

Pointer Examplesvoid main() {

char *cptr, *csptr = "abcde";char carr[6] = "abcde";cptr = carr;cout << carr << endl; //abcdecout << cptr << endl; //abcdecout << carr[0] << endl; //acout << *cptr << endl; //acout << *carr << endl; //acout << cptr[0] << endl; //acout << carr[2] << endl; //ccptr += 2;cout << *cptr << endl; //ccout << *(cptr - 1) << endl; //b

}

Page 33: CSE 5311 Fundamentals of Computer Science

Pointer Examplesvoid main() {

char sarr[3][10] = {"Fred", "Susan", "Mary"};cout << sarr << endl; //0x8f43ffbacout << *sarr << endl; //Fredcout << *(sarr + 1) << endl; //Susancout << sarr[2] << endl; //Marycout << sarr[0][1] << endl; //r

char *parr[3] = {"Fred", "Susan", "Mary"};cout << parr << endl; //0x8f43ffd8cout << *parr << endl; //Fredcout << *(parr + 1) << endl; //Susancout << parr[2] << endl; //Marycout << parr[0][1] << endl; //r

}