Bài tập lập trình C cơ bản
-
Trên Dev C++, viết chương trình xuất ra màn hình câu "Hello World!". (Hãy nộp mã nguồn kèm ảnh chụp kết quả chạy bằng cú pháp Markdown của CSDN; các bài sau làm tương tự, không nhắc lại.)
#include <stdio.h> int main() { const char *thongDiep = "Hello World!"; printf("%s\n", thongDiep); return 0; } -
Trên Dev C++, tạo một dự án mới, nhập chương trình dưới đây và quan sát kết quả.
#include <stdio.h> int main() { int soNguyen = 1; float soThuc = 2.5; char kyTu = 'A'; printf("soNguyen = %d\n", soNguyen); // Xuất biến soNguyen theo định dạng số nguyên printf("soThuc = %f\n", soThuc); // Xuất biến soThuc theo định dạng số thực printf("kyTu = %c\n", kyTu); // Xuất biến kyTu theo định dạng ký tự printf("end of program\n"); // Xuất một dòng chuỗi return 0; } -
Trên Dev C++, tạo một dự án mới, nhập chương trình dưới đây và quan sát kết quả.
#include <stdio.h> int main() { const char *tenKieu[] = {"char", "int", "short int", "long int", "float", "double"}; size_t kichThuoc[] = {sizeof(char), sizeof(int), sizeof(short int), sizeof(long int), sizeof(float), sizeof(double)}; int soLuong = 6; printf("Data type Number of bytes\n"); printf("----------- -------------------------\n"); for (int i = 0; i < soLuong; ++i) { printf("%-20s %d\n", tenKieu[i], (int)kichThuoc[i]); } return 0; } -
Nhập chương trình "Chuyển đổi nhiệt độ" trong sách (trang P48) và quan sát kết quả.
#include <stdio.h> double chuyenDoiNhietDo(double doF) { return 5 * (doF - 32) / 9; } int main() { double nhietDoF = 100; double nhietDoC = chuyenDoiNhietDo(nhietDoF); printf("Nhiet do %5.2f do F tuong ung voi %5.2f do C\n", nhietDoF, nhietDoC); return 0; } -
Nhập chương trình "Chu vi tam giác" trong sách (trang P52) và quan sát kết quả.
#include <stdio.h> int tinhChuVi(int a, int b, int c) { return a + b + c; } int main() { int canh1 = 6, canh2 = 5, canh3 = 5; int chuVi = tinhChuVi(canh1, canh2, canh3); printf("Chu vi tam giac la: %d\n", chuVi); return 0; } -
Bài toán tràn số:
short giaTri = 32767; giaTri += 1; printf("%d", giaTri);Kết quả in ra là:
giaTri = -32768. Hãy phân tích vì sao lại có giá trị này.Trả lời: Kiểu
shortchiếm 2 byte, giá trị tối đa là 32767. 2 byte = 16 bit nên có 216 = 65536 giá trị biểu diễn được. Do đó, miền giá trị củashortlà -32768 đến 32767. Khi thực hiệngiaTri += 1vớigiaTri = 32767, phép cộng gây ra tràn số và dẫn đến hiệu ứng quay vòng: giá trị quay trở lại đầu miền, tức là -32768. -
Tính giá trị các biểu thức:
- (a) -30 * 3 + 21 / 6 = -6.5
- (b) -30 + 3 * 21 / 6 = -19.5
- (c) 30 / 3 * 21 % 6 = 0
- (d) -30 / 3 * 21 % 4 = -2
-
Giả sử i, j, k đều là số nguyên, hãy giải thích ý nghĩa của biểu thức
i != j < k.Trả lời: Với i, j, k đều là số nguyên, biểu thức bắt đầu bằng việc kiểm tra
j < k, thu được một giá trị boolean, sau đó kiểm trai != j. Ví dụ, giả sử a = 1, b = 2, c = 3: trước tiên kiểm tra b < c, tức 2 < 3 là đúng; sau đó kiểm tra a != b, tức 1 != 2 là đúng. -
Giả sử có khai báo:
int i; double d;Sau khi thực hiện các phép gán, giá trị của i và d là bao nhiêu?
- (a)
d = i = 3.5;— i = 3, d = 3.0 - (b)
i = d = 3.5;— i = 3, d = 3.5
- (a)
-
Hãy tra cứu tài liệu để tìm hiểu về "toán tử điều kiện" (conditional operator): cú pháp, ví dụ,…
Trả lời: Toán tử điều kiện, còn gọi là toán tử ba ngôi, là toán tử ba ngôi duy nhất trong C. Cú pháp của nó là:
biểu_thức_1 ? biểu_thức_2 : biểu_thức_3Ý nghĩa: nếu
biểu_thức_1nhận giá trị đúng, toàn bộ biểu thức nhận giá trị củabiểu_thức_2; ngược lại, nó nhận giá trị củabiểu_thức_3.Ví dụ:
- Tìm giá trị lớn nhất trong hai số:
max = (a > b) ? a : b; - Tính phí mạng: nếu số ngày mua từ 30 trở lên thì tính 0,75 * số ngày, ngược lại tính theo giá gốc:
price = (days >= 30) ? 0.75 * days : days;
- Tìm giá trị lớn nhất trong hai số: