void main() {

void main() {

struct sv {

float d;

char ht[10];

};

struct sv m, * p;

p = & m;

printf(“ % p”, & m);

printf(“ % p”, p);

};

Chọn kết quả hợp lí cho chương trình sau:

A. “FFE6FFE6”

B. “FFE6FFE7”

C. “FFE66EFF”

D. “FFE4FFE4”

Hướng dẫn

Chọn D là đáp án đúng

Tags:

void main()

void main()

{

int x = 0;

switch(x)

{

case 1: printf( “One” );

case 0: printf( “Zero” );

case 2: printf( “Hello World” );

}

}

What is the result of the following code?

A. One

B. Zero

 

C. Hello World

D. ZeroHello World

Hướng dẫn

Chọn D là đáp án đúng

Xem lời giải

Xem lời giải

Do không có lệnh break giữa các case. Khi x = 0, lệnh case 0 và case 2 được thực hiện.

Tags:

void main()

void main()

{

int x=0;

{

int x = 0, y = 0;

y++;

x++;

}

printf(“%d”, x);

getch();

}

Output of following code?

A. 1

B. Error

C. 0

Hướng dẫn

Chọn C là đáp án đúng

Xem lời giải

Xem lời giải

Giải thích: biến x được khai báo trong ngoặc {} là biến local, hàm printf() sẽ lấy giá trị x = 0.

Tags:

void main()

void main()

{

int x;

{

x++;

}

printf(“%d”, x);

getch();

}

Output of following code?

A. 1

B. 0

C. Error

Hướng dẫn

Chọn C là đáp án đúng

Xem lời giải

Xem lời giải

Giải thích: Lỗi biến x chưa được khởi tạo

Tags:

void main()

void main()

{

static int i;

while(i = 0)

(i > 2 ? i++ : i–);

printf(“%d”, i);

getch();

}

What gets printed ?

A. -1

B. 0

C. 1

D. Complier error

Hướng dẫn

Chọn A là đáp án đúng

Xem lời giải

Xem lời giải

Biến i là biến static nên complier sẽ tự động khởi tạo cho i = 0. Vì i < 2, nên i– được thực hiện i = -1.

Tags:

void main()

void main()

{

int i = 10, j = 20;

if(i = 20)

printf(” Hello”);

else

printf(” Hi”);

getch();

}

What is output ?

A. Hello

B. Hi

C. Complier error

Hướng dẫn

Chọn A là đáp án đúng

Xem lời giải

Xem lời giải

i = 20 là biểu thức gán (không phải biểu thức so sánh). Giá trị của biểu thức này trả về là #0.Nên lệnh printf(” Hello”); được thực hiện

Tags:

void main()

void main()

{

int x = 0, y = 0;

if(x == 0 || ++y)

printf(“x=%d”, x);

printf(” y=%d”, y);

getch();

}

What is output?

A. x=0 y=1

B. x=0 y=0

C. Error syntax

Hướng dẫn

Chọn B là đáp án đúng

Xem lời giải

Xem lời giải

Biểu thức so sánh x == 0 là TRUE nên biểu thức ++y sẽ không được thực hiện.

Tags:

void main()

void main()

{

int i = 3;

if (!i)

i++;

i++;

if (i == 3)

i += 2;

i += 2;

printf(“%d\n”, i);

getch();

}

What gets printed?

A. 5

B. 6

C. 7

D. Another

Hướng dẫn

Chọn B là đáp án đúng

Xem lời giải

Xem lời giải

Vì !i = 0 nên câu lệnh i++ đầu tiên không được thực hiện, câu lệnh i++ tiếp theo được thực hiện (i = 4).

Gặp lệnh if tiếp theo không thỏa mãn, câu lệnh i+=2 thứ 2 được thực hiện.

Tags:

void main()

void main()

{

int x;

if(x = 0)

printf (“Value of x is 0”);

else

printf (“Value of x is not 0”);

getch();

}

What gets printed?

A. Value of x is 0

B. Value of x is not 0

C. Error

Hướng dẫn

Chọn B là đáp án đúng

Xem lời giải

Xem lời giải

Vì biểu thức x=0 của lệnh if(x=0) là phép gán 0 cho biến x mà ko phải biểu thức so sánh. Biểu thức gán này có giá trị là 0 nên câu lệnh của else sẽ được thực hiện.

Tags:

void main()

void main()

{

int i;

for(i = 0; i < 20; i++)

{

switch(i)

{

case 0:i+=5;

case 1:i+=2;

case 5:i+=5;

default: i+=4;

break;

}

printf(“%d,”, i);

}

getch();

}

What gets printed?

A. 14,18,

B. 16,20,

C. 16,21,

Hướng dẫn

Chọn C là đáp án đúng

Xem lời giải

Xem lời giải

i=0. Do không có lệnh break giữa các case nên tất cả các case được thực hiện i = 16, gặp lệnh break thoát ra khỏi switch case, in ra : 16

Vòng lặp mới i++ (i = 17), nhảy vào case default i = 17+4 = 21, gặp lệnh break thoát khỏi switch case và in ra: 16,21. Vì i = 21 > 20, vòng for kết thúc.

Tags:

void main()

void main()

{

int i = 0;

for (i = 0; i < 5; i++)

if (i < 4)

{

printf(“Hello”);

break;

}

getch();

}

What is output ?

A.  Hello

B. Hello is printed 3 times

C. Hello is prined 4 times

D. Hello is printed 5 times

Hướng dẫn

Chọn A là đáp án đúng

Xem lời giải

Xem lời giải

Khi gặp lệnh break chương trình sẽ thoát khỏi vòng lặp gần nhất với nó.

Tags:

void main()

void main()

{

double k = 0;

for (k = 0.0; k < 3.0; k++);

printf(“%lf”, k);

getch();

}

What is output?

A. 012

B. Run time error

C. 3

D. 2

Hướng dẫn

Chọn C là đáp án đúng

Xem lời giải

Xem lời giải

Cách viết for (k = 0.0; k < 3.0; k++); tương đương với cách viết đầy đủ: for (k = 0.0; k < 3.0; k++) {} khi vòng for kết thúc, lệnh printf("%lf", k) mới được thực hiện.

Tags:

void main()

void main()

{

int i = 0;

char ch = ‘A’;

do

{

putchar(ch);

}

while(i++ < 5 || ++ch <= 'F');

getch();

}

What will be output when you will execute following c code?

BCDEF

BCDE

C. ABCDEF

D. Another

Hướng dẫn

Chọn A là đáp án đúng

Xem lời giải

Xem lời giải

Vòng lặp do while(). Vòng lặp này kết thúc khi biểu thức trong while là FALSE. i = 0 —> in ra kí tự: A , i++ giá trị i sẽ được so sánh với 5 trước. Sau đó, i++ mới được thực hiện.

Vì i = 0 nên biểu thức i++ < 5 là TRUE nên biếu thức ++ch <= 'F' sẽ không được thực hiện.

i = 1 —> in ra kí tự: AA

, thì i++ < 5 là FALSE. Biểu thức ++ch <= 'F' sẽ được thực hiện. Vòng lặp sẽ tiếp tục in ra: BCDEF.

Tags:

void main()

void main()

{

int array[2][2] = {0, 1, 2, 3};

int i;

int sum = 0;

for (i = 0; i < 4; ++i)

{

int x, y;

x = i % 2;

if (x)

{

y = 0;

}

else

{

y = 1;

}

sum += array[x][y];

}

printf(“%d\n”, sum);

getch();

}

What gets printed?

A. 3

B. 4

C. 5

D. 6

Hướng dẫn

Chọn D là đáp án đúng

Xem lời giải

Xem lời giải

i = 0 → x = 0,y = 1 → array[0][1] = 1

i = 1 → x = 1,y = 0 → array[1][0] = 2

i = 2 → x = 0,y = 1 → array[0][1] = 1

i = 3 → x = 1,y = 0 → array[1][0] = 2

Tags:

void main()

void main()

{

char s[] = “man”;

int i;

for(i = 0; s; i++)

printf(“%c%c%c%c\t”, s, *(s+i), *(i+s), i[s]);

getch();

}

What will be output when you will execute following c code?

nnnn

B. mmm aaa nnn

C. mmmm aaa nnn

D. Another

Hướng dẫn

Chọn A là đáp án đúng

Xem lời giải

Xem lời giải

Vòng for() sẽ bắt đầu với i = 0, vòng for() sẽ kết thúc khi s = NULL (kết thúc chuỗi s).

s = *(s+i) = *(i+s) = i[s] : kí tự thứ i của mảng s.

Tags:

void main()

void main()

{

int x = 5, y = 8;

const int* p;

p = &x;

p = &y;

x++;

printf(“%d”, *p);

getch();

}

What is output?

A. 5

B. 6

C. 8

D. Complier Error

Hướng dẫn

Chọn C là đáp án đúng

Xem lời giải

Xem lời giải

p là con trỏ tới hằng số (pointer to constant), nói cách khác ta không thể dùng p để thay đổi giá trị của vùng nhớ mà p trỏ đến.

Chú ý: p có thể trỏ tới vùng nhớ khác.

Tags:

void main()

void main()

{

int x = 5;

const int* p;

p = &x;

x++;

*p = 4;

printf(“%d”, *p);

getch();

}

 What is output of code?

A. 4

B. 5

C. 6

D. Complier Error

Hướng dẫn

Chọn D là đáp án đúng

Xem lời giải

Xem lời giải

p là con trỏ tới hằng số (pointer to constant), nói cách khác ta không thể dùng p để thay đổi giá trị của vùng nhớ mà p trỏ đến.

Nhưng ta có thể thay đổi giá trị của vùng nhớ đó bằng chính biến đó (x++ là OK). *p = 4 –> gây lỗi.

Tags:

void main()

void main()

{

int x = 5,y = 6;

int* const p = &x;

p = &y;

printf(“%d”, (*p));

getch();

}

What is output?

A. Complier error

B. 6

C. 5

D. Another

Hướng dẫn

Chọn A là đáp án đúng

Xem lời giải

Xem lời giải

p là hằng con trỏ (constant pointer). Khi khai báo hằng con trỏ, ta cần khởi tạo luôn cho hằng con trỏ (Nếu không khởi tạo, chương trình biên dịch (complier) gây ra lỗi).

Trình biên dịch sẽ không cho phép thay đổi vùng nhớ mà con trỏ p trỏ tới. p = &y → gây ra lỗi.

Tags:

void main()

void main()

{

char *s = “\12345s\n”;

printf(“%d”, strlen(s));

printf(“\n%s”, s);

getch();

}

What is output?

A. 5

B. 7

C. 9

D. 10

Hướng dẫn

Chọn A là đáp án đúng

Tags:

void main()

void main()

{

int i = 400;

int *ptr = &i;

*++ptr = 2;

printf(“%d %d”, i, *ptr);

getch();

}

 What is output of following code?

A. 400 2

B. 400 400

C. 400 401

D. Complier error

Hướng dẫn

Chọn A là đáp án đúng

Xem lời giải

Xem lời giải

Lệnh *++ptr = 2 *(++ptr) = 2, ptr sẽ trỏ đến vùng nhớ khác và gán giá trị cho vùng nhớ đó = 2.

Tags:

void main()

void main()

{

char str[] = {“pvpit”};

char *s1 = str;

s1++;

printf(“%c”, *s1);

getch();

}

What is output?

A. pvpit

B. vpit

C. v

D. Another

Hướng dẫn

Chọn C là đáp án đúng

Xem lời giải

Xem lời giải

s1 = str, s1 trỏ tới phần tử đầu tiên của chuỗi “pvpit”. s1++, s1 trỏ tới phần tử thứ 2 của chuỗi “pvpit”. *s1 = ‘v’.

Tags:

void main()

void main()

{

int ints[] = { 0, 5, 10, 15 };

int* i2 = ints + 2;

int a = *i2++; // a = *(i2++);

printf(“%d#%d\n”, a, *i2);

getch();

}

What is output?

A. 10#15

B. 10#10

C. 15#15

D. 11#15

Hướng dẫn

Chọn A là đáp án đúng

Xem lời giải

Xem lời giải

i2++ được thực hiện nhưng giá trị của i2 sẽ được thay đổi sau khi sử dụng. \

Sau khi thực hiện a = *(i2++), a = *i2 = 10, i2 = i2 + 1.

Tags:

void main()

void main()

{

int ints[] = { 0, 1, 2, 3 };

int* i1 = ints + 1;

int* i2 = ints + 2;

int a = ++*i1 + *i2++;

int b = *++i1 + *i2–;

printf(“%d#%d”, a, b);

getch();

}

What is output of following code?

A. 4#4

B. 4#5

C. 5#6

D. 4#6

Hướng dẫn

Chọn B là đáp án đúng

Xem lời giải

Xem lời giải

– Lệnh int a = ++*i1 + *i2++;, toán tử * và ++ cùng thứ tự ưu tiên nhưng có thứ tự kết hợp từ phải sang trái. i2++ sẽ được thực hiện trước nhưng i2 sẽ trỏ tới phần tử tiếp theo sau khi i2 được sử dụng( nghĩa là *(i2++) = 2). ++*i1 = ++(i*) = ints[1] = 2. a = 2 + 2 = 4. Sau lệnh này, i2 trỏ tới phần tử cuối cùng của mảng ints[],i1 trỏ tới phần tử thứ 2 của mảng ints[], giá trị ints[1] bị thay đổi (=2).

– Lệnh int b = *++i1 + *i2–;, toán tử * và — cùng thứ tự ưu tiên nhưng có thứ tự kết hợp từ phải sang trái. i2– được thực hiện trước nhưng i2 sẽ trỏ tới phần tử thứ 3 của mảng sau khi i2 được sử dụng( nghĩa là *(i2–) = 3). *++i1 = *(++i1) = ints[2] = 2. b = 2 + 3 = 5.

Tags:

void main()

void main()

{

int ints[] = { 0, 1, 2, 3 };

int* i1 = ints + 1;

int a = ++*i1;

int b = a + *i1;

printf(“%d\n”, b);

getch();

}

What is output?

A. 3

B. 4

C. 5

D. 6

Hướng dẫn

Chọn B là đáp án đúng

Xem lời giải

Xem lời giải

 i1 = ints+1, i1 sẽ trỏ tới phần tử thứ 2 của mảng ints[] và *i1 = 1.

Lệnh ++*i1 = ++(*i)1, lệnh này sẽ thay đổi giá trị tại vùng nhớ mà i1 trỏ tới (sau khi lệnh này được thực hiện,*i1 = 2 hay nói cách khác ints[] = {0,2,2,3}. Xem hình vẽ:

Tags:

void main()

void main()

{

if ((1 || 0) && (0 || 1))

{

printf(“ABC”);

}

else

{

printf(“DEF”);

}

getch();

}

What is output of code?

A. ABC

B. DEF

C. Syntax error

Hướng dẫn

Chọn A là đáp án đúng

Xem lời giải

Xem lời giải

Biểu thức logic ((1 || 0) && (0 || 1)) = (1 && 1) = 1.

Tags:

void main()

void main()

{

int a = 15, b = 10, c = 5;

if(a > b > c)

printf(“True”);

else

printf(“False”);

getch();

}

What is output?

A. True

B. False

C. Complier Error

D. Run time error

Hướng dẫn

Chọn B là đáp án đúng

Xem lời giải

Xem lời giải

Biểu thức a>b>c sẽ được thực hiện từ trái sang phải. a>b trả về giá trị 1, 1>c (c=5) trả về giá trị là 0. Do vậy, lệnh printf(“False”); sẽ được thực hiện.

Tags:

void main()

void main()

{

printf(“%d “, 1);

goto l1;

printf(“%d “, 2);

l1:goto l2;

printf(“%d “, 3);

l2:printf(“%d “, 4);

getch();

}

 What is output?

A. 1 4

B. 1 2 3 4

C. Syntax error

D. Syntax error

Hướng dẫn

Chọn A là đáp án đúng

Tags:

void main()

void main()

{

int i = 5, k;

if (i == 0)

goto label;

label: printf(“%d”, i);

printf(“Hey”);

getch();

}

What is output?

A. Hey

B. 5

C. 5Hey

D. Complie error

Hướng dẫn

Chọn C là đáp án đúng

Xem lời giải

Xem lời giải

Lệnh goto label không được thực hiện, nhưng lệnh label: printf(“%d”, i); vẫn được thực hiện.

Tags: