## Arrays

Question 1 |

Consider the following C program:

#include <stdio.h> int main () { int arr [] = {1,2,3,4,5,6,7,8,9,0,1,2,5}, *ip = arr+4; printf ("%d\n", ip[1]); return 0; }

The number that will be displayed on execution of the program is _____.

5 | |

6 | |

7 | |

8 |

We know that arr is a pointer to arr[ ] & hence arr+4 is pointer to 4

^{th}index of array (starting from 0 to 4).

Now *ip is a pointer of int type pointing to memory location 108, which is part of arr.

Hence, when we will print ip[1] it will be equivalent to *(ip+1).

Address of ip will be incremented by 1 & value inside 110 will be printed.

Question 2 |

A Young tableau is a 2D array of integers increasing from left to right and from top to bottom. Any unfilled entries are marked with ∞, and hence there cannot be any entry to the right of, or below a ∞. The following Young tableau consists of unique entries.

1 2 5 14 3 4 6 23 10 12 18 25 31 ∞ ∞ ∞

When an element is removed from a Young tableau, other elements should be moved into its place so that the resulting table is still a Young tableau (unfilled entries may be filled in with a ∞). The minimum number of entries (other than 1) to be shifted, to remove 1 from the given Young tableau is ____________.

4 | |

5 | |

6 | |

7 |

Question 3 |

A program P reads in 500 integers in the range [0, 100] representing the scores of 500 students. It then prints the frequency of each score above 50. What would be the best way for P to store the frequencies?

An array of 50 numbers | |

An array of 100 numbers | |

An array of 500 numbers | |

A dynamically allocated array of 550 numbers |

→ Then using array of 50 numbers is the best way to store the frequencies.

Question 4 |

Assume the following C variable declaration

int *A [10], B[10][10];

Of the following expressions

I. A[2] II. A[2][3] III. B[1] IV. B[2][3]

which will not give compile-time errors if used as left hand sides of assignment statements in a C program?

I, II, and IV only | |

II, III, and IV only | |

II and IV only | |

IV only |

ii) A[2][3] This results an integer, no error will come.

iii) B[1] is a base address of an array. This will not be changed it will result a compile time error.

iv) B[2][3] This also results an integer. No error will come.

Question 5 |

Consider the following declaration of a two dimensional array in C:

char a[100][100];

Assuming that the main memory is byte-addressable and that the array is stored starting from memory address 0, the address of a [40][50] is:

4040 | |

4050 | |

5040 | |

5050 |

= 0 + [40 * 100 * 1] + [50 * 1]

= 4000 + 50

= 4050

Question 6 |

Suppose you are given an array s[1...n] and a procedure reverse (s,i,j) which reverses the order of elements in a between positions i and j (both inclusive). What does the following sequence do, where 1 ≤ k ≤ n:

reverse(s, 1, k) ; reverse(s, k + 1, n); reverse(s, l, n);

Rotates s left by k positions | |

Leaves s unchanged | |

Reverses all elements of s | |

None of the above |

Question 7 |

Let A be a two dimensional array declared as follows:

A: array [1 ... 10] [1 ... 15] of integer;

Assuming that each integer takes one memory location, the array is stored in row-major order and the first element of the array is stored at location 100, what is the address of the element a[i][j]?

15i + j + 84 | |

15j + i + 84 | |

10i + j + 89 | |

10j + i + 89 |

100 + 15 * (i-1) + (j-1)

= 100 + 15i - 15 + j - 1

= 15i + j + 84

Question 8 |

Consider the following C program.

#includeint main () { int a [4] [5] = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}, {16, 17, 18, 19, 20}}; printf (“%d\n”, *(*(a+**a+2) +3)); return (0); }

The output of the program is _______.

19 |

#include

int main()

{

int a[4][5] = { {1,2,3,4,5},

{6,7,8,9,10},

{11,12,13,14,15},

{16,17,18,19,20}

};

printf("%d\n",a); //880 (consider base address = 880)

printf("%d\n",*a); //880

printf("%d\n",**a); //1

printf("%d\n",**a+2); //3

printf("%d\n",a+**a+2); //940

printf("%d\n",*(a+**a+2));//940

printf("%d\n",*(a+**a+2)+3);//952

printf("%d\n",*(*(a+**a+2)+3));//19

return 0;

}

