1. Trang chủ
  2. » Luận Văn - Báo Cáo

Giáo trình lập trình c c++ cơ bản

176 1 0

Đ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 đề Giáo Trình Lập Trình C/C++ Cơ Bản
Trường học Đại Học Đà Nẵng
Chuyên ngành Sư Phạm
Thể loại Giáo Trình
Thành phố Đà Nẵng
Định dạng
Số trang 176
Dung lượng 3,19 MB

Nội dung

LỜI MỞ ĐẦU Theo khung chương trình đào tạo các ngành Công nghệ Thông tin ở các hệ Đại học và Cao đẳng, Lập trình C/C++ là một trong những kỹ năng quan trọng, làm nền tảng cho việc học t

Trang 1

ĐẠI HỌC ĐÀ NẴNG

TRƯỜNG ĐẠI HỌC SƯ PHẠM

Giáo trình

LẬP TRÌNH C/C++ CƠ BẢN

NHÀ XUẤT BẢN ĐÀ NẴNG

Trang 2

MỤC LỤC

Lời mở đầu 5

Chương 1 Các kiến thức cơ bản 7

1.1 Thông tin và biểu diễn thông tin trong máy tính 7

1.2 Các hệ đếm thông dụng 7

1.3 Chương trình máy tính 10

1.4 Ngôn ngữ lưu đồ 13

Bài tập 17

Chương 2 Cơ bản về ngôn ngữ lập trình C/C++ 19

2.1 Làm quen với môi trường lập trình C/C++ 19

2.2 Các thành phần cơ bản của ngôn ngữ C 20

2.3 Các kiểu dữ liệu cơ bản 26

2.4 Các lệnh xuất nhập dữ liệu 30

Bài tập 33

Chương 3 Các cấu trúc điều khiển 39

3.1 Cấu trúc if else 39

3.2 Cấu trúc switch 40

3.3 Các cấu trúc lặp 42

3.4 Câu lệnh break, continue và goto 47

Bài tập 50

Chương 4 Hàm 60

4.1 Khái niệm về hàm 60

4.2 Xây dựng hàm 60

4.3 Hàm đệ quy 63

Trang 3

Bài tập 69

Chương 5 Mảng 72

5.1 Mảng một chiều 72

5.2 Mảng hai chiều 75

5.3 Mối liên hệ giữa mảng và con trỏ 77

Bài tập 79

Chương 6 Chuỗi ký tự 89

6.1 Khái niệm 89

6.2 Khai báo và khởi gán chuỗi 89

6.3 Phép gán chuỗi 89

6.4 Nhập và xuất chuỗi 90

6.5 So sánh chuỗi 92

6.6 Một số hàm xử lý chuỗi 93

6.7 Một số ví dụ về xử lý chuỗi 96

6.8 Sử dụng lớp string của C++ 98

Bài tập 103

Chương 7 Kiểu cấu trúc 112

7.1 Định nghĩa cấu trúc 112

7.2 Định nghĩa cấu trúc với typedef 112

7.3 Khai báo biến cấu trúc 113

7.4 Khởi động các biến cấu trúc 114

7.5 Truy cập vào các thành phần của cấu trúc 115

Bài tập 119

Chương 8 Kiểu tập tin 127

8.1 Khai báo 127

8.2 Mở file 127

Trang 4

8.3 Đóng file 128

8.4 Đọc và ghi dữ liệu 128

8.5 Đọc/ghi file văn bản 133

Bài tập 137

Phụ lục 1 Sử dụng một số lớp của thư viện STL 144

1 Lớp vector 144

2 Lớp set 150

3 Lớp map 153

4 Lớp stack 158

5 Lớp queue 161

6 Thư viện algorithm 162

7 Lớp bitset 166

8 Sử dụng thư viện <bits/stdc++.h> 169

Phụ lục 2 Sử dụng trình gỡ lỗi trong dev C++ 171

Tài liệu tham khảo 175

Trang 5

LỜI MỞ ĐẦU

Theo khung chương trình đào tạo các ngành Công nghệ Thông

tin ở các hệ Đại học và Cao đẳng, Lập trình C/C++ là một trong

những kỹ năng quan trọng, làm nền tảng cho việc học tập và nghiên cứu các lĩnh vực Công nghệ Thông tin và Truyền thông như: Công nghệ phần mềm, Kỹ thuật mạng

Qua nhiều năm nghiên cứu và giảng dạy ở các trường Đại học Khoa học - Đại học Huế, Đại học Duy Tân, Đại học Sư phạm - Đại học Đà Nẵng và một số trường Đại học khác ở miền Trung và Tây

Nguyên, chúng tôi đã cố gắng đúc kết để biên soạn cuốn sách Giáo

trình lập trình C/C++ cơ bản nhằm đáp ứng nhu cầu học tập và

nghiên cứu của học sinh, sinh viên và những bạn đọc quan tâm đến lĩnh vực Công nghệ Thông tin và Truyền thông, giúp bạn đọc có một tài liệu tham khảo tốt khi làm quen với các kiến thức cũng như kỹ năng

cơ bản và tư duy về lập trình

Nội dung của cuốn sách này được chia thành 7 chương Các vấn

đề trong mỗi chương được trình bày ngắn gọn từ các kiến thức cơ bản đến cách xây dựng thuật toán và cài đặt mã lệnh Cuối mỗi chương là

hệ thống bài tập từ dễ đến khó, đối với các bài tập khó đều có gợi ý về cách giải Để thuận tiện cho việc thực hành, tất cả các mã nguồn trong giáo trình đều tương thích với trình biên dịch Dev C++ 5.X, đây cũng

là một trong những công cụ hỗ trợ lập trình gọn nhẹ, có thể biên dịch được trên cả hai hệ điều hành Windows lẫn Linux và được sử dụng khá phổ biến trong việc học tập và giảng dạy tại các trường học cũng như trong các kỳ thi Olympic Tin học sinh viên và ACM/IPCP Quốc tế Chân thành cảm ơn các đồng nghiệp ở các trường Đại học Sư phạm - Đại học Đà Nẵng, Đại học Bách Khoa - Đại học Đà Nẵng, Đại học Duy Tân, Đại học Khoa học - Đại học Huế đã giúp đỡ, đóng góp nhiều ý kiến quý báu để chúng tôi hoàn thiện nội dung giáo trình này

Trang 6

Chúng tôi cũng hy vọng sớm nhận được các ý kiến đóng góp, phê bình của bạn đọc về nội dung, chất lượng và hình thức trình bày

để giáo trình ngày một hoàn thiện hơn

Đà Nẵng, Tháng 12 Năm 2019

Thay mặt nhóm tác giả

Phạm Anh Phương

Trang 7

CHƯƠNG 1 CÁC KIẾN THỨC CƠ BẢN

1.1 Thông tin và biểu diễn thông tin trong máy tính

1.1.1 Khái niệm về thông tin

Bất kỳ một thông báo hay một tín hiệu gì có giá trị đối với con người đều được coi là thông tin (information) Việc trao đổi hay tiếp nhận thông tin mang tính chủ quan, tuỳ thuộc vào người tiếp nhận thông tin

Các thông tin chúng ta đưa vào máy tính xử lý còn có thể gọi là

dữ liệu (data) Máy tính có thể lưu trữ và xử lý nhiều loại thông tin như văn bản, hình ảnh, âm thanh, phim

1.1.2 Biểu diễn thông tin trong máy tính

Do máy tính được chế tạo bằng các linh kiện, vật liệu điện tử chỉ

có hai trạng thái, chẳng hạn: đóng/mở của mạch điện (On-Off), bật/tắt của công tắc, thông/hở của đèn điện tử hay đèn bán dẫn Vì vậy người

ta dùng hai ký tự 0 và 1 tương ứng với hai trạng thái đóng/mở để lưu trữ và xử lý thông tin

1.1.3 Các đơn vị đo thông tin

Mỗi giá trị 0 hoặc 1 gọi là bit (Binary digit), 8 bit lập thành 1 byte Ngoài ra người ta còn hay dùng các đơn vị sau để chỉ bội số của byte: 1KB = 210 byte = 1024 byte (Kilô byte)

1MB = 210 KB = 1024 KB (Mêga byte) 1GB = 210 MB = 1024 MB (Giga byte)

Hệ này còn gọi là hệ đếm cơ số 10: dùng 10 ký hiệu là 10 chữ số

do người A-rập phát minh ra: 0,1,2,3,4,5,6,7,8,9 để biểu diễn các số Đây là hệ đếm thường dùng trong cuộc sống hàng ngày

Ví dụ 1.1: (2019)10 = 2×10 3 + 0×10 2 + 1×10 1 + 9×10 0

Trang 8

Hệ này còn được gọi là hệ đếm cơ số 16 hay hệ Hecxa, dùng 16

ký hiệu: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F tương ứng với các giá trị thập phân từ 0 đến 15 để biểu diễn các số

Ví dụ 1.3: (F5A)16 = F×16 2 + 5×161 + A×16 0

= 15×256 + 5×16 + 10

= 3840 + 80 + 10 = (3930)10

1.2.4 Định nghĩa một hệ đếm tổng quát

Định nghĩa: Một số N trong hệ cơ số B, B nguyên lớn hơn 1,

được biểu diễn là: d n-1 d n-2 d 0 .d -1 d -m và giá trị của N được xác định theo công thức:

N = d n-1 B n-1 + d n-2 B n-2 + + d 1 B 1 + d 0 B 0 + d -1 B -1 + + d -m B -m

trong đó d i thỏa mãn: 0≤d i <B và n là số lượng các chữ số bên trái, còn m là số lượng các chữ số bên phải dấu phân chia giữa phần nguyên và phần lẻ

Ví dụ 1.4: Sau đây là giá trị các số được biểu diễn ở các hệ đếm

1.2.5 Các quy tắc chuyển đổi giữa các hệ đếm

Cách đổi một số từ hệ đếm bất kỳ sang hệ thập phân được thực hiện trực tiếp theo định nghĩa đã trình bày ở phần 1.2.5

Sau đây là các quy tắc chuyển đổi qua lại giữa các hệ đếm cơ số

Trang 9

Quy tắc 1: Muốn đổi một số từ hệ đếm này sang hệ đếm khác,

ta đổi phần nguyên sang phần nguyên và phần lẻ sang phần lẻ

Quy tắc 2: Muốn đổi một số thập phân nguyên sang số nhị phân

ta chia liên tiếp số nguyên đó cho 2, thương số của phép chia trước là

số bị chia của phép chia sau, cho đến khi nào được thương số bằng 0

Số nhị phân nhận được là các số dư của các phép chia được viết liên tiếp theo thứ tự ngược lại

Ví dụ 1.5: Đổi số 46 (hệ 10) sang hệ cơ số 2:

Quy tắc 3: Muốn đổi một số thập phân lẻ nhỏ hơn 1 sang số nhị

phân, ta thực hiện phép nhân liên tiếp với 2, phần lẻ của tích số trước

là số bị nhân của phép nhân sau, cho đến khi nào phần lẻ của tích số bằng 0 Số nhị phân nhận được là phần nguyên của các tích số viết theo thứ tự của chiều thuận

Chú ý: Trong quy tắc này quá trình nhân có thể không bao giờ

dừng (phần lẻ của tích số không bao giờ bằng 0), khi đó ta phải tiến hành việc làm tròn kết quả

Ví dụ 1.6: Đổi 0.25 (hệ 10) sang số hệ 2:

1.2.6 Các phép toán cơ bản trên hệ nhị phân

Phép cộng: Việc cộng hai số được tiến hành bằng cách cộng từng cặp

chữ số của chúng (bắt đầu từ cặp chữ số tận cùng bên phải) theo quy tắc:

Trang 10

0+0=0; 0+1=1; 1+0=1; 1+1=0 nhớ 1

Ví dụ 1.7:

Phép trừ: Việc trừ hai số được tiến hành bằng cách trừ từng cặp

chữ số của chúng (bắt đầu từ cặp chữ số tận cùng bên phải) theo quy tắc:

0-0=0; 0-1=1 nợ 1; 1-0=1; 1-1=0

Ví dụ 1.8:

Phép nhân: Việc nhân hai số được tiến hành bằng cách nhân

từng chữ số của số nhân với các chữ số của số bị nhân theo quy tắc:

Trang 11

1.3.1 Khái niệm về thuật toán

Khái niệm thuật toán dùng để chỉ phương pháp (method) hay cách thức để giải quyết vấn đề Thuật toán có thể minh họa bằng ngôn ngữ tự nhiên (natural language), bằng sơ đồ (flow chart) hoặc bằng mã giả (pseudo code) Trong thực tế thuật toán thường được minh họa bằng mã giả hoặc bằng ngôn ngữ lập trình nào đó

Thuật toán (algorithrm) là một dãy các câu lệnh (statement) chặt chẽ và rõ ràng xác định một trình tự các thao tác trên một số đối tượng nào đó sao cho sau một số hữu hạn bước thực hiện ta đạt được kết quả mong muốn

Ví dụ 1.11: Thuật toán giải phương trình bậc nhất ax + b = 0

- Bước 4: Thông báo nghiệm của phương trình là -b/a

- Bước 5: Dừng thuật toán

1.3.2 Các đặc trưng của thuật toán

1.3.2.1 Tính xác định

Tính xác định đòi hỏi, ở mỗi bước của thuật toán, các thao tác đều phải rõ ràng, không gây ra sự nhập nhằng, lẫn lộn Nói khác đi, trong cùng một điều kiện, hai bộ xử lý (người hoặc máy) thực hiện cùng một bước của thuật toán thì phải cho cùng một kết quả Hơn nữa, các bộ xử lý thuật toán không cần phải hiểu được ý nghĩa của các bước thao tác này

Tính xác định của thuật toán rất quan trọng, nhờ nó mà ta có thể giao cho các thiết bị tự động thực hiện các chức năng của thuật toán, làm một số công việc thay thế cho con người

Trang 12

1.3.2.3 Tính đúng đắn

Yêu cầu bắt buộc của thuật toán là tính đúng đắn: với dữ liệu đầu vào cho trước, sau một số hữu hạn các bước thực hiện sẽ dừng và cho kết quả đầu ra đúng

Một khía cạnh khác của tính hiệu quả là tính hiện thực Một bài toán dù đã có thuật toán nhưng nếu ta không thể có đủ thời gian để đi đến kết quả cuối cùng thì thuật toán đó cũng thiếu tính hiện thực Vì vậy cần lựa chọn những thuật toán nào mà thời gian thực hiện của nó

là chấp nhận được

1.3.3 Các đại lượng vào (input) và ra (output)

Một thuật toán có thể có nhiều đại lượng vào mà ta thường gọi

là dữ liệu vào

Sau khi dừng thuật toán thì tùy theo chức năng của thuật toán mà

ta có thể thu được một số đại lượng ra xác định Các đại lượng ra cũng thường được gọi là dữ liệu ra hay kết quả

1.3.4 Các phương pháp biểu diễn thuật toán

Một thuật toán được diễn đạt rõ ràng sẽ bảo đảm cho bộ xử lý

Trang 13

mong muốn Có công cụ biểu diễn thuật toán cần quan tâm: Ngôn ngữ

mô tả thuật toán và bộ xử lý thực hiện thuật toán đã được diễn tả bằng ngôn ngữ nói trên

Do bộ xử lý được dùng để thực hiện thuật toán đã được diễn tả theo ngôn ngữ nên nó phải hiểu được ngôn ngữ diễn tả thuật toán Theo cách tiếp cận này, mỗi thuật toán sẽ được mô tả dưới ngôn ngữ thuật toán, dưới dạng một dãy các lệnh Bộ xử lý sẽ thực hiện các lệnh theo một trật tự xác định cho đến khi gặp một lệnh dừng

Có nhiều ngôn ngữ biểu diễn thuật toán khác nhau, cụ thể:

- Ngôn ngữ tự nhiên (ngôn ngữ liệt kê các bước)

- Ngôn ngữ lưu đồ (sơ đồ khối)

- Ngôn ngữ phỏng trình (mã giả)

- Ngôn ngữ lập trình

Phần tiếp theo sẽ giới thiệu công cụ biểu diễn thuật toán là ngôn ngữ lưu đồ Biểu diễn thuật toán bằng ngôn ngữ lập trình sẽ được giới thiệu sau khi học về ngôn ngữ lập trình C/C++

1.4 Ngôn ngữ lưu đồ

Ngôn ngữ lưu đồ hay sơ đồ là công cụ trực quan để diễn đạt các thuật toán Nếu biết sử dụng khéo léo ngôn ngữ này, ta có thể tránh được những đoạn giải thích bằng lời có thể dẫn đến sự nhập nhằng về ngữ nghĩa, đồng thời biểu diễn bằng lưu đồ sẽ giúp ta có được cái nhìn tổng quan hơn về toàn cảnh của quá trình xử lý của một thuật toán cho trước Lưu đồ là một hệ thống những nút có hình dạng khác nhau, thể hiện các chức năng khác nhau của chúng và được nối với nhau bởi các cung Cụ thể, chúng được tạo bởi 4 thành phần chủ yếu sau đây:

1.4.1 Nút giới hạn

Được biểu diễn bởi hình ôvan, trong đó có ghi chữ: BẮT ĐẦU hoặc KẾT THÚC Chúng còn được gọi là các nút đầu và nút cuối của lưu đồ

Trang 14

1.4.5 Đường đi của thuật toán

Là những đường có hướng nối từ nút này đến nút khác của lưu đồ

Hoạt động của thuật toán dưới dạng lưu đồ được bắt đầu từ nút đầu tiên Sau khi thực hiện các thao tác hoặc kiểm tra điều kiện ở mỗi nút thì bộ xử lý sẽ đi theo một cung để đến nút khác cho đến khi gặp nút kết thúc thì dừng thuật toán

Ví dụ 1.12: Vẽ sơ đồ khối để giải phương trình bậc nhất a.x+b=0

;

a b

x

Trang 15

Ví dụ 1.13: Vẽ sơ đồ khối để giải phương trình bậc hai

ax2 + bx + c = 0 (a ≠ 0)

Ví dụ 1.14: Vẽ sơ đồ khối để tính tổng S = 1 + 2 + … + n

; 4

; 2 2 1

a

b x

a

b x

Trang 16

Ví dụ 1.15: Vẽ sơ đồ khối để tìm số lớn nhất trong ba số a, b, c

Trang 17

BÀI TẬP Bài 1.1 Chuyển các sau đây từ hệ thập phân sang hệ nhị phân, hệ thập lục:

 Hướng dẫn: Sau đây là cách chuyển đổi nhanh giữa hệ nhị phân

và hệ thập lục

Đối từ hệ nhị phân sang thập lục: Tách và chuyển từng nhóm

4 chữ số nhị phân (từ phải sang trái) sang hệ thập lục Ví dụ: (10.1110.0110)2 = (2E6)16 vì (0110)2 = (6)16, (1110)2 = (E)16

và (10)2 = (2)16 (từ phải sang trái)

Đối từ hệ thập lục sang nhị phân: Đổi từng chữ số ở hệ thập

lục sang số nhị phân 4 bit rồi ghép chúng lại theo thứ tự từ trái sang phải Ví dụ: (2E6)16 = (0010.1110.0110)2 vì (2)16 = (0010)2, (E)16 = (1110)2 và (6)16 = (0110)2

Bài 1.5 Vẽ sơ đồ khối để giải các bài toán sau:

1) Nhập vào một số nguyên dương n và kiểm tra n là số chẵn hay

Trang 18

6) Kiểm tra số tự nhiên N có phải là số nguyên tố hay không

Trang 19

CHƯƠNG 2

CƠ BẢN VỀ NGÔN NGỮ LẬP TRÌNH C/C++

Ngôn ngữ lập trình C do Dennis Ritchie đề xuất vào năm 1972 tại phòng thí nghiệm Bell Telephone, mục đích ban đầu của ngôn ngữ

C là để thiết kế hệ điều hành UNIX

C là ngôn ngữ lập trình mạnh và linh hoạt nên đã được sử dụng khá phổ biến Tuy nhiên, do có nhiều tổ chức khác nhau sử dụng các phiên bản C khác nhau nên đã có nhiều sự khác biệt trong các trình biên dịch của C gây khó khăn cho nhiều người lập trình Để khắc phục vấn

đề này, năm 1983 Viện Tiêu chuẩn Quốc gia Hoa Kỳ (ANSI) đã đưa ra một định nghĩa chuẩn cho ngôn ngữ C, gọi là ANSI Standard C

Ngôn ngữ lập trình C được đánh giá cao nhờ các đặc điểm sau:

- C là một ngôn ngữ mạnh và linh hoạt Hạn chế duy nhất của C

là sự hạn chế trong tư duy trừu tượng của chính người lập trình Ngôn ngữ C được sử dụng để thiết kế các hệ điều hành, các bộ soạn thảo văn bản, đồ hoạ, trang tính, và đôi khi làm chương trình dịch cho các ngôn ngữ khác

- C là ngôn ngữ phổ thông, được nhiều nhà lập trình chuyên nghiệp thích dùng

- C là ngôn ngữ ngắn gọn, nó chỉ chứa một số các từ khóa (keyword) làm cơ sở để tạo ra các câu lệnh cho ngôn ngữ

C++ là sự mở rộng của C, nó cung cấp thêm một số khả năng cho phép lập trình hướng đối tượng Các ứng dụng được viết theo hướng đối tượng bao gồm một tập các đối tượng tương tác lẫn nhau, C++ cho phép người lập trình định nghĩa "Class" để đặc tả các đối tượng khi xây dựng ứng dụng

2.1 Làm quen với môi trường lập trình C/C++

2.1.1 Các bước cơ bản khi lập một chương trình C/C++

Bước 1: Khởi động trình soạn thảo

Bước 2: Soạn thảo chương trình

Bước 3: Dịch chương trình, nếu có lỗi thì phải sửa lỗi

Bước 4: Chạy chương trình

