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

Kỹ thuật lập trình cơ sở EHOU

26 5 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ới thiệu Về Ngôn Ngữ Lập Trình C/C++
Trường học Trung tâm Đào tạo E-Learning
Chuyên ngành Ngôn ngữ lập trình C/C++
Thể loại Bài
Định dạng
Số trang 26
Dung lượng 564,52 KB

Nội dung

Bài này cung cấp các khái niệm cơ bản như khái niệm về lập trình, khái niệm về ngôn ngữ lập trình, phân loại ngôn ngữ lập trình, khái niệm về thuật toán, cách trình bày thuật toán. Đặc biệt, cung cấp cho người học làm quen với việc thực hiện từng bước để giải một bài toán rất chặt chẽ, logic dưới dạng chạy từng bước của thuật toán đề ra. Điều này tạo cho người mới học lập trình phong cách tư duy logic từng bước rất chặt chẽ trong việc giải quyết các bài toán trên máy tính. Trong bài cũng yêu cầu người học, bằng những hiểu biết của mình, tự đưa ra các thuật toán để giải quyết một số bài toán đơn giản thông thường.

Trang 1

BÀI 2: GIỚI THIỆU VỀ NGÔN NGỮ LẬP TRÌNH C/C++

Mục đích:

Bài này giới thiệu các vấn đề cơ bản về ngôn ngữ lập trình C/C++ Bắt đầu từ các khái niệm đơn giản như tập ký hiệu, tên/từ khóa, câu lệnh, khối lệnh cho đến các quy tắc viết lệnh, viết chương trình Một khái niệm rất quan trọng xuyên suốt quá trình môn học là biến nhớ, cách khai báo và các vấn đề sử dụng Trọng tâm là các kiểu dữ liệu, phép toán và cách viết biểu thức Các quy tắc viết lệnh nhập, lệnh in dữ liệu và một số lệnh đơn giản cũng được trình bày trong bài này Trong bài, mỗi vấn đề đều có các ví dụ minh họa về cách viết lệnh, chỉ ra các trường hợp sử dụng và bài tập nhằm nêu bật được vai trò của từng vấn đề trong lập trình C/C++

2.1 Các thành phần cơ bản của ngôn ngữ lập trình

Chúng ta thấy trong ngôn ngữ tự nhiên như tiếng Anh hay tiếng Việt được cấu tạo từ các phần tử nhỏ nhất, cơ bản nhất là bảng các chữ cái và các dấu Bằng các quy tắc, cú pháp và ngữ nghĩa để ghép chúng lại với nhau tạo nên các từ, sau đó ghép các

từ với nhau tạo nên câu, đoạn văn và cuối cùng là tạo nên bài văn

Ngôn ngữ lập trình cũng vậy, được cấu tạo từ những phần tử cơ bản được gọi là bảng ký hiệu Một chương trình phần mềm được hình thành từ các ký hiệu này bằng cách áp dụng các quy tắc của ngôn ngữ lập trình được áp dụng và dựa trên các quy trình đã được thiết kế cho chương trình

Sau đây là các khái niệm cơ bản trong ngôn ngữ lập trình nói chung và các quy tắc áp dụng trong ngôn ngữ lập trình C/C++

Trang 2

2.1.1 Bảng ký hiệu

Như đề cập ở trên, bảng ký hiệu gồm các phần tử cơ bản nhất của một ngôn ngữ lập trình Hầu hết các ngôn ngữ đều sử dụng bảng ký hiệu là các chữ cái, chữ số và các dấu trong ngôn ngữ tự nhiên (tiếng Anh) Điều này sẽ làm đơn giản đối với người lập trình trong khi áp dụng để viết chương trình

Cụ thể với ngôn ngữ C/C++, bảng ký hiệu được sử dụng bao gồm:

- Nhóm các chữ cái: chữ in hoa A,B,C, ,Z và chữ in thường a,b,c, ,z

Trong các ngôn ngữ lập trình, tên được dùng để định danh các thành phần trong chương trình như tên biến, tên hàm, tên hằng, tên con trỏ,… sẽ đề cập chi tiết ở các phần sau

 Ví dụ:

Baitap1, Hanoi2, Viet3nam là những tên đúng

1Baitap, Ha noi, Viet%nam là những tên sai, vì chữ số đứng đầu hay sử dụng dấu cách, ký hiệu đặc biệt %

Có một nhóm các tên do ngôn ngữ lập trình quy định để đưa ra các quy tắc viết lệnh trong chương trình được gọi là từ khóa (keywords) Người lập trình không được đặt các tên trong chương trình trùng với hệ thống từ khóa của ngôn ngữ lập trình

Trang 3

Trong C/C++, nhóm các từ khóa được giới thiệu trong bảng sau (ý nghĩa của chúng sẽ được trình bày chi tiết và cách áp dụng ở các phần tiếp theo)

assume enum multiple_inheritanc

e

switch

auto except single_inheritance template

based explicit virtual_inheritance this

declspec inline reinterpret_cast using declaration,

using directive

Trang 4

dynamic_cast long stdcall while

Ngoài ra, có một nhóm các tên được cung cấp bởi môi trường lập trình thông qua thư viện được gọi là tên chuẩn Nhóm này được dùng để định danh các thành phần có sẵn trong hệ thống các thư viện, phục vụ cho việc khai thác và sử dụng thư viện trong chương trình

 Ví dụ về một số tên chuẩn trong C/C++

cout, cin, scanf, printf, gets, getch, fstream

2.1.3 Các kiểu dữ liệu

Chúng ta đã biết máy tính không thể chứa hết mọi thứ thông tin trong thực tế, cũng như vậy trong các ngôn ngữ lập trình chỉ cung cấp một kiểu dữ liệu nguyên thủy (primitive types) Trong C/C++ có các kiểu cơ bản sau để người lập trình có thể sử dụng trong việc biểu diễn, tính toán và xử lý thông tin trong chương trình

a) Kiểu ký tự: dùng để chứa ký tự trong bảng ASCII

- Tên kiểu : char, unsigned char

- Miền giá trị : một trong 256 ký tự thuộc bảng mã ASCII

Trang 5

 Ví dụ: cho biểu thức sau,

c) Kiểu lôgíc:

Biểu diễn giá trị đúng/sai trong chương trình,

- Tên kiểu : bool

- Miền giá trị : true, false

- Độ lớn : 1 byte

Tuy nhiên, trong ngôn ngữ C/C++ cũng xem xét số nguyên như là kiểu lôgíc với giá trị 0 tương ứng sai, giá trị 1 hoặc khác 0 tương ứng đúng

2.1.4 Khái niệm về hằng và biến nhớ

a) Đại lượng hằng trong chương trình

Trang 6

Hằng (consts) là một đại lượng không thể thay đổi giá trị trong toàn bộ chương trình Nó có thể là số nguyên, số thực, ký tự hoặc chuỗi ký tự Để biểu diễn các giá trị hằng, tùy theo từng ngôn ngữ, nhưng trong C/C++ ta viết như sau:

- Đối với số nguyên: chúng ta viết bình thường như trong toán học (các chữ số liền nhau), ví dụ 100 hoặc 175 hoặc 200000

- Đối với số thực: chúng dùng dấu chấm để ngăn cách phần nguyên và phần thập phân, ví dụ 1.5 hoặc 0.15 hoặc 5.0

- Đối với ký tự: chúng ta viết vào trong hai nháy đơn ( „ ‟ ), ví dụ „a‟ hay „Z‟ hay „0‟ hay „@‟

- Đối với chuỗi ký tự: chúng ta viết các ký tự vào trong hai nháy kép ( “ ” ), ví

dụ “Ha noi Viet nam” hoặc “Ngay 10 thang 11 nam 1976” hoặc “Hello, how are you?”

