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

CMPE 150: Introduction To Computing: Arrays

This document discusses arrays in C programming and provides examples of how to use arrays. Arrays allow storing multiple values of the same type and accessing elements using indexes. Key points include: arrays have a fixed size defined at compile-time; elements are initialized to zero by default for global arrays; and arrays can be initialized during definition but not after. Examples demonstrate using arrays to store student grades, calculate averages and variances, create histograms, and check for symmetry. The document also notes a limitation is that arrays have a fixed size, so pointers are needed for dynamic sizes.

Uploaded by

akirank1
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
49 views

CMPE 150: Introduction To Computing: Arrays

This document discusses arrays in C programming and provides examples of how to use arrays. Arrays allow storing multiple values of the same type and accessing elements using indexes. Key points include: arrays have a fixed size defined at compile-time; elements are initialized to zero by default for global arrays; and arrays can be initialized during definition but not after. Examples demonstrate using arrays to store student grades, calculate averages and variances, create histograms, and check for symmetry. The document also notes a limitation is that arrays have a fixed size, so pointers are needed for dynamic sizes.

Uploaded by

akirank1
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 29

CMPE 150: Introduction

to Computing

Arrays
Motivation
• You may need to define many variables of
the same type.
– Defining so many variables one by one is
cumbersome.
• Probably you would like to execute similar
statements on these variables.
– You wouldn't want to write the same
statements over and over for each variable.

TT - Spring'08 CMPE150: Introduction to Computing 2


Example #1
• Write a program that reads the grades
of 350 students in CMPE150 and finds
the average.

TT - Spring'08 CMPE150: Introduction to Computing 3


Example #1 (cont'd)

• Soln:
#include <stdio.h>

int main()
{ int i, sum=0, grade; float avg;

for (i=0; i<350; i++) This was simple.


{ scanf("%d", &grade); Since we don't need to
store all values, taking
sum += grade; the sum is enough. So, we
} don't need an array.
avg = sum/350.0;
printf("Average = %f\n",avg);
return 0;
}

TT - Spring'08 CMPE150: Introduction to Computing 4


Example #2
• Write a program that reads the grades
of 350 students in CMPE150 and finds
those that are below the average.

TT - Spring'08 CMPE150: Introduction to Computing 5


Example #2 (cont'd)

• Soln #1:
#include <stdio.h>
int main()
{ int i, sum=0, grade; float avg;
for (i=0; i<350; i++)
{ scanf("%d", &grade); WRONG!
sum += grade; "grade" contains the
} score of the last student.
avg = sum/350.0; You have already lost the
previous 349 scores.
for (i=0; i<350; i++)
if (grade<avg)
printf("Below avg: %d\n",grade);
return 0;
}

TT - Spring'08 CMPE150: Introduction to Computing 6


Example #2 (cont'd)
• Soln #2:
#include <stdio.h>
You cannot skip these
int main()
{ int i,sum,gr0,gr1,gr2,...,gr349; with "..."
float avg; You have to repeat each
scanf("%d", &gr0); of these statements 350
scanf("%d", &gr1); times.
scanf("%d", &gr2);
...
scanf("%d", &gr349);
sum = gr0+gr1+gr2+...+gr349;
avg = sum/350.0;
if (gr0<350) What is still wrong here?
printf("Below avg: %d\n",gr0);
if (gr1<350)
printf("Below avg: %d\n",gr1);
if (gr2<350)
printf("Below avg: %d\n",gr2);
...
if (gr349<350)
printf("Below avg: %d\n",gr349);
return 0;
}

TT - Spring'08 CMPE150: Introduction to Computing 7


