Skip to main content

Arrays in C

  • An array is a collection of data items, all of the same type, accessed using a common name.
  • A one-dimensional array is like a list(vector); A two dimensional array is like a table(matrix). We can have more dimensions.
  • Always, Contiguous (adjacent) memory locations are used to store array elements in memory.

Declaring Arrays

  • Array variables are declared identically to variables of their data type, except that the variable name is followed by one pair of square [ ] brackets for each dimension of the array.
  • Uninitialized arrays must have the dimensions of their rows, columns, etc. listed within the square brackets.
  • Dimensions used when declaring arrays in C must be positive integral constants or constant expressions.
    • In C99, dimensions must still be positive integers, but variables can be used, so long as the variable has a positive value at the time the array is declared. ( Space is allocated only once, at the time the array is declared. The array does NOT change sizes later if the variable used to declare it changes. )
Examples:
  int i, j, intArray[ 10 ], number;
  float floatArray[ 1000 ];
  int tableArray[ 3 ][ 5 ]; /* 3 rowsby 5 columns */        
  const int NROWS = 100;     
  const int NCOLS = 200;
  float matrix[ NROWS ][ NCOLS ];
C99 Only Example: 
  int n;
  printf( "How big an array do you want? " );
  scanf( "%d", &n );
  if( n <= 0 ) {
      printf( "Error - Quitting\n");
       exit( 0 );
   }
   double data[ n ];//This only works in C99, not in plain C

Initializing Arrays

  • Arrays may be initialized when they are declared, just as any other variables.
  • Place the initialization data in curly {} braces following the equals sign.  Note the use of commas in the examples below.
  • An array may be partially initialized, by providing fewer data items than the size of the array.  The remaining array elements will be automatically initialized to zero.
  • If an array is to be completely initialized, the dimension of the array is not required.  The compiler will automatically size the array to fit the initialized data.  ( Variation:  Multidimensional arrays - see below. )
  • Examples:
    int intArray[ 6 ]={ 1, 2, 3, 4, 5, 6 };
    float floatArray[100]={ 1.0f, 5.0f, 20.0f };
    double piFractions[ ]={3.141592654, 1.570796327, 0.785398163};
Designated Initializers:
  • In C99 there is an alternate mechanism, that allows you to initialize specific elements, not necessarily at the beginning.
  • This method can be mixed in with traditional iniitalization
  • For example:
int numbers[ 100 ] = { 1, 2, 3, [10] = 10, 11, 12, [60] = 50, [42] = 420 };
    • In this example,the first three elements are initialized to 1, 2, and 3 respectively.
    • Then element 10 ( the 11th element ) is initialized to 10
    • The next two elements ( 12th and 13th ) are initialized to 11 and 12 respectively.
    • Element number 60 ( the 61st ) is initialized to 50, and number 42 ( the 43rd ) to 420.
      • ( Note that the designated initializers do not need to appear in order. )
    • As with traditional methods, all uninitialized values are set to zero.
    • If the size of the array is not given, then the largest initialized position determines the size of the array.
  Using Arrays
  • Elements of an array are accessed by specifying the index ( offset ) of the desired element within square [ ] brackets after the array name.
  • Array subscripts must be of integer type.  ( int, long int, char, etc. )
  • VERY IMPORTANT: Array indices start at zero in C, and go to one less than the size of the array.  For example, a five element array will have indices zero through four.  This is because the index in C is actually an offset from the beginning of the array.  ( The first element is at the beginning of the array, and hence has zero offset. )
  • Landmine:  The most common mistake when working with arrays in C is forgetting that indices start at zero and stop one less than the array size.
  • Arrays are commonly used in conjunction with loops, in order to perform the same calculations on all ( or some part ) of  the data items in the array.

Sample Programs Using 1-D Arrays

The first sample program uses loops and arrays to calculate the first twenty Fibonacci numbers.
    /* Program to calculate the first 20 Fibonacci numbers. */
    #include <stdlib.h>
    #include <stdio.h>
    int main( void ) {
    int i, fibonacci[ 20 ];
    fibonacci[ 0 ] = 0;
    fibonacci[ 1 ] = 1;
    for( i = 2; i < 20; i++ )
    fibonacci[ i ] = fibonacci[ i - 2 ] + fibonacci[ i - 1 ];
    for( i = 0; i < 20; i++ )
    printf( "Fibonacci[ %d ] = %f\n", i, fibonacci[ i ] );
    } /* End of sample program to calculate Fibonacci numbers */
