Chủ Nhật, 7 tháng 4, 2024

12.Toán tử - Operator phần 3

Để hiểu về Toán tử, có lẽ chúng ta cần phải tiếp tục thêm mắm thêm muối chương trình tào lao.

Đây là chương trình của chúng ta trong phần trước 

/* Đây là chương trình tào lao */

#include <stdio.h>

int main()
{

    int so = 2024; // Đây là biến số

    char namtoi[] = "Năm 2025";  // Đây là biến chuỗi

    float a = 8.3462326543;
    double b = 10.8745634535333;

    int n;

    char Ten;

 
   
int soTien;

    int soNam;

    int  tongSoTien;

 
    printf("Xin Chào ! \n");
    printf("Rất vui gặp bạn!");
    printf("Năm nay là %d \n", so);
    printf("Năm tới là %s", namtoi);

    printf("In 4 chữ số sau dấu phẩy : %.4f\n", a);
    printf("In 5 chữ số sau dấu phẩy : %.5lf\n", b);
   
printf("Hãy nhập một số từ 1-100:  ");

    scanf("%d", &n);

    printf("Gía trị của n là : %d\n", n);

    printf("Nhap tên của bạn, chỉ một chữ A,B,C : ");

     scanf(" %c", &Ten);
    printf("Tên bạn là : %c\n", Ten);

     printf("Hãy nhập số tiền gửi hàng tháng:  ");
    scanf("%d", &soTien);

    printf("Hãy nhập tổng số năm đã tiết kiệm:  ");
    scanf("%d", &soNam);

   tongSoTien = (soTien * 12) * soNam;
    
    printf("Xin chào: %c, sau %d nam kien tri tich luy, ban da kiem đươc %d .Xin chuc mung ban!", Ten, soNam, tongSoTien); 

 
    return 0;
}

Chúng ta sẽ áp dụng một số toán tử đã bàn để hiểu rõ hơn về cách thức các toán tử hoạt động trong chương trình C.

Các toán tử số học không quá khó hiểu với đa số chúng ta, vì vậy ta tạm không bàn tới trong phần này. Có một số vấn đề chúng ta sẽ bàn cuối phần này.


Chúng ta sẽ "mần" Toán Tử Điều Kiện (3 Ngôi) đầu tiên.

Bạn thêm một biến x (luôn lưu ý tên biến không được trùng với các biến khác) kiểu int sau vào chương trình tào lao:

int x = 15 < 25 ? 100 : 200;

Sau đó dùng lệnh printf để xem thử biến x có giá trị bao nhiêu

printf("%d\n", x);

Bấm Run để chạy thử, kết quả vì câu hỏi "15 có nhỏ hơn 25 không" đúng nên biến x nhận giá trị là 100. Nếu thay đổi vị trí của 15 và 25 thành biểu thức 25<15 thì khi chạy chương trình, ta sẽ thấy giá trị của x là 200.

 

 


Tiếp theo là toán tử Logic. Có ba toán tử logic là AND (&&) , OR (||) , NOT (!), các toán tử logic này được sử dụng để kết hợp nhiều biểu thức so sánh và sẽ trả về đúng hoặc sai.


Cần lưu ý rằng trong C tất cả các giá trị khác 0 được coi là giá trị đúng. Để tiện, chúng ta sẽ tạm coi khi in ra màn hình số 1 có nghĩa là ĐÚNG (TRUE) nếu in ra sô 0 có ngĩa là SAI (FALSE)

Lấy lại ví dụ trong phần trước. Giả sử quy tắc cá nhân của bạn thay đổi là chỉ cần nếu bên ngoài trời nắng HOẶC bạn không có lớp học thì bạn sẽ đi biển. Tức là bây giờ không cần cả hai điều kiện, chỉ cần một trong hai điều kiện đáp ứng thì bạn sẽ đi biển. Chúng ta đang sử dụng toán tử OR (||) để quyết định có đi biển không.
 

Vì chúng ta chưa thảo vận về chuỗi-String nên tạm thời ta sẽ chỉ ví dụ tương đối.
Bạn thêm hai biến sau vào chương trình:

    int diBien1= (10 < 20) && (20 >= 20);
    int diBien2= (10 > 20) || (20 < 10);


Tạm hình dung trong biến diBien1, 2 biểu thức 10<20 và 20>=20 tương đương với trời nắng VÀ bạn không có lớp học và đều ĐÚNG, vì vậy kết quả sẽ là ĐÚNG
Còn biến diBien2, 2 biểu thức 10>20 và 20<10 tương đương với trời nắng HOẶC bạn không có lớp học và đều SAI, vì vậy kết quả sẽ là SAI

Dùng lệnh in hai biến ra ta sẽ có kết quả 1 0, tương đương với ĐÚNG SAI.

   printf("%d, %d\n", diBien1,diBien2);

Đây là chương trình sau khi thêm hai biến và lệnh prinft.

/* Đây là chương trình tào lao */

#include <stdio.h>

