Bài 10: Thực hành câu lệnh vòng lặp trong C


Mục tiêu

Kết thúc bài học này, bạn có thể:

  • Sử dụng cấu trúc vòng lặp
  • Viết một vài chương trình:
    • Sử dụng vòng lặp ‘for’
    • Sử dụng vòng lặp ‘while’
    • Sử dụng vòng lặp ‘do…while’.

Các bước trong bài học này được trình bày chi tiết, rõ ràng và cẩn thận. Điều này giúp ta hiểu rõ về công cụ lập trình. Thực hiện theo các bước sau thật cẩn thận.


Phần I – Trong thời gian 1 giờ 30 phút đầu

10.1 Sử dụng vòng lặp ‘for’

Trong phần này chúng ta sẽ viết một chương trình sử dụng vòng lặp ‘for’. Chương trình hiển thị các số chẳn từ 1 đến 30.

Trong chương trình, một biến ‘số nguyên’, num, được khai báo. Vòng lặp ‘for’ được sử dụng để hiển thị các số chẳn đến 30. Đối số đầu tiên của vòng lặp ‘for’, khởi tạo biến num là 2. Đối số thứ hai của vòng lặp ‘for’, kiểm tra giá trị của biến có nhỏ hơn hoặc bằng 30 không. Nếu điều kiện này thỏa, lệnh trong vòng lặp được thực hiện. Lệnh ‘printf()’ được sử dụng để hiển thị giá trị của biến num.

Trong đối số thứ ba, giá trị của biến num được tăng lên 2. Trong C, num +=2 giống như num = num + 2. Lệnh ‘printf’ được thực thi khi đối số thứ hai vẫn thỏa. Một khi giá trị của biến trở nên lớn hơn 30, điều kiện không thỏa nữa và vì vậy vòng lặp không được thực thi. Dấu ngoặc nhọn {} không cần thiết khi chỉ có một câu lệnh hiện diện trong vòng lặp, nhưng việc sử dụng cặp dấu ngoặc {} là một thói quen lập trình tốt.

1. Tạo một tập tin mới.
2. Nhập vào đoạn mã lệnh sau đây trong của sổ ‘Edit Window’:


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

void main()
{
    int  num;
    clrscr();
    printf(“The even Numbers from 1 to 30 are \n “);
    for (num = 2; num <= 30; num +=2)
        printf(“%d\n”, num);
}

3. Lưu tập tin với tên for.C.
4. Biên dịch tập tin for.C.
5. Thực thi chương trinh for.C .
6. Trở về cửa sổ ‘Edit Window’.

Kết quả:

The even Numbers from 1 to 30 are
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30

10.2 Sử dụng vòng lặp ‘while’

Trong phần này chúng ta sẽ viết một chương trình sử dụng vòng lặp ‘while’. Chương trình hiển thị các số từ 10 đến 0 theo thứ tự đảo ngược.

Trong chương trình có một biến số nguyên num. Biến được khởi tạo.

Xét dòng mã lệnh sau:


while (num >= 0)
{    
     printf(“\n%d”, num);
     num--;
}

Lệnh ‘while’ kiểm tra, giá trị của biến num có lớn hơn 0 hay không. Nếu điều kiện thỏa lệnh ‘printf()’ được thực thi và giá trị của biến num giảm 1. Trong C, num–làm việc giống nhu num = num –1. Vòng lặp ‘while’ vẫn tiếp tục khi giá trị của biến lớn hơn 1 hoặc bằng 0.

1. Tạo một tập tin mới.
2. Nhập vào đoạn mã lệnh sau đây trong của sổ ‘Edit Window’:


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

void main()
{
    int  num;
    clrscr();
    num = 10;
    printf(“\n Countdown“);

    while (num >= 0)
    {
       printf(“\n%d”, num);
       num--;
    }
}

3. Lưu tập tin với tên while.C.
4. Biên dịch tập tin while.C.
5. Thực thi chương trinh while.C.
6. Trở về cửa sổ ‘Edit Window’.

Kết quả:

Countdown
10
9
8
7
6
5
4
3
2
1
0

10.3 Sử dụng vòng lặp ‘do…while’

Trong phần này chúng ta sẽ viết một chương trình sử dụng vòng lặp ‘do…while’. Vòng lặp ‘do… while’ khác với vòng lặp ‘while’ là nó thực thi lệnh trước khi đánh giá biểu thức. Một điều quan trọng cần phải nhớ là, không giống như vòng lặp ‘while’, phần thân của vòng lặp ‘do’ sẽ được thực hiện ít nhất một lần. Bởi vì vòng lặp ‘while’ đánh giá biểu thức trước khi thực thi lệnh, nếu điều kiện là sai (0) ngay lúc bắt đầu, phần lệnh sẽ không bao giờ được thực thi.

Chương trình sẽ nhận vào các số nguyên và hiển thị chúng cho đến khi số 0 được nhập vào. Sau đó nó sẽ thoát khỏi vòng lặp ‘do…while’ và in ra các số nguyên đã được nhập.

Chương trình khai báo hai biến cntcnt1. Bên trong vòng lặp ‘do –while’ chúng ta sẽ nhập số bằng cách sử dụng mã lệnh sau:


printf(“\nEnter a Number: “);
scanf(“%d”,&cnt);

Lệnh bên dưới sẽ hiển thị số đã nhập:


printf(“No. is %d”, cnt);

cnt1++ sẽ tăng giá trị biến cnt1 lên 1. Giả sử nếu chúng ta nhập vào số 0, trước hết nó sẽ in giá trị và sau đó kiểm tra điều kiện. Trong trường hợp này điều kiện là sai. Nó sẽ thoát khỏi vòng lặp và in giá trị của biến cnt1. Biến cnt1 được giảm một đơn vị trước khi in ra bởi vì số nguyên cuối cùng (0) không được đếm.

1. Tạo một tập tin mới.
2. Nhập vào đoạn mã lệnh sau đây trong của sổ ‘Edit Window’:


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

void main()
{
int  cnt = 0, num;
clrscr();

do
{
    printf(“\n Enter a Number: “);
    canf(“%d”, &num);
    printf(“No. is %d”, num);
    cnt++;
} while (num != 0);

printf(“\n The total numbers entered were %d”, --cnt);
}

3. Lưu tập tin với tên dowhile.C.
4. Biên dịch tập tin dowhile.C.
5. Thực thi chương trinh dowhile.C.
6. Trở về cửa sổ ‘Edit Window’.

Kết quả:

Enter a number 11
No is 11
Enter a number 50
No is 50
Enter a number 0
No is 0
The total numbers entered were 2

10.4 Sử dụng lệnh break

Lệnh break giúp thoát ra khỏi vòng lặp for, while, do-while hay lệnh switch ngay lập tức.

Chương trình sau minh họa các dùng của lệnh break.

Quan sát đoạn mã lệnh sau:


for (cnt = 1; cnt <= 10; cnt++)
{    
     if (cnt == 5)
     break;
     printf(“%d\n”, cnt);
}

Đoạn mã lệnh trên sử dụng một vòng lặp ‘for’ để in ra các giá trị từ 1 đến 10. Giá trị của biến cnt được khởi tạo là 1, và sau đó nó sẽ kiểm tra điều kiện. Nếu điều kiện là đúng, nó sẽ thực thi các câu lệnh bên trong vòng lặp.

Trong trường hợp này, chương trình chỉ in ra 1, 2, 3, 4. Khi giá trị của biến cnt là 5, điều kiện if trở nên đúng, và điều khiển sẽ thoát khỏi vòng lặp.

1. Tạo một tập tin mới.
2. Nhập vào đoạn mã lệnh sau đây trong của sổ ‘Edit Window’:


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

void main()
{
    int  cnt;
    clrscr();

    for (cnt = 1; cnt <= 10; cnt ++)
    {
       if (cnt == 5)
       break;
       printf(“%d\t”, cnt);
    }
}

3. Lưu tập tin với tên breakex.C.
4. Biên dịch tập tin breakex.C.
5. Thực thi chương trinh breakex.C.
6. Trở về cửa sổ ‘Edit Window’.

Kết quả:

            1          2          3          4

10.5 Sử dụng lệnh continue

Lệnh continue khi được dùng trong một vòng lặp while, for, hoặc do-while sẽ bỏ qua tất cả các câu lệnh phía sau và lần lặp kế tiếp được thực thi.

Chương trình sau minh họa cách sử dụng của lệnh continue.

Xem đoạn mã lệnh sau:


for ( cnt = 1; cnt <=10; cnt++)
{    
    if (cnt ==5)
    continue;
    printf(“%d\t”, cnt);
}

Đoạn mã lệnh sử dụng một vòng lặp for để in ra các giá trị từ 1 đến 10. Giá trị của biến cnt được khởi tạo là 1, sau đó điều kiện sẽ được kiểm tra. Nếu điều kiện là đúng,các lệnh trong vòng lặp sẽ được thực thi.

Trong trường hợp này, chương trình chỉ in ra các số 1, 2, 3, 4, 6, 7, 8, 9 và 10. Khi giá trị của biến cnt là 5, điều kiện if trở nên đúng và điều khiển trở về đầu vòng lặp for mà không in ra giá trị 5.

1. Tạo một tập tin mới.
2. Nhập vào đoạn mã lệnh sau đây trong của sổ ‘Edit Window’:


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

void main()
{
   int  cnt;
   clrscr();
   for (cnt = 1; cnt <= 10; cnt++)
   {
      if (cnt == 5)
      continue;
      printf(“%d\t”, cnt);
   }
}

3. Lưu tập tin với tên continueex.C.
4. Biên dịch tập tin continueex.C.
5. Thực thi chương trinh continueex.C.
6. Trở về cửa sổ ‘Edit Window’.

Kết quả:

            1          2          3          4          6          7          8          9          10

Phần II: Trong thời gian 30 phút kế tiếp

  1. Tìm giai thừa của một số.

Gợi ý: Xem công thức tính giai thừa của một số :

  • n! = n * (n-1) * (n-2) * … * 1
  • 4! = 4 * 3 * 2 * 1
  • 1! = 1
  • 0! = 1

Gợi ý:

  • Nhập vào một số.
  • Khởi đầu, thiết đặt giai thừa của một số là 1.
  • Trong khi số còn lớn hơn 1.
  • Tính giai thừa của một số bằng giai thừa nhân với số đó.
  • Giảm số xuống một đơn vị.
  • In ra giai thừa.

Bài tập tự làm

  1. Khai báo một biến lưu tuổi của một người. In ra tên của người đó với số lần in bằng số tuổi.
  1. Viết chương trình sinh dãy số theo dạng sau:

1

12

123

1234

12345

123456

1234567

12345678

123456789

  1. Viết chương trình in ra bảng cửu chương của một số được nhập vào.

Có thể bạn sẽ thích…

Trả lời