Tải bản đầy đủ (.doc) (75 trang)

Chương trình C và C++ potx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (436.22 KB, 75 trang )

Ch¬ng tr×nh C vµ C++
CH NG 1. NH NG KHÁI NI M C B N V NGÔN NG CƯƠ Ữ Ệ Ơ Ả Ề Ữ 3
1.1. L ch s hình th nh v phát tri nị ử à à ể 3
1.2. Các tính ch t c tr ngấ đặ ư 3
1.3. C u trúc c b n c a m t ch ng trình Cấ ơ ả ủ ộ ươ 3
#include <stdio.h> 5
1.4. B ch vi t, t khoá, tên ộ ữ ế ừ 5
1.4.1. B ch vi tộ ữ ế 5
1.4.2. Tên 6
1.4.3 T khoáừ 6
1.5. M t s ki u d li u c b nộ ố ể ữ ệ ơ ả 6
1.6. Bi nế 7
1.7. H ng sằ ố 7
1.8. Bi u th cể ứ 9
1.9. Các phép toán 9
1.9.1. Các phép toán s h c:ố ọ 9
1.9.2. Các phép toán quan h :ệ 10
1.9.3. Các phép toán logic 10
1.9.4. Các phép toán t ng, gi mă ả 12
1.9.5. Phép toán l y a ch bi n (&)ấ đị ỉ ế 12
1.9.6. Phép toán chuy n i ki u giá tr :ể đổ ể ị 12
- Khi toán h ng trong m t phép toán có ki u khác nhau thì ki u th p h n ạ ộ ể ể ấ ơ
c chuy n th nh ki u cao h n: int->long->float->doubleđượ ể à ể ơ 12
1.9.7. Bi u th c gánể ứ 13
1.9.8. Bi u th c i u ki nể ứ đ ề ệ 13
CH NG 2. CÁC CÂU L NH I U KHI N CH NG TRÌNHƯƠ Ệ Đ Ề Ể ƯƠ 14
2.1. Câu l nh nệ đơ 14
2.2. Câu l nh ghépệ 14
2.3. V o/ra à 14
2.3.1. H m printfà 14
2.3.2. H m scanfà 15


2.3.3.Ví d minh ho :ụ ạ 16
2.4. Các câu l nh i u khi n ch ng trìnhệ đ ề ể ươ 16
2.4. 1. Câu l nh if – elseệ 16
thay cho 16
2.4.2. C u trúc i u khi n switchấ đ ề ể 17
a./ Cú pháp câu l nh ệ 17
2.4.3. C u trúc l p whileấ ặ 18
{ int dau,i,n; 20
2.4.4. C u trúc l p do while ấ ặ 20
2.4.5. C u trúc l p forấ ặ 22
2.4.6. Toán t break v continueử à 24
CH NG 3. CON TR VÀ M NGƯƠ Ỏ Ả 26
3.1. M ngả 26
3.1.1. Khái ni m v nh ngh aệ à đị ĩ 26
3.1.2. Khai báo m ngả 26
3.1.3. Truy nh p v o các ph n t c a m ngậ à ầ ử ủ ả 26
3.1.4. Xâu kí tự 28
Trang 1
Ch¬ng tr×nh C vµ C++
3.2. Con trỏ 30
3.2.1. Khái ni m v cách khai báo con trệ à ỏ 30
3.2.2. Con tr v a ch bi nỏ à đị ỉ ế 30
3.2.3. S d ng các con trử ụ ỏ 30
3.2.4. Các phép toán trên con trỏ 31
3.2.5. Con tr ki u voidỏ ể 32
3.3. Liên h gi a con tr v m ngệ ữ ỏ à ả 32
3.3.1. Con tr v m ng m t chi uỏ à ả ộ ề 32
3.3.2. Con tr v xâu kí tỏ à ự 33
3.3.3. Con tr v m ng nhi u chi uỏ à ả ề ề 33
CH NG 4. C U TRÚCƯƠ Ấ 34

4.1. C u trúcấ 34
4.1.1. nh ngh a c u trúcĐị ĩ ấ 34
4.1.2. Khai báo c u trúcấ 34
4.1.3. nh ngh a ki u b ng typedefĐị ĩ ể ằ 35
4.1.4. Truy nh p n các th nh ph n c a c u trúcậ đế à ầ ủ ấ 36
4.1.5. Th nh ph n ki u FIELD (nhóm bit)à ầ ể 37
4.2. Ki u h p (union)ể ợ 38
CH NG 5. HÀM VÀ C U TRÚC CH NG TRÌNHƯƠ Ấ ƯƠ 39
5.1. M u:ở đầ 39
5. 2. Ví d n gi n v ch ng trình có h m:ụ đơ ả ề ươ à 39
5. 3. Quy t c xây d ng m t h mắ ự ộ à 40
5. 4. Quy t c ho t ng c a h m:ắ ạ độ ủ à 40
5. 5. C u trúc t ng quát c a ch ng trình có h m:ấ ổ ủ ươ à 41
5.6. Xây d ng v s d ng h mự à ử ụ à 41
5.6.1. Các khái ni m liên quan n h m:ệ đế à 41
5.6.2. Xây d ng h m:ự à 41
5.6.3. S d ng h mử ụ à 42
5.6.4. Nguyên t c ho t ng c a h mắ ạ độ ủ à 42
5.7. Các t p headerệ 43
5.8. C p l u tr v ph m vi c a các i t ngấ ư ữ à ạ ủ đố ượ 44
5.9. quiĐệ 47
CH NG 6. HOƯƠ ĐỒ Ạ 48
6.1. Các ch ho , h to ế độ đồ ạ ệ ạ độ 48
2.6. nh ngh a ch ng h mĐị ĩ ồ à 62
2.7. Tham s ng m nh trong l i g i h mố ầ đị ờ ọ à 62
2.8. B sung thêm các toán t qu n lý b nh ng: new v deleteổ ử ả ộ ớ độ à 63
CH NG 3. I T NG VÀ L PƯƠ ĐỐ ƯỢ Ớ 63
3.1. i t ngĐố ượ 63
3.2. L pớ 64
3.2.1. Khai báo l pớ 64

3.2.2. T o i t ngạ đố ượ 65
3.2.3. Các th nh ph n d li u:à ầ ữ ệ 66
3.2.4. H m th nh ph n (ph ng th c) à à ầ ươ ứ 66
3.2.5. T khoá private v public ừ à 66
3.3.H m thi t l p(constructor)à ế ậ 67
3.4 H m hu b (desreuctor)à ỷ ỏ 69
Trang 2
Ch¬ng tr×nh C vµ C++
3.5 H m thi t l p sao chép(copy constructor)à ế ậ 70
3.6 H m b n, l p b nà ạ ớ ạ 73
CHƯƠNG 1. NHỮNG KHÁI NIỆM CƠ BẢN VỀ NGÔN NGỮ C
1.1. Lịch sử hình thành và phát triển
Ngôn ngữ C do Brian W.Kerningham và Dennis M.Ritchice phát triển vào năm
1970 tại phòng thí nghiệm BELL (Hoa kỳ) với mục đích ban đầu để phát triển hệ điều
hành UNIX.
Phần lớn các ý tưởng quan trọng nhất của C xuất phát từ ngôn ngữ có tên BCPL
do Martin Richards nghiên cứu. ảnh hưởng của BCPL gián tiếp thông qua ngôn ngữ B
do Ken Thompson viết vào năm 1970 cho hệ điều hành UNIX chạy trên họ máy tính
PDP- 7
Từ khi ra đời ngôn ngữ lập trình C có nhiều loại chương trình dịch C khác nhau
như: Turbo C của hãng Borland Inc, Quick C, Microsoft C, VC của hãng Microsoft
Corp, Lattice C của Lattice
Sự phát triển của ngôn ngữ lập trình trong những năm 1980 đã đưa đến phong
cách lập trình hướng đối tượng (OOP – Object Oriented Programing) mà một trong
những ngôn ngữ rất được ưa dùng là C++ một bổ sung mới các yếu tố hướng đối tượng
và ngôn ngữ lập trình C.
1.2. Các tính chất đặc trưng
Ngôn ngữ lập trình C là một ngôn ngữ lập trình vạn năng dùng để viết các ứng
dụng thực tế như: Quản lý văn bản, cơ sở dữ liệu, ghép nối máy tính
Ngôn ngữ lập trình C là ngôn ngữ lập trình uyển chuyển, có độ thích nghi cao

Ngôn ngữ C là một ngôn ngữ được sử dụng rộng rãi trong các lĩnh vực chuyên
nghiệp vì đáp ứng được các yêu cầu: hiệu quả cao trong soạn thảo chương trình và dịch
ra mã máy; tiếp cận trực tiếp với các thiết bị phần cứng
Ngôn ngữ C thực hiện các cơ chế như các phép toán xử lý trực tiếp các đối
tượng hợp thành, các cơ chế vào ra, phương pháp truy nhập tệp bằng những lời gọi hàm
trong thư viện
C đưa ra các kết cấu điều khiển cơ bản cho các chương trình có cấu trúc; cung
cấp con trỏ và khả năng định địa chỉ số học. Các định nghĩa hàm không được lồng nhau
1.3. Cấu trúc cơ bản của một chương trình C
Trước tiên ta xét ví du: Viết chương trình C hiện dòng thông báo “ Turbo C” ra
màn hình.
/* Chương trình hiện lên dòng thông báo trên màn hình*/
#include <stdio.h>
#include <conio.h>
main()
{ clrscr();/* Câu lệnh xoá màn hình*/
printf(“Turbo C ”);
Trang 3
Ch¬ng tr×nh C vµ C++
getch();
}
Thực hiện chương trình:
Các bước để thực hiện chương trình này như sau:
- Tạo ra chương trình nguồn có tên VIDU.C bằng hệ soạn thảo của Turbo C hoặc
trên một hệ soạn thảo nào đó
- Dịch và chương trình bằng CTRL + F9 để tạo ra một tệp chương trình nếu
không có lỗi
Giải thích chương trình
Một chương trình C với bất kỳ kích thước nào đều bao gồm một số hàm, các
hàm này sẽ xác định các thao tác tính toán thực tế cần phải thực hiện. Các hàm của C

cũng tương tự như các hàm và thủ tục của chương trình viết bằng Pascal. Trong chương
trình ví dụ trên main() là một hàm như vậy. Thông thường chúng ta có thể lấy bất kỳ
tên nào để đặt cho tên hàm, nhưng hàm main() là một hàm đặc biệt. Chương trình C
luôn bắt đầu thực hiện tại điểm đầu của hàm này và kết thúc khi hàm này kết thúc. Điều
này có nghĩa mọi chương trình viết bằng ngôn ngữ lập trình C đều có một và chỉ một
hàm main() đặt ở đâu đó trong chương trình. Hàm main() này thường gọi các hàm khác
để thực hiện công việc của chương trình, một số hàm nằm trong chương trình, số khác
nằm trong các thư viện chuẩn.
Hàm printf () có trong thư viện chuẩn được sử dụng mà không phải viết lại, có
chức năng đưa kết quả ra thiết bị đầu ra. Câu lệnh printf (“ Turbo C”); sẽ đưa ra màn
hình dòng chữ nằm trong các dấu nháy kép. Có thể dùng hàm printf để trình bày các đối
tượng dữ liệu khác nhau
Khai báo tệp tiêu đề
Trong ngôn ngữ lập trình Pascal chặng hạn khi ta muốn sử dụng lệnh xoá màn
hình “ Clrscr;” hay lệnh di chuyển con trỏ màn hình “Gotoxy(x,y)” v.v Ta thấy các
hàm và thủ tục này nằm trong thư viên chuẩn CRT do đó muốn chương trình sử dụng
được các hàm và thủ tục đó thì tại đầu chương trình ta phải khai báo : USES CRT;
Tương tự như vậy trong ngôn ngữ lập trình C khi sử dụng các hàm chuẩn trong
các thư viện chuẩn chúng ta phải khai báo tệp tiêu đề (header file) chứa các hàm
nguyên mẫu tương ứng các hàm đó, các lệnh được bắt đầu bằng #include theo sau là tệp
tiêu đề
Có hai cách viết như sau:
Cách 1: #include <[đường dẫn\] tentep>
Ví dụ: #include <a:\Baitap\Bai1.C>
#include <stdio.h>
Cách 2: #include “[đường dẫn\]tentep”
Ví dụ: #include “a:\Baitap\Bai2.C”
Trang 4
Ch¬ng tr×nh C vµ C++
#include “conio.h”

Tác dụng: Trước khi dịch, chương trình dịch sẽ tìm tệp theo tentep và đường
dẫn đã chỉ ra trong #include. Nếu tìm thấy thì nội dung của tệp này được gọi ra và
chèn vào tệp nguồn đang xét đúng vị trí của #include. Nếu không tìm thấy thì thông báo
lỗi.
Hai cách khai báo trên khác nhau ở chỗ. Nếu tentep được chỉ ra trong khai báo
#include không có đường dẫn thì
Cách 1: tự động tìm tentep trong thư mục INCLUDE
Cách 2: tự động tìm tentep trong thư mục hiện thời nếu không có thì tìm trong
thư mục INCLUDE
Trong thí dụ trên chúng ta có sử dụng hàm printf() là hàm chuẩn được khai báo
trong tệp tiêu đề stdio.h và hàm getch(), clrscr() được khai báo trong tệp tiêu đề
conio.h. Do đó trong chương trình có hai dòng khai báo sau ở đầu chương trình:
#include <stdio.h>
#include <conio.h>
Chú thích và dấu kết thúc câu lệnh
Trong ngôn ngữ lập trình C những phần được viết giữa /* và */ được gọi là phần
chú thích, giải thích mục đích của chương trình. Mọi ký tự nằm giữa /* và */ khi dịch
chương trình dịch bỏ qua, ta được phép dùng chúng để minh hoạ cho các thành phần
chương trình làm cho chương trình dễ hiểu, mạch lạc. Lời chú thích có thể xuất hiện bất
kỳ đâu trong chương trình và có thể trải trên nhiều dòng khác nhau trong chương trình.
Trong chương trình viết bằng ngôn ngữ C mỗi câu lệnh có thể viết trên một hay
nhiều dòng và phải kết thúc bằng dấu chấm phẩy.
1.4. Bộ chữ viết, từ khoá, tên
1.4.1. Bộ chữ viết
Mỗi ngôn ngữ lập trình đều được xây dựng từ một bộ ký tự nào đó. Các ký tự
được nhóm lại theo nhiều cách khác nhau để lập lên các từ. Đến lượt mình các từ được
liên kết theo một quy tắc nào đó để tạo thành các câu lệnh. Một chương trình bao gồm
nhiều câu lệnh và diễn đạt một thuật toán để giải một bài toán nào đó.
Ngôn ngữ C được xây dựng trên bộ ký tự sau:
Các chữ cái hoa: A B C Z

Các chữ cái thường: a b c z
Các chữ số: 0 1 2 9
Các kí hiệu toán học: + - * / = < >
Các dấu ngoặc: [ ] { } ( )
Các ký hiệu đặc biệt khác: , . ; : / ? @ # $ % ^ & ‘ “
Các dấu ngăn cách không nhìn thấy như dấu cách, dấu nhảy cách tab, dấu
xuống dòng
Dấu gạch nối dưới: _
Trang 5
Ch¬ng tr×nh C vµ C++
1.4.2. Tên
Tên là một dãy ký tự : chữ, số và dấu gạch nối được dùng để chỉ tên hằng, tên
biến, tên mảng, tên hàm Tên phải bắt đầu bằng một chữ hoặc dấu gạch nối. Tên không
được đặt trùng với từ hoá
Ví dụ các tên viết hợp lệ: Giai_Phuong_Trinh_Bac2
abc123
Ví dụ các tên viết không hợp lệ: Baitap 1
123abc
Chú ý:
-Trong ngôn ngữ lập trình C tên được phân biệt chữ hoa và chữ thường
-Thông thường chữ hoa thường được dùng để đặt tên cho các hằng, còn các đại
lượng khác thì dùng chữ thường.
1.4.3 Từ khoá
- Là những từ có một ý nghĩa hoàn toàn xác định trong chương trình:
Ví dụ: void struct class while
- Không được dùng từ khoá để đặt tên cho các hằng, biến, mảng, hàm
- Từ khoá phải viết bằng chữ thường
Ví dụ từ khoá viết đùng: struct
Ví dụ từ khoá viết sai: Struct
1.5. Một số kiểu dữ liệu cơ bản

Tất cả các biến phải được khai báo trước và kiểu của chúng phải được mô tả
ngay khi khai báo. Có bốn kiểu dữ liệu cơ bản trong C là: char, int, float và double
Tên ý nghĩa Phạm vi biểu diễn Kích thước
char Ký tự -128 -> 127 1 byte
int Số nguyên -32768->32767 2 byte
float Số thực dấu phẩy động độ chính xác
đơn
±3.4E-38 -> ±3.4E+38
4 byte
double Số thực dấu phẩy động độ chính xác
kép
±1.7E-308 -> ±1.7E+308
8 byte
Một số float có độ chính xác là 6 chữ số sau dấu chấm thập phân. Còn số double
được biểu diễn với độ chính xác tới 15 chữ số sau dấu chấm thập phân
Bên cạnh đó chúng ta có thể áp dụng một số các “tiền tố” đi kèm các kiểu dữ
liệu cơ bản với mục đích thay đổi phạm vi biểu diễn của biến được khai báo. Có các
tiền tố như là: short, long, signed (ngầm định đối với char, int), unsigned.
Kiểu Phạm vi biểu diễn Kích thước (byte)
unsigned char 0 -> 255 1
Trang 6
Ch¬ng tr×nh C vµ C++
char -128 -> 127 1
unsigned int 0 -> 65535 2
short int -32768 -> 32767 2
int -32768 -> 32767 2
unsgned long 0 ->4.294967295 4
long -2147483648->-2147483648 4
float
±3.4E-38 -> ±3.4E+38

4
double
±1.7E-308 -> ±1.7E+308
8
long double 3.4E4932->3.4E+4932 10
Lưu ý:
- Kiểu long int có thể viết gọn thành long; kiểu unsigned int viết gọn thành
usigned
- Có thể kết hợp nhiều tiền tố với một kiểu dữ liệu cơ sở: chẳng hạn unsigned
long int (viết gọn thành unsigned long)
1.6. Biến
Biến là yếu tố cơ bản của bất kỳ ngôn ngữ máy tính nào. Biến là vùng trống
trong bộ nhớ máy tính diành cho một kiểu dữ liệu nào đó và có đặt tên. Các biến trong
bộ nhớ ở các thời điểm khác nhau có thể cất giữ các giá trị khác nhau. Trước khi sử
dụng một biến nào đó phải khai báo nó. Quy tắc khai báo:
Kiểu_dữ_liệu Tên_biến ;
Có thể khai báo nhiều biến cùng kiểu trên cùng một hàng, các tên biến được
phân cách nhau bằng dấu phẩy
Ví dụ: int a,b; /*biến có kiểu nguyên*/
float f; /*biến thực*/
char ch; /*biến ký tự*/
1.7. Hằng số
Dữ liệu chứa trong máy tính có thể là biến hoặc hằng
 biến là đại lượng có thể thay đổi được trong quá trình tính toán
 hằng là đại lượng có giá trị không thay đổi
1.7.1. Hằng số nguyên
- Hệ thập phân bình thường
VD: 545
- Hệ cơ số 8 (Octal)
Bắt đầu bằng số 0 và chỉ biểu diễn số dương

Ví dụ: 024=20
10
- Hệ cơ số 16 (Hecxa)
Bắt đầu bằng 0x
Trang 7
Ch¬ng tr×nh C vµ C++
Ví dụ: 0xAB = 163
10
Chú ý: Nếu là hằng kiểu long thì thêm l(hay L) vào đuôi
Ví dụ: 123L 858l
Một hằng số nguyên có giá trị vượt ra ngoài phạm vi cho phép được ngầm
hiểu là hằng long
1.7.2. Hằng số thực
Được viết theo hai cách sau:
- Dạng thập phân gồm:Phần nguyên, dấu chấm thập phân, phần thập phân
Ví dụ:34.2 -344.122
Chú ý: Phần nguyên hay phần thập phân có thể vắng mặt nhưng dấu chấm
thập phân không được thiếu
Ví dụ: 343. .454
- Dạng khoa học(dạng mũ) gồm: Phần định trị và phần mũ. Phần định trị là số
nguyên hay số thực dạng thập phân, phần mũ bắt đầu bằng E hoặc e theo sau là số
nguyên
Ví dụ: 1234.54E-122
1.7.3. Hằng ký tự
Là một ký hiệu trong bảng mã ASCII được đặt trong hai dấu nháy đơn. Giá trị
của hằng kí tự chính là mã ASCII của kí hiệu
Ví dụ: Hằng ‘A’ có giá trị là 65
Chú ý: Hằng ký tự biểu thị mã của ký tự đó trong bảng mã ASCII. Do vậy một hằng ký
tự cũng có thể tham gia vào các phép toán.
Ví dụ:

‘A’+10 có giá trị (65+10=75)
Hằng ký tự còn có thể được viết theo cách: ‘\c1c2c3’
trong đó c1c2c3 là một số hệ 8 mà giá trị của nố chính là mã ASCII của ký tự cần
biểu diễn.
Ví dụ: ‘a’ hay ‘\141’
Một số ký tự đặc biệt:
Viết Ký tự Diễn giải
\’ ‘ Dấu nháy đơn
\” “ Dấu nháy kép
\\ \ Dấu gạch chéo ngược
\n \n Xuống dòng mới
\0 \0 Ký tự Null
\t Nhảy cách ngang, ký tự tab
Trang 8
Ch¬ng tr×nh C vµ C++
\b Xoá trái
\r Về đầu dòng
\f Sang trang
1.7.4. Hằng xâu ký tự
- Là một dãy các ký tự đặt trong hay dấu nháy “ ”
- Xâu ký được lưu trữ trong một mảng ô nhớ liền nhau song còn thêm ô nhớ
cuối cùng chứa mã là 0(ký hiệu là ‘\0’ )
Ví dụ: “Nguyen Van Anh”
Đươc tổ chức trong bộ nhớ như sau:
N g U y e n V a N A n h \0
Chú ý: Chúng ta cần phân biệt “A” và ‘A’. Trong đó “A” được chứa trong 2
byte, còn ‘A’ chỉ mất 1 byte và nó có thể tham gia tính toán trong các biểu thức.
* Hằng có thể định nghĩa bằng hai cách:
Cách 1: Dùng toán tử #define nhằm định nghĩa một hằng ký hiệu
#define <Tenhang> <Xaukytu>

Cấu trúc này định nghĩa một hằng ký hiệu có tên <Tenhang> bằng xâu kí tự. Khi
biên dịch chương trình, chương trình dịch thay thế các lần xuất hiện của <Tenhang>
bằng xâu ký tự tương ứng
Ví dụ: #define MAX 100
Cách 2: const kieu_du_kieu ten_hang = gia_tri_hang;
Ví dụ: const int n=20;
1.8. Biểu thức
Biểu thức là một sự kết hợp giữa các phép toán và các toán hạng để diễn đạt một
công thức nào đó. Các toán hạng có thể là một đại lượng nào đó có giá trị như: hằng,
biến hay một biểu thức con. Mỗi biểu thức có một giá trị. Tuỳ theo giá trị của biểu thức
mà có các biểu thức nguyên hay biểu thức thực. Các mệnh đề logic có giá trị nguyên
trong đó giá trị khác 0 tương ứng mệnh đề đúng, còn giá trị 0 tương ứng mệnh đề sai.
Biểu thức được sử dụng trong: Vế phải của lệnh gán; làm tham số thực của các hàm;
làm chỉ số; các câu lệnh if, for, while, do while; các biểu thức lớn hơn
1.9. Các phép toán
Trong C người ta phân biệt các loại phép toán sau:
1.9.1. Các phép toán số học:
Phép toán ý nghĩa Ví dụ
- Đổi dấu một số thực hoặc nguyên -12 -a
+ Phép cộng 2 số thực hoặc nguyên 2+4=6
- Phép trừ 2-3=-1
Trang 9
Ch¬ng tr×nh C vµ C++
* Phép nhân 4*2=8
/ Phép chia 5/3=1
% Phép lấy phần dư 6/2=0
Chú ý: Nếu phép chia hai toán hạng đều nguyên thì phép chia cho kết quả là phần
nguyên của thương hai toán hạng đó.
- Nếu một trong hai toán hạng là kiểu thực thì lúc này kết quả của phép chia cho
ta giá trị đúng.

- Phép toán lấy phần dư % chỉ áp dụng cho trường hợp hai toán hạng là số
nguyên.
Mức độ ưu tiên: - (phép trừ một ngôi)
* và /
+ và - (hai ngôi)
1.9.2. Các phép toán quan hệ:
Phép toán ý nghĩa Ví dụ Kết quả
> So sánh lớn hơn 1>2 0
>= So sánh lớn hơn hoặc bằng 2>=2 1
< So sánh nhỏ hơn 3<3 0
<= So sánh nhỏ hơn hoặc bằng 4<2 0
== So sánh bằng nhau 4==5 0
!= So sánh không bằng nhau 2!=7 1
Mức độ ưu tiên: >, >=, <, <=
==, !=
1.9.3. Các phép toán logic
Các phép toán logic được thể hiện dưới bảng sau:
Phép toán logic ý nghĩa Ví dụ Kết quả
! Phép phủ định một ngôi (not) !(3>1) 0
&& Liên kết hai biểu thức logic Phép
và (and). Giá trị bằng 1 khi cả 2
toán hạng có giá trị 1
(2>1)&&(5=2) 0
|| Liên kết hai biểu thức logic.
Phép hoặc (or). Giá trị biểu thức
bằng 1 khi một trong hai toán
hạng bằng 1
(4>3)||(1>8) 1
Hai phép toán && và || có số ưu tiên thấp hơn so với các phép toán quan hệ. Tất
cả các phép toán này lại có số ưu tiên thấp hơn phép phủ định một ngôi

Các phép toán quan hệ và logic được sử dụng để thiết lập điều kiện rẽ nhánh
trong lệnh if và điều khiển kết thúc chu trình trong các câu lệnh for while do while. Giá
Trang 10
Ch¬ng tr×nh C vµ C++
trị của toán hạng khác 0 sẽ được coi là TRUE và ngược lại giá trị bằng 0 sẽ được coi là
FALSE
Trang 11
Ch¬ng tr×nh C vµ C++
1.9.4. Các phép toán tăng, giảm
Trong ngôn ngữ lập trình C đưa ra hai phép toán một ngôi để tăng và giảm các
biến (nguyên và thực hoặc biến con trỏ). Toán tử tăng ++ sẽ thêm 1 vào toán hạng của
nó, toán tử giảm – sẽ trừ đi 1.
Dấu phép toán ++ và có thể đứng trước hoặc đứng sau toán hạng. Như vậy ta
có thể viết: ++n, n++, n, n
Sự khác nhau của ++n và n++ ở chỗ: Trong phép toán n++ thì n tăng sau khi giá
trị của nó được sử dụng, còn trong ++n thì giá trị của n tăng trước khi giá trị của nó
được sử dụng. Tương tự đối với –n và n
Ví dụ: giả sử trước mỗi phép tính int i=3, j=15;
Phép toán Tương đương Kết quả
i=++j; tăng trước j=j+1; i=j; i=16 và j=16
i=j++; tăng sau i=j; j=j+1; i=15 và j=16
i++; i=i+1; i=4
j = ++i + 5; i=i+1; j=i+5; i=4 và j=9
j = i++ +5; j=i+5; i=i+1; i=4 và j=8
1.9.5. Phép toán lấy địa chỉ biến (&)
- Để lấy địa chỉ của một biến ta dùng toán tử & cụ thể như sau:
& tên_biến
Ví dụ: &x lấy địa chỉ của biến a
&n lấy địa chỉ của biến n
1.9.6. Phép toán chuyển đổi kiểu giá trị:

Việc chuyển đổi kiểu dữ liểu trong C thường diễn ra tự động trong các trường
hợp sau:
- Khi toán hạng trong một phép toán có kiểu khác nhau thì kiểu thấp hơn được
chuyển thành kiểu cao hơn: int->long->float->double
- Khi gán một giá trị kiểu này cho một biến (hoặc phần tử mảng) kiểu kia.
Ví dụ: int c;
c=2.45;/* c sẽ nhận giá trị là 2*/
- Khi truyền giá trị cho các đối số của hàm, trong câu lệnh return của hàm.
Ngoài ra ta có thể chuyển từ một kiểu giá trị này sang một kiểu giá trị khác bất
kỳ ta muốn bằng cách ép kiểu theo mẫu sau:
(Kiểu_dữ_liệu) biểu_thức
Ví dụ:
float c=7.4;
Trang 12
Ch¬ng tr×nh C vµ C++
int n;
n=(int)c*3;/* khi đó n có giá trị 21*/
1.9.7. Biểu thức gán
Toán tử gán có hai dạng:
Biến = Biểu_thức
Biến op = Biểu_thức
Cách viết dưới tương đương Biến = (biến) op (Biểu_thức) trong đó op là một
toán tử nào đó. Giá trị của Biểu_thức sẽ được gán cho biến sau câu lệnh này
Ví dụ: x + = y tương đương với x = x+y
Nếu ta thêm dấu ; vào sau biểu thức gán sẽ thu được một câu lệnh gán
Biểu thức gán có thể được sử dụng trong các phép toán và các câu lệnh như các
biểu thức thông thường. Chẳng hạn khi viết: a=b=5; thì điều đó có nghĩa rằng gán giá
trị của biểu thức b=5 cho biến a. Kết quả là b=5 và a=5. Tương tự sau câu lệnh: x =
(a=5) * (b=10); sẽ gán 5 cho a, 10 cho b và sau đó gán tiếp 50 cho x
1.9.8. Biểu thức điều kiện

Biểu thức điều kiện có dạng:
Biểu_thức1 ? Biểu_thức2 : Biểu_thức3
Nếu Biểu_thức1 !=0 thì giá trị của biểu thức điều kiện sẽ là biểu_thức_2, trái lại
là giá trị của biểu_thức3. Kiểu của biểu thức điều kiện là kiểu cao nhất trong các kiểu
của Biểu_thức2 và biểu_thức3
Biểu thức điều kiện cũng được dùng như các biểu thức khác. Ví dụ dùng câu
lệnh sau để xác định giá trị lớn nhất giữa 2 số a và b:
s = (a>b) ? a: b;
Trang 13
Ch¬ng tr×nh C vµ C++
CHƯƠNG 2. CÁC CÂU LỆNH ĐIỀU KHIỂN CHƯƠNG TRÌNH
2.1. Câu lệnh đơn
Một biểu thức theo sau bằng một dấu ; trở thành một câu lệnh đơn. Ví dụ:
x = 0; i++; printf(); là các câu lệnh hợp lệ
2.2. Câu lệnh ghép
Là tập hợp các câu lệnh được bao bởi hai dấu { và }. Về cú pháp, bất cứ ở đâu có
thể đặt được câu lệnh đơn đều có thể đặt khối lệnh ở đó. Không đặt dấu ; sau một khối
lệnh
2.3. Vào/ra
2.3.1. Hàm printf
Hàm printf có khả năng chuyển dạng, tạo khuôn dạng và đưa giá trị các đối ra
màn hình.
Dạng tổng quát của hàm:
int printf(dong_dieu_khien[,danh_sach_cac_doi]);
- Dòng điều kiển: Là một hằng xâu ký tự được đặt trong hai dấu “ ”. Trong
xâu có hai loại đối tượng sau:
 Các ký tự thông thường sẽ được in ra nguyên si trên màn hình.
 Các ký tự đặc biệt và các đặc tả.
* Các ký tự đặc biệt
Dãy mã Ký tự

\’ Dấu ‘
\” Dấu “
\\ Dấu \
\n Xuống dòng mới
\0 Ký tự Null
\t Nhảy cách ngang
\b Xoá trái
\r Về đầu dòng
\f Sang trang
* Các đặc tả có dạng
%[-][fw][.op]ký_tự chuyển_dạng
Trong đó: Dấu “-“ dùng để căn dữ liệu của trường ra theo lề trái.
fw là một số nguyên xác định độ rộng tối thiểu dành cho trường ra
Trang 14
Ch¬ng tr×nh C vµ C++
op là một số nguyên xác định số chữ số thập phân(đối với float, double)
hoặc độ dài của xâu ký tụ.
Ví dụ: printf(“\n%d”,1234);
printf(“\n%8d”,1234);
printf(“\n%-8d”1234);
printf(“\n%.2f”,12.3456);
printf(“\n%.2s”,”abcd”);
Kết quả:
:1234:
: 1234:
:1234 :
:12.34:
:ab:
- Các ký tự chuyển dạng
Dãy mã qui cách ý nghĩa

%c in ra kí tự kiểu char, có thể dùng cho kiểu short và int
%d in ra số nguyên int, có thể dùng cho kiểu char
%u in ra kiểu số nguyên không dấu, unsigned int, có thể dùng cho unsigned
char, unsigned short
%ld in ra kí tự kiểu long
%lu in ra kí tự kiểu unsigned long
%x,%X in ra kiểu số nguyên viết dưới dạng số hexa
%o in ra kiểu số nguyên viết dưới dạng số octal(hệ đếm 8)
%f in ra kiểu số thực dưới dạng bình thường với phần phân có 6 chữ số, dùng
cho kiểu float, double
%s in ra xâu kí tự. Ta phải cung cấp địa chỉ của xâu kí tự
- Danh sách các đối: Mỗi đối là một biến, biểu thức, phần tử mảng, lời gọi
hàm Giữa các đối cách nhau bởi dấu phẩy.
Chú ý: Tương ứng với mỗi đối phải có một đặc tả tương ứng
2.3.2. Hàm scanf
Hàm scanf dùng để nhập dữ liệu từ bàn phím và lưu vào bộ nhớ theo địa chỉ xác
định.
Dạng tổng quát của hàm:
int scanf(dong_dieu_khien, danh_sach_cac_doi);
- Dòng điều khiển: Là một xâu ký tự đặt trong dấu “ ” chỉ bao gồm các đặc tả có
dạng sau:
Trang 15
Ch¬ng tr×nh C vµ C++
%ky_tu_chuyen_dang
Nếu trong hàm scanf dong_dieu_khien có nhiều đặc tả thì các đặc tả viết liền
vào nhau không có dấu phẩy ngăn cách giữa các đặc tả.
- Danh sách các đối: Là địa chỉ của các biến hay địa chỉ của các phần tử của mảng.
Nếu danh sách đối có nhiều hơn một thì giữa các đối đặt cách nhau một dấu phẩy.
Tương ứng với đặc tả nào thì đối đó và mỗi đối thì phải có một đặc tả tương ứng.
2.3.3.Ví dụ minh hoạ:

Lập chương trình tính tổng của ba số được nhập vào từ bàn phím.
#include “stdio.h”
#include “conio.h”
void main()
{ int a,b,c;
clrscr();
printf(“Ban hay nhap vao ba so a,b,c=”);
scanf(“%d%d%d”,&a,&b,&c);
printf(“Tong cua ba so la =%d”,a+b+c);
getch();
}
2.4. Các câu lệnh điều khiển chương trình
2.4. 1. Câu lệnh if – else
Cú pháp:
if (biểu_thức)
công_việc1;
else
công_việc2;
trong đó else là phần tuỳ chọn. Biểu thức được tính, nếu nó đúng (có giá trị khác
không) thì công_việc1 được thực hiện. Trái lại và nếu có phần else thì công_việc 2 sẽ
được thực hiện (trong trường hợp không có phần else thì chương trình đi qua câu lệnh
mà không làm gì cả)
Vì if chỉ kiểm tra giá trị số của biểu thức nên có thể viết gọn hơn nữa. Hay dùng
cách viết:
if (biểu_thức)
thay cho
if (biểu_thức !=0)
Chú ý: else được gắn với if không có else ở gần nhất trước đó.
Trang 16
Ch¬ng tr×nh C vµ C++

Ví dụ áp dụng:
Lập chương trình giải phương trình bậc hai ax
2
+bx+c=0
#include “stdio.h”
#include “conio.h”
void main()
{ float a,b,c,delta;
clrscr();
printf(“Ban hay nhap vao ba so a,b,c=”);scanf(“%f%f%f”,&a,&b,&c);
if (a=0)
printf(“Day khong phai la phuong trinhbac hai”);
else
{ delta=b*b-4*a*c;
if (delta<0)
printf(“ Phuong trinh vo nghiem trong truong so thuc”);
else
if (delta=0)
printf(“Phuong trinh co nghiem kep x1=x2=%8.2f”,-b/(2*a));
else
{ printf(“Phuong trinh co hai nghiem phan biet\n”);
printf(“x1=%8.2f \n x2=%8.2f”,(-b-sqrt(delta))/(2*a), (-b-
sqrt(delta))/(2*a));
}
}
getch();
}
2.4.2. Cấu trúc điều khiển switch
a./ Cú pháp câu lệnh
switch ( bieu_thuc)

{ case e1:Khối_lệnh_1;[break;]
case e2: Khối_lệnh_2;[break;]

case en: Khối_lệnh_n;[break;]
[default: Khối_lệnh_n+1;]
}
Trang 17
Ch¬ng tr×nh C vµ C++
Trong đó: *switch, case, default là các từ khoá
* bieu_thuc: là một biểu thúc nguyên bất kỳ
* ei:là giá trị nguyên mà biểu thức có thể nhận được. Có thể là kiểu char vì
nó có thể được chuyển đổi thành kiểu int
* Những phần đặt trong hai dấu [ và ] có thể có hoặc không
b./ Sự hoạt động của cấu trúc điều khiển switch phụ thuộc vào giá trị của bieu_thuc
* Khi giá trị này bằng ei máy sẽ nhảy tới khối lệnh có nhãn case ei và thực hiện
từ Khối_lệnh_i trở đi cho tới khi gặp câu lệnh break hoặc câu lệnh goto, return hay
dấu } kết thúc switch. Khi đó máy sẽ thoát ra khỏi cấu trúc lệnh và thực hiện các câu
lệnh tiếp theo sau cấu trúc lệnh.
* Khi giá trị của bieu_thuc khác tất cả các giá trị ei thì cách làm việc của máy lại
phụ thuộc vào sự có mặt hay không có mặt của default. Khi có default máy nhảy tới câu
lệnh có nhãn default. Khi không có default máy tiến hành thực hiện các câu lệnh sau
cấu trúc này.
c./ Ví dụ áp dụng:
Lập chương trình nhập vào từ bàn phím một số nguyên (1 – 5). Sau đó hiện ra
màn hình nghĩa tiếng anh của số tương ứng
#include “stdio.h”
#include “conio.h”
void main()
{ int i;
clrscr();

printf(“Ban hay nhap vao mot gia tri nguyen:”);scanf(“%d”,&i);
switch(i)
{
case 1:printf(“one”);break;
case 2:printf(“two”);break;
case 3:printf(“three”);break;
case 4:printf(“four”);break;
case 5:printf(“five”);break;
default: printf(“May khong biet”);
}
getch();
}
2.4.3. Cấu trúc lặp while
a./ Cú pháp câu lệnh
Trang 18
Ch¬ng tr×nh C vµ C++
while (bt)
Công_việc;
Trong đó:
- while là từ khoá
- bt là một biểu thức
- Công_việc có thể là một lệnh đơn hay một khối lệnh
c./ Sự hoạt động của câu lệnh while được tiến hành lần lượt được tiến hành theo
các bước sau:
Bước 1: Tiến hành tính toán giá trị của bt.
Bước 2: Nếu biểu thức có giá trị bằng không máy thoát khỏi chu trình và tiến
hành thực hiện các câu lệnh sau câu lệnh while. Nếu biểu thức có giá trị khác không
máy tiến hành thực hiện Công_việc và quay về bước 1.
d./ Ví dụ áp dụng
Ví dụ1:

Lập chương trình tính tổng sau:
s= a-a
2
+a
3
+(-1)
n+1
a
n
#include”stdio.h”
#include “conio.h”
void main()
{ int n,i,dau;
float s,tg,a;
clrscr();
printf(“Ban hay cho gia tri n=”);scanf(“%d”,&n);
printf(“Ban hay cho gia tri cua a=”);scantf(“%f”,&a);
s=0;i=1;dau=-1;tg=1;
while (i++<=n)
{ dau=dau*(-1);
tg=tg*a;
s=s+dau*tg;
}
printf(“Gia tri cua tong la=%8.2f”,s);
getch();
}
Trang 19
Ch¬ng tr×nh C vµ C++
Chú ý: bt có thể là một dãy các biểu thức đặt cách nhau bởi dấu phẩy. Tính đúng sai của
bt được hiểu là tính đúng sai của biểu thức cuối cùng trong dãy.

Ví dụ 2:
Lập chương trình tính tổng sau:
s:= a-a
2
+a
3
+(-1)
n+1
a
n
#include “stdio.h”
#include “conio.h”
void main()
{ int dau,i,n;
float a,s,tg;
clrscr();
printf(“Ban hay cho gia tri n=”);scanf(“%d”,&n);
printf(“Ban hay cho gia tri cua a=”);scantf(“%f”,&a);
s=0;i=1;dau=-1;tg=1;
while (tg*=a,dau*=-1,++i<n)
s+=dau*tg;
printf(“Gia tri cua tong la=%8.2f”,s);
getch();
}
2.4.4. Cấu trúc lặp do while
a./ Cú pháp câu lệnh
do
Công_việc;
while(bt);
Trong đó:

- while ,do là từ khoá
- bt là một biểu thức
- Công_việc liệt kê các câu lệnh cần phải thực hiện
b./ Sự hoạt động của câu lệnh do while được tiến hành lần lượt theo các bước sau:
Bước 1: Thực hiện Công_việc
Bước 2: Sau khi thực hiện xong Công_việc máy tiến hành tính toán giá trị của bt.
Nếu bt có giá trị khác không máy sẽ trở lại bước 1 để tiếp tục thực hiện vòng lặp
mới của chu trình. Nếu bt có giá trị bằng không máy sẽ ra khỏi chu trình và chuyển tới
câu lệnh đứng sau cấu trúc do while.
c./ Ví dụ áp dụng
Trang 20
Ch¬ng tr×nh C vµ C++
Ví dụ1:
Nhập một số giá trị từ bàn phím và đếm xem ta nhập được bao phần tử có giá trị
dương. Khi ta không muốn nhập thì nhập giá trị 0.
Trang 21
Ch¬ng tr×nh C vµ C++
#include “stdio.h”
#include “conio.h”
void main()
{ int i=0,n,tong=0;
clrscr();
printf(“Ban hay tien hanh nhap cac so nguyen \n”);
do
{
printf(“So thu: %d”,++i);scanf(“%d”,&n);
if(n>0) tong++;
} while(n==0);
printf(“Tong so phan tu ban da nhap la %d trong do co %d so duong “,i,tong);
getch();

}
Chú ý: bt có thể là một dãy các biểu thức đặt cách nhau bởi dấu phẩy. Tính đúng sai của
bt được hiểu là tính đúng sai của biểu thức cuối cùng trong dãy.
Ví dụ 2:
Nhập một số giá trị từ bàn phím và đếm xem ta nhập được bao phần tử có giá trị
dương. Khi ta không muốn nhập thì nhập giá trị 0.
#include “stdio.h”
#include “conio.h”
void main()
{ int i=1,n,tong=0;
clrscr();
printf(“Ban hay tien hanh nhap cac so nguyen \n”);
do
{
printf(“So thu: %d”,i);scanf(“%d”,&n);
if(n>0) tong++;
} while(++i,n==0);
printf(“Tong so phan tu ban da nhap la %d trong do co %d so duong “,i-1,tong);
getch();
}
2.4.5. Cấu trúc lặp for
Trang 22
Ch¬ng tr×nh C vµ C++
a./ Cú pháp câu lệnh
for(bt1; bt2; bt3)
Công_việc;
Trong đó:
- for là từ khoá
- bt1,bt2,bt3 là các biểu thức
- Công_việc có thể là một lệnh đơn hay một khối lệnh