Trong C/C++, một hằng có thể được viết trực tiếp trong chương trình hoặc được định nghĩa và sử dụng thông qua một tên hằng được gọi là macro (#define) như sau:

#define tên_hằng giá_trị_cần_định_nghĩa

 Ví dụ: chúng ta định nghĩa hai hằng sau

#define MY_NAME “Duong Nguyen Long Khanh”

Mỗi biến nhớ sẽ được quy định một kiểu dữ liệu, quy định này đảm bảo biến nhớ chứa được các dữ liệu tương ứng với kiểu đó và các tính toán xử lý trên biến

Trang 7

Mỗi biến nhớ sẽ chiếm một ô nhớ trên bộ nhớ của máy tính, độ lớn của ô nhớ phụ thuộc vào kiểu dữ liệu của biến đó (xem bảng kiểu dữ liệu ở trên)

 Ví dụ: biến kiểu int chỉ chứa được các số nguyên trong miền cho phép từ

-32768 đến 32767, biến kiểu float chứa được số thực, biến kiểu char chứa được ký tự Trong C/C++, để sử dụng một biến nhớ nào đó chúng ta phải khai báo theo quy tắc sau:

và được chia thành các nhóm

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

- Ký hiệu : +, -, *, /, %

- Ý nghĩa : cộng, trừ, nhân, chia, chia dư

- Dữ liệu tác động : kiểu số nguyên hoặc số thực (trong đó phép % chỉ tác động lên số nguyên)

- Kết quả : các phép toán số học cho kết quả là dữ liệu kiểu số

Trang 8

Các phép toán này là 2 ngôi, tức là nó sẽ tác động lên 2 dữ liệu để cho ra kết quả tương ứng Cách viết như sau:

vế_trái ký_hiệu_phép_toán vế_phải

 Ví dụ:

5 + 3 hoặc 5 - 3 hoặc 5 * 3 hoặc 5 / 3 hoặc 5 % 3

Chú ý: Đối với phép chia ( / ) nếu hai vế là dữ liệu số nguyên thì máy sẽ chia lấy

phần nguyên, nếu một trong vế là số thực thì máy cho kết quả chính xác

 Ví dụ:

7/4 sẽ cho kết quả là 1 (là phần nguyên của 7 chia 4)

7.0/4 hoặc 7/4.0 sẽ cho kết quả là 1.75

7%4 sẽ cho kết quả là 3 (là phần dư của 7 chia 4)

6 == 5 sẽ cho kết quả sai

„A‟ == „a‟ sẽ cho kết quả sai

„A‟ < „a‟ sẽ cho kết quả đúng

c) Các phép kết nối lôgíc

- Ký hiệu : &&, ||, !

- Ý nghĩa : và, hoặc, phủ định

Trang 9

- Dữ liệu tác động : là các dữ liệu có giá trị đúng hoặc sai (kiểu lôgíc)

- Kết quả : phép toán kết nối lôgíc cho kết quả là lôgíc (đúng hoặc sai)

Ta có bảng kết quả của phép kết nối lôgíc trên hai đại lượng lôgic (đúng/sai) E1

Chú ý: phép và (&&) cho kết quả đúng khi và chỉ khi cả 2 toán hạng đều đúng,

phép hoặc (||) cho kết quả sai khi và chỉ khi cả 2 toán hạng đều sai, phép phủ định (!) cho kết quả ngược lại

Một biểu thức có thể sử dụng thêm các cặp dấu mở đóng ngoặc nhằm đặt sự ưu tiên thực hiện cao nhất từ trong ra ngoài

Trang 10

Ngoài các phép toán cơ bản trên, trong ngôn ngữ C cung cấp một số phép toán

mở rộng giúp cho người lập trình viết chương trình thuận tiện và nhanh hơn, bao gồm:

- Các phép tăng 1, giảm 1 : ++ và

Trang 11

Cách viết phép toán này như sau:

vế_trái ++ và vế_trái

hoặc

++ vế_phải và vế_phải

Chú ý: Phép tăng giảm tác động lên một dữ liệu, có thể sử dụng tiền tố hoặc hậu

tố và sự khác nhau đó là thứ tự ưu tiên khi thực hiện phép toán Tiền tố sẽ được ưu tiền cao hơn so với hậu tố và so với những phép toán khác

 Ví dụ:

a = 5; và

b = a++; thì b sẽ có giá trị bằng 5 và a sẽ có giá trị bằng 6, hoặc

b = ++a; thì kết quả cả b và a đều bằng 6

Phép tăng giảm chỉ thực hiện trên các biến nhớ dữ liệu kiểu số nguyên (không thực hiện được trên hằng số hoặc số thực)

 Ví dụ:

5++ sẽ báo sai, hoặc

(a + 7) ++ cũng báo sai, máy tính không thực hiện được

a += 7; sẽ cho kết quả a bằng 12, hoặc

a %=3; sẽ cho kết quả a bằng 2, hoặc

a /=4.0; sẽ cho kết quả a bằng 1.25

Trang 12

g) Phép chuyển đổi kiểu dữ liệu

Phép chuyển đổi kiểu dữ liệu là việc chuyển một dữ liệu từ kiểu này sang kiểu khác, khi chuyển có thể sẽ bị mất dữ liệu

Cú pháp để chuyển như sau:

(tên_kiểu_mới) dữ_liệu_cần_chuyển_kiểu

 Ví dụ:

a = 1/2; sẽ cho kết quả là 0 vì 2 toán hạng đều là số nguyên

a = (float)1/2; sẽ cho kết qủa 0.5 vì số 1 được chuyển thành số thực

Nếu kiểu dữ liệu mới có miền giá trị lớn hơn kiểu dữ liệu cũ thì việc chuyển sẽ không mất dữ liệu, ví dụ từ số nguyên (int) sang số thực (float) Nếu chuyển từ số thực sang số nguyên thì sẽ bị mất phần thập phân sau dấu phẩy

 Ví dụ:

a = (int)35.687; sẽ cho kết quả a bằng 35

Đối với phép gán (=), một số trường hợp máy sẽ tự động chuyển đổi kiểu từ dữ liệu ở vế phải của phép gán về kiểu phù hợp với biến nhớ ở vế trái Do đó, chúng ta phải cẩn thận để không bị mất dữ liệu một cách nguy hiểm và rất khó kiểm soát về sau đối với chương trình lớn

Chẳng hạn, đối với phép gán sau:

int a = 1.5/2;

Rõ ràng, kết quả của vế phải sẽ là 0.75 nhưng khi gán vào biến “a” ở vế trái kiểu nguyên (int) thì tự động ép kiểu về số nguyên với giá trị ở đây là 0 Vậy biến “a” sẽ bằng 0 thay vì bằng 0.75

Trang 13

2.2 Quy tắc mã hóa (coding) chương trình

2.2.1 Câu lệnh và khối lệnh

Để yêu cầu máy tính thực hiện các thao tác chúng ta phải viết các lệnh tương ứng, bằng cách sử dụng các tên chuẩn và từ khóa kết hợp với biểu thức Trong C/C++, kết thúc một câu lệnh phải có dấu chấm phẩy (;)

 Ví dụ:

a = 5*3/2.5-4;

//sẽ yêu cầu máy tính toán vế phải và đưa kết quả sang vế trái là a

clrscr();

//sẽ yêu cầu máy xóa màn hình

printf(“Hello, how are you?”);

//sẽ yêu cầu máy hiện lên màn hình dòng chữ trong cặp dấu nháy kép

Một câu lệnh được viết trên một dòng, trên một dòng có thể viết được nhiều câu lệnh

Thông thường một câu lệnh chưa đủ để thực hiện một chức năng hay thao tác nào

đó được yêu cầu, do vậy chúng ta phải viết nhiều câu lệnh và tạo thành một khối lệnh Khối lệnh phải được viết vào trong cặp dấu ngoặc nhọn { và }

Trang 14

3- định nghĩa các kiểu dữ liệu mới

4- định nghĩa các chương trình con (hàm)

5- khai báo các biến nhớ toàn cục

Trang 15

Tên thư viện Ý nghĩa

<stdio.h> Chứa các lệnh nhập xuất dữ liệu

<conio.h> Các lệnh hỗ trợ xử lý màn hình, bàn phím

<iostream.h> Các lớp & đối tượng xử lý nhập xuất dữ liệu

<iomanip.h> Xử lý hỗ trợ nhập xuất dữ liệu trên đối tượng

<stdlib.h> Các tiện ích hỗ trợ xử lý

<math.h> Các xử lý tính toán số học

<string.h> Các xử lý xâu ký tự

<time.h> Các hỗ trợ xử lý thời gian

- Phần 2 dùng để định nghĩa các giá trị hằng, cách thức viết đã trình bày ở trên (sử dụng #define)

- Phần 3, 4, 5 sẽ được trình bày trong những chương tiếp theo

- Phần 6 để viết chương trình chính, mỗi một chương trình có duy nhất một chương trình chính và nó sẽ điều khiển các hoạt động của toàn bộ chương trình Chương trình chính được viết như sau:

“return 0” Trong một số môi trường, trình biên dịch sẽ yêu cầu chương trình “main” này phải có kiểu “int”

Trong cấu trúc ở trên yêu cầu tối thiểu là phần 1 và phần 6 phải có trong một chương trình, do đó một chương trình đơn giản sẽ được viết như sau:

Trang 16

#include<stdio.h>

#include<conio.h>

void main()

{

… khai báo biến nhớ ở đầu chương trình …

… viết các lệnh vào đây …

}

Chú ý: Các biến nhớ cần phải được khai báo trước khi sử dụng Trong một phạm

vi (khối lệnh) thì một biến chỉ được phép khai báo 1 lần Quy tắc khai báo biến đã được đề cập ở phần trên

Có thể định nghĩa nhiều biến nhớ cùng kiểu dữ liệu bằng một lệnh khai báo, các biến nhớ phải cách nhau bởi dấu phẩy

 Ví dụ:

int a, b, c; //khai báo 3 biến số nguyên

float x, y, z; //khai báo 3 biến số thực

Có thể sử dụng toán tử gán trong khai báo biến nhớ để gán dữ liệu ban đầu cho biến nhớ theo cách như sau:

int a=5, b=8, c=0;

float x=1.5, y=576;

Chú ý: Khi cần chú thích cho một dòng lệnh, trong C/C++ có thể chú thích trên

một dòng bằng cách dùng cặp dấu “//” hoặc trên nhiều dòng bằng cặp dấu “/*” và “*/”

 Ví dụ:

int a; // đây là chú thích trên một dòng

float b; /* đây là chú thích viết trên nhiều dòng */

Trang 17

2.2.3 Quy trình thực hiện một chương trình trên máy

Để lập trình trên máy tính bằng một ngôn ngữ nào đó, chúng ta phải sử dụng môi trường lập trình (IDE - Integrated Development Enviroment) Nó là một bộ phần mềm cung cấp các chức năng cơ bản cho việc lập trình

Sau đây là các bước để viết một chương trình và chạy thử trên máy tính:

Bước 1) Khởi động phần mềm môi trường lập trình (IDE)

