Ngôn ngữ lập trình bậc cao

Chia sẻ bởi Lý Thị Thu Hường | Ngày 18/10/2018 | 35

Chia sẻ tài liệu: Ngôn ngữ lập trình bậc cao thuộc Hình học 9

Nội dung tài liệu:

Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
1
NGÔN NGỮ LẬP TRÌNH C++
NGÔN NGỮ LẬP TRÌNH BẬC CAO
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
2
Ngôn ngữ C được phát triển từ đầu thập niên 1970 bởi Ken Thompson và Dennis Ritchie tại phòng thí nghiệm Bell Telephone.
1980 ra đời “C với các lớp”, 1983 đổi thành C++ là sự mở rộng từ C, hỗ trợ hướng đối tượng.
1989 ra đời bản C++ 2.0. Các tính năng mới: đa kế thừa, lớp trừu tượng, hàm tĩnh, hàm thành viên hằng, và thành viên bảo tồn.
CHƯƠNG 1: GIỚI THIỆU NGÔN NGỮ C++
LỊCH SỬ PHÁT TRIỂN NGÔN NGỮ C++
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
3
C++ cơ bản là C ở một mức độ mới. Sự khác biệt quan trọng duy nhất là C++ hỗ trợ hướng đối tượng
Những bổ sung nâng cao bắt đầu với sự thêm vào của khái niệm lớp, tiếp theo đó là các khái niệm hàm ảo, toán tử quá tải, đa kế thừa, tiêu bản, và xử lý ngoại lệ
Khái niệm C++
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
4
Cài đặt C++
Có thể dùng một trong các phiên bản:
Bordland C++
Turbo C
Visual C
C Free: Chọn C Free: nhỏ gọn, chạy trong môi trường Windows nên dễ sử dụng
Cách khởi động, thoát khỏi C++
Giao diện và cửa sổ soạn thảo
Thiết lập cấu hình cho môi trường
Cài đặt - Môi trường C++
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
5
Chương 2:

CÁC THÀNH PHẦN CƠ BẢN, CÁC KIỂU DỮ LIỆU CƠ SỞ VÀ CÁC PHÉP TOÁN
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
6
2.1 Các thành phần cơ bản
Bộ ký tự (Character Set)
Tên (Identifier)
Từ khoá (Keywords)
Lời giải thích (Comments)
Cấu trúc của một chương trình C và quy tắc viết chương trình
CHƯƠNG 2: CÁC THÀNH PHẦN CƠ BẢN, CÁC KIỂU DỮ LIỆU CƠ SỞ VÀ CÁC PHÉP TOÁN
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
7
Các chữ cái la tinh (viết thường và viết hoa): a .. z và A .. Z. Cùng một chữ cái nhưng viết thường phân biệt với viết hoa. Ví dụ chữ cái `a` là khác với `A`.
Dấu gạch dưới: _
Các chữ số thập phân: 0, 1, . ., 9.
Các ký hiệu toán học: +, -, *, /, % , &, ||, !, >, <, = ...
Các ký hiệu đặc biệt khác: , ;: [ ], {}, #, dấu cách, ...
2.1.1 Bộ ký tự (Character set)
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
8
Dạng có sẵn: Tên các hàm chuẩn, từ khoá, …
Dạng do NSD tạo ra dùng để đặt tên cho hằng, biến, kiểu, hàm ... Qui tắc đặt tên :
Là dãy ký tự liên tiếp (không chứa dấu cách) và phải bắt đầu bằng chữ cái hoặc gạch dưới.
Phân biệt kí tự in hoa và thường
Không được trùng với từ khóa.
Chiều dài tùy ý theo cài đặt của hệ thống

2.1.2 Tên (Identifier)
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
9
Là các từ đã được định nghĩa và sử dụng bởi C++.
Một vài từ khoá thường gặp: auto, break, case, char, continue, default, do, double, else, externe, float, for, goto, if, int, long, register, return, short, sizeof, static, struct, switch, typedef, union, unsigned, while ...
Các từ khoá luôn luôn được viết bằng chữ thường.
2.1.3 Từ khoá (Keywords)
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
10
Có hai cách để chú thích:
/ Chú thích theo dòng
/* Chú thích theo khối */
Chú ý: Chú thích khối không được viết lồng nhau
2.1.4 Lời giải thích (Comments)
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
11
Khai báo các tệp nguyên mẫu: khai báo tên các tệp chứa những thành phần có sẵn (như các hằng chuẩn, kiểu chuẩn và các hàm chuẩn) mà NSD sẽ dùng trong chương trình.
Khai báo các kiểu dữ liệu, các biến, hằng ... do NSD định nghĩa và được dùng chung trong toàn bộ chương trình.
Danh sách các hàm của chương trình (do NSD viết, bao gồm cả hàm main()).


2.1.5 Cấu trúc của một chương trình C++
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
12
Ví dụ:
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
13
Xác định yêu cầu của chương trình: input và output
Xác định thuật toán giải.
Cụ thể hoá các khai báo kiểu và thuật toán thành dãy các lệnh. Quá trình này được gọi là soạn thảo chương trình nguồn.
Dịch chương trình nguồn để tìm và sửa các lỗi gọi là lỗi cú pháp.
Chạy chương trình, kiểm tra kết quả in ra trên màn hình.

Quy tắc viết chương trình
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
14
2.2.1 Khái niệm về kiểu dữ liệu
Tại sao cần có các kiểu dữ liệu?
Cần quan tầm đến những thuộc tính nào về mỗi một kiểu dữ liệu?
2.2 Các kiểu dữ liệu và cách khai báo
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
15
Thông thường dữ liệu hay dùng là số và chữ. Tuy nhiên việc phân chia chỉ 2 loai dữ liệu là không đủ. Để dễ dàng hơn cho lập trình, hầu hết các NNLT đều phân chia dữ liệu thành nhiều kiểu khác nhau được gọi là các kiểu cơ bản hay chuẩn. Trên cơ sở kết hợp các kiểu dữ liệu chuẩn, NSD có thể tự đặt ra các kiểu dữ liệu mới để phục vụ cho chương trình giải quyết bài toán của mình
Một biến là một số ô nhớ liên tiếp nào đó trong bộ nhớ dùng để lưu trữ dữ liệu trong quá trình hoạt động của chương trình. Để quản lý chặt chẽ các biến, NSD cần khai báo cho chương trình biết trước tên biến và kiểu của dữ liệu được chứa trong biến. Việc khai báo này sẽ làm chương trình quản lý các biến dễ dàng hơn như trong việc phân bố bộ nhớ cũng như quản lý các tính toán trên biến theo nguyên tắc: chỉ có các dữ liệu cùng kiểu với nhau mới được phép làm toán với nhau
Tại sao cần có các kiểu dữ liệu
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
16
Tên kiểu: là một từ dành riêng để chỉ định kiểu của dữ liệu.
Số byte trong bộ nhớ để lưu trữ một đơn vị dữ liệu thuộc kiểu này.
Miền giá trị của kiểu: Cho biết một đơn vị dữ liệu thuộc kiểu này sẽ có thể lấy giá trị trong miền nào. Các giá trị này phụ thuộc vào số byte mà hệ thống máy qui định cho từng kiểu.
Các thuộc tính của kiểu dữ liệu
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
17
2.2.2 Dữ liệu cơ sở và khai báo
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
18
Kiểu số nguyên
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
19
Kiểu số thực
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
20
Kiểu ký tự
Một giá trị kiểu char chiếm 1 byte ( 8 bit ) và biểu diễn được một ký tự thông qua bảng mã ASCII.
Ví dụ:
Ký tự Mã ASCII
A 65
B 66
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
21
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
22
Biểu boolean
Trong C++, kiểu bool thực ra là số int.
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
23

2.2.3.1 Cấu trúc
2.2.3.2 Các kiểu dữ liệu tự định nghĩa khác
Định nghĩa kiểu dữ liệu dựa trên các kiểu dữ liệu đã có: sử dụng từ khoá typedef
Kiểu liệt kê (enum)
2.2.3 Các kiểu dữ liệu được định nghĩa bởi người dùng
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
24

Khái niệm: Một cấu trúc dữ liệu là một tập hợp của những kiểu dữ liệu khác nhau được gộp lại với một cái tên duy nhất
2.2.3.1 Cấu trúc
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
25
Dạng thức:
struct model_name {
type1 element1;
type2 element2;
type3 element3;
.
.
} object_name;
2.2.3.1 Cấu trúc
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
26
model_name: là tên của mẫu kiểu dữ liệu
object_name: tên của đối tượng.
element1,…, element n: là tên các phần tử của cấu trúc
type1 , …, type n là kiểu của các phần tử đó.
2.2.3.1 Cấu trúc
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
27

struct sinhvien {
char ten [30];
float diem;
} ;
sinhvien hoa;
sinhvien huong, lan;
Ví dụ
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
28
Sau khi được khai báo, sinhvien trở thành một tên kiểu hợp lệ giống các kiểu cơ bản.
sinhvien có hai trường: ten kiểu char - độ dài 30 và diem có kiểu float.
Trường tuỳ chọn object_name có thể nằm ở cuối của phần khai báo cấu trúc. Ví dụ:
struct sinhvien {
char ten [30];
float diem;
} hoa, huong, lan;
Ví dụ
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
29


Kiểu mẫu là tên kiểu dữ liệu.
VD: sinhvien
Đối tượng là các biến.
VD: hoa, huong, lan
Phân biệt kiểu mẫu cấu trúc và đối tượng cấu trúc
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
30
Sau khi đã khai báo ba đối tượng có kiểu là một mẫu cấu trúc xác định (hoa, huong và lan) chúng ta có thể thao tác với các trường tạo nên chúng. Để làm việc này chúng ta sử dụng một dấu chấm (.) chèn ở giữa tên đối tượng và tên trường.
VD: hoa.ten
hoa.diem
huong.ten
huong.diem
lan.ten
lan.diem
Mỗi trường có kiểu dữ liệu tương ứng: hoa.ten, huong.ten và lan.ten có kiểu char[30], và hoa.diem, huong.diem và lan.diem có kiểu float.
Sử dụng kiểu cấu trúc
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
31
Các cấu trúc có thể được đặt lồng nhau vì vậy một phần tử hợp lệ của một cấu trúc có thể là một cấu trúc khác.
VD: struct diem {
int diemtoan;
int diemtin;
}
struct sinhvien {
char ten [50];
char email [50];
diem diemhocky;
} trung, ha;

Vì vậy, sau phần khai báo trên chúng ta có thể sử dụng các biểu thức sau:
trung.ten
ha.diemhocky.diemtoan

Cấu trúc lồng nhau
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
32

Định nghĩa kiểu dữ liệu dựa trên các kiểu dữ liệu đã có: sử dụng từ khoá typedef
Kiểu liệt kê (enum)
2.2.3.2 Các kiểu dữ liệu tự định nghĩa khác
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
33
Dạng thức:
typedef   existing_type   new_type_name ;
Trong đó:
existing_type là một kiểu dữ liệu cơ bản hay bất kì một kiểu dữ liệu đã định nghĩa
new_type_name là tên của kiểu dữ liệu mới
Định nghĩa kiểu dữ liệu dựa trên các kiểu dữ liệu đã có
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
34
VD:
typedef char Char;
typedef unsigned int WORD;
typedef int songuyen;
Trong trường hợp này chúng ta đã định nghĩa ba kiểu dữ liệu mới: Char, WORD, và songuyen kiểu char, unsigned int, int, chúng ta hoàn toàn có thể sử dụng chúng như là các kiểu dữ liệu hợp lệ
Char kytu;
WORD tu;
songuyen diem;
Định nghĩa kiểu dữ liệu dựa trên các kiểu dữ liệu đã có
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
35

typedef nên dùng khi ta muốn định nghĩa một kiểu dữ liệu được dùng lặp đi lặp lại trong chương trình hoặc kiểu dữ liệu muốn dùng có tên quá dài và muốn nó có tên ngắn hơn.
 Sử dụng typedef khi nào???
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
36

Dạng thức:
enum model_name {
value1,
value2,
value3,
.
.
} object_name;
Kiểu liệt kê (enum)
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
37

Trong đó:
model_name: Tên kiểu
value1, …, valuen: các giá trị
object_name: Tên biến/Đối tượng
Kiểu liệt kê (enum)
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
38

enum colors_t {black, blue, green, cyan, red, purple, yellow, white};

colors_t mycolor;

mycolor = blue;
Ví dụ
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
39

Không sử dụng bất kì một kiểu dữ liệu cơ bản nào trong phần khai báo.
Tạo ra một kiểu dữ liệu mới mà không dựa trên bất kì kiểu dữ liệu nào có sẵn
Chú ý
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
40

Trên thực tế kiểu dữ liệu liệt kê được dịch là một số nguyên,các giá trị của nó là các hằng số nguyên được chỉ định.
Nếu không được chỉ định, giá trị nguyên tương đương với phần tử đầu tiên là 0 và các giá trị tiếp theo cứ thế tăng lên 1.
VD: Trong kiểu dữ liệu colors_t, black tương đương với 0, blue tương đương với 1, green tương đương với 2 ... 
Chú ý
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
41
Nếu chỉ định một giá trị nguyên cho một giá trị nào đó của kiểu dữ liệu liệt kê, các giá trị tiếp theo sẽ là các giá trị nguyên tiếp theo
VD:
enum months_t { january=1, february, march, april,may, june, july, august, september, october, november, december} y2k;
Chú ý
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
42
Có thể định nghĩa các hằng để có thể sử dụng thường xuyên mà không mất tài nguyên cho các biến bằng cách sử dụng chỉ thị #define
Dạng: #define identifier value
Trong đó:
identifier là tên hằng
value: giá trị hằng
2.2.4 Định nghĩa hằng
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
43
Ví dụ:
#define PI 3.14159265

#define NEWLINE ` `

circle = 2 * PI * r;
cout << NEWLINE;

2.2.4 Định nghĩa hằng
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
44
Việc duy nhất mà trình dịch làm khi nó tìm thấy một chỉ thị #define là thay thế các tên hằng tại bất kì chỗ nào chúng xuất hiện bằng giá trị mà chúng được định nghĩa.
Vì vậy các hằng số #define được coi là các hằng số macro
Trình biên dịch làm gì với #define?
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
45
Chỉ thị #define không phải là một lệnh thực thi
Nó là chỉ thị tiền xử lý (preprocessor)
Vì vậy trình dịch coi cả dòng là một chỉ thị và dòng đó không cần kết thúc bằng dấu chấm phẩy. Nếu thêm dấu chấm phẩy vào cuối dòng, nó sẽ được coi là một phần của giá trị định nghĩa hằng.
#define là gì?
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
46
Với tiền tố const có thể khai báo các hằng với một kiểu xác định như là làm với một biến
const int width = 100;
const zip = 12440;
Trong trường hợp kiểu không được chỉ rõ trình dịch sẽ coi nó là kiểu int
2.2.4 Khai báo hằng
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
47

 Hãy so sánh sự khác nhau giữa định nghĩa hằng và khai báo hằng.
So sánh
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
48

Việc chuyển đổi một kiểu đã xác định thành một kiểu khác về cơ bản sẽ thay đổi một hay cả hai tính chất của kiểu. Kích cỡ kiểu có thể rộng hơn hay hẹp hơn và tất nhiên cách hiểu về kiểu sẽ thay đổi.
2.2.5 Sự tương thích giữa các kiểu
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
49

Một số phép chuyển đổi là không an toàn, về cơ bản trình biên dịch sẽ cảnh báo điều đó, việc chuyển đổi từ kiểu dữ liệu rộng hơn sang một kiểu dữ liệu hẹp hơn là một hình thái chuyển đổi kiểu không an toàn
2.2.5 Sự tương thích giữa các kiểu
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
50
Khi tính toán một biểu thức phần lớn các phép toán đều yêu cầu các toán hạng phải cùng kiểu
Ví dụ để phép gán thực hiện được thì giá trị của biểu thức phải có cùng kiểu với biến. Trong trường hợp kiểu của giá trị biểu thức khác với kiểu của phép gán thì hoặc là chương trình sẽ tự động chuyển kiểu giá trị biểu thức về thành kiểu của biến được gán (nếu được) hoặc sẽ báo lỗi.
Do vậy khi cần thiết NSD phải sử dụng các câu lệnh để chuyển kiểu của biểu thức cho phù hợp với kiểu của biến.
2.2.6 Chuyển đổi kiểu dữ liệu
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
51
Chuyển kiểu tự động: về mặt nguyên tắc, khi cần thiết các kiểu có giá trị thấp sẽ được chương trình tự động chuyển lên kiểu cao hơn :Char – int – longint – float – double
VD:
int i = 3;
float f ;
f = i + 2;
2.2.6 Chuyển đổi kiểu dữ liệu
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
52
Hãy giải thích cơ chế của sự chuyển đổi dữ liệu trên?
2.2.6 Chuyển đổi kiểu dữ liệu
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
53
Ép kiểu: trong chuyển kiểu tự động, chương trình chuyển các kiểu từ thấp đến cao, tuy nhiên chiều ngược lại không thể thực hiện được vì nó có thể gây mất dữ liệu. Do đó nếu cần thiết NSD phải ra lệnh cho chương trình
Cú pháp: tên_kiểu(biểu_thức) . VD:
int i;
float f = 3 ; // tự động
i = int(f + 2) ; // ép kiểu
Giải thích cơ chế ép kiểu?
2.2.6 Chuyển đổi kiểu dữ liệu
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
54
Phép ép kiểu từ một số thực về số nguyên sẽ cắt bỏ tất cả phần thập phân của số thực, chỉ để lại phần nguyên. Như vậy để tính phần nguyên của một số thực x ta chỉ cần ép kiểu của x về thành kiểu nguyên, có nghĩa int(x) là phần nguyên của số thực x bất kỳ.
Ví dụ để kiểm tra một số nguyên n có phải là số chính phương, ta cần tính căn bậc hai của n. Nếu căn bậc hai x của n là số nguyên thì n là số chính phương, tức nếu int(x) = x thì x nguyên và n là chính phương.
Lợi ích của việc ép kiểu dữ liệu
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
55
Để biết mã ASCII của một kí tự ta chỉ cần chuyển kí tự đó sang kiểu nguyên.
VD:
char c ;
cin >> c ;
cout << "Mã của kí tự vừa nhập là " << int(c) ;
Lợi ích của việc ép kiểu dữ liệu
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
56
VD:
int i = 3 , j = 5 ;
float x ;
x = i / j * 10;
cout << x ;
Kết quả của phép toán là bao nhiêu? Giải thích.
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
57
Để phép chia ra kết quả thực ta cần phải ép kiểu hoặc i hoặc j hoặc cả 2 thành số thực, khi đó phép chia sẽ cho kết quả thực và x được tính đúng giá trị.
Cụ thể câu lệnh x = i/j*10 được đổi thành:
x = float(i) / j * 10 ;
x = i / float(j) * 10 ;
x = float(i) / float(j) * 10 ;
x = float(i/j) * 10 ;
Giải thích từng trường hợp – Đúng / sai?
Lợi ích của việc ép kiểu dữ liệu
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
58
Các biến chính là các ô nhớ mà chúng ta có thể truy xuất dưới các tên. Các biến này được lưu trữ tại những chỗ cụ thể trong bộ nhớ. Bộ nhớ máy tính chỉ là một dãy gồm các ô nhớ 1 byte, mỗi ô có một địa chỉ xác định.
Hệ điều hành tổ chức bộ nhớ thành những số đơn nhất, tuần tự, nên nếu chúng ta nói đến vị trí 1776 trong bộ nhớ chúng ta biết chính xác ô nhớ đó vì chỉ có một vị trí với địa chỉ như vậy
2.2.8 Biến con trỏ (pointer)
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
59
Con trỏ có khả năng tham chiếu trực tiếp đến giá trị mà chúng trỏ tới nên cần chỉ rõ kiểu dữ liệu nào mà một biến con trỏ trỏ tới.
Dạng thức:
type * pointer_name;
Trong đó: type: kiểu dữ liệu được trỏ tới.
pointer_name: tên biến con trỏ.
2.2.8 Biến con trỏ (pointer)
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
60
VD:
int * number;
char * character;
float * greatnumber;
Đây là ba khai báo kiểu con trỏ.
Chúng chiếm một lượng bộ nhớ như nhau (kích thước của một biến con trỏ tùy thuộc vào hệ điều hành)
Dữ liệu mà chúng trỏ tới không chiếm lượng bộ nhớ như nhau, một kiểu int, một kiểu char và cái còn lại kiểu float.
Dấu sao (*) mà chúng ta đặt khi khai báo một con trỏ chỉ có nghĩa rằng: đó là một con trỏ và hoàn toàn không liên quan đến toán tử tham chiếu mà chúng ta đã xem xét trước đó. Đó đơn giản chỉ là hai tác vụ khác nhau được biểu diễn bởi cùng một dấu.
2.2.8 Biến con trỏ (pointer)
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
61
Bằng cách sử dụng con trỏ chúng ta có thể truy xuất trực tiếp đến giá trị được lưu trữ trong biến được trỏ bởi nó bằng cách đặt trước tên biến con trỏ một dấu sao (*) - ở đây có thể được dịch là "giá trị được trỏ bởi".








