Vòng lặp for, do..while

1. What value is returned by function func()?

float func()
{    
    int r = 0, d = 0, i = 0;    
    for (i; i < 2; i++)     
    {        
        r += 5 / d;    
    }       
    return r;
}

A. 5
B. 0
C. Exception
D. Another

Đáp án

C

 

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

void main()
{
    char s[] = "man"; 
    int i; 
    for(i = 0; s[i]; i++) 
        printf("%c%c%c%c\t", s[i], *(s+i), *(i+s), i[s]); 
    getch();
}

A. mmmm aaaa nnnn
B. mmm aaa nnn
C. mmmm aaa nnn
D. Another

Đáp án

A
Giải thích: Vòng for() sẽ bắt đầu với i = 0, vòng for() sẽ kết thúc khi s[i] = NULL (kết thúc chuỗi s).
s[i] = *(s+i) = *(i+s) = i[s] : kí tự thứ i của mảng s.

 

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

void main()
{
     int i = 0;
     char ch = 'A';
     do
     {
         putchar(ch);
     }
     while(i++ < 5 || ++ch <= 'F');
     getch();
}

A. AAAAAABCDEF
B. AAAAAABCDE
C. ABCDEF
D. Another

Đáp án
A
 Giải thích: 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++ < 5 ---> 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
 ...
 i = 4 ---> in ra kí tự :AAAAA
 i = 5 ---> in ra kí tự :AAAAAA, 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.

 

4. What gets printed?

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();
}

A. 4
B. 5
C. 6
D. 3

Đáp án
C
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

 

5. What is output?

#include <stdio.h>
#include <conio.h>

void main()
{
    int k;
    for (k = -3; k < -5; k++)
        printf("Hello");
    getch();
}

A. Hello
B. Nothing
C. Complier Error
D. Run time error

Đáp án
B
Giải thích: Ở trên là cách viết tắt của vòng lặp for. Dạng đầy đủ là:
for (k = -3; k < -5; k++){    printf("Hello");}
Với k = -3 ( k > -5) nên các lệnh trong vòng for không được thực hiện.

 

6. What is output?

void main()
{
    double k = 0;
    for (k = 0.0; k < 3.0; k++);
    printf("%lf", k);
    getch();
}

A. 012
B. Run time error
C. 3
D. 2

Đáp án
C
 Giải thích: 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.

 

7. What is output?

#include <stdio.h>
int main()
{
    int i = 0;
    for (; ; ; )
        printf("In for loop\n");
    printf("After loop\n");
}

A. Complie time error
B. Infinite Loop
C. Nothing

Đáp án

A
Giải thích: Vòng lặp for() không có biểu thức khởi tạo.

 

8. What is output?

#include <conio.h>
#include <stdio.h>
int foo();
void main()
{
    int i = 0;
    for (foo(); i == 1; i = 2)
        printf("In for loop\n");
    printf("After loop\n");
    getch();
}
int foo()
{
    return 1;
}

A. In for loop
B. After loop
C. Complie error

Đáp án

B
Giải thích: biến i = 0, giá trị logic của biểu thức “i == 1” = FALSE → vòng for kết thúc. Lệnh printf(“In for loop\n”) không được thực hiện.

9. What is output?

#include <conio.h>
#include <stdio.h>

int main()
{
    int i = 0;
    while (i = 0)
        printf("True\n");
    printf("False\n");
    getch();
}

A.True

B. False

C. Complie Error

D. Another

Đáp án

B
Giải thích: Vòng while sẽ kết thúc khi biểu thức trong while là FALSE. Biểu thức i = 0 chỉ là phép gán. Giá trị của biểu thức này là 0 tương đương với FALSE. Lệnh printf(“True\n”) sẽ không được thực hiện.

 

10. What is output ?

#include <conio.h>
#include <stdio.h>
int main()
{
    int i = 0, j = 0;
    while (i < 5, j < 10)
    {
        i++;
        j++;
    }
    printf("%d, %d\n", i, j);
    getch();
}