Example #2
Defines an array consisting of 350
integer values.
(cont'd) In the definition, the value in the
brackets is the number of
• Soln #3: elements (size).
#include <stdio.h>
int main()
{ int i, sum=0, grade[350]; float avg;
This means the ith
for (i=0; i<350; i++) element of the array.
{ scanf("%d", &grade[i]); Here, the value in the
sum += grade[i]; brackets is the index,
} not the size.
avg = sum/350.0;
for (i=0; i<350; i++)
if (grade[i]<avg)
printf("Below avg: %d\n",grade[i]);
return 0;
}

TT - Spring'08 CMPE150: Introduction to Computing 8


Arrays
• An array is a variable that is a collection of multiple values of the
same type.
• Syntax:
type array_name[int_constant_value]={initializer_list};
• The size has to be of int type and must be a fixed value (i.e.,
known at compile time).
• You can define an array of any type (eg: int, float, enum
student_type, etc.)
• All elements of the array have the same type.
• You cannot use the {} format for initialization after variable
definition,
ie, int a[3]={5,8,2} is correct, but

int a[3];
...
a={5,8,2} is wrong.

TT - Spring'08 CMPE150: Introduction to Computing 9


Arrays
• The index must of int type.
int k[5];
k[k[4]/k[1]]=2; /* Correct as long as k[4]/k[1] is nonnegative*/
k[1.5] = 3; /* Error since 1.5 is not int */

TT - Spring'08 CMPE150: Introduction to Computing 10


Arrays
• The lower bound must be nonnegative.
float m[8]; int i;

m[-2] = 9.2; /* Syntax error */

i=-2;
m[i] = 9.2; /* Run-time error */

TT - Spring'08 CMPE150: Introduction to Computing 11


Initializing Arrays
• The elements of a local array are
arbitrary (as all other local variables).
• The elements of a global array are
initialized to zero by default (as all other
global variables).

TT - Spring'08 CMPE150: Introduction to Computing 12


Initializing Arrays
• You may initialize an array during
definition as follows:
int array[5] = {10, 8, 36, 9, 13};
• However, you cannot perform such an
initialization after the definition, i.e.,
int array[5];
array = {10, 8, 36, 9, 13};
is syntactically wrong.

TT - Spring'08 CMPE150: Introduction to Computing 13


Initializing Arrays
• If the number of initializers is less than the
size of the array:
– initialization starts by assigning the first value to
the first element and continues as such,
– remaining elements are initialized to zero (even if
the array was local)
• Eg: For the definition
int array[5] = {10, 8, 36};
the first 3 elements get the values 10, 8, and 36,
respectively. array[3] and array[4] become 0.

TT - Spring'08 CMPE150: Introduction to Computing 14


Initializing Arrays
• If the number of initializers is more than the
size of the array, it is a syntax error.
• It is also possible to skip the size of the array
iff the array is explicitly initialized.
– In this case, the compiler fills in the size to the
number of initializers.
– Eg: For the definition
int array[ ] = {5, 9, 16, 3, 5, 2, 4};
the compiler acts as if the array was defined as
follows:
int array[7] = {5, 9, 16, 3, 5, 2, 4};

TT - Spring'08 CMPE150: Introduction to Computing 15


Example #3
• Read 100 integers and find the unbiased variance.

#include<stdio.h>

int main()
{ int X[100], i;
float avg=0,var=0; Unbiased variance of a
sample is defined as
N
for (i=0; i<100; i++)
{ scanf("%d",&X[i]); ∑(X
i =1
i − µ ) 2

avg += X[i];
} N −1
avg /= 100;
for (i=0; i<100; i++)
var += (X[i]-avg) * (X[i]-avg);
var /= 99;
printf("variance:%f\n", var);
return 0;
}

TT - Spring'08 CMPE150: Introduction to Computing 16


Example #4
• Find the histogram of the scores in Midterm 1.

#include <stdio.h>

int main()
{ int i, hist[101]={0}, score;

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


{ scanf("%d", &score);
hist[score]++;
}
for (i=0; i<101; i++)
printf("%d student(s) got %d\n", hist[i], i);
return 0;
}
TT - Spring'08 CMPE150: Introduction to Computing 17
Example #5
• Check if the array in the input is symmetric (eg: 8, 10, 6, 2, 6, 10, 8)

#include <stdio.h>
#define SIZE 10

int main()
{ int numbers[SIZE], i;

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


scanf("%d",&numbers[i]);
for (i=0; i<SIZE/2; i++)
if (numbers[i] != numbers[SIZE-1-i])
break;
printf("It is ");
if (i!=SIZE/2)
printf("not ");
printf("symmetric\n");
return 0;
}

TT - Spring'08 CMPE150: Introduction to Computing 18


Arrays Have Fixed Size!
• The size of an array must be stated at
compile time.
• This means you cannot define the size
when you run the program. You should fix
it while writing the program.
• This is a very serious limitation for
arrays. Arrays are not fit for dynamic
programming.
– You should use pointers for this purpose, but
we will not cover pointers in this course.
TT - Spring'08 CMPE150: Introduction to Computing 19
Arrays Have Fixed Size!
• What you can do is to define very large
arrays, making the size practically
infinite  Wastes too much memory.
• Your program may exceed the maximum
memory limit for the process.

TT - Spring'08 CMPE150: Introduction to Computing 20


Example #6
• Read two polynomials. Perform addition and multiplication operations.
#include <stdio.h>
#define MAX 100

int main()
{ int p1[MAX]={0}, p2[MAX]={0}, result[MAX]={0}, i, n;

printf("Enter the degree of first polynom:");


scanf("%d",&n);
if (n >= MAX) return 0;
printf("Enter coefficients:");
for (i=n; i>=0; i--)
scanf("%d",&p1[i]);
printf("Enter the degree of second polynom:");
scanf("%d",&n);
if (n >= MAX) return 0;
printf("Enter coefficients:");
for (i=n; i>=0; i--)
scanf("%d",&p2[i]);
/* Multiply */
for (i=0; i<MAX; i++)
for (n=0; n<MAX; n++)
if (p1[i] * p2[n] != 0)
result[i+n] += p1[i] * p2[n];
return 0;
}
Arrays as Parameters
• Although you write like a value
parameter, an array is always passed by
reference (variable parameter).
– Therefore, when you make a change in an
element of an array in the function, the
change is visible from the caller.

TT - Spring'08 CMPE150: Introduction to Computing 22


Example #7
• Fill in an array of integer from input.
#include <stdio.h>

void read_array(int ar[10])


{ int i;
for (i=0; i<10; i++)
scanf("%d", &ar[i]);
}
int main()
{ int a[10], i;
read_array(a);
for (i=0; i<10; i++)
printf("%d ",a[i]);
return 0;
}
TT - Spring'08 CMPE150: Introduction to Computing 23
Arrays as Parameters
• The size you specify in the function header is not important; you
may even skip it.
• Eg:
void func(int arr[5])
{ int i;
for (i=0; i<10; i++)
arr[i]=i;
}
int main()
{ int a[10], i;
func(a);
for (i=0; i<10; i++)
printf("%d ",a[i]);
return 0;
}
• This will work without any problems though the function header is
misleading.

TT - Spring'08 CMPE150: Introduction to Computing 24


Example #8
• Write a function that inverts its array
parameter.
void invert(int ar[10])
{ int i, temp;
for (i=0; i<10; i++) What is wrong
{ temp=ar[i]; here?
ar[i] = ar[9-i];
ar[9-i] = temp;
}
}
TT - Spring'08 CMPE150: Introduction to Computing 25
Example #9: Bubble Sort
• Sort the values in an array in ascending order.
#include <stdio.h>
void read_array(int ar[], int size)
{ int i;
for (i=0; i<size; i++)
scanf("%d", &ar[i]);
}

void print_array(int ar[], int size)


{ int i;
for (i=0; i<size; i++)
printf("%3d", ar[i]);
printf("\n");
}

void swap(int *a, int *b)


{ int temp;
temp = *a;
*a = *b;
*b = temp;
}

TT - Spring'08 CMPE150: Introduction to Computing 26


Example #9: Bubble Sort (cont'd)
void bubble_sort(int ar[], int size)
{ int i, j;
for (i = 0; i < size; i++)
for (j = i + 1; j < size; j++)
if (ar[i] > ar[j])
swap(&ar[i],&ar[j]);
}

int main()
{ int ar[10];
read_array(ar,10);
bubble_sort(ar,10);
print_array(ar,10);
return 0;
}

TT - Spring'08 CMPE150: Introduction to Computing 27


Example #10: Insertion Sort
void insertion_sort(int ar[], int size)
{
int value, i, j;
for (i=1; i<size; i++)
{
value = ar[i];
j = i-1;
while ((j>=0) && (ar[j]>value))
{
ar[j+1] = ar[j];
j--;
}
ar[j+1] = value;
}
}
TT - Spring'08 CMPE150: Introduction to Computing 28
Example #11: Binary Search
• Given a sorted array, search for a specific value and
return its index.
int binary_search(int A[], int number, int N)
{ int low = 0, high = N - 1, mid;

while (low <= high)


{ mid = (low + high) / 2;
if (A[mid] == number)
return mid;
if (A[mid] < number)
low = mid + 1;
else
high = mid - 1;
}
return -1;
}

TT - Spring'08 CMPE150: Introduction to Computing 29

You might also like