26
1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich [email protected]

1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

Embed Size (px)

DESCRIPTION

3 Code Block Between a pair of matching braces. For example, the body of a function int main() { int alpha = 10; // A block for if statement if (alpha > 3) { int n; cin >> n; alpha += 3; } return 0; }

Citation preview

Page 1: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

1

CS1430: Programming in C++

Section 2Instructor: Qi Yang

213 [email protected]

Page 2: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

2

Scope of Variables

The region of code where it is legal to reference (use) an identifier.

• Local Scope • Global Scope • Class Scope

Page 3: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

3

Code BlockBetween a pair of matching braces.For example, the body of a function

int main(){ int alpha = 10;

// A block for if statement if (alpha > 3) { int n; cin >> n; alpha += 3; } return 0;}

Page 4: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

4

Local Scope

The scope of an identifier declared inside a block extends from the point of declaration to the end of that block.

int main(){ int alpha = 10;

// A code block if (alpha > 3) { int num; cin >> num; alpha += num; }

cout << alpha; // OK? cout << num; // OK? // Run time error!

return 0;}

Page 5: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

5

Global Scope

The scope of an identifier declared outside all functions (and classes) extends from the point of declaration to the end of the entire source file.

Programming RulesNo global variables!

Page 6: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

6

Class Scope

Later this semester!

Page 7: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

7

Scope of Function Parameters

• Formal parameters Local scope Same as local variable Cannot reference it outside the function Receive values on function call • Actual parameters (no global variables) Local scope Cannot reference it inside the called function

Page 8: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

8

Examplefloat DoIt(int num, char op);

int main(){ int base; float result; char choice;

cout << “Enter a number: ”; cin >> base; cout << “C for Cube and S for Square Root: ”; cin >> choice;

while (choice != ‘C’ && choice != ‘S’) { cout << “C for Cube and S for Square Root: ”; cin >> choice; }

result = DoIt(base, choice);

cout << “The result: ” << result;

return 0;}

// ----------------------------// Precondition: op is ‘C’ or ‘S’// Postcondition: the cube of// num is computed when op is// ‘C’, and square root of num// is computed when op is ‘S’.// ------------------------------float DoIt(int num, char op){ if (op == ‘C’) result = pow(num, 3); else result = sqrt(num); return result;}

// What is wrong?// Result not declared in the // function!

Page 9: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

9

Precondition and Postconditionint DoIt(int num, char op);

int main(){ int base; float result; char choice;

cout << “Enter a number: ”; cin >> base; cout << “C for Cube and S for Square: ”; cin >> choice;

while (choice != ‘C’ && choice != ‘S’) { cout << “C for Cube and S for Square: ”; cin >> choice; }

result = DoIt(base, choice);

cout << “The result: ” << result;

return 0;}

// ------------------------------// Precondition: op is ‘C’ or ‘S’// Postcondition: the cube of// num is computed when op is// ‘C’, and square root of num// is computed when op is ‘S’.// ------------------------------int DoIt(int num, char op){ float result; if (op == ‘C’) result = pow(num, 3); else result = sqrt(num); return result;}

// The two variables // result have the same // name, but different!

Page 10: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

10

Parameter Names

• Meaningful names• Formal and actual parameters can have the

same name • They are different variables in different

scopes • Normally they have different names

Page 11: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

11

Lifetime of a Variable• Lifetime The period of time during program execution

when an identifier has memory allocated to it. • Automatic variables A variable for which memory is allocated and

deallocated when control enters and exits the block it is declared.

• Static variables A variable for which memory remains allocated

throughout the execution of the entire program.

Page 12: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

12

C++ Functions

Page 13: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

// The function computes and returns the gross pay // based on the pay rate and hours. Hours over // 40 will be paid 1.5 times the regular pay rate. float GrossPay(float payRate, float hours){ float total; if (hours > REG_HOURS) total = (hours - REG_HOURS)* OVER_TIME * payRate + REG_HOURS * payRate; else total = hours * payRate; return total;}// No input for payRate and hours// Parameters receive values on function call!

13

Page 14: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

Passing Parameters

const float REG_HOURS = 40.0;const float OVER_TIME = 1.5;

int main(){ float hours, rate, gross;

cin >> rate >> hours; // rate: 12.5 // hours: 50 gross = GrossPay(rate, hours);

// display result

return 0;}

float GrossPay(float payRate, float hours){ float total; if (hours > REG_HOURS) total = (hours - REG_HOURS) * OVER_TIME * payRate + REG_HOURS * payRate; else total = hours * payRate; return total;}

main() GrossPay()

Function call

Passing parameters

12.5 50

Returning to main()

With return value

14

Page 15: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

IN Parameter

The value of the actual parameter is passed into the function and assigned to the formal parameters.

float GrossPay(float payRate, float hours);

int main(){ ... cin >> rate >> hours; // rate: 12.5 // hours: 45.5 gross = GrossPay(rate, hours); ...}

15

Page 16: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

IN Parameters

int Largest(int num1, int num2, int num3);

cin >> score1 >> score2 >> score3;max = Largest(score1, score2, score3);

void DisplayResult(float avg, float max,

float min);

// Input scores and compute the highest, // lowest and average

DisplayResult(avg, highest, lowest);// The function does output, but IN parameters!

float sqrt(float x);16

Page 17: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

Function Parameters

In The value of the actual parameter is

passed into the function and assigned to the formal parameter.

Out The value of formal parameter is

passed out of the function and assigned to the actual parameter.

InOut Both In and Out.

17

Page 18: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

float GrossPay(float payRate, float hours);

int main(){ float hours, rate, gross;

// Input values in main() cin >> rate >> hours;

gross = GrossPay(rate, hours);

// display result

return 0;}

// Q: Can we use a function to input rate and hours?

18

Page 19: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

Write a function to input rate and hours

Function Prototype

Name: GetInput

Type: void Cannot pass two values using the return statement

Parameters: rate (payRate), hours (hoursWorked) type: float (Passing values back to calling function) (OUT parameters!) (&)

void GetInput(float& payRate, float& hoursWorked);

19

Page 20: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

float GrossPay(float payRate, float hours);void GetInput(float& payRate, float& hoursWorked);

int main(){ float hours, rate, gross;

// Call function GetInput() to get two values GetInput(rate, hours);

// Call function GrossPay to get one value gross = GrossPay(rate, hours);

// display result

return 0;}

20

Page 21: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

Function Definition// -------------------------------------------------// The function inputs payRate and hoursWorked and// pass both values back to the calling function.// Parameters: (out, out)// -------------------------------------------------void GetInput(float& payRate, float& hoursWorked){ cout << "Enter pay rate: "; cin >> payRate; cout << "Enter hours: "; cin >> hoursWorked;

return;}

// The function does input with prompt, but OUT parameters!// How can it pass two values back?// Out Parameters: &// Statement return can pass only one value back!

21

Page 22: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

// -------------------------------------------------// The function computes and returns the gross pay // based on the pay rate and hours. Hours over // 40 will be paid 1.5 times the regular pay rate. // Parameters: (in, in)// -------------------------------------------------float GrossPay(float payRate, float hours){ if (hours > REG_HOURS) payRate = (hours - REG_HOURS) * OVER_TIME * payRate + REG_HOURS * payRate; else payRate = hours * payRate; return payRate;}// No local variable// payRate is used to store the result

22

Page 23: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

Reference and Value Parametersfloat GrossPay(float payRate, float hours);void GetInput(float& payRate, float& hoursWorked);

Value parameter: No & The value of actual parameter is passed to the formal parameter

Reference Parameter: & The address of actual parameter is passed to the formal parameter

Does the actual parameter change its value when the corresponding formal parameter changes its value?

Value parameter (no &): NOReference parameter (&): YES

23

Page 24: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

Value and Reference Parameters

const float REG_HOURS = 40.0;const float OVER_TIME = 1.5;

int main(){ float hours, rate, gross;

GetInput(rate, hours);

gross = GrossPay(rate, hours);

// display result

return 0;}

float GrossPay(float payRate, float hours){ if (hours > REG_HOURS) payRate = (hours - REG_HOURS) * OVER_TIME * payRate + REG_HOURS * payRate; else payRate = hours * payRate; return payRate;}

main()

GetInput()

void GetInput(float& payRate, float& hoursWorked){ cout << "Enter pay rate: "; cin >> payRate; cout << "Enter hours: "; cin >> hoursWorked;

return;}

GrossPay()Passing parameters

12.5 50

Passing parameters

Addresses of rate and hours

Return control

With value

Return control

24

Page 25: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

Tracing FunctionsInput: 10 45

GetInput(rate, hours); // Reference parametersgross = GrossPay(rate, hours);// Value parameters

main() GetInput() GrossPay() hours rate gross & payRate & hoursWorked hours payRate ? ? ? ? ? ? ? Addr of Addr of rate hours 10.0 45.0 45.0 10.0 475.0 475.0

25

Page 26: 1 CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich

Schedule• Program 2 Grace Time: 10 PM, Friday Style! Name conversion

• Quiz 4-2 Due 10 pm Thursday

• (Lab5: next week)

• Program 3– Optional groups– Two students each group– Sign group by Friday

26