b./ Sự hoạt động của câu lệnh for được tiến hành theo các bước sau:
Bước 1: Xác định giá trị của bt1
Bước 2: Xác định giá trị của bt2
Bước 3: Tuỳ thuộc vào tính đúng, sai của biểu thúc bt2 máy sẽ tiến hành lựa
chọn một trong hai nhánh sau:
Nếu bt2 có giá trị bằng không, máy sẽ ra khỏi vòng lặp for và chuyển tới câu
lệnh sau cấu trúc for
Nếu bt2 có giá trị khác không, máy sẽ tiến hành thực hiện các câu lệnh trong
thân for . Khi thực hiện xong Công_việc hay gặp câu lệnh continue trong thân for máy
sẽ chuyển sang buớc 4 (khởi đầu lại).
Bước 4: Tính bt3 sau đó quay lại bước 2 để bắt đầu lại vòng lặp mới của chu
trình.
Chú ý: Các bt1,bt2,bt3 có thể vắng mặt nhưng phải để lại dấu chấm phẩy.
Nếu bt2 vắng mặt thì máy coi luôn đúng. Khi đó muốn thoát khỏi vòng lặp thì
phải dùng câu lệnh return, break hay goto.
Các bt1,bt2,bt3 có thể gồm nhiều biểu thức cách nhau bởi dấu phẩy. Nếu bt2
gồm nhiều biểu thức thì tính đúng, sai của bt2 căn cứ vào tính đúng sai của biểu thức
cuối cùng.
c./ Ví dụ áp dụng:
Lập chương trình tính giá trị của tổng sau:
s=sin(x)+sin
2
(x)+ +sin
n
(x)
#include “stdio.h”
#include “conio.h”
void main()
{ int i,n;
float x,s,tg;

clrscr();
printf(“Ban hay nhap gia tri n va x :”);scanf(“%d%f”,&n,&x);
Trang 23
Ch¬ng tr×nh C vµ C++
s=0;tg=1;
for(i=0;i<=n;++i)
{ tg*=sin(x);
s+=tg;
}
printf(“Gia tri cua tong la %8.2f”,s);
getch();
}
2.4.6. Toán tử break và continue
2.4.6.1. Câu lênh break
Cho phép ra khỏi for, while, do while và switch. Nếu có nhiều vòng lặp lồng
nhau, câu lệnh break sẽ ra khỏi chu trình(hoặc switch bên trong nhất chứa nó)
Ví dụ: Nhập vào một dãy số từ bàn phím, tìm phần tử dương đầu tiên xuất hiện
trong dãy.
#include “stdio.h”
#include “conio.h”
#define N 50
void main()
{ int a[N],i,n;
clrscr();
printf(“Nhap n=”);scanf(“%d”,&n);
for(i=0;i<n;++i)
{printf(“a[%d]=”,i);
scanf(“%d”,&a[i]);
}
for(i=0;i<n;++i)

if(a[i]>0) break;
if(i<n) printf(“\n Phan tu duong dau tien la a[%d]=%d”,i,a[i]);
else printf(“\n Tat ca dem am”);
getch();
}
2.4.6.2 Câu lệnh continue
Dùng để quay về đầu vòng lặp mới của chu trình bên trong nhất chứa nó.
Ví dụ: Tìm số phần tử dương, tổng các phần tử dương và phần tử dương lớn nhất của
mảng hai chiều a gồm m(m<=10) hàng, n(n<=10) cột với các phần tử là các số nguyên.
Trang 24
Ch¬ng tr×nh C vµ C++
#include “stdio.h”
#include “conio.h”
void main()
{ int a[10][10],i,j;
int max, d=0,s=0;x,m,n;
clrscr();
printf(“Nhap m,n=”);scanf(“%d%d”,&m,&n);
printf(“\n Ban hay nhap cac phan tu cua mang\n”);
for(i=0;i<n;++i)
for(j=0;j<n;++j)
{ printf(“a[%d][%d]=”),i,j);
scanf(“%d”,&a[i][j]);
}
max=a[0][0];
for(i=0;i<m;++i)
for(j=0;j<n;++j)
{ if (a[i][j]<=0) continue;
s+=a[i][j];
d++;

if(max<a[i][j]) max=a[i][j];
}
printf(“tong=%d so phan tu duong =%d phan tu duong lon nhat
%d”,s,d,max);
getch();
}
Trang 25

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×