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
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.
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.
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
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.
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
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.
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.
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.
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.
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ó.
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.
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.
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
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.
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.
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.
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.
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.
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’.
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.
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.
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ẽ:
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.
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.
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.