Exercise 7: More Variables, Some Math

Ở bài trước chúng ta đã tìm hiểu về các kiểu biến cơ bản được khai báo trong C, bài này chúng ta sẽ tìm hiểu về các phép toán trong C, ôn lại vế các kiểu khai báo biến. Cùng thực hành nào!

Hãy tạo một file ex7.c với nội dung sau:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int bugs = 100;
    double bug_rate = 1.2;

    printf("You have %d bugs at the imaginary rate of %f.\n",
            bugs, bug_rate);

    long universe_of_defects = 1L * 1024L * 1024L * 1024L;
    printf("The entire universe has %ld bugs.\n",
            universe_of_defects);

    double expected_bugs = bugs * bug_rate;
    printf("You are expected to have %f bugs.\n",
            expected_bugs);

    double part_of_universe = expected_bugs / universe_of_defects;
    printf("That is only a %e portion of the universe.\n",
            part_of_universe);

    // this makes no sense, just a demo of something weird
    char nul_byte = '\0';
    int care_percentage = bugs * nul_byte;
    printf("Which means you should care %d%%.\n",
    care_percentage);

    return 0;
 }
Sau khi tạo xong file thì tiến hành biên dịch và run, rồi xem kết quả nhé! Nhớ sử dụng Makefile và Valgrind.

Chạy các bạn phải được như vậy nhé:

$ make ex7
cc -Wall -g ex7.c -o ex7
$ ./ex7
You have 100 bugs at the imaginary rate of 1.200000.
The entire universe has 1073741824 bugs.
You are expected to have 120.000000 bugs.
That is only a 1.117587e-07 portion of the universe.
Which means you should care 0%.
$
Đến phần giải thích code:
1. long là từ khóa để khai báo một biến big Intergers, khi in ra trong hàm printf thì dùng %ld (long decimal).
2. Khi các số được in quá nhỏ, thì chúng ta phải dùng %e để in (kí hiệu khoa học).
3. Kiểu char thì chúng ta đã học được ở bài trước rồi, bài này mình sẽ nói rõ hơn một chút. Khi chúng ta khai báo một biến kiểu char thì mặc biến kiểu char này sẽ lưu mã ASCII của kí tự được khai báo (các vấn đề về kích thước của int hay char thì được học bài sau). Ví dụ khai báo char value = ‘a’, thì biến value có giá trị là 97 (97 là mã ASCII của a). Trong bài thì kí tự ‘\0’ có mã ASCII là 0.

4. Ở đoạn cuối chúng ta thấy “%%”, cú pháp này giúp chúng ta in kí tự % ra màn hình.

Reseach

1. Các bạn hãy dùng Valgrind để chạy chương trình nhé.

2. Tìm hiểu thêm unsigned long hay chỉ là unsigned trong C.
3. Tìm hiểu về cách mà hệ thống cấp phát ô nhớ lưu biến trong C (quan trọng).

End

Advertisements