comp2004 programming practice sam holden department of computer science university of sydney

33
COMP2004 Programming Practice Sam Holden Department of Computer Science University of Sydney

Post on 21-Dec-2015

213 views

Category:

Documents


0 download

TRANSCRIPT

COMP2004Programming Practice

Sam Holden

Department of Computer Science

University of Sydney

About Me

• Room: Madsen G61• Email: [email protected]

• Consultation: 20 mins before each lecture

• Email to arrange an appointment during consultation times

Textbook

• C++ Primer by Lippman 3rd Edition

• The C++ Programming Language by Stroustrup 3rd Edition

• Thinking in C++ by Eckel 2nd Edition

Course Information

• 'Practice of Programming' so expect a some programming

• Development Tools

• Library Usage

Lecture Schedule

• The Basics of C++

• Basics of development under Unix

• The less basic Basics of C++

Assessment

• Assignment Zero 0%

• Assignment One10%

• Assignment Two 10%

• Assignment Three 20%

• Final Exam 60%

Assignment Policy

• Machine and Hand marked

• Individual work, no groups or copying

• Follow output instructions exactly

• Must work on department software

• No late assignments accepted without a medical certificate

The C++ Language

• C++ is what we will be using

• C will not be covered (except the parts which are part of C++)

C++ at Basser

• Using the GNU C++ compiler

• Usage:– g++ -Wall -g -o hello hello.cc

• hello.cc is the C++ file

• The executable will be hello • -g adds debugging information • -Wall turns on all warnings

A Simple C++ Program

• C++ starts in a special function called main #include <iostream>

int main() {

std::cout << "They killed Kenny\n";

}

• The above is a complete C++ program

Variables

• C++ is strongly typed

• Every variable has a type and must be declared

#include <iostream>int main() {int result = 5 + 4;std::cout<<result<<std::endl;

}

Some Built-in Types Type Description Example

char A character char c = ‘a’

int Integralnumber

int i = 10;

double Floating pointnumber

double d = 1.5

bool Boolean value Bool b = true

Constants

• Constants are declared with the keyword const

const int life = 42;const double pi = 3.1415926536;

• Constants are just like variables (except not variable)

Operators

• C++ has a lot of operators

• There are math operators like +, - , *, /, %

• Comparison operators like ==, >=, <, >, !=

• Logical operators like ||, &&, !

• Bitwise operators like &, |, ~

More Operators

• a++ and ++a mean a =a+1 (sort of, see your text book for the real story)

• a-- and --a are similar

• a+=10 means a=a+10

• There are a?=b versions for all the math operators

Enumerated Types • An enumeration is a type that can hold a set of

values

• They act lie integer types

• They are very useful for anything with a restricted domain

enum day_of_week { SUN, MON, TUE, WED, THU, FRI, SAT };

day_of_week day;day = WED;day = day_of_week(5); //set to FRI

Writing Functions

• A function looks like this:

double half(int num) {double result;result = num/2.0;return result;

}

• half returns a double

• It takes a single int argument

Writing Functions II

• If a function doesn’t return anything it is declared as returning void

void display_square(int num){std::cout << num*num;

}

If Statements

• C++ uses an if statement for selection

int main() {char c;std::cin >> c;if (c == 'y') {

std::cout << "You typed a y";}

}

If Statements II

• There is also an elseif (c == 'y')std::cout << "You typed a y";

elsestd::cout "You didn't type a y";

• Can join an else and an if:if (c == 'y') std::cout <<"You typed a y";

else if (c == 'n')std::cout <<"You typed an n";

elsestd::cout <<"Only y/n are accepted";

Switch Statements

• A replacement for multiple ifs:

char c;…switch (c) {case 'y' : std::cout << ”A y";

break;case 'n' : std::cout << ”A n";

break;default : std::cout << "y/n only";

} • Works with any integral type

Switch Statements II

• Cases fall thorugh by default

char c;…switch (c) {case 'y' : std::cout << ”A y";

case 'n' : std::cout << ”A n";

default : std::cout << "y/n only";}

• The above wrong

For Statements

for(int i=0;i<10;i++)

std::cout << "i is " << i

<< std::endl;

• Initialisation : int i=0

• Test : i<10

• Increment : i++

• Body :std::cout << ...

While Statements

int i=0;

while(i<10) {

std::cout << "i is " << i

<< std::endl; i++;

}

• Test : i<10

• Body :between {}s

Do Statements

int i=0;

do {

std::cout << "i is " << i

<< std::endl; i++;

} while (i<10);

• Similar to while

• Always executes one

• Not often used

Arrays

• Combine well with for int scores[5] = { 1,2,3,4,5};for (int i=0;i<5;i++)std::cout "Score ” << i << " : ”

<<scores[i];

• First element has index zero

• Arrays do not keep track of their length

• Do not automatically grow

Pointers

• A hard concept int i = 27;int* p = &i;*p=26;std::cout << i << endl;std::cout << p << endl;std::cout << *p << endl;

• & takes the address of a variable

• *p dereferences p

• source of many bugs

Pointers and Arrays

• closely related in C++

• Can traverse an array with pointerschar s[] ={'h','e','l','l','o','\0'};for (int i=0;s[i]<5;i++)cout << s[i] << endl;

for (char *p = s;*p!=0;p++)cout << *p << end;

• A nul terminated array of chars is a C-style string

• Note we assigned an array to a pointer and incremented a pointer

C-Style Strings

• Double quoted strings are C-Style strings

• We can initialise arrays with them

• We can assign them to pointers to char

• We can print them with std::cout

char s1[] = "hello";const char *s2 = "hello”;std::cout << s1 << s2;

Pointers and Const

• A pointer has two parts– the pointer

– what it points to

• Which one does const apply to?

• Both are allowed

Pointers and Const Example

char s[] = "hello";char s2[] = "bye-bye";

const char* pc = s;pc[1] = 'a'; //errorpc = s2; //ok

char* const cp = s;cp[1] = 'a'; //okcp = s2; //error

const char* const cpc = s;cpc[1] = 'a'; //errorcpc = s2; //error

References• An alternative name for an item

• Must always reference a valid item

• Can not switch items

• Must be initialised when declared

• Like a pointer that automatically gets dereferenced

int i = 42;int &r = i;r++;std::cout << i << std::endl;

Pointers, References and Const

• References are often used as arguments

• Pointers are as well

• If the argument is not modified it should be const

char* strcpy(char* dest, const char* src) {char *result = dest;while(*dest++ = *src++)

/*nothing*/;return dest;

}