/*Program to read n numbers and find the largest using array */
#include <stdlib.h>
#include <stdio.h>
int main( void ) {
    int i, n,a[100],large;
    printf('enter...n\n”);
scanf(“%d”,&n);
printf(“Enter the elements\n”);
    for( i = 0; i < n; i++ )
    scanf(“%d”,&a[i]);
    large=a[0];
    f or( i = 1; i < n; i++ )
if (a[i]>large) large=a[i];
    printf( "Largest Element in the array is %d”,large);
}

Multidimensional Arrays
  • Multi-dimensional arrays are declared by providing more than one set of square [ ] brackets after the variable name in the declaration statement.
  • One dimensional arrays do not require the dimension to be given if the array is to be completely initialized.  By analogy, multi-dimensional arrays do not require the first dimension to be given if the array is to be completely initialized. All dimensions after the first must be given in any case.
  • For two dimensional arrays, the first dimension is commonly considered to be the number of rows, and the second dimension the number of columns. We will use this convention when discussing two dimensional arrays.
  • Two dimensional arrays are considered by C/C++ to be an array of (single dimensional arrays ).  For example, "int numbers[ 5 ][ 6 ]"  would refer to a single dimensional array of 5 elements, wherein each element is a single dimensional array of 6 integers. By extension, "int numbers[ 12 ][ 5 ][ 6 ]" would refer to an array of twelve elements, each of which is a two dimensional array, and so on.
  • Another way of looking at this is that C stores two dimensional arrays by rows, with all elements of a row being stored together as a single unit.  Knowing this can sometimes lead to more efficient programs. 
  • Multidimensional arrays may be completely initialized by listing all data elements within a single pair of curly {} braces, as with single dimensional arrays.
  • It is better programming practice to enclose each row within a separate subset of curly {} braces, to make the program more readable.  This is required if any row other than the last is to be partially initialized.  When subsets of braces are used, the last item within braces is not followed by a comma, but the subsets are themselves separated by commas.
  • Multidimensional arrays may be partially initialized by not providing complete initialization data.  Individual rows of a multidimensional array may be partially initialized, provided that subset braces are used.
  • Individual data items in a multidimensional array are accessed by fully qualifying an array element.  Alternatively, a smaller dimensional array may be accessed by partially qualifying the array name.  For example, if  "data" has been declared as a three dimensional array of floats, then data[ 1 ][ 2 ][ 5 ] would refer to a float, data[ 1 ][ 2 ] would refer to a one-dimensional array of floats, and data[ 1 ] would refer to a two-dimensional array of floats.  The reasons for this and the incentive to do this relate to memory-management issues that are beyond the scope of these notes.
Sample Program Using 2-D Arrays
/* Sample program Using 2-D Arrays */

#include <stdlib.h>
#include <stdio.h>
int main( void ) {
/* Program to add two multidimensional arrays */

int a[ 2 ][ 3 ] = { { 5, 6, 7 }, { 10, 20, 30 } };
int b[ 2 ][ 3 ] = { { 1, 2, 3 }, { 3, 2, 1 } };
int sum[ 2 ][ 3 ], row, column;
/* First the addition */
for( row = 0; row < 2; row++ )
for( column = 0; column < 3; column++ )
sum[ row ][ column ] =
a[ row ][ column ] + b[ row ][ column ];
/* Then print the results */
printf( "The sum is: \n\n" );
for( row = 0; row < 2; row++ ) {
for( column = 0; column < 3; column++ )
printf( "\t%d", sum[ row ][ column ] );
printf( '\n' ); /* at end of each row */
}
return 0;
}




Comments

Popular posts from this blog

Files in C

A file is a repository of data that is stored in a permanent storage media, mainly in secondary memory. In order to use the files we should learn how to read information from a file and how to write information into a file. A very important concept in C is the stream.The stream is a common logical interface to the various devices( files).A stream is linked to a file while using an open operation. A stream is disassociated from a file while using a close operation. The current location, also referred to as the current position, is the location in a file where the next fie access will occur.There are two types of streams text and binary. The following are some difference between text and binary files ·Text file is human readable because everything is stored in terms of text. In binary file everything is written in terms of 0 and 1, therefore binary file is not human readable. ·A newline(\n) character is converted into the carriage return-linefeed combination before being written to the d…

KTU C programming question paper and evaluation scheme

APJ ABDUL KALAM TECHNOLOGICAL UNIVERSITY SECOND SEMESTER B.TECH DEGREE EXAMINATION, MAY 2017 CS 100 COMPUTER PROGRAMMING (CS, IT) SCHEME OF EVALUATION
PART A 1 An identifier is a sequence of characters invented by the programmer or to identify or name a specific object. The sequence of characters may be letters, digits, and special character ‘_’known as an underscore Rules: i)Identifiers should start with alphabets. ii)Identifiers are case sensitive iii)A numeric digit should not be the first character iv)Identifier name should not be a keyword v)Identifier may be of any reasonable length 1mark






2mark 2 Associativity defines the direction, left to right or right to left in which operator act upon its operands Unary operators have associativity is from right to left. For examplein the expression &--x, pre decrement works first and then address of operator works Direction + example<

Linear and Binary Search in C

Searching is one of the most common problems that arise in computing. Searching is the algorithmic process of finding a particular item in a collection of items. A search typically answers either True or False as to whether the item is present. On occasion it may be modified to return where the item is found. Search operations are usually carried out on a key field. Consider searching for a given value k in an array A of size n. There are 2 basic approaches: sequential search and binary search.
Linear (Sequential) Search When data items are stored in a collection such as a list or array , we say that they have a linear or sequential relationship. Each data item is stored in a position relative to the others. In C array, these relative positions are the index values of the individual items. Since these index values are ordered, it is possible for us to visit them in sequence. This process gives rise to our first searching technique, the sequential search. Starting at the first item in …