36
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 9: Arrays in C/C++ Problem Solving, Abstraction, and Design using C++ 5e by Frank L. Friedman and Elliot B. Koffman

Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley

Chapter 9:Arrays in C/C++

Problem Solving, Abstraction, and Design using C++ 5e

by Frank L. Friedman and Elliot B. Koffman

Page 2: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 2

The Array Data Type• Array elements have a common name

– The array as a whole is referenced through the common name

• Array elements are of the same type — the base type

• Individual elements of the array are referenced by sub-scripting the group name– element’s relative position used, beginning with 0

• Array stored in consecutive memory locations

Page 3: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 3

Additional Array Details

• Subscripts are denoted as expressions within brackets: [ ]

• Base type can be any fundamental, library-defined, or programmer -defined type

• The index type is integer and the index range must be 0 ... n-1, for array of size n

Page 4: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 4

Array Declaration

element-type array-name [array-size];

Type of all the values in the array

Name of the entire collection of values

Integer expression indicating number of elements in the array

Page 5: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 5

Example 1

element-type array-name [array-size] = {initialization-list};

float x[8] = {16.0, 12.0, 6.0, 8.0, 2.5, 12.0, 14.0, -54.5};

16.0 12.0 6.0 8.0 2.5 12.0 14.0 -54.5

Page 6: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 6

Example 1 (con’t)

cout << x[0];x[3] = 25.0;sum = x[0] + x[1];sum += x[2];x[3] += 1.0;x[2] = x[0] + x[1];

Page 7: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 7

Example 2

const int NUM_EMP = 10;bool onVacation[NUM_EMP];int vacationDays[NUM_EMP];enum day {sunday, monday, tuesday, wednesday,

thursday, friday, saturday};day dayOff[NUM_EMP];float plantHours[7];

Page 8: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 8

Figure 9.3 Arrays onVacation, vacationDays, and dayOff

Page 9: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 9

Array Initialization• List of initial values enclosed in braces ({ })

following assignment operator (=)• Values from initialization list are assigned in order

to array elements• Length of initialization list cannot exceed size of

the array• If too few values, value assigned is system

dependent• Size of array can be automatically set to number

of initializing values using empty brackets ([ ])

Page 10: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 10

Array Subscripts• Enclosed in brackets ([ ])• Indicates which element is referenced by

position• Array subscript value is different than

array element value• Subscript can be an expression of any

integral type• To be valid, subscript must be a value

between 0 and one less than the array size

Page 11: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 11

Sequential Access to Array Elements

• Random Access– Access elements is any order

• Sequential Access– Process elements in sequential order starting

with the first

Page 12: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 12

Example of Sequential Access

int cube[10];for (int i = 0; i < 10; i++)

cube[i] = i * i * i;

Page 13: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 13

Strings and Arrays of Characters

• string object uses an array of char• Can reference individual character of a

string object in different ways– name[ i ]– name.at( i )

• Other member functions of string class– message.length( i )

Page 14: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 14

Array Arguments to Functions

• Use <, ==, >, +, -, etc. to test and modify array elements individually

• Can pass array elements to functionsexchange (s[3], s[5]);

Page 15: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 15

Listing 9.3 Function to exchange the contents of two floating-point memory locations

Page 16: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 16

Passing an Array Argument

• Arrays are always passed by reference• Pass entire array to a function by writing

just its name (no subscripts or brackets) in the argument list of the function call

• In function definition and prototype, user empty brackets ([ ]) to identify array

• Use keyword const to indicate that array argument cannot be changed by function

Page 17: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17

Example 1

const int MAX_SIZE = 5;float x[MAX_SIZE ];float y[MAX_SIZE ];. . .if (sameArray(x, y, MAX_SIZE))

cout << “Arrays are identical.” << endl;else

cout << “Arrays are different.” << endl;

Page 18: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 18

Listing 9.4 Function sameArray

