Arrays in C. Prof. Indranil Sen Gupta Dept. of Computer Science & Engg. Indian Institute of Technology Kharagpur. Basic Concept

Similar documents
Arrays. CS10001: Programming & Data Structures. Pallab Dasgupta Dept. of Computer Sc. & Engg., Indian Institute of Technology Kharagpur

Arrays. CS10001: Programming & Data Structures. Pallab Dasgupta Dept. of Computer Sc. & Engg., Indian Institute of Technology Kharagpur

One Dimension Arrays 1

CS11001/CS11002 Programming and Data Structures (PDS) (Theory: 3-0-0)

Pointers and Arrays 1

Array. Arijit Mondal. Dept. of Computer Science & Engineering Indian Institute of Technology Patna IIT Patna 1

Functions. Arash Rafiey. September 26, 2017

Computer Science & Engineering 150A Problem Solving Using Computers

First of all, it is a variable, just like other variables you studied

Pointers. Introduction

CS11001/CS11002 Programming and Data Structures (PDS) (Theory: 3-1-0) Introduction to arrays

CS11001/CS11002 Programming and Data Structures (PDS) (Theory: 3-0-0)

Arrays and Pointers (part 1)

Introduction to Scientific Computing and Problem Solving

Principles of Programming. Chapter 6: Arrays

C Programming Review CSC 4320/6320

AMCAT Automata Coding Sample Questions And Answers

Function. specific, well-defined task. whenever it is called or invoked. A function to add two numbers A function to find the largest of n numbers

APSC 160 Review. CPSC 259: Data Structures and Algorithms for Electrical Engineers. Hassan Khosravi Borrowing many questions from Ed Knorr

Arrays and Pointers (part 1)

Expressions. Arithmetic expressions. Logical expressions. Assignment expression. n Variables and constants linked with operators

At the end of this module, the student should be able to:

CSE101-Lec#17. Arrays. (Arrays and Functions) Created By: Amanpreet Kaur & Sanjeev Kumar SME (CSE) LPU. LPU CSE101 C Programming

COMPUTER APPLICATION

DECLARAING AND INITIALIZING POINTERS

INDIAN INSTITUTE OF TECHNOLOGY KHARAGPUR

Exam 3 Chapters 7 & 9

Lab 3. Pointers Programming Lab (Using C) XU Silei

C Language Part 1 Digital Computer Concept and Practice Copyright 2012 by Jaejin Lee

A First Book of ANSI C Fourth Edition. Chapter 8 Arrays

Number Systems Prof. Indranil Sen Gupta Dept. of Computer Science & Engg. Indian Institute of Technology Kharagpur Number Representation

Maltepe University Computer Engineering Department. BİL 133 Algoritma ve Programlama. Chapter 8: Arrays and pointers

IV Unit Second Part STRUCTURES

Arrays and Pointers. CSE 2031 Fall November 11, 2013

Subject: Fundamental of Computer Programming 2068

CHAPTER 4 FUNCTIONS. 4.1 Introduction

Computer Programming. C Array is a collection of data belongings to the same data type. data_type array_name[array_size];

Pointers (part 1) What are pointers? EECS We have seen pointers before. scanf( %f, &inches );! 25 September 2017

Department of Computer Science & Engineering Indian Institute of Technology Kharagpur. Practice Sheet #04

MIDTERM TEST EESC 2031 Software Tools June 13, Last Name: First Name: Student ID: EECS user name: TIME LIMIT: 110 minutes

Arrays. CSE / ENGR 142 Programming I. Chapter 8. Another Motivation - Averaging Grades. Motivation: Sorting. Data Structures.

Arrays and Pointers. Arrays. Arrays: Example. Arrays: Definition and Access. Arrays Stored in Memory. Initialization. EECS 2031 Fall 2014.

Arrays. CSE 142 Programming I. Chapter 8. Another Motivation - Averaging Grades. Motivation: Sorting. Data Structures. Arrays