Bước2) Tạo tệp chương trình nguồn (có thể cả dự án)

Bước 3) Biên soạn mã lệnh (code) cho chương trình, được gọi là

chương trình nguồn (source)

Bước 4) Kiểm tra lỗi và biên dịch chương trình

Bước 5) Chạy thử chương trình

Đối với C/C++, tệp tin chứa nội dung chương trình nguồn phải có phần mở rộng

là *.C hoặc *.CPP Hiện nay thường sử dụng mở rộng là *.CPP (viết tắt của C Plus Plus / C++)

Khi thực hiện chương trình thì máy tính sẽ tự động vào thực hiện các lệnh trong chương trình chính (“main”) Quá trình thực hiện sẽ tuần tự từ trên xuống dưới và từ trái sang phải

 Ví dụ: chúng ta có chương trình như sau

Trang 18

Hình vẽ sau minh họa quá trình lập trình, kiểm tra lỗi, biên dịch và chạy thử một chương trình trên máy tính

2.3 Một số lệnh cơ bản mang tính tuần tự

2.3.1 Lệnh nhập/xuất dữ liệu

Nhập/xuất dữ liệu là 2 thao tác cơ bản trong lập trình, chúng luôn cần thiết đối với mọi chương trình nhằm cung cấp tương tác giữa người dùng với máy tính khi chạy chương trình

Có thể minh họa cấu trúc nhập/xuất dữ liệu của một chương trình đơn giản:

Trong C/C++ cung cấp hai chế độ nhập/xuất dữ liệu, thứ nhất dựa trên cơ chế vào/ra dữ liệu chuẩn (standard input/output) và thứ hai dựa trên cơ chế dòng vào/ra (input/output stream) Cả hai chế độ này có thể dùng kết hợp nhưng thông thường

Trang 19

được sử dụng tách biệt, tức một chương trình chỉ dùng một trong hai chế độ trên cho việc nhập/xuất dữ liệu

Sau đây là bảng giới thiệu sơ bộ các lệnh nhập/xuất dữ liệu theo hai cơ chế Nhập/xuất theo chế độ chuẩn, thư viện

Nhập dữ liệu cin>> B; Nhập dữ liệu

gets( X ); Nhập xâu ký tự cin.get( X , n ); Nhập xâu ký tự

- “F” là định dạng dữ liệu nhập/xuất bao gồm : + “%d” nhập/xuất số nguyên,

“%f” nhập/xuất số thực, “%s” nhập/xuất xâu ký tự, “%c” nhập/xuất 1 ký tự, “%x” nhập xuất số hexa

- D là dữ liệu cần hiển thị có thể hằng, biến hoặc biểu thức

- B là biến nhớ chứa dữ liệu nhập (dấu & trước biến nhớ để lấy địa chỉ của biến)

- X là xâu ký tự, với độ dài tối đa có thể chứa là n

Trong cả hai chế độ này, chúng ta sẽ làm việc với chế độ văn bản do đó trên màn hình sẽ được chia thành các ô theo hàng và cột để hiển thị ký tự, chiều ngang có các cột được đánh số thứ tự từ 0 và chiều dọc có các hàng đánh số thứ tự từ 0, được minh họa bởi hình vẽ sau

Ngày đăng: 02/02/2024, 10:26

TỪ KHÓA LIÊN QUAN

w