int main()
{

    int so = 2024; // Đây là biến số

    char namtoi[] = "Năm 2025";  // Đây là biến chuỗi

    float a = 8.3462326543;
    double b = 10.8745634535333;

    int n;

    char Ten;

 
   
int soTien;

    int soNam;

    int  tongSoTien;

    int x = 15 < 25 ? 100 : 200;
    
    int diBien1= (10 < 20) && (20 >= 20);
    int diBien2= (10 > 20) || (20 < 10);

 
    printf("Xin Chào ! \n");
    printf("Rất vui gặp bạn!");
    printf("Năm nay là %d \n", so);
    printf("Năm tới là %s", namtoi);

    printf("In 4 chữ số sau dấu phẩy : %.4f\n", a);
    printf("In 5 chữ số sau dấu phẩy : %.5lf\n", b);
   
printf("Hãy nhập một số từ 1-100:  ");

    scanf("%d", &n);

    printf("Gía trị của n là : %d\n", n);

    printf("Nhap tên của bạn, chỉ một chữ A,B,C : ");

     scanf(" %c", &Ten);
    printf("Tên bạn là : %c\n", Ten);

     printf("Hãy nhập số tiền gửi hàng tháng:  ");
    scanf("%d", &soTien);

    printf("Hãy nhập tổng số năm đã tiết kiệm:  ");
    scanf("%d", &soNam);

   tongSoTien = (soTien * 12) * soNam;
    
    printf("Xin chào: %c, sau %d nam kien tri tich luy, ban da kiem đươc %d .Xin chuc mung ban!", Ten, soNam, tongSoTien); 

   printf("%d\n", x);
    printf("%d, %d\n", diBien1,diBien2);

 

 
    return 0;
}




Các toán tử so sánh cũng sẽ trả về một trong hai giá trị TRUE hay FALSE nên ta hoàn toàn có thể dễ dàng thử chỉ với lệnh prinft.

Bạn có thể thử vài toán tử như sau, thêm các lệnh printf vào chương trình tào lao của chúng ta. 

    printf("%d ", 100 > 50);
    printf("%d ", 20 <= 30);
    printf("%d ", 80 >= 100);

Bấm Run để chạy thử ta sẽ thấy kết quả như sau 

 

 


 

Đây là chương trình của chúng ta:

/* Đây là chương trình tào lao */

#include <stdio.h>

int main()
{

    int so = 2024; // Đây là biến số

    char namtoi[] = "Năm 2025";  // Đây là biến chuỗi

    float a = 8.3462326543;
    double b = 10.8745634535333;

    int n;

    char Ten;

 
   
int soTien;

    int soNam;

    int  tongSoTien;

    int x = 15 < 25 ? 100 : 200;
    
    int diBien1= (10 < 20) && (20 >= 20);
    int diBien2= (10 > 20) || (20 < 10); 

 

 
    printf("Xin Chào ! \n");
    printf("Rất vui gặp bạn!");
    printf("Năm nay là %d \n", so);
    printf("Năm tới là %s", namtoi);

    printf("In 4 chữ số sau dấu phẩy : %.4f\n", a);
    printf("In 5 chữ số sau dấu phẩy : %.5lf\n", b);
   
printf("Hãy nhập một số từ 1-100:  ");

    scanf("%d", &n);

    printf("Gía trị của n là : %d\n", n);

    printf("Nhap tên của bạn, chỉ một chữ A,B,C : ");

     scanf(" %c", &Ten);
    printf("Tên bạn là : %c\n", Ten);

     printf("Hãy nhập số tiền gửi hàng tháng:  ");
    scanf("%d", &soTien);

    printf("Hãy nhập tổng số năm đã tiết kiệm:  ");
    scanf("%d", &soNam);

   tongSoTien = (soTien * 12) * soNam;
    
    printf("Xin chào: %c, sau %d nam kien tri tich luy, ban da kiem đươc %d .Xin chuc mung ban!", Ten, soNam, tongSoTien); 

   printf("%d\n", x);
    printf("%d, %d\n", diBien1,diBien2);

    printf("%d ", 100 > 50);
    printf("%d ", 20 <= 30);
    printf("%d ", 80 >= 100);

 
    return 0;
}

 

Chúng ta đã sử dụng toán tử gán đơn giản chúng ta dùng trong chương trình tào lao ngay từ khởi đầu với biến int so = 2024;

Chúng ta đã gán giá trị 2024 cho biến so.

Chúng ta thử với một toán tử gán khác. Thêm code sau vào chương trình:

so +=10;

Bấm Run để chạy chương trình, ta sẽ thấy dòng chữ Năm nay là năm 2034!

Đất VIệt Lập Trình Toán Tử phần 3
 

Đó là vì so +=10; tương đương với so = so + 10; Bạn viết code kiểu nào cũng được.

Cuối cùng, ta quay lại với toán tử số học. Có mấy lưu ý sau.

Lưu ý 1: Chia nguyên và chia lấy phần thập phân

  • Nếu bạn lấy 2 số nguyên (int, long long) và chia cho nhau thì phép chia đó là phép chia nguyên, phần thập phân sẽ tự bị loại bỏ
  • Nếu bạn chia 2 số thực cho nhau hoặc 1 số nguyên với 1 số thực thì phép chia mới giữ lại phần thập phân.


Lưu ý 2: Nhân 2 số nguyên bị tràn dữ liệu

Như trong ví dụ trước, khi chúng ta gán cho biến int so một giá trị hơn 20 tỷ, chương trình sẽ cảnh báo tràn dữ liệu.


Tương tự, khi ta dùng 2 số int và nhân với nhau thì tích của 2 số này có thể vượt giới hạn của số int, ví dụ a = 10^6 và b = 10^6 thì tích của 2 số là 10^12 vượt giới hạn của số int và sẽ bị tràn. Như bài trước đã bàn, để xử lý tình huống này ta có thể lưu 2 số này ở kiểu long long, hoặc ít nhất 1 trong 2 số ở kiểu long long. Cách thứ 2 bạn có thể ép kiểu khi nhân 2 số.

 

Phần tiếp theo

Phần trước

Không có nhận xét nào:

Đăng nhận xét