Consider the following ANSI C program.
#include <stdio.h>
int main(){
int arr[4][5];
int i, j;
for (i=0; i<4; i++){
for (j=0; j<5; j++){
arr[i][j] = 10*i + j;
}
}
printf("%d", *(arr[1] + 9));
return 0;
} What is the output of the above program?
Step 1: Understand array initialization.
The array \(\texttt{arr[4][5]}\) is filled using the formula
\[
arr[i][j] = 10i + j.
\]
So the second row (\(i = 1\)) becomes:
\[
arr[1] = \{10, 11, 12, 13, 14\}.
\]
Step 2: Pointer interpretation of \(\texttt{arr[1]}\).
In C, \(\texttt{arr[1]}\) points to the first element of the second row, i.e., \(&arr[1][0]\).
Step 3: Evaluate the expression \(\texttt{*(arr[1] + 9)}\).
Since each row has 5 elements, adding 9 moves the pointer as follows:
\[
arr[1] + 9 = &arr[1][9] = &arr[2][4].
\]
Step 4: Find the value at \(\texttt{arr[2][4]}\).
Using the formula:
\[
arr[2][4] = 10 \times 2 + 4 = 24.
\]
Step 5: Final output.
The \(\texttt{printf}\) statement prints the value \(\texttt{24}\).
Consider the following code:
main() {
int x = 126, y = 105;
{
if (x > y)
x = x - y;
else
y = y - x;
}
while (x != y)
printf("%d", x);
}
Consider the following code:
int a;
int arr[] = {30, 50, 10};
int *ptr = arr[10] + 1;
a = *ptr;
(*ptr)++;
ptr = ptr + 1;
printf("%d", a + arr[1] + *ptr);
Consider the following code:
main() {
int x = 126, y = 105;
{
if (x > y)
x = x - y;
else
y = y - x;
}
while (x != y)
printf("%d", x);
}
Given the following cache parameters:
\[ \begin{array}{|c|c|} \hline \textbf{Tag} & 4 \, \text{bits} \\ \textbf{Index} & 12 \, \text{bits} \\ \textbf{Block Size} & 1 \, \text{byte} \\ \hline \end{array} \]Find the size of the main memory and the size of the cache memory.
Consider the following process information for Shortest Remaining Time First (SRTF) scheduling:
\[ \begin{array}{|c|c|c|} \hline \textbf{Process} & \textbf{Arrival Time (AT)} & \textbf{Burst Time (BT)} \\ \hline P1 & 0 & 10 \\ P2 & 1 & 13 \\ P3 & 2 & 6 \\ P4 & 8 & 9 \\ \hline \end{array} \]Find the turnaround time for each process.