Page 19: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 19

Example 2

const int MAX_SIZE = 5;float x[MAX_SIZE ] = {1.8, 2.2, 3.4, 5.1, 6.7};float y[MAX_SIZE ] = {2.0, 4.5, 1.3, 4.0, 5.5};float z[MAX_SIZE];. . .addArray(MAX_SIZE, x, y, z);

Page 20: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 20

Listing 9.5 Function addArray

// File: addArray.cpp// Stores the sum of a[i] and b[i] in c[i]

// Sums pairs of array elements with subscripts ranging from 0// to size – 1// Pre: a[i] and b[i] are defined (0 <= i <= size-1)// Post: c[i] = a[i] + b[i] (0 <= i <= size-1)

void addArray(int size, // IN: the size of the arraysconst float a[], // IN: the first arrayconst float b[], // IN: the second arrayfloat c[]) // OUT: result array

{// Add corresponding elements of a and b and store in cfor (int i = 0; i < size; i++)c[i] = a[i] + c[i];

}

Page 21: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 21

Reading Part of an Array

• Sometimes it is difficult to know how many elements will be in an array– 150 students in one section– 200 students in another section

• Always allocate enough space for largest possible amount needed

• Remember to start reading with index [0]• Must keep track of how many elements used

Page 22: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 22

Listing 9.7 Function readScoresFile

Page 23: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 23

Listing 9.7 Function readScoresFile (continued)

Page 24: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 24

Searching and Sorting Arrays

• Two common array processing problems– Searching– Sorting

• E.g.– look for a particular score, highest score, etc.– rearrange an array of scores in increasing order

Page 25: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 25

Finding the Smallest Value

1. Assume the first element is smallest so far and save its subscript

2. For each array element after the first one2.1 If the current element < the smallest so far

2.1.1 Save the subscript of current element

Page 26: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 26

Listing 9.8 Function findIndexOfMin

Page 27: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 27

Listing 9.8 Function findIndexOfMin (continued)

Page 28: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 28

Array Search - Interface• Input arguments

– int items[ ] // array to search– int size // number of items in array– int target // item to find

• Output arguments– none

• Returns– if found, subscript of first location in array– if not found, -1

Page 29: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 29

Array Search - Algorithm

1. For each array element1.1 If the current element contains the target1.2 Return the subscript of the current element

2. Return -1.

Page 30: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 30

Listing 9.9 The function linSearch

Page 31: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 31

Sorting an Array in Ascending Order

• Many programs execute more efficiently if data is in order before processing starts

• Possible to order in either ascending or descending arrangement

• Selection sort just one of many ways to do this– reuses previous components of search and swap

operations

Page 32: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 32

Selection Sort

• Input argumentsfloat items[ ] // array to sortint n // number of items to sort

• Output argumentsint items [ ] // original array sorted

• Local variablesint i // subscript of first elementint minSub // subscript of smallest item

Page 33: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 33

Selection Sort - Algorithm

1. Starting with the first item in the array (subscript 0) and ending with the next-to-last-item:1.1 Set i equal to the subscript of the first item in the subarray to be processed in the next steps1.2 Find the subscript (minSub) of the smallest item in the subarray with subscripts ranging from i through n-11.3 Exchange the smallest item found in step 1.2 with item i

Page 34: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 34

Listing 9.10 Function selSort

Page 35: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 35

String as Arrays of Characters

• Declaring and initializingchar name[ ] = “Jackson”; // array size 8

orchar name[8] = “Jackson”; // 7 characters

• Last character stored is ‘\0’ to denote the end of the string in a character array

Page 36: Chapter 9: Arrays in C/C++ · Strings and Arrays of Characters • string object uses an array of char • Can reference individual character of a string object in different ways

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 36

Reading and Writing Character Arrays

• Can read or write entire character array at once

cin >> name;cout << name << endl;

• Can read or write each character of of array– must account for null character at end of array