A. 5, 5
B. 10, 10
C. Syntax error

Đáp án

B
Giải thích: Biểu thức của vòng lặp while có thể là nhiều biểu thức và vòng lặp while sẽ chỉ quan tâm đến biểu thức cuối cùng.

 

11. What is output?

#include <conio.h>
#include <stdio.h>

int main()
{
    int a = 0, i = 0, b = 0 ;
    for (i = 0; i < 5; i++)
    {
        a++;
        continue;
        b++;
    }
    printf("\n a = %d,b =%d", a, b);
    getch();
}

A. a = 5,b = 5
B. a = 4,b = 4
C. a = 5,b = 0
D. Another

Đáp án

C
Giải thích: Gặp lệnh continue, complier sẽ bỏ qua các câu lệnh tiếp theo và thực hiện hiện 1 vòng lặp mới. Như vậy, câu lệnh b++ sẽ không bao giờ được thực hiện.

12. What is output ?

void main()
{
    int i = 0;
    for (i = 0; i < 5; i++)
    if (i < 4)
    {
        printf("Hello");
        break;
    }
    getch();
}

A. Hello
B. Hello is printed 3 times
C. Hello is prined 4 times
D. Hello is printed 5 times

Đáp án

A
Giải thích: 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ó.

13. What is output?

#include <stdio.h>
#include <conio.h>
void main()
{
    int i = 0;
    for(; i <= 2; )
        printf(" %d", ++i);
    getch();
}

A. 1 2 3
B. 0 1 2 3
C. 0 1 2

Đáp án

A

 

14. What is output ?

#include <stdio.h>
#include <conio.h>
void main()
{
    int x;
    for(x = 1; x <= 5; x++);
        printf("%d", x);
    getch();
}

A.12345
B. 123456
C. 6
D. 1234

Đáp án

C

 

15. What is output?

#include <stdio.h>
#include <conio.h>
int main()
{
    int i = 3;
    while (i--)
    {
        int i = 100;
        i--;
        printf("%d ", i);
    }
    getch();
}

A. 99 99 99
B. Complier Error
C. 1

Đáp án

A
Giải thích: Nếu chương trình được biên dịch bằng trình biên dịch C, chương trình biên dịch báo lỗi vì biến chỉ được khai báo đầu hàm.

Chương trình được biên dịch C++, không xảy ra lỗi

– Câu lệnh int i = 3 là biến global. Giá trị i trong biểu thức while có giá trị khởi tạo là 3.
– Câu lệnh int i = 100 là biến local. Câu lệnh trong vòng lặp lấy giá trị i = 100.

 

16. How many times will “vncoding” is printed on screen?

#include <stdio.h>
#include <conio.h>

int main()
{
    int i = 1024;
    for (; i; i >>= 1)
        printf("\nvncoding");
    getch();
}

A. 10
B. 11
C. Infinite

Đáp án
A
Giải thích: i >>=1 -> i = i >> 1 = i/2. Mà 1024 = 2^10 = 1000000000 -> "vncoding" sẽ được in ra 10 lần.

 

17. What is output?

#include <stdio.h>
#include <conio.h>
void main()
{
    int i = 2, j = 2;
    while(i+1? --i : j++)
       printf("%d", i);
    getch();
}

A. 1
B. 2
C. Complier Error

Đáp án
A
Giải thích: i+1 = 3 (trong ngôn ngữ C, 3 có nghĩa là TRUE) -> lệnh --i = 1 được thực hiện. Trong ngôn ngữ C, 1 có nghĩa là TRUE -> in 1 ra màn hình.

 

18. What is output?

#include <stdio.h>
#include <conio.h>

void main()
{
    int i, j;
    i = j = 2;
    while(--i&&j++)
        printf("%d %d", i, j);
    getch();
}

A. 1 3
B. 1 2
C. Không in ra kí tự nào

