Exercise: Expressions

Questions for: Expressions

In the expression a=b=5 the order of Assignment is NOT decided by Associativity of operators
A:
True
B:
False
C:
D:
Answer: B

The equal to = operator has Right-to-Left Associativity. So it assigns b=5 then a=b.

The expression of the right hand side of || operators doesn't get evaluated if the left hand side determines the outcome.
A:
True
B:
False
C:
D:
Answer: A
Because, if a is non-zero then b will not be evaluated in the expression (a || b)
Associativity has no role to play unless the precedence of operator is same.
A:
True
B:
False
C:
D:
Answer: A

Associativity is only needed when the operators in an expression have the same precedence. Usually + and - have the same precedence.

Consider the expression 7 - 4 + 2. The result could be either (7 - 4) + 2 = 5 or 7 - (4 + 2) = 1. The former result corresponds to the case when + and - are left-associative, the latter to when + and - are right-associative.

Usually the addition, subtraction, multiplication, and division operators are left-associative, while the exponentiation, assignment and conditional operators are right-associative. To prevent cases where operands would be associated with two operators, or no operator at all, operators with the same precedence must have the same associativity.

What will be the output of the program?
#include<stdio.h>
int main()
{
    int i=2;
    int j = i + (1, 2, 3, 4, 5);
    printf("%d\n", j);
    return 0;
}
A:
4
B:
7
C:
6
D:
5
Answer: B
Because, comma operator used in the expression i (1, 2, 3, 4, 5). The comma operator has left-right associativity. The left operand is always evaluated first, and the result of evaluation is discarded before the right operand is evaluated. In this expression 5 is the right most operand, hence after evaluating expression (1, 2, 3, 4, 5) the result is 5, which on adding to i results into 7.
What will be the output of the program?
#include<stdio.h>
int main()
{
    char ch;
    ch = 'A';
    printf("The letter is");
    printf("%c", ch >= 'A' && ch <= 'Z' ? ch + 'a' - 'A':ch);
    printf("Now the letter is");
    printf("%c\n", ch >= 'A' && ch <= 'Z' ? ch : ch + 'a' - 'A');
    return 0;
}
A:
The letter is a
Now the letter is A
B:
The letter is A
Now the letter is a
C:
Error
D:
None of above
Answer: A

Step 1: char ch; ch = 'A'; here variable ch is declared as an character type an initialized to 'A'.

Step 2: printf("The letter is"); It prints "The letter is".

Step 3: printf("%c", ch >= 'A' && ch <= 'Z' ? ch + 'a' - 'A':ch);

The ASCII value of 'A' is 65 and 'a' is 97.

Here

=> ('A' >= 'A' && 'A' <= 'Z') ? (A + 'a' - 'A'):('A')

=> (TRUE && TRUE) ? (65 + 97 - 65) : ('A')

=> (TRUE) ? (97): ('A')

In printf the format specifier is '%c'. Hence prints 97 as 'a'.

Step 4: printf("Now the letter is"); It prints "Now the letter is".

Step 5: printf("%c\n", ch >= 'A' && ch <= 'Z' ? ch : ch + 'a' - 'A');

Here => ('A' >= 'A' && 'A' <= 'Z') ? ('A') : (A + 'a' - 'A')

=> (TRUE && TRUE) ? ('A') :(65 + 97 - 65)

=> (TRUE) ? ('A') : (97)

It prints 'A'

Hence the output is

The letter is a
Now the letter is A

Ad Slot (Above Pagination)
Quiz