Trang 20

2.1.2 Cấu trúc chung của một chương trình C/C++

#include <thư viện.h> //khai báo các thư viện [Khai báo các hằng biến, biến, kiểu, hàm ] int main() //hàm chính

Trang 21

asm auto break case

char const continue default

do double else enum

extern far float for

goto huge if int

long near pascal register

return short static struct

signed sizeof switch typedef

union unsigned void while

Chú ý: Người lập trình không được phép đặt tên trùng với tên của các từ khóa

Trang 22

/* Chức năng của hàm này là

tính tổng của n số tự nhiên đầu tiên*/

Các kiểu dữ liệu này sẽ được giới thiệu chi tiết ở mục 2.3

2.2.3.2 Các kiểu dữ liệu có cấu trúc

- Kiểu mảng

- Kiểu chuỗi (string)

- Kiểu cấu trúc (struct)

- Kiểu file

Các kiểu dữ liệu này sẽ được giới thiệu chi tiết ở các chương

Trang 23

2.2.4 Biến

Biến là một đại lượng dùng để chứa nhiều giá trị khác nhau trong một chương trình Chúng được lưu trữ ở bộ nhớ trong tại một địa chỉ nào đó

- Khi đặt tên biến không được đặt trùng tên với các từ khóa của C

- Tên biến trong C có sự phân biệt giữa chữ hoa và chữ thường

Ví dụ: aBc, abc hay ABC là các tên biến khác nhau

- Độ dài mặc định của tên biến là 32

- Các tên hằng, tên mảng, tên hàm, tên kiểu, tên con trỏ, được đặt theo quy định của tên biến

- Để thuận tiện trong việc lập trình, các tên biến chúng ta nên đặt

in thường (lower_case), các tên hằng nên đặt in hoa (UPPER_CASE), các tên kiểu, tên hàm nên đặt theo dạng in hoa ký tự đầu (Title_Case)

2.2.4.2 Khai báo biến

Mọi biến đều phải được khai báo trước khi sử dụng Việc khai báo biến thực hiện theo cú pháp sau đây:

<Tên_kiểu_dữ liệu> <Danh_sách_biến>;

Ví dụ 2.4:

int n; // khai báo biến n kiểu số nguyên

float a, b; // khai báo hai biến a,b kiểu số thực

Biến có thể được khai báo ở mọi nơi trong chương trình, phạm

vi ảnh hưởng của biến tùy thuộc vào vị trí của nó trong chương trình

Trang 24

Cú pháp: const <kiểu> <tên_hằng> = <giá_trị>;

hoặc #define <Tên_hằng> <giá_trị>

Câu lệnh #define là câu lệnh tiền xử lý nên chỉ có thể đặt ở ngoài

các hàm ở đầu chương trình hoặc bắt đầu của một khối

Trang 25

- Toán hạng: gồm các biến, các hằng, các hàm (lời gọi hàm)

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

Ví dụ 2.8: Các dãy biểu diễn dưới đây là các biểu thức

2.2.7.1 Câu lệnh đơn giản

- Câu lệnh gán ( = ): <Tên biến> = <Biểu thức>;

- Các lệnh xuất nhập dữ liệu: cin/scanf, cout/printf

Trang 26

2.3 Các kiểu dữ liệu cơ bản

int isalpha(char c): Kiểm tra ký tự c có phải là ký tự chữ cái

hay không

int isdigit(char c): Kiểm tra ký tự c có phải là ký tự chữ số

hay không

int islower(char c): Kiểm tra ký tự c có phải là ký tự chữ cái

thường hay không

int isupper(char c): Kiểm tra ký tự c có phải là ký tự chữ cái

hoa hay không

double double (negative)

Trang 27

Kiểu float có độ chính xác là 6 chữ số sau dấu chấm thập phân Kiểu double có độ chính xác là 15 chữ số sau dấu chấm thập phân

Sau đây là một số hàm số học thông dụng (sử dụng thư viện <math.h>):

 Hàm trả về trị tuyệt đối của x: |x|

o double log(double x): logarit tự nhiên của x

o double log10(double x): logarit cơ số 10 của x

 Hàm lũy thừa: xy

o double pow(double x,double y)

2.3.4 Kiểu logic (bool)

Chỉ có hai giá trị là true và false

2.3.5 Định nghĩa kiểu dữ liệu mới

Cú pháp: typedef <Tên_kiểu> <Tên_kiểu_định_nghĩa>;

Ví dụ 2.9: typedef int NGUYEN; Với định nghĩa này thì các khai báo sau là tương đương:

int n;

NGUYEN n;

2.3.6 Các phép toán

a) Các phép toán số học

 Các phép toán hai ngôi

% Lấy phần dư (đối với kiểu nguyên) a % b

Chú ý: int / int int (2/3  0; nhưng (float) 2/3  0.6666667)

Trang 28

 Phép toán một ngôi: Phép toán - (âm) đứng trước một toán

hạng, chỉ rõ là trả về giá trị trái dấu với toán hạng

- Các phép toán >, >=, <, <= là cùng thứ tự ưu tiên, hai phép toán

==, != cùng thứ tự ưu tiên nhưng thấp hơn thứ tự ưu tiên của bốn phép toán đầu

và 0 nếu sai Ý nghĩa của các phép toán được cho bởi các bảng sau:

Trang 29

d) Các phép toán xử lý bit (BitWise)

~ Lấy phần bù theo bit ~a

& Phép AND theo bit a & b

| Phép OR theo bit a | b

^ Phép XOR theo bit a ^ b

<< Dịch trái a << b

>> Dịch phải a >> b

Chú ý: Các phép toán xử lý bit chỉ thực hiện trên các toán hạng

có kiểu dữ liệu là số nguyên như: char, int, long (kể cả signed hoặc

e) Phép toán điều kiện 3 ngôi ( ? : )

Cú pháp: biểu_thức_logic ? biểu_thức_1 : biểu_thức_2 Diễn giải: Nếu biểu_thức_logic đúng (khác 0) thì kết quả của

phép toán là giá trị của biểu_thức_1, ngược lại kết quả phép toán là giá trị của biểu_thức_2

Kiểu của phép toán điều kiện là kiểu lớn nhất trong các kiểu của

biểu_thức_1 và biểu_thức_2

Phép toán này thực chất là cách viết tắt của cấu trúc if else (sẽ

được trình bày ở chương sau)

Như vậy, câu lệnh:

z = ( biểu_thức_logic ? biểu_thức_1 : biểu_thức_2 );

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

if (biểu_thức_logic) z = biểu_thức_1;

Trang 30

Ví dụ 2.11: z = ((x < y) ? (x) : (y));

Câu lệnh này sẽ gán giá trị nhỏ nhất của x và y cho biến z

2.4 Các lệnh xuất nhập dữ liệu

2.4.1 Xuất dữ liệu ra màn hình với hàm printf()

Cú pháp của hàm printf() như sau:

int printf( const char *format [,arg, ]);

Chuỗi format có dạng: %[flags][width][.prec][l,L]<type>

 flags: nếu không có: dữ liệu được in ra canh phải

- : dữ liệu được in ra canh trái

+ : dữ liệu được in ra có dấu phụ

blank: dữ liệu được in ra có dấu âm, nếu là dương thì dấu + được thay bằng khoảng trắng

# : đổi dạng biểu diễn (chuyển đúng kiểu với mã đổi kiểu ở đối số sau)

 width: chỉ độ rộng tối thiểu để in dữ liệu Nếu số chữ số của

dữ liệu bé hơn width thì các khoảng thừa được lắp đầy bởi các khoảng trắng Nếu width là 0n: tương tự như trên nhưng thay vì khoảng trắng, bây giờ là số 0

 prec: dạng số thực Số con số có ý nghĩa sau dấu chấm thập phân

 [l,L]: hai đối số để đổi dữ liệu thành long, L dùng cho kiểu double

 type: mã định dạng, được liệt kê bởi bảng sau:

int (decimal)

float, double (dấu tĩnh)

char chuỗi ký tự

Ví dụ 2.12: Với khai báo:

int a=5, b=7;

thì lệnh:

printf(“Tong cua %d va %d = %d”,a,b,a+b);

sẽ in ra màn hình

Trang 31

2.4.2 Nhập dữ liệu từ bàn phím với hàm scanf()

Cú pháp của hàm scanf() như sau:

int scanf(const char *format [,adds, ]);

Chuỗi format có dạng: %[width][l,L]<type>

adds có dạng như sau &<biến> Các đối số này là địa chỉ các biến

tương ứng với chuỗi định dạng

Phép toán lấy địa chỉ: & để lấy địa chỉ của một biến Giả sử x là biến thì &x địa chỉ của biến x

Ví dụ 2.13: Nhập dữ liệu cho hai biến x và y:

2.4.3 Xuất/nhập dữ liệu trong C++

Đối với C++, ta có thể xuất/nhập dữ liệu với hai phương thức sau