Đáp án
A
Giải thích:
--i&&j++ = 1&&2 = 1 (TRUE), sau lệnh này i = 1 và j = 3 -> in 1 3 ra màn hình.(chú ý: trong ngôn ngữ C, vớitoán tử && cả hai toán hạng khác không thì kết quả sẽ bằng 1)
--i&&j++ = 0&&3 = 0 (FALSE) -> thoát khỏi vòng lặp

 

19. What is output?

#include <stdio.h>
#include <conio.h>

int main()
{
    int x = 011, i;
    for(i = 0; i < x; i += 3)
    {
        printf("Start ");
        continue;
        printf("End");
    }
    getch();
}

A. Start End Start End
B. Start Start Start
C. Start Start Start Start

Đáp án
B
Giải thích: 011 là số octal = 9. Lệnh printf("Start"); sẽ thực hiện 3 lần.

 

20. What is output of the following code?

#include <stdio.h>
#include <conio.h>

void main() 
{
    int s = 0;
    while (s++ < 10) 
    {
        if (s < 4 && s < 9)
            continue;
        printf(" %d ", s);
    }
    getch();
}

A. 1 2 3 4 5 6 7 8 9
B. 3 4 5 6 7 8 9
C. 4 5 6 7 8 9
D. 4 5 6 7 8 9 10

Đáp án
D
Giải thích: xét biểu thức (s++ < 10). Giá trị của biến s được tăng sau khi so sánh s < 10. Do vậy, giá trị của biến s trong vòng while từ 1 đến 10. Khi s = 1 → 3, biểu thức logic (s < 4 && s < 9) = TRUE, lệnh continue được thực hiện và câu lệnh printf bị bỏ qua. Kết quả: 4 5 6 7 8 9 10 được in ra.

 

21. What is output?

#include <stdio.h>
#include <conio.h>

void main()
{
    int i = 6;
    while(i)
    {
        if (i > 5)
        {
            i--;
        }
        i = i + 5;
        if (i > 34)
        {
            break;
        }
    }
    printf("%d", i);
    getch();
}

A. Infinite loop
B. 35
C. 38
D. 39

Đáp án
C

 

22. What is output?

#include <stdio.h>
#include <conio.h>

int print(int i);

void main()
{
    int i = 6;
    while(print(i) || --i);
    getch();
}

int print(int i)
{
    printf("%d, ", i);
    return 0;
}

A. 6, 5, 4, 3, 2, 1,
B. 6, 5, 4, 3, 2, 1, 0,
C. Complier Error
D. Infinite loop

Đáp án
A

 

23. What is output?

#include <stdio.h>
#include <conio.h>

int func(int* i);

void main()
{
    int i = 15;
    while(func(&i) && i++ > 0);
    printf("%d", i);
    getch();
}

int func(int* i)
{
    *i -= 5; 
    return(*i);
}

A. 0
B. -1
C. -2
D. -3

Đáp án
B

 

24. What is output?

#include <stdio.h>
#include <conio.h>

void main()
{
    static int i;
    int j;
    for(j = 0; j <= 5; j++)
    switch(j)
    {
        case 1: 
            i++; 
            break;
        case 2: 
            i+=2;
        case 4: 
            i /= 1;
            j += 1;
            continue;
        default: 
            --i; 
            continue;
    }
    printf ("%d", i);
    getch();
}

A. 0
B. 2
C. 3
D. -4

Đáp án
B

 

25. What is output?

#include <stdio.h>
#include <conio.h>

void main()
{
    int i, j;
    for(i = 0, j = 0; i < 5, j < 6; i++, j++)
    {
        printf("i = %d \t j = %d\n", i, j);
    }
    getch();
}

A. print i and j from 0 till 4
B. print i and j from 0 till 5
C. print i from 0 to 4, print j from 0 to 5
D. Complier Error

Đáp án
B

 

Be the first to comment

Leave a Reply

Your email address will not be published.

*