Cấu trúc điều khiển trong lập trình C

By 28/12/2020Tháng Sáu 10th, 2021C/C++, KIẾN THỨC LẬP TRÌNH

Nội dung

Câu lệnh if … else trong lập trình C

Trong phần này, bạn sẽ được tìm hiểu về câu lệnh if ( bao gồm câu lệnh if…else và if … else lồng nhau) trong lập trình C thông qua các ví dụ.

Câu lệnh If trong lập trình C

Cú pháp của câu lệnh if trong lập trình C là:

if (test expression) 

{

   // statements to be executed if the test expression is true

}

Câu lệnh If hoạt động như thế nào?

Câu lệnh if sẽ đánh giá biểu thức cần kiểm tra bên trong dấu ngoặc ().

  • Nếu biểu thức cần kiểm tra được đánh giá là đúng (true) thì các câu lệnh bên trong ngoặc () của lệnh if được thực thi.
  • Nếu biểu thức cần kiểm tra được đánh giá là sai (false) thì các câu lệnh bên trong ngoặc () của lệnh if không được thực thi.

Để biết thêm thông tin về biểu thức cần kiểm tra được đánh giá là đúng (trả về giá trị khác 0) hay sai (trả về 0), hãy kiểm tra các toán tử logic và toán tử quan hệ.

 Ví dụ 1: câu lệnh if 

// Program to display a number if it is negative

 

#include <stdio.h>

int main() {

int number;

 

printf(“Enter an integer: “);

scanf(“%d”, &number);

 

// true if number is less than 0

if (number < 0) {

     printf(“You entered %d.\n”, number);

}

 

printf(“The if statement is easy.”);

 

return 0;

Đầu ra 1

Enter an integer: -2

You entered -2.

The if statement is easy.

Khi người dùng nhập -2 vào biểu thức cần kiểm tra number<0 được đánh giá là true (đúng). Do đó, You entered -2 sẽ được hiển thị trên màn hình

Đầu ra 2 

Enter an integer: 5

The if statement is easy.

Khi người dùng nhập số 5, biểu thức cần kiểm tra number<0 được đánh giá là sai (false) và câu lệnh bên trong ngoặc () của lệnh if không được thực thi. 

Câu lệnh C if … else

Câu lệnh if có thể có một khối else tùy chọn. Cú pháp của câu lệnh if … else là:

if (test expression) {

    // statements to be executed if the test expression is true

}

else {

    // statements to be executed if the test expression is false

}

Câu lệnh if … else hoạt động như thế nào?

Nếu biểu thức kiểm tra được đánh giá là đúng (true),

  • các câu lệnh bên trong phần ngoặc () của lệnh if được thực thi.
  • các câu lệnh bên trong phần ngoặc {} của lệnh else bị bỏ qua.

Nếu biểu thức kiểm tra được đánh giá là sai (false),

  • các câu lệnh bên trong phần ngoặc {} của lệnh else được thực thi
  • các câu lệnh bên trong phần ngoặc () của lệnh if bị bỏ qua

 

Ví dụ 2: câu lệnh if … else 

// Check whether an integer is odd or even

 

#include <stdio.h>

int main() {

    int number;

    printf(“Enter an integer: “);

    scanf(“%d”, &number);

 

    // True if the remainder is 0

    if  (number%2 == 0) {

     printf(“%d is an even integer.”,number);

    }

    else {

     printf(“%d is an odd integer.”,number);

    }

 

    return 0;

}

Đầu ra

 Enter an integer: 7

7 is an odd integer.

Khi người dùng nhập số 7 vào, biểu thức cần kiểm tra number%2==0 được đánh giá là sai. Do đó, câu lệnh bên trong ngoặc {} của lệnh else được thực thi.

Câu lệnh if…else ladder trong lập trình C

Câu lệnh if … else thực thi 2 mã code khác nhau tùy thuộc vào biểu thức kiểm tra đúng hay sai. Tuy nhiên, một lựa chọn có thể được thực hiện từ 2 hay nhiều khả năng.

Câu lệnh if…else ladder cho phép bạn thử nghiệm nhiều biểu thức kiểm tra và thực thi các câu lệnh khác nhau.

Cú pháp của câu lệnh if…else ladder

if (test expression1) {

   // statement(s)

}

else if(test expression2) {

   // statement(s)

}

else if (test expression3) {

   // statement(s)

}

.

.

else {

   // statement(s)

}

Ví dụ 3: Câu lệnh if … else ladder trong lập trình C

// Program to relate two integers using =, > or < symbol

 

#include <stdio.h>

int main() {

    int number1, number2;

    printf(“Enter two integers: “);

    scanf(“%d %d”, &number1, &number2);

 

    //checks if the two integers are equal.

    if(number1 == number2) {

     printf(“Result: %d = %d”,number1,number2);

    }

 

    //checks if number1 is greater than number2.

    else if (number1 > number2) {

     printf(“Result: %d > %d”, number1, number2);

    }

 

    //checks if both test expressions are false

    else {

     printf(“Result: %d < %d”,number1, number2);

    }

 

    return 0;

}

Đầu ra

Enter two integers: 12

23

Result: 12 < 23

Lệnh if…else lồng nhau

Có thể dùng một câu lệnh if … else trong phần thân của một câu lệnh if …else khác.

Ví dụ 4: Lệnh if…else lồng nhau

Lập trình dưới đây liên quan đến 2 số nguyên có sử dụng <, > = , tương tự như ví dụ của lệnh if…else ladder. Tuy nhiên, ví dụ này sẽ sử dụng câu lệnh if … else lồng nhau thay vì dùng câu lệnh if…else ladder như trên. 

#include <stdio.h>

int main() {

    int number1, number2;

    printf(“Enter two integers: “);

    scanf(“%d %d”, &number1, &number2);

 

    if (number1 >= number2) {

      if (number1 == number2) {

     printf(“Result: %d = %d”,number1,number2);

      }

      else {

     printf(“Result: %d > %d”, number1, number2);

      }

    }

    else {

     printf(“Result: %d < %d”,number1, number2);

    }

 

    return 0;

}

Nếu phần thân của câu lệnh if…else chỉ dùng một câu lệnh duy nhất thì bạn không cần sử dụng dấu ngoặc {}.

Ví dụ, mã này

if (a > b) {

print(“Hello”);

}

print(“Hi”);

tương đương với

if (a > b)

print(“Hello”);

print(“Hi”);

Loop for trong lập trình C

Trong phần này, bạn sẽ được tìm hiểu cách để tạo ra vòng lặp for trong lập trình C thông qua các ví dụ khác nhau.

Trong lập trình, vòng lặp được sử dụng để lặp đi lặp lại một khối mã cho đến khi điều kiện cụ thể được đáp ứng.

Lập trình C có ba loại vòng lặp:

  • loop for
  • loop while
  • loop do … while

Dưới đây là những thông tin chi tiết về loop for

Loop for

Cú pháp của loop for là:

for (initializationStatement; testExpression; updateStatement)

{

    // statements inside the body of loop

}

Loop for hoạt động như thế nào?

  • Câu lệnh khởi tạo chỉ được thực hiện một lần.
  • Sau đó, biểu thức kiểm tra được đánh giá. Nếu biểu thức này được đánh giá là sai (false), vòng lặp for sẽ kết thúc.
  • Tuy nhiên, nếu biểu thức kiểm tra được đánh giá là đúng (true), các câu lệnh bên trong phần thân của vòng lặp for được thực thi và biểu thức cập nhật được cập nhật.
  • Một lần nữa, biểu thức kiểm tra được đánh giá

Quá trình này diễn ra liên tục cho đến khi biểu thức kiểm tra được đánh giá là sai. Khi biểu thức kiểm tra sai, vòng lặp sẽ kết thúc.

Để hiểu rõ hơn về biểu thức kiểm tra (khi nào biểu thức kiểm tra sẽ được đánh giá là đúng và sai), xem thêm các phần toán tử quan hệ và logic.

Sơ đồ loop for

Ví dụ 1: loop for 

// Print numbers from 1 to 10

#include <stdio.h>

 

int main() {

  int i;

 

  for (i = 1; i < 11; ++i)

  {

    printf(“%d “, i);

  }

  return 0;

}

Đầu ra

 1 2 3 4 5 6 7 8 9 10

  1. i được khởi tạo từ 1.
  2. Biểu thức kiểm tra i <11 được đánh giá. Vì 1 nhỏ hơn 11 là đúng (true) nên phần thân của vòng lặp for được thực thi. Thao tác này sẽ in số 1 (giá trị của i) lên màn hình.
  3. Câu lệnh cập nhật ++ i được thực thi. Bây giờ, giá trị của i sẽ là 2. Một lần nữa, biểu thức kiểm tra được đánh giá là đúng (true), và phần thân của vòng lặp for được thực thi. Do đó, sẽ in số 2 (giá trị của i) lên màn hình.
  4. Sau đó, câu lệnh cập nhật ++i được thực thi và biểu thức kiểm tra i <11 được đánh giá. Quá trình này diễn ra liên tục cho đến khi i chạm ngưỡng số 11.
  5. Khi i chạm ngược số 11, biểu thức kiểm tra i <11 sẽ là sai (false) và vòng lặp for kết thúc.

Ví dụ 2: loop for

// Program to calculate the sum of first n natural numbers

// Positive integers 1,2,3…n are known as natural numbers

 

#include <stdio.h>

int main()

{

    int num, count, sum = 0;

 

    printf(“Enter a positive integer: “);

    scanf(“%d”, &num);

 

    // for loop terminates when num is less than count

    for(count = 1; count <= num; ++count)

    {

     sum += count;

    }

 

    printf(“Sum = %d”, sum);

 

    return 0;

}

Output

Enter a positive integer: 10

Sum = 55

Giá trị do người dùng nhập vào được lưu trữ trong biến num. Giả sử người dùng nhập số 10.

Biến count được khởi tạo từ 1 và biểu thức kiểm tra được đánh giá. Bởi vì biểu thức kiểm tra count<=num (1 nhỏ hơn hoặc bằng 10) đúng nên phần thân của vòng lặp for được thực thi và giá trị của sum sẽ là 1.

Tiếp theo, câu lệnh cập nhật ++count được thực thi và số đếm sẽ bằng 2. Một lần nữa, biểu thức kiểm tra tiếp tục được thực thi. Bởi vì 2 cũng nhỏ hơn 10 nên biểu thức kiểm tra được đánh giá là đúng (true) và phần thân trong vòng lặp for được thực thi. Bây giờ, tổng sẽ bằng 3.

Quá trình này diễn ra liên tục và tiếp tục tính tổng cho đến khi biến count đạt đến số 11.

Khi biến count đạt ngưỡng 11, biểu thức kiểm tra được đánh giá là 0 (sai) và vòng lặp kết thúc.

Sau đó, giá trị của sum được in ra màn hình.

Trong những chương tiếp theo, tôi sẽ trình bày về vòng lặp while và vòng lặp do … while.

Loop while trong lập trình C

Trong phần này, bạn sẽ được tìm hiểu về vòng lặp while và do…while trong lập trình C thông qua nhiều ví dụ khác nhau.

Trong lập trình, các vòng lặp được sử dụng để lặp đi lặp lại một khối mã cho đến khi điều kiện cụ thể được đáp ứng.

Lập trình C có ba loại vòng lặp.

  1. vòng lặp for
  2. vòng lặp while
  3. vòng lặp do … while

Dưới đây là thông tin chi tiết về vòng lặp while và vòng lặp do…while

Loop while

Cấu trúc của loop while

while (testExpression)

{

    // statements inside the body of the loop

}

Loop while hoạt động như thế nào? 

  • Loop while đánh giá biểu thức kiểm tra bên trong dấu ngoặc đơn ().
  • Nếu biểu thức kiểm tra là đúng (true), các câu lệnh bên trong phần thân của vòng lặp while sẽ được thực thi. Và biểu thức kiểm tra tiếp tục được đánh giá thêm một lần nữa.
  • Quá trình này diễn ra liên tục cho đến khi biểu thức kiểm tra được đánh giá là sai (false).
  • Nếu biểu thức kiểm tra là sai, vòng lặp sẽ kết thúc.

Để tìm hiểu kỹ hơn về biểu thức kiểm tra (khi nào biểu thức kiểm tra được đánh giá là đúng và sai), xem thêm các toán tử quan hệ và toán tử logic.

Sơ đồ của loop while

 Ví dụ 1: loop while

// Print numbers from 1 to 5

 

#include <stdio.h>

int main()

{

    int i = 1;

   

    while (i <= 5)

    {

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

     ++i;

    }

 

    return 0;

}

Đầu ra

1

2

3

4

5

Trường hợp này, tôi khởi tạo i từ 1.

  • Khi i là 1, biểu thức kiểm tra i<= 5 đúng. Do đó, phần thân của vòng lặp while được thực thi. Nhờ đó, 1 sẽ được in lên màn hình và giá trị của i tăng lên 2.
  • Khi i bằng 2, biểu thức kiểm tra i<= 5 lại đúng. Phần thân của vòng lặp while được thực thi lại. Khi đó, 2 sẽ được in trên màn hình và giá trị của i tiếp tục tăng lên 3.
  • Quá trình này diễn ra liên tục cho đến khi i đạt ngưỡng 6. Khi i bằng 6, biểu thức kiểm tra i<= 5 sẽ là sai và vòng lặp kết thúc.

Loop do … while

vòng lặp do … while tương tự như vòng lặp while nhưng có một điểm khác biệt: phần thân của vòng lặp do … while được thực thi ít nhất 1 lần thì biểu thức kiểm tra mới được đánh giá.

Cú pháp của vòng lặp do … while là:

do

{

   // statements inside the body of the loop

}

while (testExpression); 

Loop do…while hoạt động như thế nào?

  • Phần thân của vòng lặp do … while được thực thi ít nhất 1 lần thì biểu thức kiểm tra mới được đánh giá.
  • Nếu biểu thức kiểm tra đúng, phần thân của vòng lặp được thực thi lại và biểu thức kiểm tra được đánh giá.
  • Quá trình này diễn ra liên tục cho đến khi biểu thức kiểm tra được đánh giá là sai.
  • Nếu biểu thức kiểm tra là sai, vòng lặp kết thúc.

Sơ đồ loop do … while

 Ví dụ 2: loop do … while

// Program to add numbers until the user enters zero

#include <stdio.h>

int main()

{

    double number, sum = 0;

    // the body of the loop is executed at least once

    do

    {

     printf(“Enter a number: “);

     scanf(“%lf”, &number);

     sum += number;

    }

    while(number != 0.0);

 

    printf(“Sum = %.2lf”,sum);

 

    return 0;

}

Output

Enter a number: 1.5

Enter a number: 2.4

Enter a number: -3.4

Enter a number: 4.2

Enter a number: 0

Sum = 4.70

Lệnh break và continue trong lập trình C

Trong phần này, bạn sẽ được tìm hiểu về cách sử dụng câu lệnh break và continue thông qua các ví dụ khác nhau.

Lệnh break trong lập trình C

Câu lệnh break kết thúc một vòng lặp ngay khi biểu thức trong vòng lặp này không đáp ứng điều kiện. Cú pháp câu lệnh break như sau:

break;

Lệnh break luôn được sử dụng cùng với câu lệnh if … else bên trong vòng lặp.

Câu lệnh break hoạt động như thế nào?

Ví dụ 1: câu lệnh break

// Program to calculate the sum of numbers (10 numbers max)

// If the user enters a negative number, the loop terminates

 

#include <stdio.h>

 

int main() {

   int i;

   double number, sum = 0.0;

 

   for (i = 1; i <= 10; ++i) {

      printf(“Enter a n%d: “, i);

      scanf(“%lf”, &number);

 

      // if the user enters a negative number, break the loop

      if (number < 0.0) {

      break;

      }

 

      sum += number; // sum = sum + number;

   }

 

   printf(“Sum = %.2lf”, sum);

 

   return 0;

}

Output

Enter a n1: 2.4

Enter a n2: 4.5

Enter a n3: 3.4

Enter a n4: -3

Sum = 10.30

Lập trình này tính tổng tối đa 10 số. Vì sao chỉ tối đa được 10 số. Bởi vì nếu người dùng nhập vào một số âm, câu lệnh break sẽ được thực thi. Điều này có nghĩa là vòng lặp for sẽ kết thúc và sum được hiển thị ra màn hình.

Trong lập trình C, lệnh break cũng được sử dụng với câu lệnh switch. Tôi sẽ trình bày rõ vấn đề này trong những phần tiếp theo

Lệnh continue trong lập trình C

Câu lệnh continue sẽ bỏ qua lần lặp hiện tại của vòng lặp và tiếp tục lần lặp tiếp theo. Cú pháp của lệnh break là:

continue;

Câu lệnh continue luôn được sử dụng với câu lệnh if…else.

Câu lệnh continue hoạt động như thế nào?

Ví dụ 2: câu lệnh continue

// Program to calculate the sum of numbers (10 numbers max)

// If the user enters a negative number, it’s not added to the result

 

#include <stdio.h>

int main() {

   int i;

   double number, sum = 0.0;

 

   for (i = 1; i <= 10; ++i) {

      printf(“Enter a n%d: “, i);

      scanf(“%lf”, &number);

 

      if (number < 0.0) {

      continue;

      }

 

      sum += number; // sum = sum + number;

   }

 

   printf(“Sum = %.2lf”, sum);

 

   return 0;

}

Output

 

Enter a n1: 1.1

Enter a n2: 2.2

Enter a n3: 5.5

Enter a n4: 4.4

Enter a n5: -3.4

Enter a n6: -45.5

Enter a n7: 34.5

Enter a n8: -4.2

Enter a n9: -1000

Enter a n10: 12

Sum = 59.70

Trong lập trình này, khi người dùng nhập một số dương thì kết quả tổng sẽ được tính bằng câu lệnh sum += number;

Khi người dùng nhập một số âm, lệnh continue sẽ được thực thi và nó sẽ bỏ qua số âm đó, không cộng vào tổng.

Lệnh switch…case trong lập trình C

Lệnh switch trong lập trình C

Trong phần này, bạn sẽ được học cách tạo câu lệnh switch trong lập trình C thông qua các ví dụ.

Câu lệnh switch cho phép thực thi một khối mã nhất định trong vô số khối mã khác.

Câu lệnh switch có chức năng tương tự với câu lệnh if…else..if ladder nhưng cú pháp của nó dễ đọc và dễ viết hơn.

Cú pháp của câu lệnh switch…case

switch (expression)

​{

    case constant1:

      // statements

      break;

 

    case constant2:

      // statements

      break;

    .

    .

    .

    default:

      // default statements

}

Câu lệnh switch hoạt động như thế nào?

expression được đánh giá một lần và được so sánh với các giá trị của mỗi case label (nhãn trường hợp).

  • Nếu khớp, các câu lệnh tương ứng sau nhãn khớp sẽ được thực thi. Ví dụ, nếu giá trị của biểu thức bằng constant2, câu lệnh sau constant2 sẽ được thực thi cho tới khi câu lệnh break diễn ra
  • Nếu không khớp, câu lệnh mặc định được thực thi

Nếu không sử dụng lệnh break, tất cả các câu lệnh sau nhãn khớp sẽ được thực thi.

Lưu ý, mệnh đề default  trong câu lệnh switch là tùy chọn.

Sơ đồ câu lệnh switch

 

 Ví dụ: Phép tính đơn giản

// Program to create a simple calculator

#include <stdio.h>

 

int main() {

    char operator;

    double n1, n2;

 

    printf(“Enter an operator (+, -, *, /): “);

    scanf(“%c”, &operator);

    printf(“Enter two operands: “);

    scanf(“%lf %lf”,&n1, &n2);

 

    switch(operator)

    {

     case ‘+’:

         printf(“%.1lf + %.1lf = %.1lf”,n1, n2, n1+n2);

         break;

 

     case ‘-‘:

         printf(“%.1lf – %.1lf = %.1lf”,n1, n2, n1-n2);

         break;

 

     case ‘*’:

         printf(“%.1lf * %.1lf = %.1lf”,n1, n2, n1*n2);

            break;

 

     case ‘/’:

         printf(“%.1lf / %.1lf = %.1lf”,n1, n2, n1/n2);

         break;

 

     // operator doesn’t match any case constant +, -, *, /

     default:

         printf(“Error! operator is not correct”);

    }

 

    return 0;

}

Output

        

Enter an operator (+, -, *,): –

Enter two operands: 32.5

12.4

32.5 – 12.4 = 20.1

Toán hạng do người dùng nhập vào sẽ được lưu trữ trong biến operator. Hai toán hạng 32.5 12.4 lần lượt là các biến n1n2.

Vì toán tử là nên điều khiển của lập trình sẽ chuyển sang

printf(“%.1lf – %.1lf = %.1lf”, n1, n2, n1-n2);

Cuối cùng, câu lệnh break kết thúc câu lệnh switch.

Lệnh goto trong lập trình C

Trong phần này, bạn sẽ được học cách tạo câu lệnh goto trong lập trình C cũng như khi nào nên và không nên sử dụng nó.

Câu lệnh goto cho phép chuyển quyền điều khiển lập trình đến nhãn khác đã được chỉ định.

Cú pháp của câu lệnh goto

goto label;

… .. …

… .. …

label:

statement;

Label là một định danh. Khi câu lệnh goto diễn ra, điều khiển lập trình sẽ nhảy đến label và bắt đầu thực thi mã.

 

Ví dụ: Câu lệnh goto

// Program to calculate the sum and average of positive numbers

// If the user enters a negative number, the sum and average are displayed.

 

#include <stdio.h>

 

int main() {

 

   const int maxInput = 100;

   int i;

   double number, average, sum = 0.0;

 

   for (i = 1; i <= maxInput; ++i) {

   printf(“%d. Enter a number: “, i);

   scanf(“%lf”, &number);

  

   // go to jump if the user enters a negative number

   if (number < 0.0) {

      goto jump;

   }

   sum += number;

   }

 

jump:

   average = sum / (i – 1);

  printf(“Sum = %.2f\n”, sum);

   printf(“Average = %.2f”, average);

 

   return 0;

}

Đầu ra

  1. Enter a number: 3
  2. Enter a number: 4.3
  3. Enter a number: 9.3
  4. Enter a number: -2.9

Sum = 16.60

Average = 5.53

Vì sao nên tránh sử dụng lệnh goto?

Sử dụng lệnh goto có thể khiến cho mã code bị sai và khó theo dõi. Ví dụ:

one:

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

{

test += i;

goto two;

}

two:

if (test > 5) {

  goto three;

}

… .. …

Câu lệnh goto đôi khi lại nhảy ra khỏi phạm vi. Thế nhưng, lệnh goto cũng mang lại một vài lợi ích nhất định, chẳng hạn như thoát khỏi các vòng lặp lồng nhau.

Khi nào nên sử dụng lệnh goto?

Nếu muốn đơn giản hóa lập trình của mình, bạn có thể sử dụng lệnh goto. Tuy nhiên, câu lệnh goto ít mang lại lợi ích cho lập trình. Do đó, bạn không nhất thiết phải dùng lệnh goto trong các lập trình trong C.

Để lại một câu trả lời