An array is a collection of data that holds fixed number of values of same type. It is also known as a set. An array is a data type.

#3. (Recursion) Write a recursive function to compute f(x) = f(x - 1) + f(x - 2) with f(0) = 0 and f(1) = 1.

Pointers. Part VI. 1) Introduction. 2) Declaring Pointer Variables. 3) Using Pointers. 4) Pointer Arithmetic. 5) Pointers and Arrays

EM108 Software Development for Engineers

C Language Part 2 Digital Computer Concept and Practice Copyright 2012 by Jaejin Lee

Parameter passing. Programming in C. Important. Parameter passing... C implements call-by-value parameter passing. UVic SEng 265

Dept. of CSE, IIT KGP

ESC101N Fundamentals of Computing

Department of Computer Science & Engineering Indian Institute of Technology Kharagpur. Practice Sheet #07. Topic: Pointer in C Date:

Functions. Prof. Indranil Sen Gupta. Dept. of Computer Science & Engg. Indian Institute t of Technology Kharagpur. Introduction

Unit 7. Functions. Need of User Defined Functions

Arrays in C. Rab Nawaz Jadoon DCS. Assistant Professor. Department of Computer Science. COMSATS IIT, Abbottabad Pakistan

Department of Computer Science & Engineering Indian Institute of Technology Kharagpur. Practice Sheet #05

CSE2301. Arrays. Arrays. Arrays and Pointers

Computers Programming Course 6. Iulian Năstac

Today s Learning Objectives

