Viết chương trình đưa ra màn hình thông báo Hello wordl

Hầu hết những học sinh khi tiếp cận với ngôn ngữ lập trình nào thì đều bắt đầu với một chương trình huyền thoại là "HELLO WORLD" [Xin chào thế giới].

Ở đây, chúng tôi lấy ví dụ minh họa là "Xin chào các bạn". Khi chương trình được thực thi thì nó sẽ in ra màn hình dòng chữ "Xin chao cac ban". Đây là ví dụ đơn giản nhất cho bạn hiểu chương trình C được xây dựng và thực thi như thế nào.

#include int main[] { printf["Xin chao cac ban!"]; return 0; } Kết quả chương trình sẽ là: Xin chao cac ban! Kết quả thực tế:

Trước: Cần gì trước khi học C Mục lục Tiếp theo: Cơ bản về biên dịch

Giống như hầu hết các sách về ngôn ngữ lập trình, chúng ta sử dụng chương trình Hello World để giới thiệu về C.

#include int main[void] { printf["Hello, world!\n"]; return 0; }

Chương trình này in ra màn hình dòng chữ "Hello, world!" rồi thoát.

Hãy nhập đoạn mã này vào trình soạn thảo hoặc IDE của bạn rồi lưu lại thành "hello.c".

Nếu bạn đang sử dụng GCC [hoặc MinGW], nhập vào cửa sổ lệnh gcc -o hello hello.c. Lệnh này làm gcc dịch hello.c thành mã máy. Đoạn '-o hello' làm nó gọi chương trình đã được dịch có tên 'hello'.

Trên Code::Blocks, ngay sau khi bạn tạo một dự án và mở tệp mã nguồn, bạn sẽ thấy chương trình náy đã có sẵn. Chọn menu "Build" > "Build and run" hoặc ấn F9 để tạo tệp thực thi và chạy nó.

Nếu mọi thứ diễn ra đúng, bạn sẽ thấy một tệp có tên "hello". Đó là phiên bản nhị phân [mã máy] của chương trình của bạn, và khi chạy nó trong cửa sổ lệnh bạn sẽ nhận được dòng chữ "Hello, world!".

#include làm cho trình dịch tìm tệp tiêu đề [header file] stdio.h và thêm nó vào mã nguồn chương trình. Trong C, bạn sẽ thường kéo thêm các thành phần bên ngoài vào chương trình khi bạn cần sử dụng chúng. stdio.h chứa các mô tả về các hàm nhập xuất chuẩn mà bạn sẽ dùng để đưa thông tin ra ngoài hoặc lấy thông tin từ người dùng.

int main[void] là dòng mã mà bạn sẽ thấy ở mọi chương trình C. Mỗi chương trình đều có một và chỉ một hàm main. Thông thường hàm main là nơi bắt đầu chạy của một chương trình. Tuy nhiên, một chương trình C có thể trải dài trên nhiều tệp và do đó không phải trong tệp nào bạn cũng thấy có hàm main. int ở ngay trước hàm main cho biết hàm main trả về một giá trị có kiểu số nguyên [integer] khi nó kết thúc.

printf["Hello, world!\n"]; là lệnh làm hiển thị dòng chữ "Hello, world!" lên màn hình. printf là hàm in có định dạng [formatted printing] đã được khai báo sẵn trong stdio.h - đó là lí do chúng ta phải gộp tệp này vào chương trình bằng lệnh #include ở đầu chương trình. \n là một "kí tự thoát" có tác dụng thêm một dòng mới vào cuối văn bản đã được in ra.

return 0; trả về môi trường mà chương trình chạy trên đó [thường là hệ điều hành]. Một chương trình chạy thành công nếu nó trả về giá trị 0 [GCC4 sẽ có cảnh báo nếu nó không tìm thấy được dòng lệnh nào như vậy trong khi dịch]. Một giá trị trả về khác không chỉ ra rằng đã có lỗi xảy ra.

Dòng trống ở cuối cùng [không nhìn thấy do MediaWiki tự động loại bỏ nó] được thêm vào là một cách thực hành tốt [ít nhất là trên UNIX] khi kết thúc một tệp.

Trước: Cần gì trước khi học C Mục lục Tiếp theo: Cơ bản về biên dịch

Ví dụ: 
a = 2 + [b = 5];
tương đương với 
b = 5;
a = 2 + b;
Vì vậy biểu thức sau cũng hợp lệ trong C++
a = b = c = 5; 
gán giá trị 5 cho cả ba biến a, b và c 
Các toán tử số học [ +, -, *, /, % ]
Năm toán tử số học được hỗ trợ bởi ngôn ngữ là:

+ cộng


- trừ
* nhân
/ chia
% lấy phần dư [trong phép chia]
Thứ tự thực hiện các toán tử này cũng giống như chúng được thực hiện trong toán 
học. Điều duy nhất có vẻ hơi lạ đối với bạn là phép lấy phần dư, ký hiệu bằng dấu 
phần trăm [%]. Đây chính là phép toán lấy phần dư trong phép chia hai số nguyên 
với nhau. Ví dụ, nếu a = 11 % 3;, biến a sẽ mang giá trị 2 vì 11 = 3*3 +2.
Các toán tử gán phức hợp [+=, -=, *=, /=, %=, >>=, = 6]
sẽ trả giá trị true
tất nhiên thay vì sử dụng các số, chúng ta có thể sử dụng bất cứ biểu thức 
nào. Cho a=2, b=3 và c=6
[a*b >= c]
sẽ trả giá trị true.
[b+4 < a*c]
sẽ trả giá trị false

Cần chú ý rằng = [một dấu bằng] lf hoàn toàn khác với == [hai dấu bằng]. Dấu đầu 


tiên là một toán tử gán [ gán giá trị của biểu thức bên phải cho biến ở bên trái] và 
dấu còn lại [==] là một toán tử quan hệ nhằm so sánh xem hai biểu thức có bằng 
nhau hay không.

Trong nhiều trình dịch có trước chuẩn ANSI-C++ cũng như trong ngôn ngữ C, các toán 


tử quan hệ không trả về giá trị logic true hoặc false mà trả về giá trị int với 0 tương 
ứng với false còn giá trị khác 0 [thường là 1] thì tương ứng với true.

Các toán tử logic [ !, &&, || ].


Toán tử ! tương đương với toán tử logic NOT, nó chỉ có một đối số ở phía bên phải 
và việc duy nhất mà nó làm là đổi ngược giá trị của đối số từ true sang false hoặc 
ngược lại. Ví dụ:
![5 == 5]
trả về false vì biểu thức bên phải [5 == 5] có giá trịtrue.
![6 6]] trả về true [ true || false ]. 
Toán tử điều kiện [ ? ].
Toán tử điều kiện tính toán một biểu thức và trả về một giá trị khác tuỳ thuộc vào 
biểu thức đó là đúng hay sai. Cấu trúc của nó như sau:
condition ? result1 : result2 
Nếu condition là true thì giá trị trả về sẽ là result1, nếu không giá trị trả về là 
result2.
7==5 ? 4 : 3
trả về 3 vì 7 không bằng 5.
7==5+2 ? 4 : 3
trả về 4 vì 7 bằng 5+2.
5>3 ? a : b
trả về a, vì 5 lớn hơn 3.
a>b ? a : b
trả về giá trị lớn hơn, a hoặc b.

Các toán tử thao tác bit [ &, |, ^, ~, ].


Các toán tử thao tác bit thay đổi các bit biểu diễn một biến, có nghĩa là thay đổi 
biểu diễn nhị phân của chúng
toán tử asm Mô tả
& AND Logical AND
| OR Logical OR
^ XOR Logical exclusive OR
~ NOT Đảo ngược bit
> SHR Dịch bit sang phải

Các toán tử chuyển đổi kiểu


Các toán tử chuyển đổi kiểu cho phép bạn chuyển đổi dữ liệu từ kiểu này sang kiểu 
khác. Có vài cách để làm việc này trong C++, cách cơ bản nhất được thừa kế từ 
ngôn ngữ C là đặt trước biểu thức cần chuyển đổi tên kiểu dữ liệu được bọc trong 
cặp ngoặc đơn [], ví dụ:
int i;
float f = 3.14;
i = [int] f; 
Đoạn mã trên chuyển số thập phân 3.14 sang một số nguyên [3]. Ở đây, toán tử 
chuyển đổi kiểu là [int]. Một cách khác để làm điều này trong C++ là sử dụng các 
constructors [ở một số sách thuật ngữ này được dịch là cấu tử nhưng tôi thấy nó có 
vẻ không xuôi tai lắm] thay vì dùng các toán tử : đặt trước biểu thức cần chuyển 
đổi kiểu tên kiểu mới và bao bọc biểu thức giữa một cặp ngoặc đơn. 
i = int [ f ]; 
Cả hai cách chuyển đổi kiểu đều hợp lệ trong C++. Thêm vào đó ANSI-C++ còn có 
những toán tử chuyển đổi kiểu mới đặc trưng cho lập trình hướng đối tượng.

sizeof[]


Toán tử này có một tham số, đó có thể là một kiểu dữ liệu hay là một biến và trả về 
kích cỡ bằng byte của kiểu hay đối tượng đó.
a = sizeof [char]; 
a sẽ mang giá trị 1 vì kiểu char luôn có kích cỡ 1 byte trên mọi hệ thống. Giá trị trả 
về của sizeof là một hằng số vì vậy nó luôn luôn được tính trước khi chương trình 
thực hiện. 

Các toán tử khác


Trong C++ còn có một số các toán tử khác, như các toán tử liên quan đến con trỏ 
hay lập trình hướng đối tượng. Chúng sẽ được nói đến cụ thể trong các phần tương 
ứng.
Thứ tự ưu tiên của các toán tử
Khi viết các biểu thức phức tạp với nhiều toán hạng các bạn có thể tự hỏi toán hạng nào 
được tính trước, toán hạng nào được tính sau. Ví dụ như trong biểu thức sau: 
a = 5 + 7 % 2
có thể có hai cách hiểu sau: 
a = 5 + [7 % 2] với kết quả là 6, hoặc
a = [5 + 7] % 2 với kết quả là 0
Câu trả lời đúng là biểu thức đầu tiên. Vì nguyên nhân nói trên, ngôn ngữ C++ đã thiết lập 
một thứ tự ưu tiên giữa các toán tử, không chỉ riêng các toán tử số học mà tất cả các toán tử 
có thể xuất hiện trong C++. Thứ tự ưu tiên của chúng được liệt kê trong bảng sau theo thứ 
tự từ cao xuống thấp. 

Thứ tự Toán tử Mô tả Associativity


1
::
scope Trái
2
[] [ ] -> . sizeof
Trái
3
++ --
tăng/giảm
~
Đảo ngược bit
!
NOT
& *
Toán tử con trỏ
[type]
Chuyển đổi kiểu
+ -
Dương hoặc âm
Phải
4
* / %
Toán tử số học Trái
5
+ -
Toán tử số học Trái
6
>
Dịch bit Trái
7
< >=
Toán tử quan hệ Trái
8
== !=
Toán tử quan hệ Trái
9
& ^ |
Toán tử thao tác bit Trái
10
&& ||
Toán tử logic Trái
11
?:
Toán tử điều kiện Phải
12
= += -= *= /= %=
Toán tử gán Phải
>>= > n;
cout

Chủ Đề