Question 9 |

#include

{

int a[3][3][3] =

{{1, 2, 3, 4, 5, 6, 7, 8, 9},

{10, 11, 12, 13, 14, 15, 16, 17, 18},

{19, 20, 21, 22, 23, 24, 25, 26, 27}};

int i = 0, j = 0, k = 0;

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

for(k = 0; k < 3; k++ )

printf("%d ", a[i][j][k]);

printf("\n");

}

return 0;

}

1 2 3 10 11 12 19 20 21 | |

1 4 7 10 13 16 19 22 25 | |

1 2 3 4 5 6 7 8 9 | |

1 2 3 13 14 15 25 26 27 |

Hence, 1, 2, 3 will be 1^st row

10 , 11, 12 will be 2^nd row

19, 20, 21 will be 3^rd row

Question 10 |

i > min; j!= (n+i)mod n; A[j + k]; temp; i + 1 ; | |

i < min; j!= (n+i)mod n; A[j + k]; temp; i + 1; | |

i > min; j!= (n+i+k)mod n; A[(j + k)]; temp; i + 1; | |

i < min; j!= (n+i-k)mod n; A[(j + k)mod n]; temp; i + 1; |

Step-1: Observe all options, 4 options they are given 4th and 5th blank is temp and i+1.

So, they given clue that, 4th and 5th options must be temp and i+1.

Step-2: Based on the 4th and 5th options, we can guess that 1st blank is i

Step-4: Assume 2nd blank is correct, we are considering j!= (n+i) mod n this condition in while loop.

→ The meaning of the condition is “j becomes equal to (n+i)mod n then control goes out of the while loop.”

Step-5: The condition (n+i)mod n=i and j is always equal to i because we are assigning the value of i to j in the code segment line 3.

Step-6: based on these constraint we can say that 4th option is correct.

Reason: The control never enters the 2nd while loop. Sometimes it will enter the 2nd while loop, when we shift the numbers. It means total K places left.

Question 11 |

**Which of the following is an illegal array definition?**

Type COLOGNE : (LIME, PINE, MUSK, MENTHOL); var a : array [COLOGNE] of REAL; | |

var a : array [REAL] of REAL; | |

var a : array [‘A’…’Z’] of REAL; | |

var a : array [BOOLEAN] of REAL; |

Expect the option B, All remaining indexes are not real numbers.

Option A , takes enum value as index which is integer number.

Option C, takes character which is having equivalent decimal value.

Option D, has boolean value as index whose value may be 0 or 1

Question 12 |

1267 | |

1164 | |

1264 | |

1169 |

Base or starting address of the array is 1120.

The address of the 49

^{th}element = base address of array + number of elements before current element * size of element

= 1120 + 48 * 3 = 1264

Question 13 |

**Let A be a square matrix of size nxn. consider the following program. What is the expected output?**

**C=100**

**for i=1 to n do**

**for j=1 to n do**

**{**

**Temp=A[i][j]+C**

**A[i][j]=A[j][i]**

**A[j][i]=Temp-C**

**}**

**for i=1 to n do**

**for j=1 to n do**

**output(A[i][j]);**

The matrix A itself | |

Transpose of matrix A | |

Adding 100 to the upper diagonal elements and subtracting 100 from diagonal elements of A | |

None of the option |

Question 14 |

i+j | |

j+i(i-1)/2
| |

i+j-1 | |

i+j(j-1)/2 |

^{th}row contains i number of non-zero elements. Before i

^{th}row there are (i-1) rows, (1 to i-1) and in total these rows has 1+2+3......+(i-1) = i(i-1)/2 elements.

Now at i

^{th}row, the j

^{th}element will be at j position.

So the index of (i, j)

^{th}element of lower triangular matrix in this new representation is

j = i(i-1)/2

Question 15 |

1 2 3 3 5 5 7 8 | |

1 2 3 4 5 6 7 8 | |

8 7 6 5 4 3 2 1 | |

1 2 3 5 4 6 7 8 |

For loop will execute for the i value 2,3,4,5

For i = 2, x[x[2]] = x[2]

= x[3] = 3 // since x[2] = 3

The array elements representation are