FOR Loop. FOR Loop has three parts:initialization,condition,increment. Syntax. for(initialization;condition;increment){ body;

Question 2. [5 points] Given the following symbolic constant definition

Programming for Electrical and Computer Engineers. Pointers and Arrays

Functions. Functions are everywhere in C. Pallab Dasgupta Professor, Dept. of Computer Sc & Engg INDIAN INSTITUTE OF TECHNOLOGY KHARAGPUR

Pointers and File Handling

Array Initialization

Running a C program Compilation Python and C Variables and types Data and addresses Functions Performance. John Edgar 2

A. Year / Module Semester Subject Topic 2016 / V 2 PCD Pointers, Preprocessors, DS

[0569] p 0318 garbage

M4.1-R3: PROGRAMMING AND PROBLEM SOLVING THROUGH C LANGUAGE

Scheme G. Sample Test Paper-I. Course Name : Computer Engineering Group Course Code : CO/CD/CM/CW/IF Semester : Second Subject Tile : Programming in C

Sample Examination. Family Name:... Other Names:... Signature:... Student Number:...

Programming and Data Structure

Write a C program using arrays and structure

CS 345. Functions. Vitaly Shmatikov. slide 1

To declare an array in C, a programmer specifies the type of the elements and the number of elements required by an array as follows

UNIT III (PART-II) & UNIT IV(PART-I)

Maltepe University Computer Engineering Department. BİL 133 Algorithms and Programming. Chapter 8: Arrays

Goals of this Lecture

Programming for Engineers Arrays

Module 6: Array in C

UNIT - I. Introduction to C Programming. BY A. Vijay Bharath

Variables Data types Variable I/O. C introduction. Variables. Variables 1 / 14

Make sure the version number is marked on your scantron sheet. This is Version 1

SYSC 2006 C Winter 2012

Multiple Choice Questions ( 1 mark)

Function a block of statements grouped together, to perform some specific task

Arrays and Pointers in C & C++


Arrays. Example: Run the below program, it will crash in Windows (TurboC Compiler)

INF3380: Parallel Programming for Scientific Problems

Basic and Practice in Programming Lab7

Name :. Roll No. :... Invigilator s Signature : INTRODUCTION TO PROGRAMMING. Time Allotted : 3 Hours Full Marks : 70

Computers in Engineering. Moving From Fortran to C Part 2 Michael A. Hawker

Arrays. An array is a collection of several elements of the same type. An array variable is declared as array name[size]

Language comparison. C has pointers. Java has references. C++ has pointers and references

Computers in Engineering COMP 208. Roots of a Quadratic in C 10/25/2007. Moving From Fortran to C Part 2 Michael A. Hawker

ARRAYS(II Unit Part II)

Ricardo Rocha. Department of Computer Science Faculty of Sciences University of Porto

Lectures 5-6: Introduction to C

Homework #3 CS2255 Fall 2012

Transcription:

Arrays in C Prof. Indranil Sen Gupta Dept. of Computer Science & Engg. Indian Institute of Technology Kharagpur 1 Basic Concept Many applications require multiple data items that have common characteristics. In mathematics, we often express such groups of data items in indexed form: x 1, x 2, x 3,, x n Why are arrays essential for some applications? Take an example. Finding the minimum of a set of numbers. 2 1

3 numbers if ((a <= b) && (a <= c)) min = a; else if (b <= c) min = b; else min = c; 4 numbers if ((a <= b) && (a <= c) && (a <= d)) min = a; else if ((b <= c) && (b <= d)) min = b; else if (c <= d) min = c; else min = d; 3 The Problem Suppose we have 10 numbers to handle. Or 20. Or 100. How to tackle this problem? Solution: Use arrays. 4 2

Using Arrays All the data items constituting the group share the same name. int x[10]; Individual elements are accessed by specifying the index. x[0] x[1] x[2] x[9] X is a 10-element one-dimensional array 5 The name of the array also denotes the starting address of the array in memory. Example: int x[10]; x[0], x[1], x[2], indicates the contents of the successive array locations. x indicates the starting ti address in memory for the array. 6 3

An Example #include <stdio.h> int x[10]; x[0] = 15; x[1] = x[0] + 5; printf ( \n%d %d %d %u \n, x[0], x[1], x[2], x); Output: 15 20 1107384350 3221224640 Garbage Address 7 Declaring Arrays Like variables, the arrays that are used in a program must be declared before they are used. General syntax: type array-name[size]; type specifies the data type of element that will be contained in the array (int, float, char, etc.). size is an integer constant which indicates the maximum number of elements that can be stored inside the array. Example: int marks[5]; marks is an array containing a maximum of 5 integers. 8 4

Examples: int x[10]; char line[80]; float points[150]; char name[35]; If we are not sure of the exact size of the array, we can define an array of a large size. int marks[50]; though in a particular run we may only be using, say, 10 elements. 9 How an array is stored in memory? Starting from a given memory location, the successive array elements are allocated space in consecutive e memory locations. Array a x x+k x+2k x: starting address of the array in memory k: number of bytes allocated per array element Element a[i] :: allocated memory location at address x + i*k First array index assumed to start at zero. 10 5

Accessing Array Elements A particular element of the array can be accessed by specifying two things: Name of the array. Index (relative position) of the element in the array. In C, the index of an array starts from zero. Example: An array is defined as int x[10]; The first element of the array x can be accessed as x[0], fourth element as x[3], tenth element as x[9], etc. 11 Contd. The array index must evaluate to an integer between 0 and n-1 where n is the number of elements in the array. Any integer expression can be given as the index. a[x+2] = 25; b[3*x-y] = a[10-x] + 5; 12 6

A Warning In C, while accessing array elements, array bounds are not checked. Example: int marks[5]; : : marks[8] = 75; The above assignment would not necessarily cause an error. Rather, it may result in unpredictable program results. 13 General form: Initialization of Arrays type array_name[size] = list of values; Examples: int marks[5] = 72, 83, 65, 80, 76; char name[4] = A, m, i, t ; Some special cases: If the number of values in the list is less than the number of elements, the remaining elements are automatically set to zero. float total[5] = 24.2, -12.5, 35.1; total[0]=24.2, total[1]=-12.5, total[2]=35.1, total[3]=0, total[4]=0 14 7

Contd. The size may be omitted. In such cases the compiler automatically allocates enough space for all initialized elements. int flag[] = 1, 1, 1, 0; char name[] = A, m, i, t ; 15 Example 1: Find the minimum of a set of 10 numbers #include <stdio.h> int a[10], i, min; for (i=0; i<10; i++) scanf ( %d, &a[i]); min = 99999; /* or, min=a[0] */ for (i=0; i<10; i++) if (a[i] < min) min = a[i]; printf ( \n Minimum is %d, min); 16 8

Alternate Version 1 #include <stdio.h> #define size 10 int a[size], i, min; Change only one line to change the problem size for (i=0; i<size; i++) scanf ( %d, &a[i]); min = 99999; for (i=0; i<size; i++) if (a[i] < min) min = a[i]; printf ( \n Minimum is %d, min); 17 Alternate Version 2 #include <stdio.h> int a[100], i, min, n; Define an array of large size and use only the required number of elements scanf ( %d, &n); /* Number of elements */ for (i=0; i<n; i++) scanf ( %d, &a[i]); min = 99999; for (i=0; i<n; i++) if (a[i] < min) min = a[i]; printf ( \n Minimum is %d, min); 18 9

Example 2: Computing gpa #include <stdio.h> #define nsub 6 int grade_pt[nsub], cred[nsub], i, gp_ sum=0, cred_ sum=0; float gpa; Handling two arrays at the same time for (i=0; i<nsub; i++) scanf ( %d %d, &grade_pt[i],&cred[i]); for (i=0; i<nsub; i++) gp_sum += grade_pt[i] * cred[i]; cred_sum += cred[i]; gpa = (float) gp_sum / cred_sum; printf ( \n GPA is: %f, gpa); 19 You cannot Things you cannot do use = to assign one array variable to another: a = b; /* a and b are arrays */ use == to directly compare array variables: if (a == b) directly scanf or printf arrays: printf (, a); 20 10

How to copy the elements of one array to another? By copying individual elements: int a[25], b[25]; for (j=0; j<25; j++) a[j] = b[j]; 21 How to read the elements of an array? By reading them one element at a time. int a[25]; for (j=0; j<25; j++) scanf ( %f, &a[j]); The ampersand (&) is necessary. The elements can be entered all in one line or in different lines. 22 11

How to print the elements of an array? By printing them one element at a time. for (j=0; j<25; j++) printf ( \n %f, a[j]); The elements are printed one per line. printf ( \n ); for (j=0; j<25; j++) printf ( %f, a[j]); The elements are printed all in one line (starting with a new line). 23 Passing Arrays to a Function 24 12

How to pass arrays to a function? An array name can be used as an argument to a function. Permits the entire array to be passed to the function. The way it is passed differs from that for ordinary variables. Rules: The array name must appear by itself as argument, without t brackets or subscripts. The corresponding formal argument is written in the same manner. Declared by writing the array name with a pair of empty brackets. 25 An Example with 1-D Array We can also write float x[100]; But the way the function is written makes it general; it works with arrays of any size. int n; float list[100], avg; : avg = average(n,list); : float average(a,x) int a; float x[]; : sum = sum + x[i]; 26 13

Same program, with int n; the parameter types specified in the same line as the function definition. float list[100], avg; : avg = average(n,list); : float average(int a, float x[]) : sum = sum + x[i]; 27 The Actual Mechanism When an array is passed to a function, the values of the array elements are not passed to the function. The array name is interpreted as the address of the first array element. The formal argument therefore becomes a pointer to the first array element. When an array element is accessed inside the function, the address is calculated using the formula stated t before. Changes made inside the function are thus also reflected in the calling program. 28 14

Contd. Passing parameters in this way is called call-by-reference. Normally parameters are passed in C using call-by-value. Basically what it means? If a function changes the values of array elements, then these changes will be made to the original array that is passed to the function. This does not apply when an individual element is passed on as argument. 29 Example: Parameter passed as a value #include <stdio.h> void swap (int a, int b) int temp; temp=a; a=b; b=temp; int x,y; x=10; y=15; printf("x=%d y=%d \n",x,y); swap(x,y); printf("x=%d y=%d \n",x,y); Output: x=10 y=15 x=10 y=15 30 15

int x,y; x=10; y=15; printf("x=%d y=%d \n",x,y); swap(x,y); printf("x=%d y=%d \n",x,y); Output: x=10 y=15 x=10 y=15 31 Example: Minimum of a set of numbers #include <stdio.h> int minimum (int x[], int y); int a[100], i, n; scanf ( %d, &n); for (i=0; i<n; i++) scanf ( %d, &a[i]); int minimum (x,size) int x[], size; int i, min = 99999; for (i=0;i<size;i++) if (min > x[i]) min = x[i]; return (min); printf ( \n Minimum is %d, minimum(a,n)); Parameter x passed by reference, size by value. 32 16

Example: Square each element of array #include <stdio.h> void square (int a[], int b); int a[100], i, n; scanf ( %d, &n); for (i=0; i<n; i++) scanf ( %d, &a[i]); square (a, n); printf ( \nnew array is: ); for (i=0; i<n; i++) printf ( %d, a[i]); void square (x,size) int x[], size; int i; for (i=0;i<size;i++) x[i] = x[i]*x[i]; return; 33 Introduction to Pointers What is the concept? Pointer is a variable which stores the address in memory location of another variable. When declared, we must specify the data type of the variable being pointed to. Examples: int *p; float *x, *y; char *flag; 34 17

A pointer variable can be assigned the address of another variable. int a, *p; a=10; p = &a; /* Address of a assigned to p */ printf ( %d %d, a, *p); /* Will print 10 10 */ Point to note: Array name indicates pointer to first array element. int num[10], *xyz; xyz = num; /* Points to x[0] */ 35 When an integer expression E is added to or subtracted from a pointer, actually scale factor times E is added/subtracted. Scale factor indicates size of the data item being pointed to in number of bytes. Scale factor for char is 1, int is 4, float is 4, double is 8, etc. int a, *p; p = &a; /* p is assigned address of a (say, 2500) */ p++; /* p will become 2504 */ p = p 10; /* p will become 2464 */ 36 18

Consider the declaration: int x[5] = 1, 2, 3, 4, 5; int *p; Suppose that the base address of x is 2500, and each integer requires 4 bytes. Element Value Address x[0] 1 2500 x[1] 2 2504 x[2] 3 2508 x[3] 4 2512 x[4] 5 2516 37 Contd. Both x and &x[0] have the value 2500. p = x; and p = &x[0]; are equivalent. Relationship between p and x: p = &x[0] = 2500 p+1 = &x[1] = 2504 p+2 = &x[2] = 2508 p+3 = &x[3] = 2512 p+4 = &x[4] = 2516 *(p+i) gives the value of x[i] 38 19

An example: int x[ ] = 1,2,3,4,5,6,7,8,9,10; int *p; p = x + 3; /* Point to fourth element of x */ printf ( %d, *p); /* Will print 4 */ printf ( %d, *(p+5)); /* Will print 9 */ printf ( %d %d, p[3], p[-1]); /* Will print 7 and 3 */ 39 Example: function to find average #include <stdio.h> int x[100], k, n; scanf ( %d, &n); for (k=0; k<n; k++) scanf ( %d, &x[k]); float avg (array, size) int array[], size; int *p, i, sum = 0; p = array; for (i=0; i<size; i++) sum = sum + *(p+i); printf ( \naverage is %f, avg (x, n)); return ((float) sum / size); 40 20

Example: SWAP revisited #include <stdio.h> void swap (int *a, int *b) int temp; temp = *a; *a = *b; *b = temp; int x,y; x=10; y=15; printf("x=%d y=%d \n",x,y); swap(&x, &y); printf("x=%d y=%d \n",x,y); Output: x=10 y=15 x=15 y=10 41 21