- Hướng dẫn lập trình C phần 2
Giới thiệu
- Một số đoạn mã có thể không chạy đúng do được viết trực tiếp mà chưa kiểm tra.
- Nếu gặp lỗi, hãy liên hệ qua email: example@example.com.
- Nên sử dụng trình biên dịch thay vì viết tay mã nguồn:
- Trình biên dịch sẽ chỉ ra ngay lỗi trong mã của bạn, còn sách không.
- Dễ dàng sửa chữa lỗi so với việc sửa trên giấy.
- Viết mã trực tiếp tiết kiệm giấy.
- Học lập trình hiệu quả hơn khi nhận phản hồi tức thì từ trình biên dịch.
- Nên thử nghiệm trên trình biên dịch trước khi viết lại trên giấy.
Kiến thức cơ bản (Thi cử)
- Đặc điểm của thuật toán: hữu hạn, xác định, khả thi, có thể có hoặc không có đầu vào, ít nhất một đầu ra.
- Cấu trúc chương trình: tuần tự, nhánh, lặp.
Xuất dữ liệu
- Định dạng xuất trong C là
printf(""), nội dung trong dấu ngoặc kép sẽ được hiển thị. - Lưu ý hầu hết các ký hiệu và chữ đều là tiếng Anh, bao gồm cả dấu câu.
- Ký hiệu
;ở cuối câu lệnh không được bỏ.
#include <stdio.h>
int main(){
printf("HelloWorld-123");
}
Mã trên sẽ hiển thị: HelloWorld-123. Phần còn lại là cấu trúc bắt buộc khi viết mã.
Ký tự thoát
- Có một số ký tự thoát trong C, định dạng:
\ký_tự, ví dụ:\nđại diện cho xuống dòng.
#include <stdio.h>
int main(){
printf("Hello\nWorld");
}
Mã trên sẽ hiển thị:
Hello
World
Bình luận
- Bình luận trong C có thể là đơn dòng hoặc nhiều dòng. Chúng không được thực thi.
- Định dạng bình luận đơn dòng là
//, nhiều dòng là/* */.
#include <stdio.h>
int main(){
printf("Hello\n");
//printf("World");
printf("123");
}
Xuất hằng số
- Định dạng kiểu dữ liệu:
%d(int),%f(float),%lf(double). - Số lượng ký hiệu
%trong chuỗi phải tương ứng với số lượng biến sau đó. - Các biến sau dấu phẩy được phân cách bằng dấu phẩy.
#include <stdio.h>
int main(){
printf("%d", 123);
printf("\n%f", 3.14);
printf("\n%d %f", 123, 3.14);
printf("\n%d", 3.14);
printf("\n%.2lf %.3lf %.3lf", 3.1415, 3.1415, 3.1414);
}
Hằng số (Thi cử)
Hằng số nguyên
- Hệ thập phân không có tiền tố, bao gồm các chữ số từ 0 đến 9.
- Hệ bát phân bắt đầu bằng số 0, bao gồm các chữ số từ 0 đến 7.
- Hệ thập lục phân bắt đầu bằng 0x hoặc 0X, bao gồm các chữ số từ 0 đến 9 và chữ cái từ A đến F hoặc a đến f.
Hằng số thực
- Định dạng thập phân: bao gồm dấu âm hoặc dương, chữ số từ 0 đến 9 và tối đa một dấu chấm thập phân.
- Định dạng số mũ: bao gồm số nhị phân, ký hiệu số mũ e hoặc E và số mũ.
Tên biến và biến
- Tên biến chỉ bao gồm chữ cái, số và dấu gạch dưới, không bắt đầu bằng số.
- Tên biến không được trùng với từ khóa.
- Phân biệt chữ hoa và chữ thường.
#include <stdio.h>
int main(){
int score;
score = 100;
printf("%d", score);
}
Toán tử gán
#include <stdio.h>
int main(){
int x = 50;
float y = 3.14;
int tong = x + y;
float tong2 = x + y;
printf("%d %f", x, y);
printf("\n%d %.2f", tong, tong2);
}
Hoán đổi giá trị biến
#include <stdio.h>
int main(){
int a = 5, b = 10, temp;
temp = a;
a = b;
b = temp;
printf("a=%d, b=%d", a, b);
}
Nhập dữ liệu
- Định dạng nhập:
scanf("%d", &a), cần sử dụng ký hiệu&để chỉ địa chỉ biến.
#include <stdio.h>
int main(){
int x, y, z;
printf("Nhập 3 số nguyên: ");
scanf("%d %d %d", &x, &y, &z);
printf("x=%d, y=%d, z=%d", x, y, z);
}
Toán tử chia lấy dư
- Kết quả của phép chia lấy dư là số dư khi số bị chia không chia hết cho số chia.
#include <stdio.h>
int main(){
printf("%d\n", 7 % 3);
printf("%d\n", 21 % 3);
printf("%d\n", 21 % 10);
printf("%d\n", 21 % 11);
}
Chức năng toán học
- Sử dụng thư viện
math.hkhi sử dụng các hàm toán học.
| Hàm | Mô tả | Ví dụ |
|---|---|---|
| pow(x,y) | Tính x^y | pow(2,5)=32.000000 |
| rand() | Tạo số ngẫu nhiên từ 0 đến 1 | rand()%900+100 tạo số ngẫu nhiên 3 chữ số |
| sqrt(x) | Tính căn bậc hai của x | sqrt(36)=6.000000 |
| abs(x) | Tính giá trị tuyệt đối của số nguyên x | abs(-5)=5 |
| fabs(x) | Tính giá trị tuyệt đối của số thực x | fabs(-3.14)=3.14 |
| floor(x) | Tìm số nguyên lớn nhất nhỏ hơn hoặc bằng x | floor(3.14)=3.000000 |
| ceil(x) | Tìm số nguyên nhỏ nhất lớn hơn hoặc bằng x | ceil(3.14)=4.000000 |
| log(x) | Tính logarit tự nhiên của x | log(2)=0.693147 |
| exp(x) | Tính e^x | exp(2)=7.389056 |
Toán tử gán hợp thành
- Các toán tử cộng, trừ, nhân, chia, chia lấy dư có thể kết hợp với toán tử gán.
#include <stdio.h>
int main(){
int a = 10;
a += 5; // Tương đương a = a + 5;
printf("%d", a);
}
Toán tử tăng/giảm
- i++ hoặc ++i: Tăng giá trị của i lên 1.
- i-- hoặc --i: Giảm giá trị của i xuống 1.
#include <stdio.h>
int main(){
int i = 5;
printf("%d\n", ++i); // Hiển thị 6
printf("%d\n", i--); // Hiển thị 6
printf("%d\n", i); // Hiển thị 5
}
Toán tử phẩy
- Giá trị cuối cùng của biểu thức được sử dụng.
#include <stdio.h>
int main(){
int x = 5, y = 10;
int z = (x++, y--, x + y);
printf("%d", z); // Hiển thị 14
}
Biến ký tự
- Định nghĩa biến ký tự bằng
char, ví dụ:char c = 'A'. - Mỗi ký tự có một mã ASCII tương ứng.
#include <stdio.h>
int main(){
char ch = 'A';
printf("%c %d", ch, ch); // Hiển thị A 65
}
Câu lệnh điều kiện if
- Cú pháp:
if(dieu_kien) { câu_lệnh }. - Nếu điều kiện đúng, thực hiện các câu lệnh trong khối.
#include <stdio.h>
int main(){
int x = 10;
if(x > 5){
printf("x lớn hơn 5");
}
}
Câu lệnh if-else
- Cú pháp:
if(dieu_kien) { câu_lệnh1 } else { câu_lệnh2 }. - Nếu điều kiện đúng, thực hiện câu_lệnh1; ngược lại, thực hiện câu_lệnh2.
#include <stdio.h>
int main(){
int x = 3;
if(x % 2 == 0){
printf("x là số chẵn");
} else {
printf("x là số lẻ");
}
}
Câu lệnh switch
- Cú pháp:
switch(biểu_thức) { case giá_trị1: câu_lệnh1; break; ... default: câu_lệnh_default; }. - Chỉ thực hiện các câu lệnh trong case phù hợp với biểu_thức.
#include <stdio.h>
int main(){
int n = 2;
switch(n){
case 1: printf("Một"); break;
case 2: printf("Hai"); break;
default: printf("Khác");
}
}