VD: beth = *ted;// beth sẽ mang giá trị 25, vì ted bằng 1776 và giá trị trỏ bởi 1776 là 25.
Cần phải phân biệt được rằng ted có giá trị 1776, nhưng *ted (với một dấu sao đằng trước) trỏ tới giá trị được lưu trữ trong địa chỉ 1776, đó là 25. Hãy chú ý sự khác biệt giữa việc có hay không có dấu sao tham chiếu.
beth = ted; // beth bằng ted ( 1776 )
beth = *ted; // beth bằng giá trị được trỏ bởi( 25 )
2.2.7 Các biến tham chiếu
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
62
Toán tử lấy địa chỉ (&)
Nó được dùng như là một tiền tố của biến và có thể được dịch là "địa chỉ của", vì vậy &variable1 có thể được đọc là "địa chỉ của variable1".
Toán tử tham chiếu (*)
Nó chỉ ra nội dung được trỏ bởi biểu thức. Nó có thể được dịch là "giá trị được trỏ bởi"..
*mypointer được đọc là "giá trị được trỏ bởi mypointer".
VD
andy = 25;
ted = &andy;
Các biểu thức sau là đúng:
andy == 25
&andy == 1776
ted == 1776
*ted == 25
2.2.7 Các biến tham chiếu
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
63
#include
int main ()
{
int value1 = 5, value2 = 15;
int * mypointer;
mypointer = &value1;
*mypointer = 10;
mypointer = &value2;
*mypointer = 20;
cout << "value1==" <<
value1 << "/ value2==" << value2;
return 0;
}
Hãy cho biết kết quả của đoạn chương trình này
VD về con trỏ
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
64
2.3.1.1 Biểu thức:
Biểu thức là dãy kí hiệu kết hợp giữa các toán hạng, phép toán và cặp dấu () theo một qui tắc nhất định.
Các toán hạng là hằng, biến, hàm.
Biểu thức cung cấp một cách thức để tính giá trị mới dựa trên các toán hạng và toán tử trong biểu thức.
Ví dụ:
(x + y) * 2 - 4 ; 3 - x + sqrt(y) ;
(-b + sqrt(delta)) / (2*a) ;
2.3 Biểu thức, câu lệnh và phép toán
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
65
2.3.1.2 Các phép toán
1. Phép toán
Các thành phần tên gọi tham gia trong phép toán được gọi là hạng thức hoặc toán hạng
Các kí hiệu phép toán được gọi là toán tử.
Ví dụ: trong phép toán a + b;
a, b: được gọi là toán hạng
+: là toán tử.
2.3 Biểu thức, câu lệnh và phép toán
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
66
a. Các phép toán số học: +, -, *, /, %
Các phép toán + (cộng), - (trừ), * (nhân) được hiểu theo nghĩa thông thường trong số học.
VD: int a,b;
a = 4;
b= 5;
a+ b = 9;
2.3 Biểu thức, câu lệnh và phép toán
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
67
a. Các phép toán số học: +, -, *, /, %
Phép toán a / b (chia) được thực hiện theo kiểu của các toán hạng, tức nếu cả hai toán hạng là số nguyên thì kết quả của phép chia chỉ lấy phần nguyên, ngược lại nếu 1 trong 2 toán hạng là thực thì kết quả là số thực.
Ví dụ:
13/5 = 2 // do 13 và 5 là 2 số nguyên
13.0/5 = 13/5.0 = 13.0/5.0 = 2.6 // do có ít nhất 1 toán hạng là thực
2.3 Biểu thức, câu lệnh và phép toán
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
68
a. Các phép toán số học: +, -, *, /, %
Phép toán a % b (lấy phần dư) trả lại phần dư của phép chia a/b, trong đó a và b là 2 số nguyên.
Ví dụ:
13%5 = 3 // phần dư của 13/5
5%13 = 5 // phần dư của 5/13
2.3 Biểu thức, câu lệnh và phép toán
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
69
b . Các phép toán tự tăng, giảm: i++, ++i, i--, --i
Phép toán ++i và i++ sẽ cùng tăng i lên 1 đơn vị tức tương đương với câu lệnh i = i+1.
Tuy nhiên nếu 2 phép toán này nằm trong câu lệnh hoặc biểu thức thì ++i khác với i++. Cụ thể ++i sẽ tăng i, sau đó i mới được tham gia vào tính toán trong biểu thức. Ngược lại i++ sẽ tăng i sau khi biểu thức được tính toán xong (với giá trị i cũ).
VD: i = 3, j = 15.
2.3 Biểu thức, câu lệnh và phép toán
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
70
c. Các phép toán so sánh và lôgic
Đây là các phép toán mà giá trị trả lại là đúng hoặc sai.
Nếu giá trị của biểu thức là đúng thì nó nhận giá trị 1, ngược lại là sai thì biểu thức nhận giá trị 0. Nói cách khác 1 và 0 là giá trị cụ thể của 2 khái niệm "đúng", "sai".
Mở rộng hơn C++ quan niệm một giá trị bất kỳ khác 0 là "đúng" và giá trị 0 là "sai".
2.3 Biểu thức, câu lệnh và phép toán
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
71
Các phép toán so sánh
== (bằng nhau)
!= (khác nhau)
> (lớn hơn)
< (nhỏ hơn)
>= (lớn hơn hoặc bằng)
<= (nhỏ hơn hoặc bằng)
Hai toán hạng của các phép toán này phải cùng kiểu.
c. Các phép toán so sánh và lôgic
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
72
3 == 3 hoặc 3 == (4 -1) // nhận giá trị 1 vì đúng
3 == 5 // = 0 vì sai
3 != 5 // = 1
3 + (5 < 2) // = 3 vì 5<2 bằng 0
3 + (5 >= 2) // = 4 vì 5>=2 bằng 1
VD: Các phép toán so sánh và lôgic
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
73
Phép gán vừa gán giá trị cho biến vừa trả lại giá trị của toán hạng bên phải
Phép so sánh luôn luôn trả lại giá trị 1 hoặc 0.
Phân biệt phép gán và phép so sánh
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
74
&& (và), || (hoặc ), ! (not, phủ định)
Hai toán hạng của loại phép toán này phải có kiểu lôgic tức chỉ nhận một trong hai giá trị "đúng" (được thể hiện bởi các số nguyên khác 0) hoặc "sai" (thể hiện bởi 0). Khi đó giá trị trả lại của phép toán là 1 hoặc 0
Các phép toán lôgic
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
75
Phép toán "và" đúng khi và chỉ khi hai toán hạng cùng đúng
Phép toán "hoặc" sai khi và chỉ khi hai toán hạng cùng sai
Phép toán “not" đúng khi và chỉ khi toán hạng của nó sai.
Các phép toán lôgic
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
76
3 && (4 > 5)// = 0 vì có hạng thức (4>5)sai
(3 >= 1) && (7) // = 1 vì cả hai hạng thức cùng đúng
!1 // = 0
! (4 + 3 < 7) // = 1 vì (4+3<7) bằng 0
5 || (4 >= 6) // = 1 vì có một hạng thức (5) đúng
(5 < !0) || (4 >= 6) // = 0 vì cả hai hạng thức đều sai
VD: Các phép toán lôgic
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
77
Việc đánh giá biểu thức được tiến hành từ trái sang phải
Sẽ dừng khi biết kết quả mà không chờ đánh giá hết biểu thức.
Ví dụ cho i = 2, j = 3
x = (++i < 4 && ++j > 5) cho kết quả x = 0 , i = 3 , j = 4
Chú ý : Các phép toán lôgic
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
78

1. Các biểu thức trong cặp dấu ngoặc ()
2. Các phép toán 1 ngôi (tự tăng, giảm, lấy địa chỉ, lấy nội dung con trỏ …)
3. Các phép toán số học.
4. Các phép toán quan hệ, logic.
Các phép gán.
VD:
x = 3 + (4 * 2) + 7 = 18;
2.3.2 Quy tắc thực hiện biểu thức hay thứ tự ưu tiên các phép toán
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
79

Một câu lệnh trong C++ được thiết lập từ các từ khoá và các biểu thức …
Luôn luôn được kết thúc bằng dấu chấm phẩy.
VD:
cin >> x >> y ;
x = 3 + x ; y = (x = sqrt(x)) + 1 ; cout << x ;
cout << y ;
2.3.3 Câu lệnh
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
80
Một số câu lệnh bên trong nó lại chứa dãy lệnh khác. Dãy lệnh này phải được bao giữa cặp dấu ngoặc {} và được gọi là khối lệnh.
Các biến được khai báo trong khối lệnh nào thì chỉ có tác dụng trong khối lệnh đó.
Ví dụ: tất cả các lệnh trong hàm main() là một khối lệnh.
2.3.4 Lệnh hợp thành hay lệnh ghép (Compound statement)
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
81
a. Các hàm số học
abs(x), labs(x), fabs(x) : trả lại giá trị tuyệt đối của một số nguyên, số nguyên dài và số thực.
pow(x, y) : hàm mũ, trả lại giá trị x lũy thừa y
exp(x) : hàm mũ, trả lại giá trị e mũ x
log(x), log10(x) : trả lại lôgarit cơ số e và lôgarit thập phân của x (lnx, logx) .
sqrt(x) : trả lại căn bậc 2 của x.
atof(s_number) : trả lại số thực ứng với số viết dưới dạng xâu kí tự s_number.
2.3.5 Các hàm số học chuẩn
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
82
b. Các hàm lượng giác
sin(x), cos(x), tan(x) : trả lại các giá trị sinx, cosx, tgx.
2.3.5 Các hàm số học chuẩn
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
83
Toán tử bit coi các toán hạng của nó như một tập hợp các bit.
Mỗi bit có thể chứa hoặc giá trị 0 (tắt) hay 1 (bật).
Toán hạng của toán tử bit phải có kiểu nguyên .
VD:


2.3.6 Các phép tính theo bit (logic số học)
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
84
unsigned char bits = 0227 ;
|1|0|0|1|0|1|1|1|
bits = ~bits ;
|0|1|1|0|1|0|0|0|

Các phép toán dịch chuyển bit sẽ chuyển các bit của toán hạng bên trái đi một số vị trí hoặc sang trái hoặc phải.
vd:
unsigned char bits = 1;
|0|0|0|0|0|0|0|1|
bits = bits << 1 ;
|0|0|0|0|0|0|1|0|


VD các phép tính theo bit
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
85
Toán tử AND bit :
unsigned char result ;
unsigned char b1 = 0145 ;
|0|1|1|0|0|1|0|1|
usigned char b2 = 0257 ;
|1|0|1|0|1|1|1|1|
result = b1 & b2 ;
|0|0|1|0|0|1|0|1|

Toán tử XOR bit :
result = b1 ^ b2 ;
|1|1|0|0|1|0|1|0|

Toán tử OR bit :
result = b1 | b2 ;
|1|1|1|0|1|1|1|1|


