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

Tài liệu Giáo trình kỹ thuật lập trình docx

181 447 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Tài liệu Giáo trình kỹ thuật lập trình docx
Tác giả Trần Tuấn Minh
Trường học Trường Đại Học Đà Lạt
Chuyên ngành Kỹ thuật lập trình
Thể loại giáo trình
Năm xuất bản 2002
Thành phố Đà Lạt
Định dạng
Số trang 181
Dung lượng 1,35 MB

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

Nội dung

Từ khóa Key Word: Là những từ có ý nghĩa hoàn toàn xác định, chúng thường được dùng để khai báo các kiểu dữ liệu , để viết các toán tử, và các câu lệnh.. - Cú pháp : Const kiểu TÊN-HẰN

Trang 1

TRƯỜNG ĐẠI HỌC ĐÀ LẠT

GIÁO TRÌNH

KỸ THUẬT LẬP TRÌNH

TRẦN TUẤN MINH

2002

Trang 2

MỤC LỤC

MỤC LỤC 2

CHƯƠNG 1 : CÁC KIỂU DỮ LIỆU CƠ BẢN TRONG C++ 4

1.1 Mở đầu 4

1.2 Các Yếu Tố Cơ Bản Của Ngôn Ngữ C++ : 6

1.3 Các Kiểu Dữ Liệu Cơ Bản Trong C++ : 8

1.4 Các Hằng : 10

1.5 Biến : 13

1.6 Câu lệnh gán : 14

1.7 Từ khóa : typedef 15

1.8 Sơ Lược Về Nhập, Xuất Chuẩn Trong C++ 15

BÀI TẬP 19

CHƯƠNG 2 : CÁC TOÁN TỬ TRONG C++ 21

2.1 Các toán tử số học : 21

2.2 Toán tử quan hệ và logic : 23

2.3 Các Toán Tử Thao Tác Bit 24

2.4 Các toán tử khác 27

2.5 Biểu Thức : 27

2.6 Độ ưu tiên của các toán tử 31

BÀI TẬP 33

CHƯƠNG 3 HÀM VÀ CHƯƠNG TRÌNH 36

3.1 Cấu trúc chung của chương trình C++ : 36

3.2 Hàm 38

3.3 Một số thư viện trong C++ 45

BÀI TẬP 48

CHƯƠNG 4 CÁC CÂU LỆNH ĐIỀU KHIỂN 49

4.1 Câu lệnh if 49

4.2 Câu lệnh switch 53

4.4 Câu lệnh while ( Lặp với điều kiện được kiểm tra trước ) 61

4.5 Câu lệnh do while ( Lặp với điều kiện được kiểm tra sau ) 63

4.6 Câu lệnh goto và nhãn : 68

4.7 Các câu lệnh break, continue : 68

4.8 Câu lệnh rổng : 69

4.10 Các ví dụ : 71

BÀI TẬP 77

CHƯƠNG 5 CÁC CẤU TRÚC DỮ LIỆU CƠ BẢN 79

5.1 Mảng : 79

5.2 Xâu ký tự : 91

5.3 Kiểu Cấu trúc : 94

Trang 3

5.4 Mảng cấu trúc : 97

5.5 Kiểu enum 102

BÀI TẬP 104

CHƯƠNG 6 : CON TRỎ 110

6.1 Con trỏ : 110

6.2 Con trỏ và mảng 1 chiều : 118

6.3 Con trỏ và xâu ký tự : 120

6.4 Con trỏ và mảng 2 chiều : 122

6.5 Con trỏ và cấu trúc 125

6.6 Mảng con trỏ : 127

6.7 Tìm hiểu thêm về hàm: 128

BÀI TẬP 136

CHƯƠNG 7 : LẬP TRÌNH ĐƠN THỂ 137

7.1 Đơn thể chương trình : 137

7.2 Dự án (Project) 139

7.3 Các lớp lưu trử : 145

7.4 Đệ qui 152

7.5 Bộ tiền xử lý trong C++ : 155

BÀI TẬP : 158

CHƯƠNG 8 : LẬP TRÌNH VỚI TẬP TIN 160

8.1 Mở đầu : 160

8.2 Các loại tập tin : 160

8.3 Mở đầu vê nhập/xuất tập tin trong C++ 161

8.4 Nhập/Xuất nhị phân không định dạng 175

8.5 Truy cập ngẫu nhiên 176

BÀI TẬP 180

TÀI LIỆU THAM KHẢO 181

Trang 4

CHƯƠNG 1 : CÁC KIỂU DỮ LIỆU CƠ BẢN TRONG C++

1.1 Mở đầu

1.2 Các yếu tố cơ bản của ngôn ngữ C++

1.3 Các kiểu dữ liệu cơ bản trong C++

1.1.1 Giới thiệu ngôn ngữ C/ C++ :

Ý tưởng quan trọng nhất của C xuất phát từ ngôn ngữ BCPL do Martin Richards thiết kế Aûnh hưởng của BCPL lên C gián tiếp thông qua ngôn ngữ B do Ken Thompson viết năm 1970 cho hệ thống UNIX đầu tiên trên máy PDP-7

Từ ngôn ngữ B, Dennish Ritchie và Brian Kernighan phát triển thành ngôn ngữ

C vào những năm 1970 tại phòng thí nghiệm của hãng AT & T để phát triển cốt lõi của hệ điều hành UNIX

Trong nhiều năm, chuẩn cho C trên thực tế là một phiên bản được cung cấp cùng với hệ điều hành Unix version 5 Nó được mô tả lần đầu tiên trong cuốn :

” The C programming language “ của Dennish Ritchie và Brian Kernighan

Cùng với sự phổ biến các máy tính cá nhân, có nhiều bản cài đặt của C được tạo ra Đa số các cài đặt đều tương thích tốt với nhau ( tức là một chương trình được viết cho trình biên dịch này thường biên dịch thành công đối với một trình biên dịch khác ) Tuy nhiên, vì không dựa trên một chuẩn chung nên cũng có nhiều tương phản

Để khắc phục tình trạng này, vào mùa hè 1983 một hội đồng được thành lập để tạo ra một chuẩn cho C, gọi là chuẩn ANSI ( American National Standards Institute : Viện định chuẩn Quốc gia Mỹ) Sau 6 năm, chuẩn cuối cùng ANSI C được đề nghị vào tháng 12/1989, và bản đầu tiên được dùng vào năm 1990 Ngày nay các trình biên dịch C chính đều giữ đúng theo ANSI chuẩn

C là một ngôn ngữ có khả năng tổ hợp những thành phần tốt nhất của ngôn ngữ bậc cao và sự điều khiển linh hoạt của ngôn ngữ assembly

- Có thể xem C là ngôn ngữ "cấp thấp" theo nghĩa tương đối, nghĩa là C có thể xử lý trực tiếp các đối tượng ký tự, số, địa chỉ Ngoài ra, C còn sinh mã tối ưu, tập các toán tử hiệu quả cho phép thao tác đến các bit

- Tuy nhiên C vẫn có đầy đủ các đặc điểm mà bất kỳ một ngôn ngữ cấp cao nào cần phải có :

- Tính khả chuyển ( portable )

Trang 5

- Cho phép dễ dàng triển khai phương pháp lập trình có cấu trúc

- Cho phép xây dựng cấu trúc chương trình, diễn đạt thuật toán rõ ràng, trong sáng

Bởi các lý do trên người ta còn thường nói C là ngôn ngữ bậc trung Sau đây là bảng vị trí của C/C++ trong thế giới các ngôn ngữ :

Bậc cao nhất Ada

FORTH

Macro-assembler

Ngôn ngữ C đã không ngừng cải tiến và phát triển

Năm 1987 hãng Borland đã đưa ngôn ngữ C vào thị trường của IBM-PC thông qua Turbo C

Vào những năm 1980, Bjarne Stroustrup đã cho ra đời ngôn ngữ C++ bằng cách cài vào ngôn ngữ C khái niệm lập trình hướng đối tượng

Năm 1988, hãng Zortech giới thiệu một trình biên dịch C++ cho các máy tính MS-DOS

Cho tới nay đã xuất hiện nhiều phiên bản C++ trong môi trường Microsoft Windows : Borland C++, Turbo C++ của hãng Borland; Visual C++ của Microsoft

Hiện nay có nhiều chương trình lớn được viết hay được viết lại bằng C/C++ :

- Hệ điều hành UNIX

- Hệ điều hành Windows

- Hệ quản trị cơ sở dữ liệu Dbase

- Các chương trình soạn thảo văn bản

- Các bảng tính điện tử

Trong giáo trình này ta sẽ minh họa bằng Borland C++ 3.1 for DOS

1.1.2 Chương trình C++ đầu tiên

Chương trình C++ đơn giản sau đây xuất một dòng văn bản ra man hình

//Chương trình C++ đầu tiên

#include<iostream.h>

Trang 6

Kết quả thực hiện chương trình sẽ xuất ra màn hình câu :

Chương trình C++ đầu tiên

Ta xét chương trình trên

- Dòng đầu của chương trình :

Là một dòng ghi chú, xác định bởi ký hiệu //

C++ sẽ bỏ qua đoạn văn bản trên dòng nằm sau ký hiệu // trong quá trình biên dịch

- Dòng 2 của chương trình : #include<iostream.h>

Là một chỉ thị tiền xử lý Những dòng bắt đàu từ ký hiệu # sẽ được C++ xử lý trước khi biên dịch

Ý nghĩa của nó là nạp tập tin tiêu đề iostream.h vào trong chương trình Tập tin iostream.h được dùng cho bất ký chương trình C++ nào có xử dụng các thao tác Nhập/Xuất dữ liệu

- Dòng 3 của chương trình : int main()

main() là tên của hàm, ta họi là hàm chính, là bắt buộc phải có đối với bất kỳ một chương trình C++ nào int là kiểu số nguyên, chỉ kiểu dữ liệu của hàm

Sau tên hàm hàm main() là thân của hàm main(), xác định bởi :

{ : bắt đầu vào thân hàm

} : Kết thúc hàm

- Dòng 4 : cout<<”\nChương trình C++ đầu tiên.”;

Là câu lệnh thực hiện việc xuất hằng xâu ký tự ra màn hình Kết thúc mỗi câu lệnh trong C++ bằng dấy (;) Một hằng xâu ký tự được rào bởi cặp dấu “ “ cout là đối tượng xuất chuẩn, liên kết với màn hình Toán tử << có tác dụng chèn dữ liệu vào dòng xuất Ký tự \n điều khiển việc xuống dòng

KNLT: Mỗi chương trình nên bắt đầu bằng một ghi chú chỉ rõù mục đích của nó

1.2 Các Yếu Tố Cơ Bản Của Ngôn Ngữ C++ :

1.2.1 Ký hiệu cơ sở :

Ngôn ngữ C++ được xây dựng từ bộ ký hiệu cơ sở sau : -Bộ 26 chữ cái La-Tinh viết thường (nhỏ): a,b, ,z

-Bộ 26 chữ cái La-Tinh viết hoa (lớn) : A,B, ,Z

-Bộ 10 chữ số hệ thập phân : 0,1, ,9

-Bộ dấu các toán tử số học : + - * /

-Bộ dấu các toán tử so sánh : < > =

- Ký tự gạch nối : _ ( Khác dấu trừ - )

-Các ký hiệu khác : ' " ; , : [ ] # $ & { } % !

Trang 7

Đặc biệt có khoảng trắng dùng để ngăn cách các từ (phím Space)

Các ký hiệu cơ sở đều có trên bàn phím

1.2.2 Các từ

Từ trong C++ được xây dựng bởi các ký hiệu cơ sở trên Có 2 loại từ :Từ

khóa và tên

a Từ khóa (Key Word):

Là những từ có ý nghĩa hoàn toàn xác định, chúng thường được dùng để khai báo các

kiểu dữ liệu , để viết các toán tử, và các câu lệnh Sau đây là các từ khóa trong Borland C++

(Turbo C++) :

Asm auto break case catch char

Friend goto if inline int long

Union unsigned virtual void volatile while

Cdecl _cs _ds _es _export far

Ghi chú :

Các từ khóa chỉ được viết thường, chẳng hạn không được viết INT mà phải viết

int

b Tên hoặc danh hiệu (identifier):

Là từ do người sử dụng tự đặt để giải quyết bài toán của mình Từ tự đặt

dùng để đặt tên cho hằng, biến, hàm, tên kiểu dữ liệu mới,

Tên được đặt theo quy tắc : phải bắt đầu bằng một chữ cái hoặc dấu gạch

nối,sau đó là các chữ cái, chữ số hoặc dấu gạch nối , và không được trùng với từ khóa

Tên có thể viết bằng chữ thường hoặc chữ hoa

Chiều dài cực đại của tên mặc định là 32 Nhưng có thể đặt lại một giá trị khác

từ 1 đến 32 trong chức năng : Option - Complier - Source - Identìier length trong môi

trường kết hợp của C++

Trong C++ có phân biệt chữ thường và chữ hoa

Ví dụ :

- Các ví dụ sai :

21holpljpmljn // Ký tự đầu là số

Khoang trang // Sử dụng khỏang trắng

Trang 8

- Các ví dụ đúng :

T123tyu09

1.3 Các Kiểu Dữ Liệu Cơ Bản Trong C++ :

Trong C++ có 5 kiểu dữ liệu cơ bản là :

- Các kiểu Ký tự

- Các kiểu nguyên

- Kiểu Số thực dấu chấm động độ chính xác đơn : float

- Kiểu Số thực dấu chấm động độ chính xác kép : double

- Kiểu void

Các kiểu dữ liệu khác đều dựa vào các kiểu dữ liệu trên

Kiểu void sẽ được trình bày trong các chương sau, trong phần này ta chỉ giới thiệu các kiểu còn lại

1.3.1 Kýù tự :

Có nhiều kiểu ký tự Một kiểu ký tự được khai báo bởi từ khóa char Một giá trị kiểu char được lưu trử trong 8 bit và biểu diễn được 1 ký tự thông qua bảng mã ASCII

Có các kiểu ký tự tương ứng với các từ khóa :

signed char ( như char, có dấu)

unsigned char (Không dấu)

Sau đây là bảng kích thước, phạm vi biểu diễn của các kiểu ký tự :

Ghi chú :

Có thể chia 256 ký tự thành 3 nhóm :

- Nhóm 1 : Là các ký tự điều khiển, có mã ASCII từ 0 đến 31 Các ký tự này nói chung là không hiển thị ra màn hình

Trang 9

Chẳng hạn, Ký tự mã 10 chuyển con trỏ xuống dòng dưới (trên cùng cột); ký tự mã 13 chuyển con trỏ về đầu dòng

- Nhóm 2 : Là các ký tự văn bản, có mã ASCII từ 32 đến 126 Các ký tự này có thể đưa ra màn hinh hoặc máy in

- Nhóm 3 : Là các ký tự đồ họa, có mã số từ 127 đến 255 Các ký tự này có thể đưa ra màn hình

Kích thước và phạm vi biểu diễn của chúng được cho trong bảng sau :

short int , short -32768 → 32767 (-215 → 215 -1) 16 bit

unsigned short int 0 → 65535 (0 → 216 -1) 16 bit

long int , long -2147483648 → 2147483647

(-231 → 231 -1 ) 32 bit unsigned long int 0 → 4294967295 ( 0 → 232 -1) 32 bit

unsigned int Số nguyên không âm , chiếm 1 từ của máy

Kích thước và phạm vi biểu diễn của chúng được cho trong bảng sau :

thước Độ chính xác Float Số thực chính

xác đơn

-3.4E+38 → 3.4E+38 32 bit 6 số thập

phân Double Số thực chính

xác kép -1.7E+308 → 1.7E+308,0 64 bit 10 số thập phân

Ghi chú :

Trang 10

Lưu trử trong máy :

(*) Một số thực kiểu float x với | x| < 3.4E-38 được xem là bằng 0

-3.4E+38 -3.4E-38 0 3.4E-38 3.4E+38

(**) Một số thực kiểu double x với ( | x| < 1.7E-308 ) được xem là bằng 0

-1.7E+308 -1.7E-308 1.7E-308 1.7E+308

Giá trị được lấy là float và double Viết theo 2 cách :

1 Dạng thập phân (dấu chấm cố định) :

Bao gồm : Phần nguyên, dấu chấm thập phân, phẩn phân

Ví dụ : 214.35 -43.345 234.0

Ghi chú :

Phần nguyên hay phần phân có thể vắng mặt nhưng dấu châm không thể thiếu Chẳng hạn cho phép viết : .12 7

2 Dạng khoa học hay dạng mũ ( dấu chấm động ) :

Có 3 thành phần : Phần định trị , ký hiệu E hoặc e , và phần bậc

Phần định trị là một số nguyên hoặc số thực dạng thập phân Phần bậc là một số nguyên Hai phần này cách nhau bởi ký tự E hoặc e

Phần định trị E hoặc e Phần bậc

Ví dụ :

12.234E-3 // biểu diễn giá trị 0.012234

0.35E4 // biểu diễn giá trị 3500.0

-12.22e-3 // biểu diễn giá trị -0.01222

1e6 // biểu diễn giá trị 1 000 000

1.4.2 Hằng nguyên

1 Hằng int :

Là số nguyên có kiểu int

Trang 11

Biểu diễn : thêm u vào sau hằng int

Có giá trị từ 0 đến 65535

4 Hằng int hệ 8 :

Hằng int hệ 8 luôn nhận giá trị dương

Dạng biểu diễn : 0c1c2c3 …

Với : ci là một số nguyên trong khoảng từ 0 đến 7

Ví dụ :

- Hằng int hệ 8 : 0345

- Giá trị của nó trong hệ 10 : 3*8*8 + 4*8 + 5 = 229

5 Hằng int hệ 16 :

Trong hệ này sử dụng 16 ký tự :

Trong đó ci là một chữ số hệ 16

Ví dụ :

Các hằng nguyên hệ 16 : 0xa3 ; 0Xa3 ; 0xA3 ; 0XA3 là như nhau Giá trị của nó trong hệ 10 là : 10*16 + 3 = 163

1.4.3 Hằng ký tự :

- Là một ký tự được viết trong 2 dấu nháy đơn

Chẳng hạn ‘a’ , ‘A’, ‘3’, ‘+’ Trình biên dịch của C++ sẽ lưu trử các hằng này bằng cách dùng các mã số ASCII (hệ 10) của nó, tương ứng là 97,65, 43, 51

- Ký tự có thể biểu diễn bởi hệ 8

Cách viết : ‘\c1c2c3’ , trong đó ci là các ký hiệu trong hệ 8

- Ký tự có thể biểu diễn bởi hệ 16

Cách viết : ‘\xc1c2c3’ hoặc ‘\Xc1c2c3’ trong đó ci là các ký hiệu trong hệ 16

Ký tự

Mã ASCII Biểu diễn Mã ASCII Biểu diễn

Mã ASCII hệ 10

Trang 12

‘a’ 141 ‘\141’ 61 ‘\x61’ 97

‘A’ 101 ‘\101’ 41 ‘\x41’ 65

- Đối với một số hằng ký tự đặc biệt, ta sử dụng cách viết sau (thêm dấu \) :

Cách viết Ký tự

2 Cần phân biệt :

‘0’ : là ký số 0 có mã ASCII hệ 10 là 48

‘\0’ : là ký tự NULL có mã ASCII hệ 10 là 0

1.4.4 Hằng xâu ký tự ( Chuỗi ):

Là một dãy ký tự được bao trong 2 dấu nháy kép

- Hằng ký tự ‘a’ khác xâu ký tự “a”

1.4.5 Biểu thức hằng :

Biểu thức hằng chỉ bao gồm các hằng Các biểu thức như vậy được xác định vào lúc biên dịch

1.4.6 Định nghĩa một hằng

1 Dùng chỉ thị #define ( Có thể định nghĩa lại giá trị hằng ) :

- Cách viết : #define TÊN-HẰNG GIÁ_TRỊ_HẰNG // Không có dấu ; ở sau

Trang 13

- Tác dụng : TÊN-HẰNG sẽ được thay thế bởi GIÁ_TRỊ_HẰNG cho phần còn lại của văn bản chương trình

Ví dụ :

#define MAX 100 // Thay thế MAX bằng 100

2 Dùng từ khóa const ( Không định nghĩa lại được giá trị hằng ) :

C++ sử dụng từ khóa const để định nghĩa một hằng dưới dạng một tên

- Cú pháp : Const kiểu TÊN-HẰNG = GIÁ_TRỊ_HẰNG; // có dấu ;

- Tác dụng : Cho phép định nghĩa một hằng ký hiệu có tên là TÊN-HẰNG biểu thị một gia trị là GIÁ_TRỊ_HẰNG và sau này không thể sửa đổi GIÁ_TRỊ_HẰNG của TÊN-HẰNG được

Ví dụ :

Const long double PI = 3.141592653589793;

Trong C++ có một số hằng được định nghĩa trước :

INT_MIN Giá trị nhỏ nhất của int limits.h

INT_MAX Giá trị lớn nhất của int limits.h

UINT_MIN Giá trị nhỏ nhất của unsigned

UINT_MAX Giá trị lớn nhất của unsigned int limits.h

LONG_MIN Giá trị nhỏ nhất của long int limits.h

LONG_MA

X Giá trị lớn nhất của long int limits.h

FLT_MIN Giá trị nhỏ nhất float float.h

FLT_MAX Giá trị lớn nhất của float float.h

DBL_MIN Giá trị nhỏ nhất double float.h

DBL_MAX Giá trị lớn nhất của double float.h

LDBL_MIN Giá trị nhỏ nhất long double float.h

LDBL_MAX Giá trị lớn nhất của long double float.h

1.5.2 Khai báo biến :

Mỗi biến phải được khai báo trước khi sử dụng Cú pháp khai báo như sau :

- Khai báo một biến :

- Khai báo nhiều biến cùng một kiểu :

Trang 14

Kdl Bien1,Bien2,Bien3;

Trong đó :

- Kdl là kiểu dữ liệu nào đó như char, int, double,

- Bien, Bien1, là tên chỉ tên của biến

Giữa Kdl và Tên biến phải cách nhau ít nhất 1 khoảng trắng

Trong phần tên biến, nếu có nhiều biến thì giữa 2 biến phải phân cách bởi dấu phảy (,)

Ví dụ :

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

long c,d; // khai báo 2 biến kiểu long

unsigned i,j; // Khai báo 2 biến kiểu unsigned

char k; // khai báo 1 biến kiểu char

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

Ghi chú :

Biến của kiểu dữ liệu nào thì chỉ có thể nhận các giá trị của kiểu dữ liệu đó

1.5.3 Khởi đầu cho các biến :

Nếu trong khai báo, ngay sau tên biến ta đặt dấu = (phép gán ) và một giá trị dữ liệu tương ứng thi đó chính là cách vừa khai báo vừa khởi đầu cho 1 biến

Có thể thực hiện viêc khởi đầu cho biến nhờ lệnh gán

1.5.4 Lấy địa chỉ cho 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 chỉ biến ta dùng toán tử & với cú pháp : &Bien

1.6 Câu lệnh gán :

x = x*x; // khi đó x nhận giá trị là 6.25

- có khả năng có nhiều dấu gán liền nhau :

m = n = 2;

Có nghĩa là : n lấy giá trị 2, rồi m lấy giá trị của n, nên có giá trị bằng 2

Trang 15

a) typedef int intgia; // Kiểu intgia thực chất là kiểu int

intgia x,y; // x,y là biến kiểu ingia (int)

b) typedef double dgia; // Kiểu dgia thực chất là kiểu double

dgia a,b; // a,b là biến kiểu dgia

1.8 Sơ Lược Về Nhập, Xuất Chuẩn Trong C++

1.8.1 Luồng I/O (I/O Streams)

C++ xử lý việc nhập liệu và xuất liệu như sau:

• Khi các ký tự được vào từ bàn phím, chúng vào một luồng nhập (input stream)

được gọi là istream mà nó truyền các ký tự từ bàn phím đến chương trình

• Tương tự khi xuất liệu chương trình được hiển thị trên màn hình, các ký tự xuất được đặt vào trong một luồng xuất (output stream) mà nó truyền các ký tự đến màn hình

Bàn phím

Chương trình

C++ không có các tính năng nhập và xuất xây dựng trong ngôn ngữ Thay vào đó các istream và ostream được cung cấp bởi một thư viện đặc biệt, mà giao diện của nó trong tập tin tiêu đề (hearder) <iostream.h> (các tên istream và ostream không phải là một phần của ngôn ngữ C++ mà chúng là tên của hai lớp) Thư viện này định nghĩa ba đối tượng dữ liệu quan trọng:

• Một đối tượng istream mang tên cin, mà nó được kết hợp với bàn phím

• Một đối tượng ostream mang tên cout, mà nó được kết hợp với màn hình

• Một đối tượng ostream mang tên ceer, mà nó được kết hợp với màn hình và được dùng để hiển thị các thông báo sai

Nhập và xuất là các phép toán trên những đối tượng dữ liệu này

1.8.2 Nhập dữ liệu từ bàn phím :

Mệnh đề nhập có thể mô tả như sau:

Trang 16

cin >> Bien; //Nhập giá trị 1 biến cin >> Bien1 >> Bien2 >> >> Bienn;//Nhập giá trị n biến

Trong đó:

• cin là istream đã được khai báo trong <iostream.h>

• >> là toán tử nhập

• Biến-i là biến mà đối với loại của nó >> được định nghĩa

Ví dụ:

cin >> A >> B >> C >> D;

Bất kỳ ký tự khoảng trắng ‘ ‘, dấu tab ‘\t’, dòng mới ‘\n’ đều có thể được dùng để tách các giá trị nhập để nhập vào dữ liệu khi mệnh đề trên được thực hiện

1.8.3 Xuất dữ liệu ra màn hình :

Mệnh đề xuất có thể mô tả như sau:

cout << Bt; // cho 1 biểu thức

cout << Bt1 << Bt2 << << Btn;//n biểu thức

Trong đó:

• cout là ostream đã được khai báo trong <iostream.h>

• << là toán tử xuất

• Biểu-Thức-i là biểu thức mà đối với kiểu của nó << được định nghĩa

Chằng hạn :

Cout<<”\nChào các bạn “;

Cout<<endl<<”giá trị x = “<< x;

Ghi chú : Luồng nhập xuất có bộ đệm Tức là các công việc đọc (nhập), ghi (xuất)

không thực hiện trực tiếp từ thiết bị vật lý, mà là thông qua bộ đệm để đọc hay ghi dữ

liệu

Chẳng hạn khi nhập dữ liệu từ bàn phím, có thể phân biệt 2 trường hợp :

1 Nếu trên bộ đệm có đủ dữ liệu, thì hàm cin ( và các hàm khác ) sẽ nhận một phần dữ liệu mà chúng yêu cầu Phần còn lại (chưa được nhận) vẫn ở trên bộ đệm

2 Khi trên bộ đệm không đủ dữ liệu theo yêu cầu, thì máy tạm dừng để người dùng đưa thêm dữ liệu từ bàn phím vào bộ đệm (cho đến khi bấm phín Enter)

Để đảm bảo mọi thứ trong bộ đệm đã được hiển thị về mặt vật lý trước khi mọi cái vào xuất hiện, ta có thể dùng các lệnh sau : Cout.flush();

1.8.4 Định dạng dạng kết xuất

Có thể chỉnh dạng kết xuất bằng cách chèn vào các xử lý dạng thức (format manipulators) từ tập tin header <iomanip.h>

setw (Width) Hiển thị giá trị kế tiếp trong một vùng với độ rộng Width được chỉ ra

setprecision (Precision) Hiển thị các giá trị với độ chính xác Precision được chỉ ra (mặc nhiên

Trang 17

là 6)

setiosflags (FlagList) Đặt các cờ định dạng trong FlagList, trong đó FlagList là một dãy

gồm một hoặc nhiều cờ, cách nhau bởi ký hiệu | như là : Flag1 | Flag2 | | Flagn

Sau đây là một số các cờ định dạng sẳn :

ios::showpoint Hiển thị dấu chấm thập phân và các số 0 kéo theo

ios::fixed Hiển thị các giá trị thực ở dạng dấu chấm cố định

ios::scientific Hiển thị các giá trị thực ở dạng dấu chấm di động

ios::left Hiển thị các giá trị canh trái trong một vùng

Ios::right Hiển thị các giá trị canh phải trong một vùng

cout << setiosflags(ios::fixed)

<< “\n(“ << X << “)”

<< “\n(“ << Y << “)\n”;

(2.666667) (3)

cout << setiosflags(ios::showpoint )

<< “\n(“ << X << “)”<< “\n(“ << Y << “)\n”; (2.666667)

(3.000000) cout << setiosflags(ios::showpoint | ios::fixed)

<< “\n(“ << X << “)”<< “\n(“ << Y << “)\n”; (2.666667)

(3.000000) cout << setiosflags(ios::showpoint | ios::fixed)

<< setprecision(3)

<< “\n(“ << X << “)”<< “\n(“ << Y << “)\n”;

(2.667) (3.000) cout << setiosflags(ios::showpoint | ios::fixed)

cout << setiosflags(ios::showpoint | ios::fixed)

Trang 18

Ghi chú :

ios::right là mặc nhiên, và setw() chỉ gây ảnh hưởng cho giá trị kế nó được hiển thị, trong khi những xử lý định dạng khác gây ảnh hưởng đến sự xuất hiện của tất

cả các giá trị theo sau chúng trong mệnh đề xuất

KNLT : Một câu lệnh quá dài có thể viết trên nhiều dòng

Trang 19

BÀI TẬP

Bài 1 :

Viết chương trình in ra màn hình các dữ liệu có định dạng :

// Hàng đầu là vị trí cột màn hình :

Viết chưong trình in ra màn hình :

Day la nua tren dau tich phan ( ma ASCII he 16 la F4 ) : ⌠

Day la nua duoi dau tich phan ( ma ASCII he 16 la F5 ) : ⌡

Bài 3 :

Xuất ký tự ‘z’ ra màn hình bằng cách dùng :

1 Biểu diễn ký tự trong hệ 8

2 Biểu diễn ký tự trong hệ 16

Trang 20

<< “\n(“ << setw(8) << Y << “)\n”;

Trang 21

CHƯƠNG 2 : CÁC TOÁN TỬ TRONG C++

2.1 Các toán tử số học

2.2 Các toán tử quan hệ và logic 2.3 Các toán tử thao tác bit

2.4 Các toán tử khác

2.5 Biểu thức

2.6 Độ ưu tiên của các toán tử

Trong C++ có các loại toán tử : phép gán, các toán tử số học, các toán tử quan hệ và logic, các toán tử thao tác trên Bit

2.1 Các toán tử số học :

C++ có 8 toán tử số học :

2.1.1 Phép chia / :

Là toán tử 2 ngôi, toán hạng là các số ( thực hay nguyên )

a) Nếu cả 2 toán hạng đều là số nguyên thì kết quả là là số nguyên ( chặt cụt phần phân )

b) Nếu có ít nhất 1 toán hạng là số thực thì cho ra một số thực

Ví dụ :

int x = 3;

float y = 3.;

cout<<x/2; // xuất ra màn hình giá trị 1 (số nguyên )

cout<<y/2; // xuất ra màn hình giá trị 1.5 ( số thực )

Trang 22

2.1.2 Phép chia nguyên lấy phần dư % :

Là toán tử 2 ngôi, toán hạng là số nguyên , kết quả cho ra số nguyên

13 % 3 = 1 -13 % 3 = -1 Ghi chú :

Kết quả luôn cùng dấu với số bị chia

2.1.5 Thứ tự ưu tiên các toán tử số học :

Ưu tiên của các toán tử số học được cho trong bảng sau đây theo thứ tự từ trên xuống dưới Các toán tử cùng độ ưu tiên sẽ được thực hiện từ trên trái sang phải

Trang 23

Ưu tiên Toán tử

Ghi chú :

Các ký hiệu trong các toán tử ++, không được viết rời

2.2 Toán tử quan hệ và logic :

Các toán tử quan hệ và logic thường được sử dụng chung với nhau, được dùng

để tạo ra các kết quả đúng, sai Trong C++, mọi số khác 0 đều được coi là giá trị đúng

(true), giá trị duy nhất sai (false) mang hình thức số 0

2.2.1 Các toán tử quan hệ :

Các toán tử quan hệ được dùng để so sánh 2 giá trị với nhau

Sau đây là bảng các toán tử quan hệ và ý nghĩa của chúng :

>= Lớn hơn hay bằng a >= b 3 >= 7 có gía trị 0

<= Nhỏ hơn hay bằng a <= b 3 <= 7 có gía trị 1

Ghi chú :

Các ký hiệu trong các toán tử >=,<=, ==, != không được viết rời

2.2.2 Các toán tử logic :

Các toán tử logic được dùng để nối kết hai giá trị, hoặc trong trường hợp phủ

định sẽ tạo một giá trị đảo ngược Các giá trị có thể nguyên hay thực

Trong C++ có 3 toán tử logic :

- Phép phủ định 1 ngôi : !

- Phép và (AND) : &&

- Phép hoặc (OR) : || // ký hiệu đường ống trên bàn phím

Ý nghĩa của các toán tử được cho trong bảng sau :

Trang 24

2.2.3 Thứ tự ưu tiên của các toán tử quan hệ và logic :

2.3 Các Toán Tử Thao Tác Bit

Khác với các ngôn ngữ lập trình cấp cao khác, C++ cung cấp nhiều toán tử có thể tác động tới những bit thực sự ở bên trong 1 biến

Các toán tử thao tác bit chỉ dùng cho số nguyên hoặc ký tự

Các toán tử thao tác bit bao gồm :

Ghi chú :

Cách viết các toán tử : &&, &, ||, | nếu lẫn lộn sẽ bị lỗi cú pháp, hoặc trong một số trường hợp chương trình chạy được nhưng cho kết quả sai

2.3.1 Bảng giá trị của các toán tử ~, &, |, ^ :

2.3.2 Các toán tử dịch chuyển :

Các toán tử dịch chuyển trái << , hoặc phải >> đều có thể dịch chuyển tất cả các bit nằm trong 1 byte hay 1 từ - theo một số lượng ấn định ở bên phải

Chẳng hạn :

Trang 25

n<<2 Dịch chuyển các bit của biến n sang trái 2 bit

n>>2 Dịch chuyển các bit của biến n sang phải 2 bit

1 Toán tử dịch chuyển trái :

Khi thực hiện toán tử dịch chuyển trái các bit ở bên phải của biến sẽ được điền vào các giá trị 0

Đổi n sang hệ 10 : 804

2 Toán tử dịch chuyển phải :

Tùy theo kiểu dữ liệu của toán hạng bên trái, C++ sẽ thực hiện một trong 2 cách sau :

a Nếu là kiểu unsigned (int, long, char) :

Phép dịch chuyển phải sẽ điền giá trị 0 vào các bit bên trái

Đổi n sang hệ 10 : 9867

b Nếu là kiểu signed (int, long, char) :

Phép dịch chuyển phải sẽ điền bit dấu (số 1) vào các bit bên trái

Trang 26

Kết quả : 0001 1001 0111 0100

Đổi n sang hệ 10 : 6516

Ghi chú :

1.Trong C++ phân biệt :

- Các phép dịch chuyển số học : Thực hiện trên các giá trị int , bảo toán bit dấu (bit cực trái) khi dịch phải Nói cách khác, bit này được dịch chuyển sao cho dấu của dữ liệu vẫn được bảo toàn dù cho dịch phải một hoặc nhiều lần

Thực chất phép dịch trái là hình thức nhân 2 , còn phép dịch phải phải là hình thức chia 2

y = x >> 2; 1000 0000 0000 0000 1110 0000 0000 0000 y=-

8192 b) Dịch logic : Dịch phải u=32768;

Trang 27

2.4 Các toán tử khác

2.4.1 Toán tử sizeof

Toán tử sizeof cho ta kích thước ( tính theo byte) của 1 kiểu dữ liệu cũng như một đối tượng dữ liệu Cách viết toán tử như sau :

sizeof (đối tượng dữ liệu) Kiểu dữ liệu có thể là các kiểu chuẩn như int, float hoặc kiểu dữ liệu được định nghĩa bằng từ khóa typedef

Đối tượng dữ liệu có thể là biến, mảng, cấu trúc (tên của vùng nhớ dữ liệu) Chẳng hạn : int m;

sizeof(m) = 2;

sizeof(int) = 2;

sizeof(float) = 4;

2.4.2 Toán tử ( ) :

Dùng để xác định trình tự ưu tiên các thành phần trong biểu thức

Nếu có nhiều toán tử () lồng nhau thì thực hiện ưu tiên từ trong ra ngoài

Nếu có nhiều toán tử () rời nhau thì thực hiện từ trái sang phải

2.4.3 Toán tử dấu phảy ‘ , ‘ (Comma operator) :

Được dùng để tạo sự thi hành tuần tự cho các thao tác, thường dùng trong câu lệnh for hay biểu thức vế phải của câu lệnh gán

Trong vế phải câu lệnh gán, thì giá trị toàn thể biểu thức là giá trị của biểu thức cuối cùng trong danh sách các biểu thức được tách biệt bởi dấu phảy

Ví dụ :

int x = 10;

x = (x = x-5, 25/x); // Khi đó x sẽ có giá trị là 5 Giá trị đầu của x là 10 biểu thức đầu bên vế phải gán x-5 cho x, vậy giá trị biểu thức này là 5 thực hiện biểu thức cuối, giá trị này được 25 chia cho, kết quả cuối cùng đem gán cho vế trái là x Nên x = 5

2.5 Biểu Thức :

Biểu thức là một sự kết hợp giữa các toán tử và các toán hạng để diễn đạt một công thức toán học nào đó Toán hạng có thể xem là các đại lượng có một giá trị nào đó, và theo nghĩa đó, toán hạng có thể là biến, hằng, hàm

Mỗi biểu thức có một giá trị, và nói chung cái gì có giá trị đều được xem là biểu thức Như vậy, các biến, hằng, hàm đều có thể xem là biểu thức

Khi viết biểu thức có thể dùng các dấu ngoặc tròn (, ) để thể hiện đúng trình tự tính toán trong biểu thức

Biểu thức được phân loại theo kiểu giá trị : nguyên, thực Trong các mệnh đề logic, biểu thức được phân thành đúng (giá trị khác không), sai (giá trị bằng không)

Trang 28

Biểu thức thường được dùng trong :

- Vế phải của lệnh gán

- Làm tham số thực sự của hàm

Trong đó "op" là toán tử hai ngôi (+, -, *, /, %, &, |, <<, >>, ^ )

Nếu e1,e2 là biểu thức thì e1 op= e2 tương đương với e1 = e1 op e2 nhưng cách viết trước hiệu quả hơn

b) Biểu thức gán là biểu thức có dạng : v = e

Trong đó v là biến, e là một biểu thức Giá trị của biểu thức gán là giá trị của

e, kiểu của nó là kiểu của v

( Nếu viết v = e; ta có câu lệnh gán )

Biểu thức gán có thể sử dụng trong các toán tử và các câu lệnh như các biểu thức khác

Chẳng hạn : Nếu viết z = (y = 2) * (x = 6);

có nghĩa là : y lấy giá trị 2, x có giá trị 6 và z có giá trị 12

Trường hợp riêng ta đã biết ý nghĩa của nó là dạng : a = b = c = 3;

2.5.2 Toán tử tam phân ?: (thể hiện biểu thức điều kiện )

Biểu thức điều kiện thể hiện bởi toán tử tam phân có dạng :

e1 ? e2 : e3 Trong đó, e1, e2, e3 là các biểu thức nào đó

(Sai).0bằnge1nếue3củatrị Giá

(Đúng),0

kháce1nếue2củatrị Giá : bằngkiệnđiềuthứcbiểucủatrị

Giá

Kiểu của biểu thức điều kiện phải là kiểu cao nhất trong các kiểu của e2 và e3 Chẳng hạn nếu kiểu của e2 là int, kiểu của e3 là float thì kiểu của biểu thức điều kiện là float

Trang 29

Biểu thức điều kiện có thể sử dụng như một biểu thức bất kỳ khác

cout<<”\nGiá trị lớn nhất của 2 số “<<a<<” , “<<b<<” là : “<<Max;

cout<<”\nGiá trị nhỏ nhất của 2 số “<<a<<” , “<<b<<” là : “<<Min;

}

KNLT : Tên các biến cần phải đặt cho trực quan

2.5.3 Chuyển đổi kiểu dữ liệu :

Cụ thể : char và short chuyển thành int

float chuyển thành double

int chuyển thành foat, double

b) Trong câu lệnh gán :

Các phép chuyển kiểu giá trị cũng được thực hiện trong phép gán, giá trị của vế phải được chuyển đổi thành kiểu của vế trái (Kiểu kết quả là kiểu của vế trái) :

- int có thể chuyển thành float

- float chuyển thành int bằng cách cắt bỏ phần phân

- double chuyển thành float bằng cách làm tròn

- long int chuyển thành short int bằng cách bỏ các bit cao vượt quá

Trang 30

C = x; Các bit cao bên trái của biến nguyên x bị chặt bỏ để lại c

với 8 bit thấp Nếu đã có 0 <= x <= 256 thì x và ch có cùng giá trị, ngược lại, giá trị của ch chỉ phản ánh các bit thấp của x

F = h; f chuyển giá trị nguyên 8 bit được lưu trong h thành giá trị

như vậy trong dấu chấm động

F = y f chuyển giá trị nguyên 16 bit được lưu trong y thành giá

trị như vậy trong dấu chấm động

c) Trong việc truyền tham số cho hàm :

Vấn đề chuyển đổi kiểu cũng xảy ra khi truyền tham số cho hàm

d) Sư dụng phép ép kiểu :

Cuối cùng, việc chuyển kiểu tường minh ( hay gọi là cast ) được thực hiện theo cú pháp :

KNLT : Khi tính toán, ta cần lưu ý khi gặp phép chia 2 số nguyên mà ta cần lấy kết

quả phần thương là một số thực

Trang 31

2.6 Độ ưu tiên của các toán tử

Được trình bày trong bảng sau :

Ưu

phải

2 ! ~ & * - ++ (type) sizeof Phải qua

trái * : con trỏ ; & lấy địa chỉ

phải & : AND theo bit

- Các toán tử cùng mức ưu tiên ( nằm trêm 1 dòng) thì trình tự tính toán được chỉ ra trong cột “trình tự kết hợp”

- Một số các toán tử chưa được giới thiệu, chẳng hạn :

- Trong ưu tiên 1 :

[ ] : dùng đẻ biểu diễn phần tử mảng

-> : Biểu diễn thành phần của cấu trúc thông qua con trỏ

Trang 32

- Trong ưu tiên 2 :

* : khai báo con trỏ

Trang 33

Hãy cho biết giá trị của :

(int) 3.5, (int) 3.1, (int) 3.9, (int) –3.1, (int) –3.5, (int) –3.9

Bài 6:

Cho b bằng 5 và c bằng 8 Hãy cho biết giá trị của a,b,c sau khi thi hành riêng

biệt từng dòng lệnh sau:

Trang 35

Hãy chọn phát biểu đúng :

Trang 36

CHƯƠNG 3 HÀM VÀ CHƯƠNG TRÌNH

3.1 Cấu trúc chung của chương trình C++ :

Một chương trình C++ có thể gồm nhiều tập tin chương trình nguồn, mỗi tập tin chương trình là một văn bản chứa một dãy các chỉ thị và các chỉ thị điều khiển biên dịch

Các chỉ thị được phân thành 2 loại :

- Chỉ thị kiểu :

Bao gồm định nghĩa các kiểu dữ liệu mới, khai báo biến, hằng và hàm

- Chỉ thị thực hiện (câu lệnh) :

Được định nghĩa bằng những phép toán hay việc xử lý thực hiện trên các biến của chương trình

Tất cả các chỉ thị đều phải kết thúc bằng dấu ; ( chấm phảy)

Cả 2 loại chỉ thị này có thể hợp với nhau bằng một cú pháp qui định để hình thành một chỉ thị duy nhất được gọi là khối lệnh Một khối lệnh được đặt trong cặp dấu ngoặc nhọn :

{ các chỉ thị }

3.1.1 Sơ đồ tổng quát của chương trình C++:

Dạng thức tổng quát :

// Các chỉ thị điều khiển biên dịch

#include

#define // Các định nghĩa toàn cục // Khai báo nguyên mẫu các hàm // Hàm main

int main() // void main() {

// dãy tuần tự các lệnh }

//Phần định nghĩa hàm

Trang 37

{ // dãy tuần tự các lệnh }

1 Một chương trình C++ có thể chỉ có một hàm hoặc bao gồm nhiều hàm và các hàm này không được phép lồng nhau Trong đó hàm main() luôn luôn xuất hiện và chương trình bắt đầu thực hiện tại điểm đầu hàm main() Nghĩa là hàm main() sẽ khởi động các hàm khác để thực hiện công việc Những hàm khác có thể nằm trong cùng một tập tin với main() hoặc tập tin thư viện

2 Hàm main() :

Có 2 dạng khai báo thường dùng :

int main() // Không đối

int main(int argc, char *argv) // Có đối Các dạng khác như : int main(void), void main(void)

C++ thường buộc hàm main phải trả về một giá trị , nên tốt nhất là ta tập thói quen trả về một giá trị , và việc này được thực hiện nhờ câu lệnh return Ngay cả khi không cần thiết phải trả về một giá trị nào, ta sẽ thực hiện câu lệnh return 0 ( trả về giá trị 0 ) để thể hiện chương trình chạy bình thường

3 Các hàm liên lạc với nhau thông qua danh sách các đối ( tham số )của hàm

Hàm được khởi động bằng cách gọi tên nó

4 Các chỉ thị tiền xử lý :

#include , #define,

5 Các định nghĩa toàn cục ;

Khai báo theo trình tự :

- Định nghĩa các hằng

- Khai báo các đối tượng dữ liệu ngoài (biến, mảng , cấu trúc , .)

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

7 Phần định nghĩa các hàm

Hàm main() có thể đặt sau, đầu, hay xen giữa các định nghĩa hàm

3.1.2 Một số quy tắc cần nhớ khi viết chương trình :

Quy tắc viết lời giải thích Các lời giải thích viết :

- Trên nhiều dòng, một dòng hoặc trên 1 phần của dòng phải đặt vào giữa các dấu /* và */

- Trên một dòng hoặc trên phần còn lại của một dòng phải đặt sau //

Các lời giải thích được trình biên dịch bỏ qua

Trang 38

Quy tắc 4 : Quy tắc sử dụng các hàm chuẩn :

Trước khi sử dụng một hàm chuẩn nào cần phải biết nó nằm trong tập tin thư viện nào của C++ để khai báo , và khai báo bằng chỉ thị biên dịch #include :

#include <Ten_Tap_Tin> // không có dấu chấm phảy như câu lệnh Chẳng hạn, khi sử dụng hàm cout, cin Vì các hàm này nằm trong thư viện vào

ra chuẩn iostream.h, nên ta cần khai báo :

Ví dụ 1:

Tính chu vi và diện tích hình tròn theo bán kính nhập từ bàn phím

//Tính chu vi và diện tích hình tròng

#include < iostream.h > // su dung thu vien vao ra chuan

#include < conio.h > // Có chứa hàm xóa màn hình : clrscr()

#include <math.h> // thư viện các hàm toán học : định nghĩa hằng M_PI

cout<<"\nchu vi = <<cv<<”\nDien tich = <<dt ;

getch(); // Tam dung may de xem ket qua

Các hàm thường che dấu những chi tiết thực hiện đối với các phần khác trong chương trình, do đó làm chương trình sáng sủa , dễ sửa đổi

Một hàm có thể là :

- Nằm ngay trong modul văn bản (có các khai báo,các lệnh có trong hàm) hoặc được đưa một cách tự động vào văn bản của chương trình (bằng đường dẫn #include) hay được dịch riêng rẽ (sẽ được nối kết vào chương trình trong giai đoạn liên kết)

- Được gọi từ chương trình chính, hoặc từ một hàm khác, hoặc từ chính nó (đệ qui)

Trang 39

- Có hay không có đối (tham số hình thức)

- Có hay không có giá trị trả về

- Chỉ có 1 đầu vào ( { )

- Có thể có nhiều điểm ra ( return hay } )

3.2.1 Cấu trúc của 1 hàm :

Mọi hàm đều có dạng :

[Kdl] Ten_Ham ([danh_sách_kiểu_và_Đối]) // Dòng tiêu đề

a) Dòng tiêu đề :

Chứa các thông tin :

Kdl : Kiểu dữ liệu của hàm,

Ten_Ham : Tên của hàm, kiểu và tên đối

Danh_sách_kiểu_và_Đối : Là các đối và kiểu tương ứng của nó

Cuối dòng tiêu đề không có dấu chấm phảy (;) như kết thúc câu lệnh

1 Kdl : Có thể có hoặc không

- Trương hợp không :

Không có kiểu dữ liệu của hàm, Một cách ngầm định C++ coi đó là kiểu int

- Trường hợp có :

- Kdl là kiểu dữ liệu của hàm, có thể là bất kỳ kiểu dữ liệu nào ngoại trừ mảng C++ sẽ dùng từ khóa void để chỉ kiểu dữ liệu của hàm trong trường hợp hàm không trả về giá trị nào cả Cần lưu ý là :

* Nếu hàm trả về kiểu int, ta có thể không khai báo (ngầm định là kiểu int)

* Nếu trả về khác kiểu int, ta phải khai báo tường minh Kiểu dữ liệu của hàm

2 Ten_Ham : Là tên của hàm do người lập trình tự đặt theo quy tắc đặt tên

3 Danh sách kiểu và đối :

Có thể có hoặc không

- Trương hợp không : Nếu không có đối thì vẫn phải giữ các dấu ngoặc tròn ().Trong

trường hợp này có thể thay bằng từ khóa void

- Trường hợp có : Đó là các đối của hàm Trước mỗi đối có kiểu dữ liêu tương ứng

của nó, nếu có nhiều đối và kiểu tương ứng của nó, thì chúng phải cách nhau dấu phảy (,)

Chẳng hạn :

float max(float a, foat b, foat c)

Trang 40

b Thân hàm :

Thân hàm bắt đấu bằng dấu ngoặc nhọn mở{, tiếp theo là các chỉ thị về kiểu ( nếu có) , các câu lệnh trong đó có thể có hay không câu lệnh return và kết thúc bằng dấu ngoặc nhọn đóng

c Câu lệnh return :

Trong thân hàm có thể có hoặc không có câu lệnh này Trong trường hợp có , có thể có một câu lệnh return, hoặc nhiều câu lệnh return ở những nơi khác nhau,

Nếu không có câu lệnh return thì chương trình sẽ ra khỏi hàm khi gặp dấu ngoặc nhọn đóng cuối cùng } của thân hàm để trở về nơi gọi nó

Nếu có, Câu lệnh "return" là cơ chế chuyển giá trị từ hàm được gọi về nơi gọi Khi gặp câu lệnh return máy sẽ không thực hiện các câu lệnh sau nó trong hàm chứa câu lệnh này

Dạng tổng quát của câu lệnh này là :

- Dạng 2 : return Bt;

hoặc return (Bt);

Giá trị của biểu thức Bt sẽ được chuyển kiểu cho phù hợp với kiểu của hàm trước khi gán cho hàm, và ra khỏi hàm chuyển về nơi gọi nó

3.2.2 Các ví dụ về tạo hàm:

Ví dụ 2 : Hàm Menu

void Menu()

{

cout<<" \n **********************Bảng Menu ******************* "; cout<<" \n1.**********************chức năng 1 ******************* "; cout<<" \n2.**********************chức năng 2 ******************* "; cout<<" \n3.********************** Thoát ******************* "; cout<<"\n *************************************************** *"; }

KNLT : Đặt tên hàm cố gắng thể hiện được chức năng của hàm

Ngày đăng: 24/12/2013, 17:15

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[3] Niklaus Wirth, N.Q.Cường dịch: Cấu trúc dữ liệu + Giải thuật = Chương trình, NXBẹH &amp;THCN, 1991 Sách, tạp chí
Tiêu đề: Cấu trúc dữ liệu + Giải thuật = Chương trình
Nhà XB: NXBẹH &THCN
[6] Ngô Trung Việt : “ Ngôn ngữ lập trình C++ “ NXB Giao thông vận tải , 1996 Sách, tạp chí
Tiêu đề: Ngôn ngữ lập trình C++ “
Nhà XB: NXB Giao thông vận tải
[7] Nguyễn quốc Bảo : “ Borland C++, Turbo C++ và Lập trình hướng đối tượng “. Nhà xuất bản Đông Nai, 1996 Sách, tạp chí
Tiêu đề: “ Borland C++, Turbo C++ và Lập trình hướng đối tượng “
Nhà XB: Nhà xuất bản Đông Nai
[1] Nguyễn Tiến Huy &amp; Trần Hạnh Nh i, giáo trình “Kỹ thuật lập trình “, Trường Đại học khoa học tự nhiên t.p. Hồ Chí Minh, 1997 Khác
[2] Nguyễn hữu Tân : “Kỹ thuật lập trình C++ “ . Trường Đại học Đà Lạt , 1998 Khác
[4] Joel Adams, Sanford Leestma &amp; Larry Nyhoff (1995). C++ An Introduction to Computing. First Edition, Prentice-Hall, Inc Khác
[5] Patrick Henry Winston (1994). On To C++. First Edition, Addision-Wesley Publishing Company Khác

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w