Giáo trình C cơ sở tài liệu, giáo án, bài giảng , luận văn, luận án, đồ án, bài tập lớn về tất cả các lĩnh vực kinh tế,...
Trang 1Lời nói đầu
Một cử nhân Tin học không thể không biết lập tr ình C ++, vấn đề là biết đến mức nào trong khi C ++ (hay cao c ấp hơn là Visual C ++) đã trở nên quá “khổng lồ” về mọi mặt
- nội dung cũng như môi trường phát triển của nó.
Khi giáo trình “Lập trình hướng đối tượng với C ++” ra đời, Giáo s ư Tin học Mỹ, Trần Thành Duy, có hỏi: “Anh định dạy bao nhi êu tiết mà nặng nề vậy?” Tôi trả lời là 45 tiết lý thuyết Rồi ông ta nói: “Suy cho c ùng thì dạy C ++ cho sinh viên thực chất là dạy một “phong cách” lập trình theo kiểu C ++ chứ hoàn toàn không phải dạy để họ trở thành một lập trình viên C ++ thực thụ ngay được - vì với sinh viên còn còn quá nhiều thứ khác phải học Chính
vì vậy mà nên chọn lọc, chọn lọc để nó trở th ành một giáo trình chứ không thể trở thành một quyển sách nói về C ++” Rồi ông ta nói tiếp: “Với 45 tiết mọi thứ chỉ là định hướng, cho nên phần Lập trình hướng đối tượng không nên quá rối rắm, mà chỉ nên làm rõ 3 tư tưởng chính yếu: Đóng kín, kế thừa và đa
hình Ngoài ra không thể không đề cập đến 3 nội dung khác: Dữ liệu, lệnh và hàm “ Rồi ông khuyên: ” Nên cho Sinh viên làm quen c ả 3 phong cách lập
trình theo: C++, Java và Visual Basic Còn ra đời họ chọn phong cách n ào là tuỳ ở họ” Ông nhắc lại câu nói của một nh à Sư phạm, Gs Ts H.Riner: ” Truyền thụ một môn học, thực chất l à đẩy người học vào một dòng nước, cái khó là làm sao dần dà họ tự bơi được, thích bơi và đến đích, chứ họ không chết đuối”.
Theo tinh thần đó chúng tôi sửa lại lần n ày sau khi đã cắt đi rất nhiều thứ mà Gs.Duy bảo là “nặng nề”.
Với quyển giáo trình rất cô đọng và đơn giản này (chắc sẽ có nhiều thiếu sót mong các bạn góp ý), hy vọng nó l à chất xúc tác ban đầu giúp bạn hứng thú, tiếp tục tìm hiểu về C ++, VC++, biết đâu bạn sẽ trở th ành một lập trình viên thực thụ với C ++ hoặc Visual C ++ Ngôn ngữ m à nhiều người quá hiểu về sức mạnh của nó, nh ưng đồng thời cũng ngại nó, nể nó v à yêu nó.
-Chúc các bạn thành đạt!
Trang 2Chương 1: Làm quen v ới lập trình C ++
1.1 Bộ ký tự dùng trong ngôn ngữ C ++
Các ngôn ngữ lập trình đều được xây dựng từ một bộ ký tự n ào đó Từ các ký tự
đó theo nhiều cách khác nhau nhóm th ành các từ, các từ lại được liên kết theomột trật tự nào đó thành câu lệnh Chương trình là một dãy các lệnh mô tả thuậtgiải của một vấn đề nào đó
Ngôn ngữ CN ++ được mô tả bằng bộ ký tự sau:
· 26 chữ cái hoa: A,B,C, ,Z
· 26 chữ cái thường: a,b,c, ,z
asm break case cdecl char const class continue
default do double else enum extern far
float for goto huge if int interrupt
long near pascal register return short signed
sizeof static struct switch typedef union unsigned
void volatile while v.v
Ý nghĩa của nó được mô tả dần ở các phần sau Từ khoá đ ược viết bằng chữthường, ví dụ: STATIC hoặc Static l à sai mà phải viết là static Không đượcdùng từ khoá để đặt tên cho các biến, các hằng, các hàm v.v
1.3 Tên
Trong chương trình có nhiều loại tên: Tên hằng, tên biến, tên mảng, tên tệp, têncon trỏ, tên hàm, tên nhãn v.v Tên được đặt theo quy tắc sau:
Là một xâu chữ cái hoặc chữ cái v à chữ số, nhưng chữ cái hoặc dấu gạch nối đứng
đầu, tên không được trùng với từ khoá, độ dài cực đại của tên không quá 32 ký tự.
Trang 3Bảng sau cho ta các ví dụ về tên:
Tên đặt sai Tên đặt đúng
Chú ý: Khi đặt tên nên chú ý đến chữ hoa và chữ thường, cụ thể tên ALPHA,
Alpha và alpha là 3 tên khác nhau
// Đây là chương trình tìm Max của mảng
Khi gặp thông tin trong cặp /* */ hoặc thông tin sau cặp // máy sẽ bỏ qua Mụcđích dùng chú thích là đ ể người đọc biết nội dung lệnh đó hoặc đoạn lệnh đó l à
#include <iostream.h> /* Sử dụng dòng nhập xuất */
#include <conio.h> /* Sử dung thư viện về màn hình */
main() /* Hàm chính */
{
/* Xuống dòng và in CHAO BAN */
cout << "\nCHAO BAN! ";
/* Xuống dòng và in GOOD BYE! */
cout << "\nGOOD BYE !";
getch(); /*Tạm dừng để xem kết quả, nhờ th ư viện conio.h */
Trang 4cout <<"\nCHAO BAN! ";
cout << "\nGOOD BYE! ";
#include <math.h> /*Sử dụng thư viện các hàm toán học */
#include <conio.h> /*thư viện có chứa lệnh getch () */
main ()
{
float r, cv; /* Lệnh khai báo biến */
/* Hiển thị ra màn hình thông báo: Bán kính r = */
cout << "\ n Chu vi=" << cv;
getch();/*Tạm dừng máy để xem kết qủaT */
}
1.6 Giải thích một số vấn đề ở các ví dụ tr ên
· Mỗi câu lệnh phải được kết thúc bằng dấu chấm phẩy M (;)lệnh có thể đ ượcviết trên một hay nhiều dòng.l
Trang 5· Hằng văn bản được đặt trong hai dấu nháy kép (") Để báo cho C + + biết mộtxâu ký tự vẫn còn nằm tiếp ở dòng dưới, ta đặt thêm / trước khi xuống dòng.
Ví dụ:
cout <<"\ n Trường Đại học /
\ n QL&KD Hà nội";
Tương đương một dòng như sau:
cout <<"\ n Trường Đại học \ n Sư phạm Hà nội";
·Lời giải thích đặt giữa cặp /* */ v à có thể được viết:
1 Trên một dòng.
2 Trên nhiều dòng.
3 Trên phần còn lại của một dòng.
Trong chương trình trên có dùng hàm chu ẩn cout Hàm này nằm trong tệp
iostream.h, vì vậy ở đầu chương trình cần viết:
#include <iostream.h> hoặc viết #include "iostream.h" cũng được.Cuối dòng này không có dấu chấm phẩy (;)như cuối lệnh Trong Cn ++, tr ướckhi sử dụng một hàm cần biết hàm đó nằm trong thư viện nào, khai báo thư viện
đó bằng lệnh #include <tên thư viện >.
· Chương trình trên chỉ có một hàm chính (main), tất nhiên chương trình còn
có thể có nhiều hàm khác Điều này sẽ được trình bày chi tiết trong các chươngsau
1.7 Khai báo và toán tử gán
a Khai báo
Nội dung khai báo sẽ nói kỹ trong các phần sau, ở đây ta chỉ nói qua cungcách khai báo biến mà thôi Trong C ++, mọi biến trước khi sử dụng đều phảikhai báo
Biến có kiểu nguyên: dùng từ khoá int
Biến có kiểu thực : dùng từ khoá float
v.v
Ví dụ:
int i, k; /* i, k có kiểu nguyên */
float x,y; /* x, y có kiểu thực */
Biến có kiểu int luôn luôn nhận giá trị nguyên trong quá trình tính toán còn bi ến kiểu float luôn nhận giá trị thực nhưng cũng có thể nhận giá trị nguy ên.
b Câu lệnh gán sẽ còn được trình bày kỹ trong các chương saub, ở đây ta chỉ
nói qua để có một cái nhìn chung về chương trình mà thôi Toán tử gán có
dạng:
B=BT;
Trong đó B là một biến, còn BT là một biểu thức toán học n ào đó Hoạt
động của toán tử gán như sau:
· Trước tiên tính biểu thức BT để có kết quả Q
Trang 6· Sau đó gán giá trị Q cho biến B.
Giả sử ta vào dữ liệu từ bàn phím 2 số nguyên ta viết như sau:
int m, n; /* khai báo biến kiểu int * /
cout<<"\n\' Có nháy đơn hai đầu \' \n";
cout <<"\n\" Có nháy kép hai đầu \"";
cout <<"\n\n\\ Có gạch chéo hai đầu \\\n\n";
getch();
}
Trang 7Kết quả thực hiện chương trìnhK
' Có nháy đơn hai đầu '
" Có nháy kép hai đầu"
\ Có gạch chéo hai đầu \
1.10 Chạy chương trình
Quá trình soạn và chạy chương trình bao gồm các bước cơ bản sau:
· Tạo tệp chương trình có đuôi CPP (hay còn gọi là soạn thảo chương trình)
· Dịch chương trình (tạo tệp chương trình dạng * EXE)
· Chạy chương trình.
1 Tạo chương trình nguồn.
Thường thì tệp tc.exe nằm trong th ư mục C:\TC\BIN, muốn soạn thảochương trình ta phải khởi động tc.exe, cụ thể:
C:\> TC\BIN\TC.EXE <Enter>
Sau đó một menu chính trên màn hình với nội dung như sau:
File Edit Search Run Compile
Để soạn hãy chọn § ile và chọn New Sau đó sử dụng bàn phím để gõ chương
trình vào Để ghi chương trình lên đĩa dưới dạng một tệp ta cần sử dụng chức
năng Save Sau đó gõ tên tệp vào và nhớ là đuôi là CPP Nếu muốn mở một tệp
đã có hãy chọn File /Open sau chọn chọn tệp cần mở v.v
2 Lập trình tính sin (x), cos(x), sqrt(x) v ới x được đưa vào từ bàn phím
3 Lập chương trình tính tích của 3 số thực được đưa vào từ bàn phím
Trang 82.1 Khai báo biến
Muốn sử dụng biến bắt buộc phải khai báo tr ước Ví dụ:
Cú pháp khai báo biến như sau:
Kiểu_dữ_liệu Danh _sách _các _biến;
Ví dụ:
int i, j; /*i, j là hai biến nguyên */
float x, y; /*x, y là hai biến thực */
2.2 Khai báo hằng
Hằng cũng phải được khai báo trước khi sử dụng, cú pháp khai báo nh ư sau:
const Kiểu _dữ_liệu Tên _hằng =Giá_trị_hằng;
Ví dụ:
const int a=320;
const float x=12.5, y=56.7;
2.3 Kiểu char
Một giá trị kiểu char chiếm một byte (8 bit) nh ư vậy 8 bit có thể mã hoá tới
28=256 ký tự Bộ mã hay dùng nhất hiện nay là bảng mã ASCII, trong C++ tadùng bảng mã ASCII, ví dụ:
Trang 9Hằng ký tự được viết ra với mở nháy đơn và đóng nháy đơn: 'a', 'x', '3' v.v
Phân loại ký tự: Có thể chia 256 ký tự thành ba nhóm:
· Nhóm thứ nhất là các ký tự điều khiển có mã từ 0 đến 31 Ví dụ ký tự m ã 13 dùng
để chuyển con trỏ về đầu d òng, ký tự 10 chuyển con trỏ xuồng d òng dưới (trên cùng
cột) Các ký tự nhóm này nói chung không hiển thị ra màn hình
· Nhóm thứ hai là các ký tự văn bản có mã từ 32 đến 126 Các ký tự n ày có thể đưa
ra màn hình và máy in.N
· Nhóm thứ ba là các ký tự đồ hoạ có mã số từ 127 đến 255 Các ký tự n ày có thể
đưa ra màn hình.
Trong C++có một số ký tự có quy cách viết nh ư sau:
Chuông kêu: BEL \a 7 x07
Chúng ta cũng có thể dùng cách viết: \xHHH trong đó HHH là s ố hệ 16 hoặc
\DDD trong đó DDD là số hệ 8 Ví dụ 'A', \x41, \101 đều cùng biểu diễn ký tự A
Để khởi tạo hằng ký tự ta viết nh ư sau:
const char a='y', b='t', RC='\r', LF='\n';
Để chuyển đổi chữ to thành chữ thường hoặc ngược lại ta dùng 2 hàm sau:
Trang 10· tolower(c): chuyển c thành chữ thường
· toupper(c): chuyển c thành chữ hoa
Các hàm trên nằm trong tệp <ctype.h> Hãy xem ví dụ sau:
2.5 Kiểu dấu phẩy động.
Trong C++ cho phép s ử dụng 3 loại giá trị dấu phẩy động đó l à float, double
và long double Hằng dấu phẩy động (float và double) được viết theo hai cách Cách 1: Số gồm phần nguyên, dấu chấm thập phân và phần thập phân, ví dụ:
Cách viết:
#define PI 3.141593
có nghĩa là đặt tên cho hằng float 3.141593 là PI.
Trang 11Khởi đầu cho các biến Khi khai báo, nếu sau tên biến ta đặt dấu =
và một giá trị nào đó thì đây chính là cách vừa khai báo vừa gán giá trị cho mộtbiến:
int m = 2, n = 5 ; float x = -12.1 , y = 45.0, z = 234.7 ;
Điều này tương đương cách vi ết:
int m, n ; float x,y,z ;
m = 2 ; n= 5 ; x = -12.1 ; y = 45.0 ; z=234.7 ;
Địa chỉ của biến Mỗi biến được cấp phát một vùng nhớ gồm một số byte liên
tiếp Số hiệu của byte đầu chính l à địa chỉ của biến Để nhận địa c hỉ biến ta dùngphép toán:
cho ta biết có 4 mảng: a, b, x và y.? nghĩa như sau:
· Mảng a có kiểu là int, số chiều là một, số phần tử là 5 Các phần tử được đánh số
như sau: a[0], a[1], a[2], a[3], a[4] Mỗi phần tử a [i] có kiểu int như vậy mảng a
có thể biểu diễn được một dãy 5 số nguyên.
· Mảng b có kiểu là int, số chiều là 2, kích thước của các chiều là 3 và 4 Mảng có
12 phần tử, chúng được đánh số và được sắp xếp như sau:
Trang 12b[0][0] b[0][1] b[0][2] b[0][3]
b[1][0] b[1][1] b[1][2] b[1][3]
b[2][0] b[2][1] b[2][2] b[2][3]
Mỗi phần tử b [i][j] có kiểu int, ta còn nói mảng b có 3 dòng, 4 cột.
· Mảng x có kiểu float, số chiều là một, kích thước bằng 3 Mảng có 3 phần tử đ ược
đánh số như sau:
x[0],x[1],x[2]
Mỗi phần tử x [i] có kiểu float và mảng x biểu diễn được một dãy 3 số
thực
· Mảng y có kiểu float, số chiều là 2, kích thước của mỗi chiều là 3 Mảng có 9 phần
tử, chúng được đánh số và được sắp xếp như sau:
y[0][0] y[0][1] y[0][2]
y[1][0] y[1][1] y[1][2]
y[2][0] y[2][1] y[2][2]
Mỗi phần tử y [i][j] có kiểu float, mảng y có 3 dòng, 3 cột.
Lấy địa chỉ phần tử mảng.
Có thể lấy địa chỉ phần tử mảng bằng phép toán &a[i] hoặc &a[i][j]
Địa chỉ đầu của mảng Hãy chú ý là: Tên mảng biểu thị địa chỉ đầu của mảng.
Như vậy ta có: a = &a[0]
Các ví dụ về mảng sẽ nói kỹ ở các phần sau
2.7 Định nghĩa kiểu bằng typedef
typedef int nguyen ;
Nghĩa là đặt tên kiểu int là nguyen Sau đó có thể dùng nguyen như int để khai
báo các biến nguyên và mảng nguyên như sau:
Đặt tên kiểu mảng thực một chiều 5 phần tử l à x.
Đặt tên kiểu mảng nguyên hai chiều kích cỡ 2x3 là y
Về sau ta có thể dùng các khai báo:
Trang 13cout<<k ; }
· C++ xem một khối lệnh cũng như một câu lệnh riêng lẻ
· Khai báo biến, mảng có thể đặt ở đầu một hàm và cũng có thể đặt ở đầu
1 Các biến hay mảng khai báo b ên trong một khối lệnh không thể sửdụng ở bên ngoài khối lệnh đó
2 Nếu bên trong một khối ta dùng một biến hay một mảng có t ên trùngvới biến hoặc mảng ở ngo ài khối thì các biến hoặc mảng trùng tên đó làkhác nhau
3 Nếu một biến được khai báo ở bên ngoài một khối lệnh và không trùngtên với các biến khai báo b ên trong khối lệnh này thì biến đó cũng cóthể sử dụng cả bên trong cũng như bên ngoài khối lệnh
· Giả sử cùng một tên biến hay một tên mảng lại được khai báo ở cả hai khốilệnh lồng nhau theo cách sau:
{
float x ;
Trang 14{
float x ;
}
}
Khi đó máy sẽ cấp phát hai khoảng nhớ khác nhau cho hai biến n ày,phạm vi hoạt động và thời gian tồn tại của chúng cũng khác nhau Biến x ởkhối trong có phạm vi hoạt động tại các câu lệnh củ a khối lệnh trong và nóchỉ tồn tại trong thời gian máy l àm việc với khối lệnh này Còn phạm vi hoạtđộng của biến x là ở khối ngoài gồm các câu lệnh bên trong khối lệnh ngoàinhưng không thuộc khối lệnh trong Tất nhi ên nếu thay đổi giá trị của biến xngoài sẽ không ảnh hưởng tới biến x trong và ngược lại Ví dụ:
· Một chương trình có thể bao gồm một hoặc nhiều h àm Hàm main()là một
thành phần bắt buộc của chương trình Chương trình bắt đầu thực hiện từ câu
lệnh đầu tiên của hàm µ ain()và kết thúc khi gặp dấu v } cuối c ùng của hàm
này Khi chương trình làm việc, máy có thể đi từ hàm này tới hàm khác Ta sẽxét kỹ hơn về vấn đề này ở các chương sau:
Trang 15khi máy bắt đầu làm việc với hàm đến khi máy ra khỏi hàm Do chương trình bắtđầu làm việc từ câu lệnh đầu tiên của hàm main ()và khi máy ra kh ỏi hàm mainv()thì chương trinh kết thúct, nên các biến, mảng khai báo trong h àm main ()sẽtồn tại trong suốt thời gian l àm việc của chương trình Ví dụs:
· Bộ khởi đầu của một mảng char có thể hoặc là danh sách các hằng ký tự
Trang 17Chương 3: Biểu thức
Biểu thức là một sự liên kết giữa các phép toán v à các toán hạng để biểu diễnmột công thức toán học n ào đó Khi viết biểu thức có thể d ùng các dấu ngoặctròn để thể hiện đúng trình tự tính toán trong biểu thứ c Một hằng, biến, phần tửmảng và hàm cũng được xem là biểu thức
& Phép và (AND) theo bit a&b
| Phép hoặc (OR) theo bit a|b
^ Phép loại trừ (XOR) theo bit a^b
<< Dịch trái a<<4 (dịch trái a đi 4 bit)
>> Dịch phải a>>4 (dịch phải a đi 4 bit)
~ Lấy phần bù theo bit ~a
a << n : Nghĩa là a được dịch trái n bit Tương đương với a *2n
a >> n : Nghĩa là a được dịch phải n bit Tương đương với a /2n
~1 = 0 ~0 = 1
Trang 183.3 Phép toán quan hệ và logic
Phép toán quan hệ và logic cho ta hoặc giá trị đúng (1) hoặc giá trị sai (0) Nóicách khác, khi các đi ều kiện nêu ra là đúng thì ta nhận được giá trị 1, trongtrường hợp trái lại, ta nhận đ ược giá trị 0
1 Các phép toán quan hệ cho trong bảng sau:
Trang 193.4 Chuyển đổi kiểu dữ liệu
Việc chuyển đổi kiểu th ường diễn ra một cách tự động trong hai tr ường hợpsau:
· Khi biểu thức gồm các toán hạng khác kiểu
· Khi gán một giá trị kiểu biến n ày cho một biến kiểu kia Điều này xảy ratrong toán tử gán
Sau đây là một số nguyên tắc:
1 Khi hai toán hạng trong một phép toán có kiểu khác nhau th ì kiểu thấp hơn
sẽ được nâng thành kiểu cao hơn trước khi thực hiện phép toán Kết quảthu được là một giá trị có kiểu cao h ơn Chẳng hạn:
· Giữa int và long thì int chuyển thành long.
· Giữa int và float thì int chuyển thành float.
· Giữa float và double thì float chuyển thành double.
2 Giá trị của vế phải trong phép gán đ ược chuyển sang kiểu của vế trái Kiểu
int có thể được chuyển thành float Kiểu float có thể được chuyển thành int do cắt bỏ phần thập phân Kiểu double chuyển thành float bằng cách làm tròn Kiểu long được chuyển thành int bằng cách cắt bỏ một số chữ
3.5 Phép toán tăng giảm
Trong C++ có hai phép toán một ngôi để tăng và giảm các biến Toán tửtăng + + sẽ cộng 1 vào toán hạng của nó, toán tử giảm - - sẽ trừ đi 1 Chẳng hạnnếu n đang có giá trị bằng 7 thì:
Sau khi thực hiện ++ n, n có giá trị mới là 8 Sau khi thực hiện n, n có giá trị mới là 6
Dấu ++ và có thể đứng trước hoặc sau toán hạng, ví dụ: ++ n , n++ , n , n
Sự khác nhau của ++n và n ++ là trong phép n ++ thì n t ăng sau khi giá trị của
nó đã được sử dụng, còn trong phép ++n thì n được tăng trước khi nó được sử dụng Sự khác nhau giữa n và n cũng tương tự.
Trang 20thì y có giá trị 2, x có giá trị 3 và z có giá trị 6.
3.7 Biểu thức điều kiện
Biểu thức điều kiện có dạng:
BT1 ? BT2 : BT3
Trong đó BT1, BT2, BT3 là các biểu thức nào đó Giá trị của biểu thức điều kiện bằng giá trị của BT2 nếu BT1 khác không (BT1 đúng) và b ằng giá trị của BT3 nếu BT1 bằng không ( BT1 sai) 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 BT2 và BT3 Chẳng hạn, nếu kiểu của BT2 là int, kiểu của BT3 là float thì kiểu của biểu thức điều kiện l à float.
Biểu thức điều kiện có thể được dùng như bất kỳ biểu thức nào khác Ví dụ: Câu lệnh:
s = a > b? a:b;
sẽ gán giá trị lớn nhất trong hai giá trị a hoặc b cho biến s Câu lệnh:
cout <<(a<b? a:b);
hiện thị lên màn hình giá trị cực tiểu của hai biến a và b
Trang 22Chương 4: Các lệnh điều khiển
Chương trình bao gồm nhiều câu lệnh Các câu lệnh đ ược thực hiện tuần tự từtrên xuống dưới Các lệnh điều khiển cho phép l àm thay đổi trật tự đó Ta có thểchia các lệnh điều khiển thành ba nhóm:
· Lệnh nhảy vô điều kiện (goto)
· Lệnh rẽ nhánh (if, switch)
· Lệnh lặp (for, while, do while)
Như đã trình bày ở các phần trước, Trong C++ mỗi câu lệnh có thể viết tr ênmột hoặc nhiều dòng và được kết thúc bằng dấu chấm phẩy Khối lệnh l à một
dãy các câu lệnh đặt trong các dấu {} Không được đặt dấu chấm phẩy sau
dấu ngoặc nhọn kết thúc khối Nếu khối lệnh chỉ gồm một câu lệnh th ì có thể
bỏ các dấu ngoặc nhọn đầu v à cuối
4.1 Lệnh điều kiện if
Lệnh if cho phép lựa chọn một trong hai nhánh tuỳ thuộc v ào biểu thức có giá
trị dúng hay sai, có ha dạng sau:
Trang 23Nếu biểu thức đúng thì thực hiện Nhối lệnh 1 bỏ khối lệnh 2
Nếu biểu thức sai thì bỏ Nhối lệnh 1 thực hiện khối lệnh 2
Trang 24Chú ý: Khi các lệnh if lồng nhau nếu không sử dụng các dấu đóng mở khối th ì
dễ gây ra nhầm lẫn Ví dụ đoạn ch ương trình sau:
Trang 25n=n+1;
Để chương trình dễ kiểm tra và đẹp mắt, người ta hay viết theo cách sau:
· Các câu lệnh hoặc khối lệnh thuộc một lệnh n ên viết dịch sang bên phải.C
Trang 26Đối với dạng này thì:
· Nếu biểu thức thứ i (i = 1, ,n -1) là đúng thì khối lệnh i được thực hiện
· Nếu cả n -1 biểu thức đều sai thì khối lệnh n được thực hiện
Ví dụ: Tìm môn học trong các thứ trong tuần: 2,3,4,5,6,7
Trang 28Lệnh Switch cho phép căn cứ vào giá trị của một biểu thức nguyên để chọn một
trong nhiều nhánh Lệnh có dạng sau:
switch (Biểu thức nguyên)
Trang 29Hoạt động của lệnh switch.
1 Nếu biểu thức có giá trị là ni máy sẽ thực hiện khối lệnh i
2 Khi giá trị biểu thức khác tất cả các ni th ì:
· Nếu có default, máy nhẩy tới câu lệnh có nhãn default.
· Nếu không có default máy ra khỏi lệnh switch.
Ra khỏi lệnh switch: Máy sẽ ra khỏi lệnh switch khi gặp lệnh break hoặc gặp dấu ngoặc nhọn cuối cùng của thân switch.
Trang 30case 2 : cout<<"\nToán, lý, hoá";
Trang 31Khi dùng toán tử Goto cần lưu ý các điểm sau:
· Câu lệnh goto và nhãn cần nằm trong một hàm.
Lệnh Goto chỉ cho phép nhảy từ vị trí n ày đến một ví trí khác trong thân của một
hàm Nó không thể dùng để nhảy từ hàm này sang hàm khác Không cho phép
dùng lệnh goto để nhảy từ ngoài vào trong một khối lệnh Nhưng nhảy từ trong
ra ngoài khối lệnh lại được phép Ví dụ:
Trang 32Ta có thể tạo một quá trình lặp bằng cách dùng các toán tử if và goto Toán
tử for cho ta một cách khác xây dựng quá tr ình lặp đẹp hơn và hiệu quả hơn, lệnh for có dạng sau:
for (biểu thức 1; biểu thức 2; biểu thức 3)
Khối lệnh; /* thân của for */
Lệnh for gồm ba biểu thức và thân for Thân for là một câu lệnh hoặc một khối
lệnh Bất kỳ biểu thức n ào trong ba biểu thức nói trên đều có thể vắng mặt nhưng
phải giữ dấu chấm phẩy.
Biểu thức 1 thường là một toán tử gán để tạo giá trị ban đầu cho biến điều khiển, biểu thức 2 là một quan hệ logic biểu thị điều kiện để tiếp tục lặp, biểu thức 3 là một toán tử gán dùng để thay đổi giá trị của biến điều khiển.
Lệnh for làm việc theo các bước sau:
Trang 33b Nếu biểu thức 2 có giá trị đúng máy sẽ thực hiện các câu lệnh trong thân for Khi gặp dấu ngoặc đóng } cuối cùng của thân for hoặc gặp câu lệnh continue máy sẽ chuyển tơí bước 4 để khởi đầu lại.
4 Tính biểu thức 3 sau đó quay trở lại bước 2 để bắt đầu một vòng mới.
Ví dụ phần 4.4 có thể viết bằng lệnh for như sau:
Trang 35(a[0] đổi chỗ cho a[5], a[1] đổi chỗ cho a[4], a[2] đổi chỗ cho a[3])
Trang 36cout<<"\ n Đây là kết quả:";
for (i= 0; i<=4; i=i+1)
cout<<"\n"<<a[i];
getch();
Trang 374.6 Lệnh while
Lệnh while dùng để xây dựng các chu trình, nó có dạng sau:
while (biểu thức)
Khối lệnh /* Thân chu trình */
Toán tử while gồm một biểu thức và thân chu trình Thân while là một câu lệnh
hoặc một khối lệnh
Hoạt động của while.
Lệnh while làm việc theo các bước sau:
Xác định giá trị của biểu thức
Tuỳ thuộc vào tính đúng sai của biểu thức này, máy sẽ lựa chọn một trong hainhánh:
Nếu biểu thức có giá trị sai (bằng 0), máy sẽ ra khỏi chu tr ình và chuyển tới câu
lệnh sau thân while.
Nếu biểu thức có giá trị đúng (bằng 1), máy sẽ thực hiện các câu lệnh trong thân
while.
Khi gặp dấu ngoặc nhọn cuối c ùng của thân while máy sẽ trở lại bước 1.
Ví dụ: Tính tổng mảng được viết bằng lệnh while:
#include <iostream.h>
#include <conio.h>
main()
Trang 39while (s + =a[i]*b[i], + +i- 4) ; /* Thân while là câu l ệnh rỗng */
cout<<"\nTích vô hướng ="<<s;
Trang 40cout<<"\ n Đây là kết quả:";
for (i= 0; i<=4; i=i+1)
cout<<"\n"<<a[i];
getch();
}
3 Khi gặp lệnh break trong thân while, máy sẽ ra khỏi lệnh while
4 Trong thân while có th ể sử dụng toán tử goto để nhẩy ra khỏi c hu trình đến một vị trí bất kỳ.
5 Trong thân while có th ể dùng câu lệnh continue để chuyển đến đầu một vòng lặp mới của chu trình Nghĩa là khi gặp continue máy sẽ bỏ qua các câu lệnh còn lại trong thân chu trình để trở lại tính và kiểm tra biểu thức sau while.
4.7 Lệnh do while
Với lệnh while và for, việc kiểm tra điều kiện kết thúc đặt ở đầu chu tr ình Lệnh
do while đặt điều kiện ở cuối chu tr ình, do đó thân của chu trình bao giờ cũng
được thực hiện ít nhất một lần
Lệnh do while có dạng sau: