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

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

Đ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

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

Trang 3

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 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) 1TB = 210 GB = 1024 GB (Tera byte)

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

Hệ đếm được hiểu như là các ký hiệu và quy tắc sử dụng tập ký hiệu đó để biểu diễn và xác định giá trị của các số

1.2.1 Hệ thập phân

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×103 + 0×102 + 1×101 + 9×100

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×162 + 5×161 + A×160 = 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à: dn-1dn-2 d0.d-1 d-m và giá trị của N được xác định theo công thức:

N = dn-1Bn-1 + dn-2Bn-2 + + d1B1 + d0B0 + d-1B-1+ + d-mB-m

trong đó di thỏa mãn: 0≤di<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

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ả

- Bước 3: Nếu b = 0 thì thông báo phương trình đã cho có vô số nghiệm, ngược lại thì thông báo phương trình vô nghiệm Chuyển sang bước 5

- 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.2 Tính kết thúc (tính dừng)

Thuật toán bao giờ cũng phải dừng sau một số hữu hạn bước thực hiện

Trong thực hành khi xây dựng các thuật toán có chứa các hành động lặp đi lặp lại thì phải nêu điều kiện chấm dứt các vòng lặp để tránh tình trạng lặp lại vô hạn lần các thao tác lặp đó

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

1.3.2.4 Tính phổ dụng

Thuật toán thường được xây dựng không chỉ để giải một bài toán riêng lẻ mà phải giải được một lớp các bài toán có cùng cấu trúc với dữ liệu đầu vào khác nhau và luôn luôn dẫn đến kết quả mong muốn

1.3.2.5 Tính hiệu quả

Tính hiệu quả được đánh giá dựa trên một số tiêu chuẩn nhất định như khối lượng tính toán, thời gian và không gian được sử dụng bởi thuật toán

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

Trang 15

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

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

Thực hiện các phép tính a + b; a - b; a*b, a/b

 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 số lẻ

2) Tìm số nhỏ nhất của bốn số: a, b, c, d

3) Nhập vào N số nguyên từ bàn phím và in ra tổng của các số vừa được nhập vào

4) Nhập vào các số nguyên cho đến khi nào gặp số 0 thì kết thúc Hãy đếm xem có bao nhiêu số chẵn vừa được nhập vào 5) Đếm tất cả các ước số của số nguyên dương N

Trang 18

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

Ý tưởng:

N là số nguyên tố nếu N có 2 ước số nào từ 1  N Từ định nghĩa này ta đưa ra giải thuật:

- Đếm số ước số của N từ 1  N lưu vào biến d

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 ]

Trang 21

Từ khóa là những từ ngôn ngữ lập trình dành riêng để phục vụ cho mục đích của nó Đối với ngôn ngữ C, các từ khóa được viết bằng chữ thường Sau đây là các từ khóa của ngôn ngữ C:

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 đó

2.2.4.1 Tên biến

Mỗi biến khi sử dụng trong chương trình đều phải được đặt tên theo quy định như sau:

- Tên biến là một dãy ký tự bao gồm: chữ cái, chữ số và dấu gạch chân ( _ )

- Ký tự đầu tiên phải là chữ cái hoặc ký tự _

Chú ý:

- 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

int a = 65, b = 67; // khởi gán giá trị đầu cho a và b float x = 6.5, y; // khởi gán giá trị đầu cho x

- Lấy địa chỉ của biến: Mỗi biến khi được khai báo sẽ được cấp phát một vùng ở bộ nhớ trong, vùng nhớ đó có kích thước là kích thước của kiểu dữ liệu được khai báo, gồm một số byte liên tiếp Để lấy địa chỉ của biến (tức là lấy địa chỉ của vùng nhớ chứa giá trị của biến) ta dùng phép toán & , cú pháp như sau:

&<tên_biến> 2.2.5 Hằng

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

2.2.5.1 Khai báo hằng

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

Biểu thức là một công thức tính toán bao gồm một dãy các toán hạng được kết nối với nhau bởi các toán tử, có thể sử dụng các dấu ngoặc đơn ( ), và cho kết quả là một giá trị gọi là giá trị của biểu thức

- 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 2.3.1 Kiểu char

Kiểu char có kích thước 1 byte (8 bit), có thể dùng để biểu diễn

1 ký tự trong bảng mã ASCII

Có hai kiểu char là signed char (char có dấu) và unsigned char (char không dấu) Kiểu signed char biểu diễn một số nguyên từ -128 đến 127 và unsigned char biểu diễn số nguyên có giá trị từ 0 đến 255 Một số hàm cơ bản trên kiểu char (sử dụng thư viện <ctype.h>):

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

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

- Kết quả của phép toán quan hệ luôn luôn là một số nguyên: 1 nếu đúng và 0 nếu sai

- 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

Kết quả của phép toán logic trả về một trong hai giá trị: 1 nếu đúng 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:

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

Câu lệnh trên sẽ có hiệu lực đối với tất cả các phép toán xuất tiếp theo cho đến khi gặp một câu lệnh định dạng mớ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

Ví dụ:

Bài tập 2.6: (LOWER) Đổi chữ cái in hoa ra chữ cái thường tương ứng Input: Chữ cái hoa

Output: Chữ cái thường tương ứng

Ví dụ:

Bài tập 2.7: (UPPER) Đổi chữ cái thường ra chữ cái in hoa tương ứng Input: Chữ cái thường

Output: Chữ cái in hoa tương ứng

Ví dụ:

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.12: (VECTOR) Cho vector 𝑎⃗ =(a1,a2) Tính modul của vector theo công thức sau 22

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

Bài tập 2.17: (PTOLINE) Cho đường thẳng : Ax + By + C = 0 và điểm M(x0;y0) Tính khoảng cách từ M đến đường thẳng  (làm tròn

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

Các câu lệnh sau if hoặc else có thể là đơn hoặc phức hợp Nếu các câu lệnh if lồng nhau trong phạm vi một khối thì else sẽ đi với if

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

<expression> phải có kết quả là một trong số các giá trị nguyên value_1, , value_n khác nhau

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 Sk

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

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan