0% found this document useful (0 votes)
49 views

Arrays: Mirza Mohammad Lutfe Elahi

The document discusses arrays in C programming. It defines arrays as collections of data items of the same type that can be referenced with a single name. The key points are that arrays must be declared with a type, size, and can be initialized. Individual elements in an array are accessed via indexes from 0 to size-1. Loops are commonly used to sequentially access array elements. Arrays can also be passed as arguments to functions.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
49 views

Arrays: Mirza Mohammad Lutfe Elahi

The document discusses arrays in C programming. It defines arrays as collections of data items of the same type that can be referenced with a single name. The key points are that arrays must be declared with a type, size, and can be initialized. Individual elements in an array are accessed via indexes from 0 to size-1. Loops are commonly used to sequentially access array elements. Arrays can also be passed as arguments to functions.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 37

Arrays

Mirza Mohammad Lutfe Elahi


CSE 115 Programming Language I ECE@NSU
2

Outline
• Declaring, Initializing, and Indexing Arrays

• Using Loops for Sequential Array Access

• Using Array Elements as Function Arguments

• Array Arguments

• Partially Filled Arrays

CSE 115 Programming Language I ECE@NSU


3

What is an Array?
• Scalar data types, such as int, store a single value
• Sometimes, we need to store a collection of values
• An array is a collection of data items, such that:
– All data values are of the same type (such as int)
– Are referenced by the same array name
• Individual cells in an array are called array elements
• An array is called a data structure
– Because it stores many data items under the same name
• Example: using an array to store exam scores
CSE 115 Programming Language I ECE@NSU
4

Declaring an Array
• To declare an array, we must declare:
– The array name
– The type of array element
– The number of array elements
• Example: double x[8];
• Associate 8 elements with array name x

CSE 115 Programming Language I ECE@NSU


5

Initializing Arrays
• You can declare a variable without initialization
double average; /* Not initialized */
• You can also declare a variable with initialization
int sum = 0; /* Initialized to 0 */
• Similarly, you can declare arrays without initialization
double x[20]; /* Not initialized */
• You can also declare an array and initialize it
int prime[5] = {2, 3, 5, 7, 11};
• No need to specify the array size when initializing it
int prime[] = {2, 3, 5, 7, 11};

CSE 115 Programming Language I ECE@NSU


6

Visualizing an Array in Memory


/* Array A has 6 elements */
int A[] = {9, 5, -3, 10, 27, -8};

Memory
Array A Addresses
All arrays start at index 0 0 9 342900
1 5 342904
Array Index 2 -3 342908
Array Element 3 10 342912
4 27 342916
5 -8 342920

CSE 115 Programming Language I ECE@NSU


7

Array Indexing
double x[8];
• Each element of x stores a value of type double
• The elements are indexed starting with index 0
– An array with 8 elements is indexed from 0 to 7

• x[0] refers to 0th element (first element) of array x


• x[1] is the next element in the array, and so on
• The integer enclosed in brackets is the array index
• The index must range from zero to array size – 1

CSE 115 Programming Language I ECE@NSU


8

Array Indexing (Cont’d)


• An array index is also called a subscript
• Used to access individual array elements
• Examples of array indexing:
x[2] = 6.0; /* index 2 */
y = x[i+1]; /* index i+1 */
• Array index should be any expression of type int
• A valid index must range from 0 to array size – 1
• C compiler does not provide array bound checking
• It is your job to ensure that each index is valid

CSE 115 Programming Language I ECE@NSU


9

Statements that Manipulate Array x

CSE 115 Programming Language I ECE@NSU


10

Arrays of Characters
• You can declare and initialize a char array as
follows:
char vowels[] = {'A','E','I','O','U'};
• You can also use a string to initialize a char array:
char string[] = "This is a string";
• It is better to use a named constant as the array size:
#define SIZE 100
. . .
char name[SIZE]; /* Not initialized */
• You can declare arrays and variables on same line:
char name[SIZE], answer;
CSE 115 Programming Language I ECE@NSU
11

Array Input/Output
#include<stdio.h>
#define SIZE 5 /* array size */
int main(void) {
double x[SIZE];
int i;

for(i = 0; i < SIZE; i++) {


printf("Enter element[%d]: ", i);
scanf("%lf", &x[i]);
}
printf("\n");
for(i = 0; i < SIZE; i++)
printf("Element[%d] is %.2f\n", i, x[i]);

return 0;
}
CSE 115 Programming Language I ECE@NSU
12

Computing Sum and Sum of Squares


/* We use a for loop to traverse an
* array sequentially and accumulate
* the sum and the sum of squares
*/

double sum = 0;
double sum_sqr = 0;

for(i = 0; i < SIZE; i++) {


sum += x[i];
sum_sqr += x[i] * x[i];
}

CSE 115 Programming Language I ECE@NSU


13

Computing Standard Deviation


• The mean is computed as: sum / SIZE

• The Standard Deviation is computed as follows:

CSE 115 Programming Language I ECE@NSU


/* Program that computes the mean and standard deviation*/ 14

#include <stdio.h>
#include <math.h>
#define SIZE 8 /* array size */

int main(void) {
double x[SIZE], mean, st_dev, sum=0, sum_sqr=0;
int i;

/* Input the data */


printf("Enter %d numbers separated by blanks\n> ", SIZE);
for(i = 0; i < SIZE; i++) scanf("%lf", &x[i]);

/* Compute the sum and the sum of the squares */


for(i = 0; i < SIZE; i++) {
sum += x[i];
sum_sqr += x[i] * x[i];
}
CSE 115 Programming Language I ECE@NSU
15
/* Compute and print the mean and standard deviation */
mean = sum / SIZE ;
st_dev = sqrt(sum_sqr / SIZE – mean * mean);
printf("\nThe mean is %.2f.\n", mean);
printf("The standard deviation is %.2f.\n", st_dev);

/* Display the difference between an item and the mean */


printf("\nTable of differences ");
printf("\nBetween data values and the mean\n\n");
printf("Index Item Difference\n");
for(i = 0; i < SIZE; i++)
printf("%3d %9.2f %9.2f\n", i, x[i], x[i] - mean);

return 0;
}

CSE 115 Programming Language I ECE@NSU


16

Sample Run…

CSE 115 Programming Language I ECE@NSU


17

Array Elements as Function Arguments


• From the last example:
x[i] is used as an actual argument to printf
printf("%3d %9.2f %9.2f\n", i, x[i], x[i]-
mean);

• The value of x[i] is passed to printf


• Similarly, &x[i] was an actual argument to scanf
scanf("%lf", &x[i]);

• The address &x[i] is passed to scanf


• Array elements are treated as scalar variables
CSE 115 Programming Language I ECE@NSU
18

Array Elements as Function Arguments


• Suppose that we have a function do_it defined as:
void do_it(double arg_1, double *arg2_p, double
*arg3_p) {
*arg2_p = …
*arg3_p = …
}
• Let x be an array of double elements declared as:
double x[8] = {16.0, 12.0, 6.0, 8.0, 2.5, 12.0,
14.0, -54.6};
• We can call the function do_it as follows:
do_it(x[0], &x[1], &x[2]);
• It will change the values of x[1] and x[2]
CSE 115 Programming Language I ECE@NSU
19

do_it(x[0], &x[1], &x[2]);

CSE 115 Programming Language I ECE@NSU


20

Array Arguments
• Besides passing array elements to functions, we can
write functions that have arrays as arguments
• Such functions can compute some or all of the array
elements
• Unlike scalar variables where we have the option of
passing either the value or address of a variable to a
function, C only passes the address of an array to a
function array argument
• An array cannot be passed by value to a function

CSE 115 Programming Language I ECE@NSU


21

Array Arguments

• list[] parameter does not specify the array size


• We can pass an array of any size to the function
CSE 115 Programming Language I ECE@NSU
22

Calling Function fill_array


• To call fill_array, you must pass 3 arguments:
– Actual array name to fill
– Number of array elements to fill
– Value to store in array
• Examples of calling fill_array:
/* fill 5 elements of x with 1 */
fill_array(x, 5, 1);

/* fill 10 elements of y with num */


fill_array(y, 10, num);

CSE 115 Programming Language I ECE@NSU


23

fill_array(x, 5, 1)

The address of array x


is passed to list

CSE 115 Programming Language I ECE@NSU


24

An Array Argument is a Pointer


• Equivalent declarations of function fill_array
void fill_array(int list[], int n, int val);
void fill_array(int *list, int n, int val);
The first declaration is more readable and preferable

• Equivalent calls to function fill_array


fill_array(x, 5, num);
fill_array(&x[0], 5, num);
The first call is more readable and preferable

CSE 115 Programming Language I ECE@NSU


25

Arrays as Input Arguments


The const keyword indicates that list[] is an input
parameter that cannot be modified by the function

/* Returns the max in an array of n elements */