(cung cấp bởi thư viện <iostream.h>):

Trang 32

Để định dạng số thực hiển thị ra màn hình với p chữ số sau dấu

chấm thập phân, ta sử dụng đồng thời các hàm sau (được cung cấp bởi

Trang 33

BÀI TẬP Bài tập 2.1: (STAMGIAC) Viết chương trình nhập vào độ dài hai

cạnh của tam giác và góc giữa hai cạnh đó, sau đó tính và in ra màn hình diện tích của tam giác

Input: a, b và theta (theo độ)

Output: S là diện tích tam giác, làm tròn đến 2 chữ số thập phân

* Bài giải mẫu: (dùng để chấm bài tự động)

Đặt tên file đúng với mã đề bài (STAMGIAC.CPP)

Xuất nhập vừa đủ, không thừa

11 cout<<fixed<<setprecision(2); //Lấy 2 chữ số thập phân

12 cout<<s; //Xuất ra vừa đủ, không thừa

13 return 0;

14 }

Trang 34

Bài tập 2.2: (CANBACN) Viết chương trình tính n

Bài tập 2.3: (SWAP) Viết chương trình nhập vào 2 số nguyên a, b

Sau đó hoán đổi giá trị của 2 số đó:

a/ Cho phép dùng biến trung gian

b/ Không được phép dùng biến trung gian

Bài tập 2.5: (HINHHOP) Biết diện tích 3 mặt của một hình hộp chữ

nhật: S1, S2 và S3 Viết chương trình tính tổng chu vi 3 mặt của hình hộp chữ nhật

Input: Các số nguyên S1, S2, S3 ≤ 106

Trang 35

Bài tập 2.8: (BEHIND) Cho chữ cái hoa A và số nguyên dương N≤10

In ra chữ cái hoa đứng sau chữ cái A N đơn vị (chú ý: các chữ cái xếp theo vòng tròn, vì vậy nếu A = ‘Z’ và N = 1 thì đáp án là ‘A’)

Input: Chữ cái hoa A và số nguyên dương N

Output: Chữ cái thỏa mãn đề bài

Trang 36

Bài tập 2.11: (DISTANCE) Cho 2 điểm A(x1,y1) và B(x2,y2) Tính

khoảng cách giữa A và B (làm tròn đến hai chữ số thập phân)

Bài tập 2.13: (SCALAR) Cho 2 vector 𝑎⃗ =(a1,a2) và 𝑏⃗⃗ =(b1,b2)

Tính tích vô hướng của hai vector (làm tròn đến hai chữ số thập phân)

Input: a1, a2, b1, b2 ≤ 106

Output: S là tích vô hướng

Trang 37

Ví dụ:

Bài tập 2.15: (MIDPOINT) Cho 2 điểm A(x1,y1) và B(x2,y2) Tìm

tọa độ trung điểm M của AB (làm tròn đến hai chữ số thập phân)

Bài tập 2.16: (LINEAR) Phương trình tổng quát của đường thẳng có

dạng Ax + By + C = 0 (A và B không đồng thời bằng 0) Cho 2 điểm P(x1,y1) và Q(x2,y2) Tìm phương trình đường thẳng qua PQ (làm tròn đến hai chữ số thập phân)

Input: A1, B1, C1, A2, B2, C2 ≤ 106

Output: cos(D1,D2)

Trang 38

Bài tập 2.19: (TAMDTRON) Cho 3 điểm A(x1,y1), B(x2,y2) và

C(x3,y3) Tìm tọa độ tâm đường tròn ngoại tiếp tam giác ABC (làm tròn đến hai chữ số thập phân)

Input: x1, y1, x2, y2, x3, y3 ≤ 106

Output: x, y là tọa độ tâm của đường tròn

Ví dụ:

0 0 0 2 2 0 1.00 1.00

Bài tập 2.20: (MAXIMA) Cho số nguyên dương n ≤ 106 Tách n thành

2 số a, b sao cho tích P=a*b2 đạt cực đại

Trang 39

CHƯƠNG 3 CÁC CẤU TRÚC ĐIỀU KHIỂN

Trang 40

Ví dụ 3.2: Viết chương trình nhập vào ba số nguyên a, b, c Tìm và in

case value_1 : [ S 1 ]

case value_2 : [ S 2 ]

Nếu <expression> có giá trị bằng với một value_k nào đó thì chương

trình sẽ chuyển điều khiển đến case value_k và thực hiện từ lệnh S k

Ngày đăng: 03/04/2024, 07:34

w