Lecture#2
Lecture#2
Outline
4.1 Introduction
4.2 Arrays
4.3 Declaring Arrays
4.4 Examples Using Arrays
4.5 Passing Arrays to Functions
4.6 Sorting Arrays
4.7 Case Study: Computing Mean, Median and Mode Using Arrays
4.8 Searching Arrays: Linear Search and Binary Search
4.9 Multiple-Subscripted Arrays
1
4.1 Introduction
Arrays
◦ Structures of related data items
◦ Static entity (same size throughout program)
A few types
◦ Pointer-based arrays (C-like)
◦ Arrays as objects (C++)
2
4.2 Arrays
Array
◦ Consecutive group of memory locations
◦ Same name and type (int, char, etc.)
To refer to an element
◦ Specify array name and position number (index)
◦ Format: arrayname[ position number ]
◦ First element at position 0
N-element array c
c[ 0 ], c[ 1 ] … c[ n - 1 ]
◦ Nth element as position N-1
3
4.2 Arrays
Array elements like other variables
◦ Assignment, printing for an integer array c
c[ 0 ] = 3;
cout << c[ 0 ];
4
4.2 Arrays
Name of array (Note
that all elements of
this array have the
same name, c)
c[0] -45
c[1] 6
c[2] 0
c[3] 72
c[4] 1543
c[5] -89
c[6] 0
c[7] 62
c[8] -3
c[9] 1
c[10] 6453
c[11] 78
5
4.3 Declaring Arrays
When declaring arrays, specify
◦ Name
◦ Type of array
◦ Any data type
◦ Number of elements
◦ type arrayName[ arraySize ];
int c[ 10 ]; // array of 10 integers
float d[ 3284 ]; // array of 3284 floats
6
4.4 Examples Using Arrays
Initializing arrays
◦ For loop
◦ Set each element
◦ Initializer list
◦ Specify each element when array declared
int n[ 5 ] = { 1, 2, 3, 4, 5 };
◦ If not enough initializers, rightmost elements 0
◦ If too many syntax error
◦ To set every element to same value
int n[ 5 ] = { 0 };
◦ If array size omitted, initializers determine size
int n[] = { 1, 2, 3, 4, 5 };
◦ 5 initializers, therefore 5 element array
7
1 // FIG. 4.3: FIG04_03.CPP
2 // INITIALIZING AN ARRAY.
3 #INCLUDE <IOSTREAM>
5 USING STD::COUT;
6 USING STD::ENDL;
8 #INCLUDE <IOMANIP>
10 USING STD::SETW;
25
8
26 RETURN 0; // INDICATES SUCCESSFUL TERMINATION
27
28 } // END MAIN
Element Value
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
9
1 // FIG. 4.4: FIG04_04.CPP
2 / / I N I T I A L I Z I N G A N A R R AY W I T H A D E C L A R AT I O N .
3 #INCLUDE <IOSTREAM>
5 U S I N G S T D : : C O U T;
6 USING STD::ENDL;
8 #INCLUDE <IOMANIP>
10 U S I N G S T D : : S E T W;
12 INT MAIN()
Note the use of the initializer
13 {
list.
14 / / U S E I N I T I A L I Z E R L I S T T O I N I T I A L I Z E A R R AY N
15 INT N[ 10 ] = { 32, 27, 64, 18, 95, 14, 90, 70, 60, 37 };
17 C O U T < < " E L E M E N T " < < S E T W ( 1 3 ) < < " VA LU E " < < E N D L ;
19 / / O U T P U T C O N T E N T S O F A R R AY N I N TA B U L A R F O R M AT
23 R E T U R N 0 ; / / I N D I C AT E S S U C C E S S F U L T E R M I N AT I O N
25 } // END MAIN
10
fig04_04.cpp
output (1 of 1)
ELEMENT VA L U E
0 32
1 27
2 64
3 18
4 95
5 14
6 90
7 70
8 60
9 37 11
4.4 Examples Using Arrays
Array size
◦ Can be specified with constant variable (const)
◦ const int size = 20;
◦ Constants cannot be changed
◦ Constants must be initialized when declared
◦ Also called named constants or read-only variables
12
1 / / F IG. 4. 5: F IG04_05.CPP
2 / / I N I T I A L I Z E A R R AY S T O T H E E V E N I N T E G E R S F R O M 2 T O 2 0 .
3 #INCLUDE <IOSTREAM>
5 U S I N G S T D : : C O U T;
6 USING STD::ENDL;
8 #INCLUDE <IOMANIP>
10 U S I N G S T D : : S E T W;
12 INT MAIN()
19
size using a const variable.
F O R ( I N T I = 0 ; I < A R R AY S I Z E ; I + + ) / / S E T T H E V A L U E S
We can change arraySize,
20 S[ I ] = 2 + 2 * I; and all the loops will still
22 C O U T < < " E L E M E N T " < < S E T W ( 1 3 ) < < " V A L U E " < < Ework
N D L ; (otherwise, we’d have to
update every loop in the
program).
13
24 / / O U T P U T C O N T E N T S O F A R R AY S I N TA B U L A R F O R M AT
25 F O R ( I N T J = 0 ; J < A R R AY S I Z E ; J + + )
26 COUT << SETW( 7 ) << J << SETW( 13 ) << S[ J ] <<
ENDL;
27
28 R E T U R N 0 ; / / I N D I C AT E S S U C C E S S F U L T E R M I N AT I O N
29
30 } // END MAIN
Element Value
0 2
1 4
2 6
3 8
4 10
5 12
6 14
7 16
8 18
9 20
14
1 // FIG. 4.6: FIG04_06.CPP
3 #INCLUDE <IOSTREAM>
5 USING STD::COUT;
6 USING STD::ENDL;
8 INT MAIN()
Proper initialization of
9 { const variable.
10 CONST INT X = 7; // INITIALIZED CONSTANT VARIABLE
11
14
16
17 } // END MAIN
15
1 / / F I G . 4 . 7 : F I G 0 4 _ 0 7 .C P P
2 / / A C O N S T O B J E C T M U S T B E I N I T I A L I Z E D.
3
4 INT MAIN()
5 { Uninitialized const results
in a syntax error. Attempting
6 C O N S T I N T X ; / / E R R O R : XtoM B E const
U S T the
modify I N I T I AisL I Z E D
another error.
7
8 X = 7; / / E R R O R : C A N N OT M O D I F Y A C O N S T
VA R I A B L E
9
10 RETURN 0; / / I N D I C AT E S S U C C E S S F U L
T E R M I N AT I O N
11
12 } // END MAIN
d:\cpphtp4_examples\ch04\Fig04_07.cpp(6) : error C2734: 'x' :
const object must be initialized if not extern
d:\cpphtp4_examples\ch04\Fig04_07.cpp(8) : error C2166:
l-value specifies const object
16
1 / / F IG. 4.8: F IG04_08.CPP
2 / / C O M P U T E T H E S U M O F T H E E L E M E N T S O F T H E A R R AY.
3 #INCLUDE <IOSTREAM>
5 U S I N G S T D : : C O U T;
6 USING STD::ENDL;
8 INT MAIN()
9 {
10 C O N S T I N T A R R AY S I Z E = 1 0 ;
12 I N T A [ A R R AY S I Z E ] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 1 0 } ;
14 I N T T O TA L = 0 ;
16 / / S U M C O N T E N T S O F A R R AY A
17 F O R ( I N T I = 0 ; I < A R R AY S I Z E ; I + + )
18 T O TA L + = A [ I ] ;
22 R E T U R N 0 ; / / I N D I C AT E S S U C C E S S F U L T E R M I N AT I O N
24 } // END MAIN
17
1 / / F IG. 4.9: F IG04_09.CPP
3 #INCLUDE <IOSTREAM>
5 U S I N G S T D : : C O U T;
6 USING STD::ENDL;
8 #INCLUDE <IOMANIP>
10 U S I N G S T D : : S E T W;
12 INT MAIN()
13 {
14 C O N S T I N T A R R AY S I Z E = 1 0 ;
15 I N T N [ A R R AY S I Z E ] = { 1 9 , 3 , 1 5 , 7 , 1 1 , 9 , 1 3 , 5 , 1 7 , 1 } ;
17 C O U T < < " E LEMENT" < < S E T W( 1 3 ) < < " VALUE"
20 / / F O R E A C H E L E M E N T O F A R R AY N , O U T P U T A B A R I N H I S T O G R A M
21 F O R ( I N T I = 0 ; I < A R R AY S I Z E ; I + + ) {
18
27
28 C O U T < < E N D L ; / / S TA R T N E X T L I N E O F O U T P U T
29
31
32 R E T U R N 0 ; / / I N D I C AT E S S U C C E S S F U L T E R M I N AT I O N
33
34 } // END MAIN
3 #INCLUDE <IOSTREAM>
5 U S I N G S T D : : C O U T;
6 USING STD::ENDL;
8 #INCLUDE <IOMANIP>
10 U S I N G S T D : : S E T W;
20
26
27 C O U T < < " FA C E " < < S E T W ( 1 3 ) < < " F R EQ U E N C Y " < < E N D L ;
28
29 / / O U T P U T F R E Q U E N C Y E L E M E N T S 1 - 6 I N TA B U L A R F O R M AT
30 F O R ( I N T F A C E = 1 ; F A C E < A R R AY S I Z E ; F A C E + + )
33
34 R E T U R N 0 ; / / I N D I C AT E S S U C C E S S F U L T E R M I N AT I O N
35
36 } // END MAIN
Face Frequency
1 1003
2 1004
3 999
4 980
5 1013
6 1001
21
4.4 Examples Using Arrays
Strings (more in ch. 5)
◦ Arrays of characters
◦ All strings end with null ('\0')
◦ Examples
◦ char string1[] = "hello";
◦ Null character implicitly added
◦ string1 has 6 elements
◦ char string1[] = { 'h', 'e', 'l', 'l', 'o', '\0’ };
◦ Subscripting is the same
String1[ 0 ] is 'h'
string1[ 2 ] is 'l'
22
4.5 Passing Arrays to
Functions
Specify name without brackets
◦ To pass array myArray to myFunction
int myArray[ 24 ];
myFunction( myArray, 24 );
◦ Array size usually passed, but not required
◦ Useful to iterate over all elements
23
4.5 Passing Arrays to
Functions
Arrays passed-by-reference
◦ Functions can modify original array data
◦ Value of name of array is address of first element
◦ Function knows where the array is stored
◦ Can change original memory locations
24
4.5 Passing Arrays to
Functions
Functions taking arrays
◦ Function prototype
◦ void modifyArray( int b[], int arraySize );
◦ void modifyArray( int [], int );
◦ Names optional in prototype
◦ Both take an integer array and a single integer
◦ No need for array size between brackets
◦ Ignored by compiler
◦ If declare array parameter as const
◦ Cannot be modified (compiler error)
◦ void doNotModify( const int [] );
25
fig04_14.cpp
(1 of 3) Syntax for accepting an array
in parameter list.
3 #INCLUDE <IOSTREAM>
5 USING STD::COUT;
6 USING STD::ENDL;
8 #INCLUDE <IOMANIP>
10 USING STD::SETW; 26
26
fig04_14.cpp
to function. Arrays are
29 // PASS ARRAY A TO MODIFYARRAY BY REFERENCE
passed-by-reference.
30 MODIFYARRAY( A, ARRAYSIZE );
31
(2 of 3)
32 COUT << "THE VALUES OF THE MODIFIED ARRAY ARE:\N";
33
37
38 // OUTPUT VALUE OF A[ 3 ]
44 MODIFYELEMENT( A[ 3 ] );
45
46 // OUTPUT VALUE OF A[ 3 ]
48
50
51 } // END MAIN
27
52
56
57
{
fig04_14.cpp
VOID MODIFYARRAY( INT B[], INT SIZEOFARRAY )
(3 of 3)
58 FOR ( INT K = 0; K < SIZEOFARRAY; K++ )
59 B[ K ] *= 2;
60
62
Individual array elements are
63 // IN FUNCTION MODIFYELEMENT, "E" IS A LOCAL COPY OF
passed by value, and the
64 // ARRAY ELEMENT A[ 3 ] PASSED FROM MAIN
originals cannot be changed.
65 VOID MODIFYELEMENT( INT E )
66 {
67 // MULTIPLY PARAMETER BY 2
70
28
EFFECTS OF PASSING ENTIRE ARRAY BY REFERENCE:
0 1 2 3 4
fig04_14.cpp
THE VALUES OF THE MODIFIED ARRAY ARE:
0 2 4 6 8
output (1 of 1)
EFFECTS OF PASSING ARRAY ELEMENT BY VALUE:
VALUE IN MODIFYELEMENT IS 12
29
1 // FIG. 4.15: FIG04_15.CPP
3 #INCLUDE <IOSTREAM>
6
fig04_15.cpp
USING STD::COUT;
USING STD::ENDL;
Array parameter declared as
const. Array cannot be
modified, even though it is
(1 of 2)
7
10 INT MAIN()
11 {
13
14 TRYTOMODIFYARRAY( A );
15
16 COUT << A[ 0 ] << ' ' << A[ 1 ] << ' ' << A[ 2 ] << '\N';
17
19
20 } // END MAIN
21
30
22 // IN FUNCTION TRYTOMODIFYARRAY, "B" CANNOT BE USED
25
26
27
{
fig04_15.cpp
B[ 0 ] /= 2;
B[ 1 ] /= 2;
// ERROR
// ERROR
output (1 of 1)
28 B[ 2 ] /= 2; // ERROR
29
31
4.6 Sorting Arrays
Sorting data
◦ Important computing application
◦ Virtually every organization must sort some data
◦ Massive amounts must be sorted
32
4.6 Sorting Arrays
Example:
◦ Go left to right, and exchange elements as necessary
◦ One pass for each element
◦ Original: 3 4 2 7 6
◦ Pass 1: 3 2 4 6 7 (elements exchanged)
◦ Pass 2: 2 3 4 6 7
◦ Pass 3: 2 3 4 6 7 (no changes needed)
◦ Pass 4: 2 3 4 6 7
◦ Pass 5: 2 3 4 6 7
◦ Small elements "bubble" to the top (like 2 in this example)
33
4.6 Sorting Arrays
Swapping variables
int x = 3, y = 4;
y = x;
x = y;
What happened?
◦ Both x and y are 3!
◦ Need a temporary variable
Solution
int x = 3, y = 4, temp = 0;
temp = x; // temp gets 3
x = y; // x gets 4
y = temp; // y gets 3
34
1 // FIG. 4.16: FIG04_16.CPP
3 #INCLUDE <IOSTREAM>
6
fig04_16.cpp
USING STD::COUT;
USING STD::ENDL;
(1 of 3)
7
8 #INCLUDE <IOMANIP>
10 USING STD::SETW;
11
12 INT MAIN()
13 {
17
19
23
35
24 // BUBBLE SORT
28
29
fig04_16.cpp
// LOOP TO CONTROL NUMBER OF COMPARISONS PER PASS
(2 of 3)
30
36 A[ J + 1 ] = HOLD;
Remember the need of a temp
37
variable.
38 } // END IF
39
36
40 COUT << "\NDATA ITEMS IN ASCENDING ORDER\N";
41
43
44
45
fig04_16.cpp
FOR ( INT K = 0; K < ARRAYSIZE; K++ )
output (1 of 1)
46 COUT << ENDL;
47
49
50 } // END MAIN
37
4.7 Case Study: Computing Mean,
Median and Mode Using Arrays
Mean
◦ Average (sum/number of elements)
Median
◦ Number in middle of sorted list
◦ 1, 2, 3, 4, 5 (3 is median)
◦ If even number of elements, take average of middle two
Mode
◦ Number that occurs most often
◦ 1, 1, 1, 2, 3, 3, 4, 5 (1 is mode)
38
fig04_17.cpp
(1 of 8)
4 #INCLUDE <IOSTREAM>
6 USING STD::COUT;
7 USING STD::ENDL;
8 USING STD::FIXED;
9 USING STD::SHOWPOINT;
10 39
fig04_17.cpp
(2 of 8)
27
30 { 6, 7, 8, 9, 8, 7, 8, 9, 8, 9,
31 7, 8, 9, 5, 9, 8, 7, 8, 7, 8,
32 6, 7, 8, 9, 3, 9, 8, 7, 8, 7,
33 7, 8, 9, 8, 9, 8, 9, 7, 8, 9,
34 6, 7, 8, 7, 8, 7, 9, 8, 9, 2,
35 7, 8, 9, 8, 9, 8, 9, 7, 5, 3, 40
fig04_17.cpp
(3 of 8)
We cast to a double to get
decimal points for the average
50 // CALCULATE AVERAGE OF ALL RESPONSE VALUES
(instead of an integer).
51 VOID MEAN( CONST INT ANSWER[], INT ARRAYSIZE )
52 {
53 INT TOTAL = 0;
54
56
59 TOTAL += ANSWER[ I ]; 41
75 // SORT ARRAY AND DETERMINE MEDIAN ELEMENT'S VALUE
77 {
78
79
80
fig04_17.cpp
COUT << "\N********\N MEDIAN\N********\N"
(4 of 8)
81 PRINTARRAY( ANSWER, SIZE ); // OUTPUT UNSORTED ARRAY
82 program modular.
83 BUBBLESORT( ANSWER, SIZE ); // SORT ARRAY
84
87
93
95
42
96 // DETERMINE MOST FREQUENT RESPONSE
98 {
99
100
101
fig04_17.cpp
INT LARGEST = 0;
INT MODEVALUE = 0;
// REPRESENTS LARGEST FREQUENCY
(5 of 8)
102 COUT << "\N********\N MODE\N********\N";
103
106 FREQ[ I ] = 0;
107
111
117
43
118 // OUTPUT RESULTS
121
122
123
fig04_17.cpp
<< FREQ[ RATING ] << " ";
(6 of 8)
124 IF ( FREQ[ RATING ] > LARGEST ) {
127
128 } // END IF
129
133
135
137
140 << "FOR THIS RUN THE MODE IS " << MODEVALUE
141 << " WHICH OCCURRED " << LARGEST << " TIMES." << ENDL;
142
44
144
147
148
149
{
fig04_17.cpp
INT HOLD; // TEMPORARY LOCATION USED TO SWAP ELEMENTS
(7 of 8)
150 // LOOP TO CONTROL NUMBER OF PASSES
152
155
157 IF ( A[ J ] > A[ J + 1 ] ) {
158 HOLD = A[ J ];
159 A[ J ] = A[ J + 1 ];
160 A[ J + 1 ] = HOLD;
161
162 } // END IF
163
165
45
166 // OUTPUT ARRAY CONTENTS (20 VALUES PER ROW)
168 {
169
170
171
fig04_17.cpp
FOR ( INT I = 0; I < SIZE; I++ ) {
(8 of 8)
172 COUT << ENDL;
173
175
177
46
********
MEAN
********
fig04_17.cpp
THE MEAN IS THE AVERAGE VALUE OF THE DATA
output (1 of 2)
OF DATA ITEMS (99). THE MEAN VALUE FOR
********
MEDIAN
********
6 7 8 9 8 7 8 9 8 9 7 8 9 5 9 8 7 8 7 8
6 7 8 9 3 9 8 7 8 7 7 8 9 8 9 8 9 7 8 9
6 7 8 7 8 7 9 8 9 2 7 8 9 8 9 8 9 7 5 3
5 6 7 2 5 3 9 4 6 4 7 8 9 6 8 7 8 9 7 8
7 4 4 2 5 3 8 7 5 6 4 5 6 1 6 5 7 8 7
1 2 2 2 3 3 3 3 4 4 4 4 4 5 5 5 5 5 5 5
5 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7
7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
MODE
********
RESPONSE
fig04_17.cpp
FREQUENCY HISTOGRAM
1 1 2 2
output (2 of 2)
5 0 5 0 5
1 1 *
2 3 ***
3 4 ****
4 5 *****
5 8 ********
6 9 *********
7 23 ***********************
8 27 ***************************
9 19 *******************
48
4.8 Searching Arrays: Linear
Search and Binary Search
Search array for a key value
Linear search
◦ Compare each element of array with key value
◦ Start at one end, go to other
◦ Useful for small and unsorted arrays
◦ Inefficient
◦ If search key not present, examines every element
49
4.8 Searching Arrays: Linear
Search and Binary Search
Binary search
◦ Only used with sorted arrays
◦ Compare middle element with key
◦ If equal, match found
◦ If key < middle
◦ Repeat search on first half of array
◦ If key > middle
◦ Repeat search on last half
◦ Very fast
◦ At most N steps, where 2 > # of elements
◦ 30 element array takes at most 5 steps N
2 > 30
50
fig04_19.cpp Takes array, search key, and
array size.
(1 of 2)
3 #INCLUDE <IOSTREAM>
5 USING STD::COUT;
6 USING STD::CIN;
7 USING STD::ENDL;
10 51
26
27
28
fig04_19.cpp
// DISPLAY RESULTS
IF ( ELEMENT != -1 )
COUT << "FOUND VALUE IN ELEMENT " << ELEMENT << ENDL;
29
30
31
32
ELSE
(2 of 2)
COUT << "VALUE NOT FOUND" << ENDL;
33
34 } // END MAIN
35
40 {
42
45
47
52
ENTER INTEGER SEARCH KEY: 36
fig04_19.cpp
output (1 of 1)
53
1 // FIG. 4.20: FIG04_20.CPP
3 #INCLUDE <IOSTREAM>
6
fig04_20.cpp
USING STD::COUT;
USING STD::CIN;
(1 of 6)
7 USING STD::ENDL;
9 #INCLUDE <IOMANIP>
10
11 USING STD::SETW;
12
13 // FUNCTION PROTOTYPES
17
18 INT MAIN()
19 {
23
25 A[ I ] = 2 * I;
26
54
27 COUT << "ENTER A NUMBER BETWEEN 0 AND 28: ";
29
30
31
32
fig04_20.cpp
PRINTHEADER( ARRAYSIZE );
(2 of 6)
33 INT RESULT =
35
36 // DISPLAY RESULTS
37 IF ( RESULT != -1 )
38 COUT << '\N' << KEY << " FOUND IN ARRAY ELEMENT "
40 ELSE
41 COUT << '\N' << KEY << " NOT FOUND" << ENDL;
42
44
45 } // END MAIN
46
55
47 // FUNCTION TO PERFORM BINARY SEARCH OF AN ARRAY
50
51
52
{
fig04_20.cpp
INT MIDDLE;
(3 of 6)
53 // LOOP UNTIL LOW SUBSCRIPT IS GREATER THAN HIGH SUBSCRIPT
58
61
56
62 // IF SEARCHKEY MATCHES MIDDLE ELEMENT, RETURN MIDDLE
64 RETURN MIDDLE;
65
66
67
ELSE
(4 of 6)
68 // IF SEARCHKEY LESS THAN MIDDLE ELEMENT,
72
Loop sets low, middle and
73 // IF SEARCHKEY GREATER THAN MIDDLE ELEMENT,
high dynamically. If searching
74 // SET NEW LOW ELEMENT
the high end, the new low is
75 ELSE
the element above the middle.
76 LOW = MIDDLE + 1; // SEARCH HIGH END OF ARRAY
77 }
78
80
57
82
85
86
87
{
fig04_20.cpp
COUT << "\NSUBSCRIPTS:\N";
(5 of 6)
88 // OUTPUT COLUMN HEADS
91
93
97
99
101
58
fig04_20.cpp
(6 of 6)
104 VOID PRINTROW( CONST INT B[], INT LOW, INT MID,
106 {
109
SUBSCRIPTS:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
------------------------------------------------------------
0 2 4 6 8 10 12 14* 16 18 20 22 24 26 28
0 2 4 6* 8 10 12
SUBSCRIPTS:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
------------------------------------------------------------
0 2 4 6 8 10 12 14* 16 18 20 22 24 26 28
0 2 4 6* 8 10 12
8 10* 12
8*
fig04_20.cpp
8 FOUND IN ARRAY ELEMENT 4
output (2 of 2)
61
4.9 Multiple-Subscripted
Arrays
Multiple subscripts
◦ a[ i ][ j ]
◦ Tables with rows and columns
◦ Specify row, then column
◦ “Array of arrays”
◦ a[0] is an array of 4 elements
◦ a[0][0] is the first element of that array
Row 1 a[ 1 ][ 0 ] a[ 1 ][ 1 ] a[ 1 ][ 2 ] a[ 1 ][ 3 ]
Row 2 a[ 2 ][ 0 ] a[ 2 ][ 1 ] a[ 2 ][ 2 ] a[ 2 ][ 3 ]
Column subscript
Array name
Row subscript
62
4.9 Multiple-Subscripted
Arrays
To initialize
◦ Default of 0
1 2
◦ Initializers grouped by row in braces
3 4
int b[ 2 ][ 2 ] = { { 1,Row
2 0}, { 3,
Row41 } };
1 0
3 4
int b[ 2 ][ 2 ] = { { 1 }, { 3, 4 } };
63
4.9 Multiple-Subscripted
Arrays
1 0
Referenced like normal
cout << b[ 0 ][ 1 ]; 3 4
◦ Outputs 0
◦ Cannot reference using commas
cout << b[ 0, 1 ];
◦ Syntax error
Function prototypes
◦ Must specify sizes of subscripts
◦ First subscript not necessary, as with single-scripted arrays
◦ void printArray( int [][ 3 ] );
64
1 // FIG. 4.22: FIG04_22.CPP
3 #INCLUDE <IOSTREAM>
6
fig04_22.cpp
USING STD::COUT;
USING STD::ENDL;
Note the format of the
prototype.
(1 of 2)
7
11 {
first row and then the second.
12 INT ARRAY1[ 2 ][ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 } };
13 INT ARRAY2[ 2 ][ 3 ] = { 1, 2, 3, 4, 5 };
14 INT ARRAY3[ 2 ][ 3 ] = { { 1, 2 }, { 4 } };
15
17 PRINTARRAY( ARRAY1 );
18
20 PRINTARRAY( ARRAY2 );
21
23 PRINTARRAY( ARRAY3 );
24
26
27 } // END MAIN
65
28
fig04_22.cpp
iterate through arrays. Nested
31 {
loops are helpful with
32 FOR ( INT I = 0; I < 2; I++ ) { // FOR EACH ROW
multiple-subscripted arrays.
33
output (1 of 1)
34 FOR ( INT J = 0; J < 3; J++ ) // OUTPUT COLUMN VALUES
36
38
40
66
4.9 Multiple-Subscripted
Arrays
Next: program showing initialization
◦ After, program to keep track of students grades
◦ Multiple-subscripted array (table)
◦ Rows are students
◦ Columns are grades Quiz1 Quiz2
Student0 95 85
Student1 89 80
67
1 // FIG. 4.23: FIG04_23.CPP
3 #INCLUDE <IOSTREAM>
6
fig04_23.cpp
USING STD::COUT;
USING STD::ENDL;
(1 of 6)
7 USING STD::FIXED;
8 USING STD::LEFT;
10 #INCLUDE <IOMANIP>
11
12 USING STD::SETW;
13 USING STD::SETPRECISION;
14
17
18 // FUNCTION PROTOTYPES
23
68
24 INT MAIN()
25 {
27
28
29
fig04_23.cpp
INT STUDENTGRADES[ STUDENTS ][ EXAMS ] =
(2 of 6)
30 { 70, 90, 86, 81 } };
31
35
41
43
69
44 // CALCULATE AVERAGE GRADE FOR EACH STUDENT
46 COUT << "THE AVERAGE GRADE FOR STUDENT " << PERSON
47
48
49
fig04_23.cpp
<< " IS "
<< ENDL;
(3 of 6)
50
59
61
63
65 LOWGRADE = GRADES[ I ][ J ];
66
67 RETURN LOWGRADE;
68
70
70
73
74
75
{
fig04_23.cpp
INT HIGHGRADE = 0; // INITIALIZE TO LOWEST POSSIBLE GRADE
(4 of 6)
76 FOR ( INT I = 0; I < PUPILS; I++ )
77
79
81 HIGHGRADE = GRADES[ I ][ J ];
82
83 RETURN HIGHGRADE;
84
86
71
87 // DETERMINE AVERAGE GRADE FOR PARTICULAR STUDENT
89 {
90
91
92
fig04_23.cpp
INT TOTAL = 0;
(5 of 6)
93 FOR ( INT I = 0; I < TESTS; I++ )
94 TOTAL += SETOFGRADES[ I ];
95
97
72
99
101 VOID PRINTARRAY( INT GRADES[][ EXAMS ], INT PUPILS, INT TESTS )
102
103
104
{
fig04_23.cpp
// SET LEFT JUSTIFICATION AND OUTPUT COLUMN HEADS
(6 of 6)
105
108
111
115
117
73
THE ARRAY IS:
STUDENTGRADES[0] 77 68 86 73
fig04_23.cpp
STUDENTGRADES[1] 96
STUDENTGRADES[2] 70
87
90
89
86
78
81
output (1 of 1)
LOWEST GRADE: 68
HIGHEST GRADE: 96
74