1. Trang chủ
  2. » Công Nghệ Thông Tin

Ngôn ngữ lập trình C++

114 310 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 114
Dung lượng 756,33 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Chương trình của C bao gồm nhiều hàm nằm trong các tệp khác nhau, mỗi hàm được xây dựng độc lập và có thể gép nối với nhau một cách dễ dàng.. Chính vì thế mà hầu hết các hệ thống chương

Trang 1

Ngôn ngữ lập trình C++

Chương 1 Giới thiệu ngôn ngữ C++

1.1 Xuất xứ của ngôn ngữ C

Ngôn ngữ lập trình C do Dennis Ritchie và Brian Kernighan xây dựng năm 1970, thể hiện được tất cả các đặc trưng của ngôn ngữ lập trình bậc cao nhưng cũng có khá đầy đủ các khả năng của ngôn ngữ lập trình bậc thấp

Cùng với sự phát triển mạnh mẽ của công nghệ thông tin (CNTT), ngôn ngữ C có rất nhiều phiên bản của các hãng khác nhau như C chuẩn, Turbo C, Microsoft C Sau ngôn ngữ C là C++ ngoài các tính năng như C, C++ còn

được bổ sung nhiều tính năng khác, một trong đó là kỹ thuật lập trình hướng

đối tượng, một hướng lập trình rất quan trọng

1.2 Một số đặc trưng của ngôn ngữ C

Khác với ngôn ngữ Pascal, trong ngôn ngữ C không có sự phân biệt giữa hàm và thủ tục Chương trình của C bao gồm nhiều hàm nằm trong các tệp khác nhau, mỗi hàm được xây dựng độc lập và có thể gép nối với nhau một cách dễ dàng

Trong ngôn ngữ C có nhiều mô hình tổ chức bộ nhớ, làm cho chương trình viết bằng C sử dụng bộ nhớ tiết kiệm và hiệu quả

Con trỏ trong C là một công cụ mạnh mẽ cho phép truy nhập vào mọi nguồn tư liệu và hệ thống một cách hiệu quả C cho phép phát triển giao diện

đồ hoạ rất tiện dụng

Chính vì thế mà hầu hết các hệ thống chương trình lớn đều được viết bằng C, và việc học ngôn ngữ C là bắt buộc đối với các sinh viên chuyên ngành CNTT và những người lập trình chuyên nghiệp

Trong tài liệu này chúng ta chủ yếu xét Turbo C Vr.3.0 của Borland, bởi

lẽ C++ đang được cài đặt phổ biến trên các máy vi tính, sử dụng tương đối dễ dàng và được trang bị kỹ thuật lập trình hướng đối tượng, vấn đề này sẽ được xét trong một chuyên đề tiếp theo

Trang 2

• Tạo tệp mới : File New

• Mở tệp : File Open (F3)

• Ghi tệp : File Save (F2)

• Ghi với tên khác : File Save as

• Dịch chương trình : Compile (Alt + F9)

• Chạy chương trình : Run (Ctrl + F9)

• Thoát ra : File Quit (Alt + X)

• Thao tác với khối:

Đánh dấu dầu khối : Ctrl + K + B

Đánh dấu cuối khối : Ctrl + K + K Chuyển khối vào bộ nhớ đệm : Edit + Cut Sao chép khối vào bộ nhớ đệm : Edit + Copy Sao chép khối tới vị trí con trỏ : Edit + Paste

Trang 3

1.5 Ví dụ

Ví dụ chương trình 1.1: Hiện xâu Hello lên màn hình

// chuong trinh dau tien HELLO.CPP

# include <iostream.h>

void main() {

cout << "Hello !"; // hiện xâu Hello }

Ví dụ chương trình 1.2: Tính giai thừa n!

// Tinh giai thua GTHUA.CPP

# include <iostream.h>

// Hàm tính giai thừa long gthua(int &n) { int gt = 1;

for (int i = 1; i <= n; i++) gt = gt*i;

return gt;

}

// Chương trình chính void main()

{ int k;

cout << "\nNhap so n = "; cin >> k;

- Dấu { và } giống như Begin và End trong Pascal

- Kết thúc một lệnh có dấu chấm phẩy (;)

- Lời giải thích đặt sau cặp ký tự //, và có thể đặt trên một dòng hay sau một dòng lệnh

- C phân biệt tên viết bằng chữ thường với chữ hoa

- Khối lệnh (lệnh ghép) là các lệnh đặt trong cặp dấu ngoặc nhọn { }

Trang 4

Chương 2 Các khái niệm cơ bản

Từ khoá là những từ được sử dụng để xác định những tên đã được quy

định sẵn trong C++, người sử dụng không thể đặt các tên trùng với từ khoá Sau đây là danh sách các từ khoá trong C++:

const extern long short throw while

Trang 5

structure union class enumeration

Kiểu dẫn

array functionxuất

char int

Số thực

Ngoại trừ kiểu void, các kiểu dữ liệu cơ sở có thể sử dụng kết hợp với signed (có dấu), unsigned (không dấu), long (số dài), short (số ngắn) Bảng sau đây sẽ cho biết kích thước và miền xác định của các kiểu cơ sở:

unsigned short int 2 0 65535

signed short int 2 -32768 32767

signed long int 4 -214783648 214783647 unsigned long int 4 0 4294967295

long double 10 3.4E-4932 1.1E+4932

Trang 6

2.5 Khai báo biến

Mọi biến cần phải khai báo trước khi sử dụng Việc khai báo biến được thực hiện theo quy tắc chung như sau:

Ví dụ:

int a, b, c; // Khai báo 3 biến kiểu int

float x, y; //Khai báo 2 biến kiểu float

char ch1; // Khai bái 1 biến kiểu char

Khi khai báo các biến cũng có thể khởi tạo ngay giá trị cho chúng, ví dụ: int s1 = 5, s2, s3 = 10;

Vị trí khai báo biến: C++ cho phép khai báo các biến ở bất kỳ vị trí nào trong miền xác định Ví dụ, hãy xem việc khai báo các biến trong đoạn chương trình sau:

float x; // khai báo biễn x float s = 0; // khai báo biến s và khởi tạo giá trị 0 cho nó for (int i = 1; i<=10; i = i+1) // khai báo biến trong vòng lặp

Miền tác dụng của biến được xác định từ điểm biến được khai báo cho

đến cuối khối chứa khai báo đó Biến được khai báo bên trong của khối được gọi là biến cục bộ của khối đó, biến được khai báo ngoài cùng được gọi là biến tổng thể

2.6 Hằng

Hằng là các đại lượng mà giá trị của nó không thay đổi trong quá trình hoạt động của chương trình

Hằng số nguyên int: 45

Trang 7

Hằng long: 4599L; 123l

Hằng float và double: 12.5; -0.001; 15 ; 1E-5; 1.327E+9

Hằng nguyên hệ 16: oxa9; OX15AF

Hằng ký tự: ‘A’ ; ‘a’; ‘0’

Hằng xâu ký tự: “Ha noi”; “DHSP”; “a”; “”

Khai báo hằng:

const n = 10; // khai báo hằng n = 10

# define pi 3.14159 // khai báo hằng pi = 3.14159 enum{A = 100; B = 150};

2.8 Nhập/xuất

2.8.1 Nhập xuất bằng lệnh cin, cout

Để viết dữ liệu ra màn hình có thể dùng lệnh cout như sau:

cout << <bt> [<< <bt> ] [ ];

Ví dụ:

cout << “Hello”;

int a = 5, b = 9;

cout << ”Tich ab = “ << a*b ;

Để nhập dữ liệu vào từ bàn phím có thể dùng lệnh cin như sau:

cin >> tên_biến [<< tên_biến] [<< ];

Ví dụ:

cin >> n1;

cin >> n2;

Có thể gộp hai lệnh trên lại như sau: cin >> n1 >> n2;

Chú ý rằng, để sử dụng được các lệnh cin và cout trên trong chương trình phải có lệnh # include <iostream.h> ở đầu chương trình

Ví dụ chương trình 2.1: Lập chương trình nhập hai số nguyên vào từ bàn phím rồi tính tổng của chúng

// chuong trinh vi du nhap xuat

# include <iostream.h>

Trang 8

void main() {

2.8.2 NhËp xuÊt b»ng printf, scanf, gets

§Ó sö dông ®−îc c¸c hµm nµy ph¶i cã dÉn h−íng # include <stdio.h> ë

Trang 9

Để xác định độ rộng của biểu thức in ra ta thêm chuỗi quy định độ rộng vào giữa, chẳng hạn như: “%5d”, “%7.3f”

Ví dụ: printf(“%5d %8.2f”,12, 759.23678);

thì sẽ in ra là: 12 759.24

Hàm scanf cho phép đọc thông tin từ thiết bị vào chuẩn (bàn phím), rồi lưu vào biến nhố Hàm có dạng như sau:

int scanf(const char *dk [, danh sách biến nhớ];

Trong hàm scanf có dùng toán tử địa chỉ & trước tên biến

Ví dụ:

int a, b;

printf(“\nNhap so a, b : “);

scanf(“%d %d”, &a, &b);

Khi dùng các lệnh cin hay scanf để nhập các chuỗi mà trong nó có chứa dấu cách, thì phần chuỗi nhập vào từ dấu cách trở đi sẽ bị bỏ qua, chẳng hạn nhập chuỗi “Lê Văn Hùng” thì biến nhập chỉ nhận được “Lê” Để khắc phục

printf("\nVao ho va ten : ");

gets(ht);

printf("\nBan da nhap %s",ht);

}

Trang 10

Có thể viết gọn thành: i++; hay ++i;

++i tăng giá trị của biến rồi mới sử dụng, còn i++ dùng biến rồi mới tăng giá trị

Tương tự có các toán tử giảm

2.9.4 Toán tử quan hệ

Các toán tử quan hệ gồm có: < > <= >= == !=

Kết quả của các toán tử quan hệ là 1 (đúng), hoặc 0 (sai)

Các toán tử số học có độ ưu tiên cao hơn các toán tử quan hệ

2.9.5 Toán tử logic

Các toán tử logic gồm có:

&& logic AND

Trang 11

|| logic OR

! logic NOT

^ logic XOR Bảng chân lý của các phép toán logic:

0 0 0 0 1 0

0 1 0 1 1 1

1 0 0 1 0 1

1 1 1 1 0 0 Các phép toán quan hệ có độ −u tiên nhỏ hơn so với ! nh−ng lớn hơn so với &&, || và ^

Trang 12

2.9.7 Thứ tự ưu tiên của các toán tử

3 prefix++ prefix postfix++ postfix

~ ! unnary+ unary- unary* unary&

(type) sizeof new delete

phải sang trái

7 << >> trái sang phải

8 < <= > >= trái sang phải

16 = += -= *= /= %= <<= >>= &=

^= |=

phải sang trái

Nhận xét:

• Các toán tử ở dòng trên có mức ưu tiên cao hơn dòng dưới

• Các phép toán cùng dòng có mức ưu tiên như nhau

• prefix và posfix là những từ xác định sử dụng ++, thực hiện trước hay sau Còn unary chỉ định các toán tử một ngôi

2.9.8 Biểu thức

Biểu thức là sự kết hợp giữa các toán tử (operator) và các toán hạng (operand) để diễn đạt một công thức toán học nào đó

Toán tử : là các phép toán (số học, logic, quan hệ )

Toán hạng : là đối tượng tác động của các toán tử (các hằng, biến,

hàm )

Trang 13

Trong C có các loại biểu thức:

- Biểu thức số: giá trị của biểu thức là số

- Biểu thức logic: giá trị của biểu thức là đúng (1) hoặc sai (0)

- Biểu thức ký tự: giá trị của biểu là một ký tự thuộc bảng mã ASCII

- Biểu thức chuỗi ký tự: giá trị của biểu thức là một chuỗi ký tự

Trang 14

Ch−¬ng 3 C¸c cÊu tróc ®iÒu khiÓn

thùc hiÖn <khèi lÖnh> råi ra khái cÊu

tróc, ng−îc l¹i <btL> cã gi¸ trÞ sai (0)

cout << "Vao so thu nhat: "; cin >> a;

cout << "Vao so thu hai : "; cin >> b;

Trang 15

Nếu <btL> có giá trị đúng thì thực hiện <Khối lệnh 1> rồi ra khỏi cấu trúc, nếu <btL> có giá trị sai thì thực hiện <Khối lệnh 2> rồi ra khỏi cấu trúc

Ví dụ chương trình 3.2: Giải PT bậc hai (a#0) trên trường số thực

else { x1 = (-b+sqrt(d))/(2*a);

x2 = (-b-sqrt(d))/(2*a);

cout << "\nPT co 2 nghiem phan biet"

<< "\n X1 = " << x1 << "\n X2 = " << x2;

} getch();

Trang 16

VÝ dô ch−¬ng tr×nh 3.3: NhËp 2 sè råi chän mét phÐp to¸n sè häc tÝnh 2

printf("TINH TOAN SO HOC\n");

cout << "a = "; cin >> a;

cout << "b = "; cin >> b;

cout << "Chon phep toan (+ - * :) ? "; cin >> PT;

switch (PT)

{ case '+':

cout << "\na + b = " << a+b;

Trang 17

cout <<"\nBan chon phep toan sai.";

Giá trị của biểu thức điều kiện bằng giá trị của <bt1> nếu <bt> có giá trị

đúng (1), bằng giá trị của <bt2> nếu <bt> có giá trị sai (0)

Ví dụ:

max = (num1>num2)? num1: num2;

Tương đương với:

if (num1>num2) max = num1;

else max = num2;

3 Tính <bt tăng/giảm> rồi quay lại bước 2

Ví dụ: for (int i=1; i<=100; i++) s = s + i;

hoặc for (int i=100; i > 0; i ) s = s + i;

Ví dụ chương trình 3.4: Lập bảng nhân của 10 số tự nhiên đầu tiên

Trang 18

clrscr();

gotoxy(20,3);

cout << "Bang tinh nhan\n\n";

for (i=1; i<=10; i++)

for (j=1; j<=10; j++) cout << setw(5) << i*j;

2 Tuỳ thuộc vào giá trị đúng hay sai của <btL>, máy sẽ:

- Nếu <btL> có giá trị sai thì thoát ra khỏi cấu trúc lặp

- Nếu <btL> có giá trị đúng thì thực hiện <khối lệnh>, rồi quay lại bước 1

Trang 19

VÝ dô ch−¬ng tr×nh 3.6: NhËp 2 sè råi chän mét phÐp to¸n sè häc tÝnh 2

cout << "a = "; cin >> a;

cout << "b = "; cin >> b;

cout << "Chon phep toan (+ - * /) ? ";

cin >> PT;

switch (PT) {

else cout << "\nKhong chia duoc !";

break;

default:

cout <<"\nBan da chon sai !";

} char TL;

cout << "\n\nCo tinh nua khong (C/K) ? ";

cin >> TL;

if (TL == 'K' || TL == 'k') break;

}

Trang 20

2 Xác định giá trị của <btL> sau while:

- Nếu <blL> có giá trị sai thì thoát ra khỏi cấu trúc

- Nếu <btL> có giá trị đúng thì quay lại bước 1

Lệnh break trong cấu trúc witch để kết thúc một nhánh case Nếu cuối khối lệnh của một nhánh case không có lệnh break, khi thực hiện xong khối lệnh đó, máy sẽ thực hiện tiếp khối lệnh của case tiếp theo

Trang 21

3.2.5 Nhãn và lệnh goto

Tên nhãn được quy định giống tên biến và có dấu hai chấm (:) sau cùng

Có thể gán bất kỳ câu lệnh cho nhãn, chẳng hạn:

• Không được phép cho lệnh goto nhảy từ ngoài vào trong một khối lệnh Tuy nhiên việc nhảy từ trong một khối lệnh ra ngoài là hợp lệ

Ví dụ chương trình 3.8: Nhập 2 số rồi chọn một phép toán số học tính 2

printf("TINH TOAN SO HOC\n");

cout << "a = "; cin >> a;

Trang 22

1 Giải và biện luận phương trình ax + b = 0

2 Giải và biện luận hệ pt bậc nhất:

ax + by = c a1x + b1y = c1

3 Viết chương trình nhập 3 số x, y, z và tìm số lớn nhất và nhỏ nhất trong chúng

4 Lập chương trình tìm ƯSCLN của hai số nguyên dương a, b

5 Giải và biện luận phương trình aX4 + bX2 + c = 0

6 Lập chương trình in ra bảng căn bậc 2 và căn bậc 3 của 100 số tự nhiên đầu tiên

7 Lập chương trình nhập một số tự nhiên có ba chữ số và đổi thành chữ

Trang 23

=

chan n neu n

le n neu n S

642

531

le n neu n

x x x x n

642

531

!

10 Lập chương trình tính S = 1 -1/2 + 1/3 - 1/4 + 1/5 - 1/6 + với độ chính xác 10-6

N đồng sau M tháng

14 Cho xâu ký tự ‘ABCD’, các xâu ‘ABCD’, ‘BACD’, ‘DABC’, ‘CDAB’

được gọi là các hoán vị của xâu ‘ABCD’ Lập trình tìm :

a Số lượng các hoán vị của xâu ‘ABCD’

b In ra màn hình các hoán vị của xâu ‘ABCD’

15 Số Mersen là số nguyên tố có dạng 2n -1, trong đó n cũng là một số nguyên tố Hãy lập trình tìm tất các các số Mersen không quá 10 chữ số

16 Số 36 có tính chất 36= 62 = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8

Số tiếp theo có tính chất như vậy là 125 = 352 = 1 + 2 + 3 + + 49

Hãy tìm tất cả những số không vượt quá 7 chữ số có tính chất như trên

17 Lập chương trình in ra 1000 số nguyên tố đầu tiên

Trang 24

Chương 4 Hàm và cấu trúc chương trình

Hàm đóng vai trò quan trọng trong chương trình C Chương trình được chia thành nhiều đơn thể chức năng theo cách tiếp cận trên-xuống, và được thiết kế theo phương pháp lập trình có cấu trúc Một chường viết trong ngôn ngữ C bao gồm một hàm chính (hàm main) và các hàm con (mỗi hàm là một chương trình con) Thứ tự của các hàm trong chương trình là bất kỳ, nhưng chương trình bao giờ cũng được thực hiện từ hàm main Trong C++ các hàm

được bổ sung nhiều đặc tính mới hỗ trợ cho lập trình hướng đối tượng

4.1 Chức năng của hàm

4.1.1 Hàm main()

Chương trình trong C là một tập các hàm trong đó có một hàm main(), đó

là nơi chương trình được bắt đầu và kết thúc Trong C hàm main() nhận trả lại giá trị kiểu int cho hệ thống, nó có dạng chung như sau:

Trong C++ hàm main() có thể là kiểu void, nên không cần trả lại giá trị

4.1.2 Tránh việc lặp lại các đoạn chương trình

Nếu chương trình có nhiều đoạn giống nhau, để tránh việc phải viết lại các đoạn giống nhau đó, hãy lập một chương trình con (hàm con), khi cần thiết chỉ việc nó ra cùng với các tham số cần thiết

}

Trang 25

4.1.3 Tổ chức chương trình

Phân tách chương trình lớn thành các modul chương trình nhỏ độc lập, mỗi modul là một hàm con giải quyết một công việc cụ thể Từng hàm sẽ

được hoàn chỉnh, kiểm tra sau đó lại kết nối lại thành một hệ thống chương trình

4.1.4 Tính độc lập

Tính độc lập cho phép các chương trình con độc lập với chương trình chính Chẳng hạn trong chương trình con có các biến cục bộ, không bị chương trình chính hay các chương trình con khác truy nhập đến Điều này sẽ làm hạn chế tới việc đụng chạm tên biến, kiểm soát được các hiệu phụ trong hệ thống chương trình

4.1.5 So sánh hàm trong C với hàm và thủ tục trong Pascal

Trong Pascal hàm và thủ tục là hai đối tượng riêng biệt, hàm trả về giá trị còn thủ tục thực hiện những tác vụ nào đó Trong C, hai khái niệm này nhập lại là một, nghĩa là hàm của C có thể trả về dữ liệu qua đối và cũng có thể trả

về giá trị

4.2.Xây dựng hàm

4.2.1 Quy tắc xây dựng hàm

Hàm có thể xem như một đơn vị độc lập của chương trình Các hàm có vai trò ngang nhau, cho nên trong ngôn ngữ C không cho phép xây dựng một hàm nằm bên trong một hàm khác

Trang 26

Trong C++ có hàm kiểu void, đó là hàm không trả lại giá trị nào Khi hàm không có đối cũng có thể coi đối của nó là void, ví dụ:

void hamxyz(void)

4.2.2 Lời gọi hàm

tên_hàm([danh sách tham số thật])

Khi một hàm được gọi thì quá trình diễn ra như sau:

• Cấp phát bộ nhớ cho các đối và các biến cục bộ

• Gán giá trị của các tham số thật cho các đối tương ứng

else return y;

4.2.3 Khai báo nguyên mẫu hàm (prototype)

Nguyên mẫu của hàm là cách định nghĩa và khai báo hàm theo chuẩn ANSI, thực chất đó là dòng đầu tiên của hàm và có thêm dấu chấm phẩy (;) Mục đích của cách khai báo này là để tránh các lỗi do không đúng kiểu dữ liệu giữa trị truyền đến hàm và trị hàm momg muốn Với các chương trình lớn

và phức tạp thì việc khai báo nguyên mẫu hàm càng quan trọng

Trang 27

float dtht(float r) { return r*r*PI; }

Ví dụ chương trình 4.3 Tìm ước số chung lớn nhất của 2 số nguyên dương

4.2.4 Truyền tham số cho hàm

Có 4 cách truyền một đối cho cho một tham số của hàm: truyền bằng giá trị, bằng giá trị const, bằng tham chiếu, và bằng tham chiếu const

• Truyền bằng giá trị:

Truyền bằng giá trị là là phương pháp đơn giản và thông dụng nhất Trong cách truyền này tham số là biến cục bộ, trong quá trình gọi thực hiện hàm sự thay đổi của tham số hình thức không làm thay đổi giá trị nguyên thuỷ của đối (biến) được truyền

Trang 28

• Truyền bằng giá trị const

Truyền bằng giá trị const tương tự như truyền bằng giá trị nhưng có thêm

từ khoá const vào trước tên kiểu biến hình thức, làm cho tham số trở thành hằng và hàm không thể thay đổi được giá trị của nó

Ví dụ chương trình 4.5:

# include <iostream.h>

# include <conio.h>

// truyen tham so theo gia tri const

void func(const int x)

Trang 29

• Truyền bằng tham chiếu

Truyền bằng tham chiếu (còn gọi là truyền theo địa chỉ) cho phép thay

đổi giá trị của đối, vì tham số của hàm chỉ là bí danh cho đối hiện có Trong cách truyền này phải thêm toán tử & vào trước tên tham số hình thức

Ví dụ chương trình 4.6:

# include <iostream.h>

# include <conio.h>

// truyen tham so bang tham chieu

void func1(int &x)

Trang 30

clrscr();

cout << "\nHoan vi 2 so";

cout << "\nBan dau:" << endl

<< "a = " << a << endl << "b = " << b;

hoan_vi(a, b);

cout << "\nSau hoan vi:" << endl

<< "a = " << a << endl << "b = " << b;

getch();

}

• Truyền bằng tham chiếu const

Truyền bằng tham chiếu const tương tự như truyền bằng tham chiếu, nhưng hàm được truyền không thể làm thay đổi giá trị của đối được truyền Trong cách truyền này phải thêm từ khoá const vào trước tên kiểu của tham số hình thức

Ví dụ chương trình 4.8:

# include <iostream.h>

# include <conio.h>

// truyen tham so bang tham chieu const

void func1(const int &x)

number =45;

Trang 31

Bạn yêu cầu trình biên dịch dịch dòng lệnh này ra mã máy, để chip vi xử

lý có thể thực hiện được Thay vì phải dịch ngay sang mã máy, các dẫn hướng tiền xử lý yêu cầu trình biên dịch phải xử lý chúng theo một yêu cầu nào đó của người lập trình trước khi bắt đầu trình biên dịch, vì đó mà có tên là tiền xử

lý Sau đây chúng xem xét hai dẫn hướng tiền xử lý rất hay được sử dụng, đó

là #define và #include

4.3.1 Dẫn hướng #define

• Dẫn hướng #define dùng để gán tên cho hằng, ví dụ:

#define PI 3.14159 Chuẩn ANSI cho phép khai báo hằng như sau:

const PI = 3.14159;

• Dẫn hướng #define thay thế cho câu lệnh, ví dụ:

#define ERROR cout << “\nError, division by zero !\n” Khi đó cần thông báo do lỗi, có thể gọi nó như sau:

Khi ta xây dựng các hệ thống chương trình lớn và phức tạp trên C, thường

có nhiều biểu thức, công thức tính toán, hàm tự tạo, hằng, macro, dẫn hướng

Trang 32

được sử lại nhiều lần Ta có thể đặt tất những thứ đó vào một tệp tin nguồn riêng với phầm mở rộng là h (ví dụ progres.h) Khi viết chương trình cần phải

sử dụng các công việc xử lý trên, ta chỉ cần đưa phát biểu:

# include “progres.h”

vào đầu chương trình là được

4.3.3 Các tệp tin header chuẩn

Trong ngôn ngữ C có một số tệp header chuẩn, chứa các định nghĩa và macro rất hữu ích cho người lập trình Các tệp này thường được đặt trong thư mục TC\INCLUDE Nhiều hàm thông dụng trong thư viện C, thực sự là các macro được định nghĩa trong các tệp header chuẩn, chẳng hạn như : getch(), printf() trong tệp stdio.h; sqrt(x), sin(x), exp(x) trong tệp math.h

Muốn sử dụng được các hàm này, ta phải đặt các phát biểu sau trong chương trình:

# include <stdio.h>

# include <math.h>

4.3.3 Các tệp tin header và định nguyên mẫu

Một lý do khác phải dùng các tệp header là chúng cung cấp các nguyên mẫu các hàm thư viện của C Mỗi hàm thư viện của C đều liên quan đến một tệp tin header trong thư mục TC\INCLUDE Ví dụ nguyên mẫu cho hàm printf() được xác định trong tệp stdio.h

Để đẩm bảo không gọi nhầm một hàm thư viện với đối sai kiểu dữ liệu, ta chỉ cần đặt tệp tin header vào sau # include ở đầu chương trình Vấn đề này bạn đọc có thể xem chi tiết trong các tài liệu Reference C

Trang 33

Hàm đệ quy thường được viết theo thuật toán sau:

if (trường hợp suy biến)

{

Trình bầy cách giải bài toán (giải định đã có cách giải) }

else // trường hợp chung

{

Gọi đệ quy tới hàm với các giá trị khác nhau của tham số }

Ví dụ: Hàm tìm USCLN của hai số nguyên dương

int USCLN(int x, int y)

{

if (x == y) return x;

else

if (x > y) return USCLN(x-y, y);

else USCLN(x, y-x);

Trang 35

// Tim day Fibonacci bang PP lap

for (int i=2; i<=n; i++) {

} return f2;

//for (int i=0;i<=k; i++)

// cout << setw(5) << fibo2(i);

for (int i=0;i<=k; i++)

cout << setw(5) << fibodq(i);

getch();

}

Trang 36

4.4 Chú ý

• Ưu điểm của phép đệ quy là làm cho CTC trở nên gắn gọn và dễ hiểu Xong mỗi lần gọi đệ quy, trên Stack xuất hiện các tham biến trị và cục bộ mới, dẫn tới tốn nhiều ô nhớ và thời gian

• Chỉ nên dùng đệ quy với những bài toán và các cấu trúc dữ liệu

mà bản thân chúng được định nghĩa theo lối đệ qui Nói chung nên tránh dùng phép đệ quy khi có thể dùng phép lặp để tính toán

• Việc chuyển viết một hàm theo phương pháp đệ quy bằng phương pháp dùng các vòng lặp được gọi là sự khử đệ qui

Trang 37

Ch−¬ng 4 M¶ng vµ chuçi

Trang 38

0 1 2

Số l−ợng các hằng trong danh sách khởi tạo phải nhỏ hơn hoặc bằng kích

cỡ của mảng, nếu nhỏ hơn thì các phần tử còn lại của mảng đ−ợc tự động khởi tạo giá trị 0 Ví dụ:

cin >> b[1][3]; // nhập giá trị từ bàn phím cho b[1][3]

Khai báo mảng nhiều chiều và khởi tạo giá trị cho chúng, ví dụ:

Ví dụ: Xây dựng hàm trả về tổng n phần tử đầu tiên của mảng:

s = a[0] + a[1] + + a[n-1]

Trang 39

double TONG(double a[], int n)

for (int i=0; i<n; i++)

cout <<"\na[" << i+1 << "] = " << a[i];

for (int i=1; i<n; i++)

for (int j=1; j<=n-i; j++)

if (a[j-1]>a[j]) hoanvi(a[j-1], a[j]);

Trang 40

4.2 Chuỗi

4.2.1 Khai báo chuỗi

Chuỗi là dạng dữ liệu để lưu trữ và xử lý văn bản nhữ các từ, tên, câu Trong C không dữ liệu kiểu xâu (string) như trong Pascal hay Basic, mà thay bằng mảng kiểu char như sau:

char name[size];

Ví dụ:

char st[20] = “TIN HOC”;

Ta có thể biểu diễn chuỗi st trên như sau:

0 1 2 3 4 5 6 7 8 19

Hàm strlen(st) trả về độ dài thực của một chuỗi st

Hàm strcpy(st1, st2) sao chép xâu st2 sang xâu st1

Các chuỗi trong C có một số đặc tính sau:

• Một chuỗi C là một mảng char có thể truy nhập được bằng cách sử

đụng tên của nó và toán tử chỉ số, chẳng hạn như :

cout << st[2];

• Mỗi đối tượng chuỗi trong C có kiểu char*

• Các chuỗi trong C không thể được gán, thay vào đó dùng hàm strcpy(st1, st2) để sao chép chuỗi st2 sang chuỗi st1

• Toán tử nhập >> chỉ có thể dùng được nếu chuỗi không chứa khoảng trắng Để nhập từ bàn phím chuỗi có chứa khoảng trắng hãy dùng hàm gets(st)

• Cũng như mảng có thể khởi tạo chuỗi như ví dụ sau:

char th[] = { ‘T’, ‘I’, ‘N’, ‘ ‘, ‘H’, ‘O’, ‘C’, ‘\0’ };

Ngày đăng: 09/09/2014, 19:13

HÌNH ẢNH LIÊN QUAN

Hình 3-4: T−ơng tác giữa ch−ơng trình-thiết bị ngoại vi-tệp tin - Ngôn ngữ lập trình C++
Hình 3 4: T−ơng tác giữa ch−ơng trình-thiết bị ngoại vi-tệp tin (Trang 72)
Hình 3-5: Sơ đồ dòng dữ liệu Tệp-Chương trình-Tệp - Ngôn ngữ lập trình C++
Hình 3 5: Sơ đồ dòng dữ liệu Tệp-Chương trình-Tệp (Trang 73)
Bảng sau đây cho biết các thông tin về màu (các hằng số về màu chứa  trong trong tệp conio.h và graphis.h) - Ngôn ngữ lập trình C++
Bảng sau đây cho biết các thông tin về màu (các hằng số về màu chứa trong trong tệp conio.h và graphis.h) (Trang 96)
Hình sẽ bị xoá và màn hình trở lại nh− cũ. Kỹ thuật này dùng để tạo ccác  hình ảnh chuyển động - Ngôn ngữ lập trình C++
Hình s ẽ bị xoá và màn hình trở lại nh− cũ. Kỹ thuật này dùng để tạo ccác hình ảnh chuyển động (Trang 110)

TỪ KHÓA LIÊN QUAN

w