VD các phép tính theo bit
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
86
Cú pháp: biến = (điều_kiện) ? a: b ;
điều_kiện là một biểu thức logic,
a, b là các biểu thức bất kỳ cùng kiểu với kiểu của biến.
Phép toán này gán giá trị a cho biến nếu điều kiện đúng và b nếu ngược lại.
Ví dụ:
x = (3 + 4 < 7) ? 10: 20
x = (3 + 4) ? 10: 20
2.3.7 Phép gán mở rộng (Phép gán có điều kiện)
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
87
Một phép gán dạng x = x @ a ; có thể được viết gọn dưới dạng x @= a trong đó @ là các phép toán số học, xử lý bit ...
Ví dụ:
thay cho viết x = x + 2 có thể viết x += 2;
hoặc x = x/2 ; x = x*2 có thể được viết lại như x /= 2; x *= 2;
2.3.7 Cách viết gọn của phép gán
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
88
Toán tử sizeof cho lại kích cỡ tính theo byte của một biểu thức hay một bộ xác định kiểu.
Nó có thể xuất hiện dưới 1 trong 2 dạng:
sizeof (bộ xác định kiểu) ;
sizeof biểu thức ;


2.3.8 Toán tử sizeof
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
89
Cú pháp:

biểu thức 1 ? biểu thức 2 : biểu thức 3 ;
Biểu thức 1 bao giờ cũng được tính, nếu nó cho lại điều kiện đúng, tức là khác 0, thì biểu thức 2 sẽ đc tính, còn nếu không thì biểu thức 3 sẽ được tính.



2.3.9 Toán tử điều kiện
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
90

Mỗi câu lệnh C++ được kết thúc bằng dấu ; Tuy nhiên khái niệm một biểu thức trong C++ được mở rộng hơn, nó được kết thúc bằng dấu chấm phẩy song nó có thể chứa một dãy các lệnh, dãy biểu thức tính toán độc lập chứ không phải chỉ có một biểu thức tính một giá trị.
Ví dụ: a*b, i+j
2.3.10 Toán tử dãy
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
91
Chương 3: Các thao tác xử lý input - output
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
92
3.1.1. Hàm printf:
Cú pháp:
printf(dòng định dạng, bt_1, bt_2, ..., bt_n) ;
Dòng định dạng là một dãy kí tự đặt trong cặp dấu nháy kép (“”) qui định khuôn dạng cần in của các giá trị bt_i
bt_i có thể là : hằng, biến, hay các bt tính toán
VD: giả sử x = 4
printf(“%d %0.2f”, 3, x + 1) ;
3.1 Hàm in ra màn hình printf() và putchar() với các tham số
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
93
Các kí tự đi sau kí hiệu % dùng để định dạng việc in :
d: in số nguyên dưới dạng hệ thập phân
o: in số nguyên dạng hệ 8
x, X: in số nguyên dạng hệ 16
u: in số nguyên dạng không dấu
c: in kí tự
s: in xâu kí tự
e, E: in số thực dạng dấu phẩy động
f: in số thực dạng dấu phẩy tĩnh
3.1 Hàm in ra màn hình printf() và putchar() với các tham số
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
94
Các kí tự nằm trong dòng định dạng nếu không đi sau % thì sẽ được in ra màn hình. Muốn in % phải viết 2 lần (tức%%).
Mỗi bt_i cần in phải có một định dạng tương ứng trong dòng định dạng.
Nếu giữa kí tự % và kí tự định dạng có số biểu thị độ rộng cần in thì giá trị in ra sẽ được gióng cột sang lề phải
3.1 Hàm in ra màn hình printf() và putchar() với các tham số
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
95
3.1.2. Hàm putchar()
Hàm putchar : đưa 1 ký tự lên stdout(đầu ra mặc định – màn hình).
Ví dụ : putchar(65) ; ----> in ra ký tự A.
Chú ý : Tất cả các hàm trên khai báo trong stdio.h.
3.1 Hàm in ra màn hình printf() và putchar() với các tham số
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
96
Dòng cin: cin là đối tượng của lớp istream. Đó là dòng nhập kết nối tới thiết bị nhập chuẩn, thông thường là bàn phím.
Dòng cout: cout là một đối tượng kiểu ostream. Các thao tác xuất trên dòng cout đồng nghĩa với xuất dữ liệu ra màn hình.
3.3 Dòng tin trong C++ (stream)
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
97
3.5.1 Input
a. Toán tử trích >>
Toán tử trích >> được sử dụng để đọc dữ liệu từ dòng cin:
Cú pháp: cin>> biến;
Để nhập giá trị của nhiều biến trên một dòng lệnh ta dùng cú pháp sau:
cin>>biến 1>>biến 2>>...>>biến n;
3.5 Thực hiện Input/Output
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
98
b. Nhập ký tự và chuỗi ký tự: Có thể dùng các phương thức sau (định nghĩa trong lớp istream) để nhập ký tự và chuỗi:
cin.get
cin.getline
cin.ignore
3.5 Thực hiện Input/Output
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
99
c. Phương thức get() có 3 dạng:
Dạng 1: int cin.get(); //Dùng để đọc vào một ký tự (kể cả khoảng trắng).Hàm trả về kiểu int (mã ascii).
Dạng 2: istream& cin.get(char &ch); // Thủ tục này dùng để đọc vào một ký tự (kể cả khoảng trắng) và đặt vào một biến kiểu char được tham chiếu bởi ch.
Dạng 3: istream& cin.get(char *str, int n, char d = ‘ ’); //Dùng để đọc vào một dãy ký tự (kể cả khoảng trắng) và đưa vào vùng nhớ do str trỏ tới. Quá trình đọc kết thúc khi xảy ra một trong hai tình huống sau:
Gặp ký tự giới hạn (cho trong d). Ký tự giới hạn mặc định là ‘ ’.
Đã nhận đủ (n-1) ký tự.
3.5 Thực hiện Input/Output
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
100
Chú ý:
Ký tự kết thúc chuỗi ‘’ được bổ sung vào cuối chuối nhận được.
Ký tự còn lại trên dòng nhập có thể làm trôi phương thức get(). Khắc phục dùng một trong hai cách sau:
Dùng get() dạng 1 hoặc dạng 2 để lấy ra ký tự trên dòng nhập trước khi dùng get (dạng 3).
Dùng phương thức ignore để lấy ra một số ký tự không cần thiết trên dòng nhập trước khi dùng get dạng 3. cin.ignore(n) ; // Lấy ra (loại ra hay loại bỏ) n ký tự trên dòng nhập.
3.5 Thực hiện Input/Output
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
101
d. Phương thức getline()
Phương thức getline để nhập vào một dãy ký tự từ bàn phím.
Cú pháp:
istream& cin.getline(char *str, int n, char d = ‘ ’);
3.5 Thực hiện Input/Output
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
102
So sánh cin>> và cin.getline:
cin>> chỉ có thể nhận những từ đơn (không nhận được cả câu) vì phương thức này sử dụng kí tự trống(bao gồm cả dấu cách, dấu tab và dấu xuống dòng) làm dấu hiệu kết thúc.
cin>> không cho phép chỉ định kích thước cho bộ đệm. Chương trình có thể chạy không ổn định nếu dữ liệu vào lớn hơn kích cỡ của mảng chứa nó.
Vì vậy khi muốn nhập vào các xâu kí tự nên sử dụng cin.getline thay vì cin >>
3.5 Thực hiện Input/Output
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
103
3.5.2 Output: Toán tử xuất <<
Cú pháp:
cout<Trong đó biểu thức biểu thị một giá trị cần xuất ra màn hình.
Để xuất nhiều giá trị trên một dòng lệnh, có thể viết như sau:
cout<3.5 Thực hiện Input/Output
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
104
3.6.1. Các phương thức định dạng
Phương thức int cout.width(); //cho biết độ rộng quy định hiện tại.
Phương thức int cout.width(int n); /*thiết lập độ rộng quy định mới là n và trả về độ rộng quy định trước đó.*/ (Độ rộng quy định n chỉ có tác dụng cho một giá trị xuất. Sau đó C++ lại áp dụng độ rộng quy định bằng 0 )
3.6 Thiết lập khuôn dạng - trình bày màn hình
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
105
3.6.1. Các phương thức định dạng
Phương thức int cout.precision(); Hàm này trả về giá trị số hiện tại để hiển thị một biến float.
Phương thức int cout.precision(int n); Hàm này thiết lập giá trị số hiện tại để hiển thị một biến float. (độ chính xác)
VD: float num = 314.15926535;
cout.precision( 5 );
cout << num;
Kết quả hiển thị: 314.16
3.6 Thiết lập khuôn dạng - trình bày màn hình
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
106
3.6.1. Các phương thức định dạng
Phương thức char cout.fill(); /*cho biết ký tự bù đầy dòng hiện tại đang được áp dụng.*/
Phương thức char cout.fill( char ch); /*quy định ký tự độn mới sẽ được dùng là ch và cho biết ký tự độn đang dùng trước đó. Ký tự độn được thiết lập sẽ có hiệu lực cho tới khi gặp một câu lệnh chọn ký tự độn mới.*/
3.6 Thiết lập khuôn dạng - trình bày màn hình
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
107
3.6.2. Cờ định dạng
Mỗi cờ định dạng chứa trong một bit.
Cờ có 2 trạng thái: Bật (on) – có giá trị 1, Tắt (off) – có giá trị 0.
3.6 Thiết lập khuôn dạng - trình bày màn hình
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
108
Nhóm 1 gồm các cờ căn lề:
ios::left ios::right ios::internal
Cờ ios::left: khi bật cờ ios::left thì giá trị in ra nằm bên trái vùng quy định, các ký tự độn nằm sau.
Cờ ios::right: khi bật cờ ios::right thì giá trị in ra nằm bên phải vùng quy định, các ký tự độn nằm trước. Mặc định cờ ios::right bật.
Cờ ios::internal: cờ ios::internal có tác dụng giống như cờ ios::right chỉ khác là dấu (nếu có) in đầu tiên.
3.6 Thiết lập khuôn dạng - trình bày màn hình
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
109
Nhóm 2 gồm các cờ định dạng số nguyên:
ios::dec ios::oct ios::hex
Khi ios::dec bật (mặc định): số nguyên được in dưới dạng cơ số 10
Khi ios::oct bật: số nguyên được in dưới dạng cơ số 8
khi ios::hex bật: số nguyên được in dưới dạng cơ số 16
3.6 Thiết lập khuôn dạng - trình bày màn hình
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
110

Nhóm 3 gồm các cờ định dạng số thực:
ios::fixed ios::scientific ios::showpoint

Mặc định : cờ ios::fixed bật (on) và cờ ios::showpoint tắt (off).
3.6 Thiết lập khuôn dạng - trình bày màn hình
Thái Nguyên, 08/2008
BG C++, Phùng Thị Thu Hiền, BM KTMT- ĐHKTCN
111
Khi ios::fixed bật và cờ ios::showpoint tắt thì số thực in ra dưới dạng thập phân, số chữ số phần phân (sau dấu chấm) được tính bằng độ chính xác n nhưng khi in thì bỏ đi các chữ số 0 ở cuối.
Ví dụ nếu độ chính xác n = 4 thì
Số thực -87.1500 được in: -87.15
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...

Người chia sẻ: Lý Thị Thu Hường
Dung lượng: | Lượt tài: 4
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)