/* Pre: First n elements of list are defined */
double get_max(const double list[], int n) {
int i;
double max = list[0];
for(i = 1; i < n; ++i)
if(list[i] > max) max = list[i];
return max;
}

CSE 115 Programming Language I ECE@NSU


26

Compute Average of Array Elements


/* Returns the average of n array elements */
/* Pre: First n elements of list are defined */
double get_average(const double list[], int n)
{
int i;
double sum = 0; The const keyword indicates
for(i = 0; i < n; ++i) that list[] is an input
sum += list[i]; parameter that cannot be
return (sum/n); modified by the function
}

CSE 115 Programming Language I ECE@NSU


27

Returning an Array Result

• In C, the return type of a function cannot be an array


• Thus, to return an array as result from a function, we can only
have the array as an output parameter
• Recall that output parameters for a function are declared as
pointers
• An array parameter is also a pointer
• Thus, an array parameter is an output parameter, unless the
const keyword is used

CSE 115 Programming Language I ECE@NSU


28

Example: read_array
/* read n doubles from the keyboard */
/* return an array of n doubles */
void read_array(double list[], int n) {
int i;
printf("Enter %d real numbers\n", n);
printf("Separated by spaces or newlines\n");
printf("\n>");
for(i = 0; i < n; ++i)
scanf("%lf", &list[i]);
}

CSE 115 Programming Language I ECE@NSU


29
/* Program to compute max and average of an array */
#include <stdio.h>
#define SIZE 8
void read_array(double list[], int n);
double get_max(const double list[], int n);
double get_average(const double list[], int n);
int main(void) {
double array[SIZE];
read_array(array, SIZE);
double max = get_max(array, SIZE);
double ave = get_average(array, SIZE);
printf("\nmax = %.2f, average = %.2f\n", max, ave);

return 0;
}
CSE 115 Programming Language I ECE@NSU
30

Sample Run…

CSE 115 Programming Language I ECE@NSU


31

Function to Add Two Arrays


/* Add n corresponding elements of arrays
a[] and b[], storing result in array sum[] */
void
add_arrays(const double a[], /* input array */
const double b[], /* input array */
double sum[], /* output array */
int n) /* n elements */
{
int i;
for(i = 0; i < n; i++)
sum[i] = a[i] + b[i];
}

CSE 115 Programming Language I ECE@NSU


32

Partially Filled Arrays


• The format of array declaration requires that we
specify the array size at the point of declaration
• Moreover, once we declare the array, its size cannot
be changed. The array is a fixed size data structure
• There are many programming situations where we do
not really know the array size before hand
• For example, suppose we want to read test scores
from a data file and store them into an array, we do
not know how many test scores exist in the file.
• So, what should be the array size?

CSE 115 Programming Language I ECE@NSU


33

Partially Filled Arrays (Cont’d)


• One solution is to declare the array big enough so that
it can work in the worst-case scenario
• For the test scores data file, we can safely assume that
no section is more than 50 students
• We define the SIZE of the array to be 50
• However, in this case, the array will be partially filled
and we cannot use SIZE to process it
• We must keep track of the actual number of elements
in the array using another variable

CSE 115 Programming Language I ECE@NSU


34

Read an Array from a File


#include <stdio.h>
#define SIZE 50 /* maximum array size */

int read_file(const char filename[], double list[]);


void print_array(const double list[], int n);

int main(void) {
double array[SIZE];
int count = read_file("scores.txt", array);
printf("Count of array elements = %d\n", count);
print_array(array, count);

return 0;
}
CSE 115 Programming Language I ECE@NSU
int read_file(const char filename[], double list[]) { 35

int count = 0;
FILE *infile = fopen(filename, "r");
if (infile == NULL) { /* failed to open file */
printf("Cannot open file %s\n", filename);
return 0; /* exit function */
}
int status = fscanf(infile, "%lf", &list[count]);
while(status == 1) { /* successful read */
count++; /* count element */
if(count == SIZE)
break; /* exit while */
status = fscanf(infile, "%lf", &list[count]);
}
fclose(infile);
return count; /* number of elements read */
}

CSE 115 Programming Language I ECE@NSU


36

Function to Print an Array


void print_array(const double list[], int n)
{
int i;

for (i = 0; i < n; i++)


printf("Element[%d] = %.2f\n", i, list[i]);
}

CSE 115 Programming Language I ECE@NSU


37

Sample Run

Cannot read
abc as double
CSE 115 Programming Language I ECE@NSU

You might also like