1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Giáo trình Lập trình C (Nghề: Điện tử công nghiệp - Cao đẳng): Phần 1 - Trường CĐ nghề Việt Nam - Hàn Quốc thành phố Hà Nội

64 9 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

Định dạng
Số trang 64
Dung lượng 1,17 MB

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

Nội dung

(NB) Giáo trình Lập trình C cung cấp cho người học những kiến thức như: Giới thiệu về ngôn ngữ C; Đối tượng trong chương trình; Cấu trúc lệnh tuần tự; Cấu trúc điều khiển; Cấu trúc lệnh lặp; Các kiểu dữ liệu có cấu trúc. Mời các bạn cùng tham khảo nội dung giáo trình phần 1 dưới đây.

Trang 1

ỦY BAN NHÂN DÂN THÀNH PHỐ HÀ NỘI TRƯỜNG CAO ĐẲNG NGHỀ VIỆT NAM - HÀN QUỐC THÀNH PHỐ HÀ NỘI

TRỊNH THỊ HẠNH (Chủ biên) NGUYỄN ANH DŨNG – TRẦN VĂN NAM

Trang 2

LỜI NÓI ĐẦU

Ngôn ngữ lập trình C là ngôn ngữ lập trình cấp cao, được sử dụng rất phổ biến để lập trình hệ thống cùng với Assembler và phát triển các ứng dụng

Ngôn ngữ lập trình C là một ngôn ngữ lập trình hệ thống rất mạnh và rất

“mềm dẻo”, có một thư viện gồm rất nhiều các hàm (function) đã được tạo sẵn Người lập trình có thể tận dụng các hàm này để giải quyết các bài toán mà không cần phải tạo mới Hơn thế nữa, ngôn ngữ C hỗ trợ rất nhiều phép toán nên phù hợp cho việc giải quyết các bài toán kỹ thuật có nhiều công thức phức tạp Ngoài

ra, C cũng cho phép người lập trình tự định nghĩa thêm các kiểu dữ liệu trừu tượng khác Tuy nhiên, điều mà người mới vừa học lập trình C thường gặp “rắc rối” là

“hơi khó hiểu” do sự “mềm dẻo” của C Dù vậy, C được phổ biến khá rộng rãi và

đã trở thành một công cụ lập trình khá mạnh, được sử dụng như là một ngôn ngữ lập trình chủ yếu trong việc xây dựng những phần mềm hiện nay

Nhóm biên soạn đã tham khảo các tài liệu: “Lập trình C” dùng cho sinh viên các Trường Cao đẳng Tài liệu “Nhập ngôn ngữ lập trình C” và nhiều tài

liệu khác

Mặc dù nhóm biên soạn đã có nhiều cố gắng nhưng không tránh được những thiếu sót Rất mong đồng nghiệp và độc giả góp ý kiến để giáo trình hoàn thiện hơn

Xin chân thành cảm ơn!

Hà Nội, ngày … tháng … năm 2018

Chủ biên: Trịnh Thị Hạnh

Trang 3

MỤC LỤC

LỜI NÓI ĐẦU 1

MỤC LỤC 2

CHƯƠNG TRÌNH MÔ ĐUN 4

Bài 1 Giới thiệu về ngôn ngữ c 5

1.1 Ngôn ngữ lập trình 5

1.2 Giới thiệu về ngôn ngữ lập trình c 6

1.3 Môi trường lập trình turbo c 22

Bài 2 Đối tượng trong chương trình 26

2.1 Hằng 26

2.2 Biến 29

2.3 Biểu thức 30

2.4 Hàm chuẩn 31

Bài 3 Cấu trúc lệnh tuần tự 32

3.1 Lệnh gán và biểu thức 32

3.2 Thâm nhập vào thư viện chuẩn 32

3.3 Các hàm vào ra chuẩn 33

3.4 Đưa kết quả lên màn hình - hàm printf 34

3.5 Vào số liệu từ bàn phím - hàm scanf 37

3.6 Đưa kết quả ra máy in 39

Bài 4 Cấu trúc điều khiển 44

4.1 Cấu trúc có điều kiện 44

4.2 Lệnh nhảy không điều kiện - câu lệnh goto 48

4.3 Cấu trúc rẽ nhánh - câu lệnh switch 49

Bài 5 Cấu trúc lệnh lặp 64

5.1 Cấu trúc lặp với for và while 64

5.2 Chu trình do-while 69

5.3 Câu lệnh break 70

5.4 Câu lệnh continue 71

Trang 4

Bài 6 Các kiểu dữ liệu có cấu trúc 80

6.1 Mảng 80

6.2 Xâu ký tự 89

6.3 Cấu trúc 95

Bài 7 Hàm 146

7.1 Cơ sở 146

7.2 Hàm không cho các giá trị 149

7.3 Hàm đệ quy 151

7.4 Bộ tiền xử lý C 155

TÀI LIỆU THAM KHẢO 179

Trang 5

CHƯƠNG TRÌNH MÔ ĐUN Tên mô đun: Lập trình C

- Tính chất: Là môn học bắt buộc trong chương trình đào tạo nghề tin học

II MỤC TIÊU MÔ ĐUN

Về kiến thức

- Nắm được cú pháp của ngôn ngữ lập trình C

- Sử dụng được môi trường lập trình C để soạn thảo, biên dịch và hiệu chỉnh chương trình

III NỘI DUNG MÔ ĐUN

1.Nội dung tổng quát phân bố thời gian:

STT Tên các bài trong mô đun

Thời gian Tổng

số

Lý thuyết

Thực hành

Kiểm tra

1 Bài 1: Giới thiệu về ngôn ngữ c 9 4 5 0

2 Bài 2: Đối tượng trong chương trình 7 2 5 0

6 Bài 6: Các kiểu dữ liệu có cấu trúc 33 9 21 3

Trang 6

Bài 1 Giới thiệu về ngôn ngữ c Mục tiêu:

- Cung cấp các khái niệm cơ bản về C

- Sự ra đời và phát triển của ngôn ngữ C

- Nắm được các chức năng cơ bản và môi trường lập trình của Turbo C

Nội dung:

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

1.1.1 Khái niệm ngôn ngữ lập trình

Ngôn ngữ lập trình là một ngôn ngữ dùng để viết chương trình cho máy tính

Ta có thể chia ngôn ngữ lập trình thành các loại sau: ngôn ngữ máy, hợp ngữ và ngôn ngữ cấp cao

Ngôn ngữ máy (machine language): Là các chỉ thị dưới dạng nhị phân, can thiệp trực tiếp vào trong các mạch điện tử Chương trình được viết bằng ngôn ngữ máy thì có thể được thực hiện ngay không cần qua bước trung gian nào Tuy nhiên chương trình viết bằng ngôn ngữ máy dễ sai sót, cồng kềnh và khó đọc, khó hiểu

vì toàn những con số 0 và 1

Hợp ngữ (assembly language): Bao gồm tên các câu lệnh và quy tắc viết các câu lệnh đó Tên các câu lệnh bao gồm hai phần: phần mã lệnh (viết tựa tiếng Anh) chỉ phép toán cần thực hiện và địa chỉ chứa toán hạng của phép toán

đó Ví dụ:

INPUT a ; Nhập giá trị cho a từ bàn phím

LOAD a ; Đọc giá trị a vào thanh ghi tổng A

PRINT a; Hiển thị giá trị của a ra màn hình

INPUT b

ADD b; Cộng giá trị của thanh ghi tổng A với giá trị b

Trong các lệnh trên thì INPUT, LOAD, PRINT, ADD là các mã lệnh còn a,

b là địa chỉ Để máy thực hiện được một chương trình viết bằng hợp ngữ thì chương trình đó phải được dịch sang ngôn ngữ máy Công cụ thực hiện việc dịch

đó được gọi là Assembler

Ngôn ngữ cấp cao (High level language): Ra đời và phát triển nhằm phản ánh cách thức người lập trình nghĩ và làm Rất gần với ngôn ngữ con người (Anh ngữ) nhưng chính xác như ngôn ngữ toán học Cùng với sự phát triển của các thế

Trang 7

hệ máy tính, ngôn ngữ lập trình cấp cao cũng được phát triển rất đa dạng và phong phú, việc lập trình cho máy tính vì thế mà cũng có nhiều khuynh hướng khác nhau: lập trình cấu trúc, lập trình hướng đối tượng, lập trình logic, lập trình hàm Một chương trình viết bằng ngôn ngữ cấp cao được gọi là chương trình nguồn (source programs) Để máy tính "hiểu" và thực hiện được các lệnh trong chương trình nguồn thì phải có một chương trình dịch để dịch chuơng trình nguồn (viết bằng ngôn ngữ cấp cao) thành dạng chương trình có khả năng thực thi

1.1.2 Chương trình dịch

Như trên đã trình bày, muốn chuyển từ chương trình nguồn sang chương trình đích phải có chương trình dịch Thông thường mỗi một ngôn ngữ cấp cao đều có một chương trình dịch riêng nhưng chung quy lại thì có hai cách dịch: thông dịch và biên dịch

Thông dịch (interpreter): Là cách dịch từng lệnh một, dịch tới đâu thực hiện tới đó Chẳng hạn ngôn ngữ LISP sử dụng trình thông dịch

Biên dịch (compiler): Dịch toàn bộ chương trình nguồn thành chương trình đích rồi sau đó mới thực hiện Các ngôn ngữ sử dụng trình biên dịch như Pascal, C Giữa thông dịch và biên dịch có khác nhau ở chỗ: Do thông dịch là vừa dịch vừa thực thi chương trình còn biên dịch là dịch xong toàn bộ chương trình rồi mới thực thi nên chương trình viết bằng ngôn ngữ biên dịch thực hiện nhanh hơn chương trình viết bằng ngôn ngữ thông dịch

Một số ngôn ngữ sử dụng kết hợp giữa thông dịch và biên dịch chẳng hạn như Java Chương trình nguồn của Java được biên dịch tạo thành một chương trình đối tượng (một dạng mã trung gian) và khi thực hiện thì từng lệnh trong chương trình đối tượng được thông dịch thành mã máy

1.2 Giới thiệu về ngôn ngữ lập trình c

B (do Ken Thompson phát triển từ ngôn ngữ BCPL vào năm 1970 khi viết hệ điều hành UNIX đầu tiên trên máy PDP-7) và được cài đặt lần đầu tiên trên hệ điều hành UNIX của máy DEC PDP-11

Năm 1978, Dennish Ritchie và B.W Kernighan đã cho xuất bản quyển

“Ngôn ngữ lập trình C” và được phổ biến rộng rãi đến nay

Trang 8

Lúc ban đầu, C được thiết kế nhằm lập trình trong môi trường của hệ điều hành Unix nhằm mục đích hỗ trợ cho các công việc lập trình phức tạp Nhưng về sau, với những nhu cầu phát triển ngày một tăng của công việc lập trình, C đã vượt qua khuôn khổ của phòng thí nghiệm Bell và nhanh chóng hội nhập vào thế giới lập trình để rồi các công ty lập trình sử dụng một cách rộng rãi Sau đó, các công ty sản xuất phần mềm lần lượt đưa ra các phiên bản hỗ trợ cho việc lập trình bằng ngôn ngữ C và chuẩn ANSI C cũng được khai sinh từ đó

Ngôn ngữ lập trình C là một ngôn ngữ lập trình hệ thống rất mạnh và rất

“mềm dẻo”, có một thư viện gồm rất nhiều các hàm (function) đã được tạo sẵn Người lập trình có thể tận dụng các hàm này để giải quyết các bài toán mà không cần phải tạo mới Hơn thế nữa, ngôn ngữ C hỗ trợ rất nhiều phép toán nên phù hợp cho việc giải quyết các bài toán kỹ thuật có nhiều công thức phức tạp Ngoài

ra, C cũng cho phép người lập trình tự định nghĩa thêm các kiểu dữ liệu trừu tượng khác Tuy nhiên, điều mà người mới vừa học lập trình C thường gặp “rắc rối” là

“hơi khó hiểu” do sự “mềm dẻo” của C Dù vậy, C được phổ biến khá rộng rãi và

đã trở thành một công cụ lập trình khá mạnh, được sử dụng như là một ngôn ngữ lập trình chủ yếu trong việc xây dựng những phần mềm hiện nay

1.2.2 Những đặc điểm cơ bản của ngôn ngữ C

- Tính cô đọng (compact): C chỉ có 32 từ khóa chuẩn và 40 toán tử chuẩn, nhưng hầu hết đều được biểu diễn bằng những chuỗi ký tự ngắn gọn

- Tính cấu trúc (structured): C có một tập hợp những chỉ thị của lập trình như cấu trúc lựa chọn, lặp… Từ đó các chương trình viết bằng C được tổ chức rõ ràng, dễ hiểu

- Tính tương thích (compatible): C có bộ tiền xử lý và một thư viện chuẩn

vô cùng phong phú nên khi chuyển từ máy tính này sang máy tính khác các chương trình viết bằng C vẫn hoàn toàn tương thích

- Tính linh động (flexible): C là một ngôn ngữ rất uyển chuyển và cú pháp, chấp nhận nhiều cách thể hiện, có thể thu gọn kích thước của các mã lệnh làm chương trình chạy nhanh hơn

- Biên dịch (compile): C cho phép biên dịch nhiều tập tin chương trình riêng

rẽ thành các tập tin đối tượng (object) và liên kết (link) các đối tượng đó lại với nhau thành một chương trình có thể thực thi được (executable) thống nhất

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

1.2.3.1 Tập ký tự dùng trong ngôn ngữ C

Mọi ngôn ngữ lập trình đều được xây dựng từ một bộ ký tự nào đó Các ký

tự được nhóm lại theo nhiều cách khác nhau để tạo nên các từ Các từ lại được

Trang 9

liên kết với nhau theo một qui tắc nào đó để tạo nên các câu lệnh Một chương trình bao gồm nhiều câu lệnh và thể hiện một thuật toán để giải một bài toán nào

đó Ngôn ngữ C được xây dựng trên bộ ký tự sau:

volatile while

Ý nghĩa và cách sử dụng của mỗi từ khoá sẽ được đề cập sau này, ở đây ta cần chú ý:

Trang 10

- Không được dùng các từ khoá để đặt tên cho các hằng, biến, mảng, hàm

- Từ khoá phải được viết bằng chữ thường, ví dụ: viết từ khoá khai báo kiểu nguyên là int chứ không phải là INT

1.2.3.3 Tên

Tên là một khái niệm rất quan trọng, nó dùng để xác định các đại lượng

khác nhau trong một chương trình Chúng ta có tên hằng, tên biến, tên mảng, tên hàm, tên con trỏ, tên tệp, tên cấu trúc, tên nhãn,

Tên được đặt theo qui tắc sau:

Tên là một dãy các ký tự bao gồm chữ cái, số và gạch nối Ký tự đầu tiên của tên phải là chữ hoặc gạch nối Tên không được trùng với khoá Độ dài cực đại của tên theo mặc định là 32 và có thể được đặt lại là một trong các giá trị từ 1 tới 32 nhờ chức năng: Option-Compiler-Source-Identifier length khi dùng TURBO C

te ta Sử dụng dấu trắng

Chú ý:

Trong TURBO C, tên bằng chữ thường và chữ hoa là khác nhau ví dụ tên

AB khác với ab Trong C, ta thường dùng chữ hoa để đặt tên cho các hằng và dùng chữ thường để đặt tên cho hầu hết cho các đại lượng khác như biến, biến mảng, hàm, cấu trúc Tuy nhiên đây không phải là điều bắt buộc

Trang 11

Có hai kiểu dữ liệu char: kiểu signed char và unsigned char

Kiểu Phạm vi biểu diễn Số ký tự Kích thước

Char (Signed

char)

Ví dụ sau minh hoạ sự khác nhau giữa hai kiểu dữ liệu trên: Xét đoạn chương trình sau:

Nhóm 3: Nhóm các ký tự đồ hoạ có mã số từ 127 đến 255 Các ký tự này có thể đưa ra màn hình nhưng không in ra được (bằng các lệnh DOS)

Trang 12

Kiểu nguyên:

Trong C cho phép sử dụng số nguyên kiểu int, số nguyên dài kiểu long và

số nguyên không dấu kiểu unsigned Kích cỡ và phạm vi biểu diễn của chúng được chỉ ra trong bảng dưới đây:

Kiểu ký tự cũng có thể xem là một dạng của kiểu nguyên

Kiểu dấu phảy động:

Trong C cho phép sử dụng ba loại dữ liệu dấu phảy động, đó là float, double

và long double Kích cỡ và phạm vi biểu diễn của chúng được chỉ ra trong bảng

dưới đây:

Kiểu Phạm vi biểu diễn Số chữ số có nghĩa Kích thước

Double 1.7E-308 đến 1.7E+308 15 đến 16 8 byte

long double 3.4E-4932 đến 1.1E4932 17 đến 18 10 byte

Giải thích:

Máy tính có thể lưu trữ được các số kiểu float có giá trị tuyệt đối từ 3.4E-38 đến 3.4E+38 Các số có giá trị tuyệt đối nhỏ hơn 3.4E-38 được xem bằng 0 Phạm

vi biểu diễn của số double được hiểu theo nghĩa tương tự

1.2.3.5 Định nghĩa kiểu bằng TYPEDEF

Công dụng:

Từ khoá typedef dùng để đặt tên cho một kiểu dữ liệu Tên kiểu sẽ được dùng để khai báo dữ liệu sau này Nên chọn tên kiểu ngắn và gọn để dễ nhớ Chỉ cần thêm từ khoá typedef vào trước một khai báo ta sẽ nhận được một tên kiểu dữ liệu và có thể dùng tên này để khai báo các biến, mảng, cấu trúc, vv

Cách viết:

Viết từ khoá typedef, sau đó kiểu dữ liệu (một trong các kiểu trên), rồi đến tên của kiểu

Trang 13

Ví dụ câu lệnh: typedef int nguyen;

sẽ đặt tên một kiểu int là nguyen Sau này ta có thể dùng kiểu nguyen để khai báo các biến, các mảng int như ví dụ sau ;

/ Phép chia a/b (Chia số nguyên sẽ chặt phần thập phân)

% Phép lấy phần dư a%b (Cho phần dư của phép chia a cho b)

Có phép toán một ngôi - ví dụ -(a+b) sẽ đảo giá trị của phép cộng (a+b)

Trang 14

1.2.4.2 Các phép toán quan hệ và logic

Phép toán quan hệ và logic cho ta giá trị đúng (1) hoặc giá trị sai (0) Nói cách khác, khi các điều kiện nêu ra là đúng thì ta nhận được giá trị 1, trái lại ta nhận giá trị 0

Các phép toán quan hệ có số thứ tự ưu tiên thấp hơn so với các phép toán số học, cho nên biểu thức:

Trang 15

Các phép quan hệ có số ưu tiên nhỏ hơn so với ! nhưng lớn hơn so với &&

và ||, vì vậy biểu thức như:

1.2.4.3 Phép toán tăng giảm

C đưa ra hai phép toán một ngôi để tăng và giảm các biến (nguyên và thực) Toán tử tăng là ++ sẽ cộng 1 vào toán hạng của nó, toán tử giảm thì sẽ trừ toán hạng đi 1

1.2.4.4 Thứ tự ưu tiên các phép toán

Các phép toán có độ ưu tiên khác nhau, điều này có ý nghĩa trong cùng một biểu thức sẽ có một số phép toán này được thực hiện trước một số phép toán khác

Trang 16

Thứ tự ưu tiên của các phép toán được trình bày trong bảng sau:

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

14 = += -= *= /= %= <<= >>= &= ^=

|=

Phải qua trái

Chú thích:

Các phép toán trên một dòng có cùng thứ tự ưu tiên, các phép toán ở hàng trên có số ưu tiên cao hơn các số ở hàng dưới

Đối với các phép toán cùng mức ưu tiên thì trình tự tính toán có thể từ trái

qua phải hay ngược lại được chỉ ra trong cột trình tự kết hợp

Ví dụ:

* px=*( px) (Phải qua trái)

8/4*6=(8/4)*6 (Trái qua phải)

Nên dùng các dấu ngoặc tròn để viết biểu thức một cách chính xác

Các phép toán lạ:

Dòng 1

[ ] Dùng để biểu diễn phần tử mảng, ví dụ: a[i][j]

.Dùng để biểu diễn thành phần cấu trúc, ví dụ: ht.ten

-> Dùng để biểu diễn thành phần cấu trúc thông qua con trỏ

Trang 17

Dòng 2

* Dùng để khai báo con trỏ, ví dụ: int *a

& Phép toán lấy địa chỉ, ví dụ: &x

(type) là phép chuyển đổi kiểu, ví dụ: (float)(x+y)

Dòng 15

Toán tử , thường dùng để viết một dãy biểu thức trong câu lệnh for

1.2.4.5 Chuyển đổi kiểu giá trị

Việc chuyển đổi kiểu giá trị thường diễn ra một cách tự động trong hai trường hợp sau:

Khi gán biểu thức gồm các toán hạng khác kiểu

Khi gán một giá trị kiểu này cho một biến (hoặc phần tử mảng) kiểu khác Điều này xảy ra trong câu lệnh gán, trong việc truyền giá trị các tham số thực sự cho các đối

Ngoài ra, ta có thể chuyển từ một kiểu giá trị sang một kiểu bất kỳ mà ta muốn bằng phép chuyển sau:

(type) biểu thức

Ví dụ:

(float) (a+b)

Chuyển đổi kiểu trong biểu thức:

Khi hai toán hạng trong một phép toán có kiểu khác nhau thì kiểu thấp hơn

sẽ được nâng thành kiểu cao hơn trước khi thực hiện phép toán Kết quả thu được

là một giá trị kiểu cao hơn Chẳng hạn:

Giữa int và long thì int chuyển thành long

Giữa int và float thì int chuyển thành float

Giữa float và double thì float chuyển thành double

Ví dụ:

1.5*(11/3)=4.5

1.5*11/3=5.5

(11/3)*1.5=4.5

Chuyển đổi kiểu thông qua phép gán:

Giá trị của vế phải được chuyển sang kiểu vế trái đó là kiểu của kết quả

Trang 18

Kiểu int có thể được được chuyển thành float Kiểu float có thể chuyển thành int

do chặt đi phần thập phân Kiểu double chuyển thành float bằng cách làm tròn Kiểu long được chuyển thành int bằng cách cắt bỏ một vài chữ số

Ví dụ:

int n;

n=15.6giá trị của n là 15

Đổi kiểu dạng (type)biểu thức:

Theo cách này, kiểu của biểu thức được đổi thành kiểu type theo nguyên tắc trên

Ví dụ:

Phép toán:(int)a

cho một giá trị kiểu int Nếu a là float thì ở đây có sự chuyển đổi từ float sang int Chú ý rằng bản thân kiểu của a vẫn không bị thay đổi Nói cách khác, a vẫn có kiểu float nhưng (int)a có kiểu int

Đối với hàm toán học của thư viện chuẩn, thì giá trị của đối và giá trị của hàm đều có kiểu double, vì vậy để tính căn bậc hai của một biến nguyên n ta phải dùng phép ép kiểu để chuyển kiểu int sang double như sau:

Trang 19

Cấu trúc chương trình và hàm là một trong các vấn đề quan trọng của C Về hàm ta sẽ có một chương nói tỉ mỷ về nó Ở đây ta chỉ đưa ra một số qui tắc chung: Hàm là một đơn vị độc lập của chương trình Tính độc lập của hàm thể hiện

ở hai điểm:

Không cho phép xây dựng một hàm bên trong các hàm khác

Mỗi hàm có các biến, mảng riêng của nó và chúng chỉ được sử dụng nội

bộ bên trong hàm Nói cách khác hàm là đơn vị có tính chất khép kín

Một chương trình bao gồm một hoặc nhiều hàm Hàm main() là thành phần bắt buộc của chương trình Chương trình bắt đầu thực hiện các câu lệnh đầu tiên của hàm main() và kết thúc khi gặp dấu } cuối cùng của hàm này Khi chương trình làm việc, máy có thể chạy từ hàm này sang hàm khác

Các chương trình C được tổ chức theo mẫu:

Bên ngoài các hàm ở các vị trí ( ) là chỗ đặt: các toán tử #include (dùng

để khai báo sử dụng các hàm chuẩn), toán tử #define (dùng để định nghĩa các hằng), định nghĩa kiểu dữ liệu bằng typedef, khai báo các biến ngoài, mảng ngoài

Việc truyền dữ liệu và kết quả từ hàm này sang hàm khác được thực hiện theo một trong hai cách:

Sử dụng đối của hàm

Sử dụng biến ngoài, mảng ngoài

Vậy nói tóm lại cấu trúc cơ bản của chương trình như sau:

- Các #include

- Các #define

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

- Khai báo nguyên mẫu các hàm

Trang 20

z=pow(x,y); /* hàm lấy luỹ thừa y luỹ thừa x */

fprintf(stdprn,"\n x= %8.2lf \n y=%8.2lf \n z=%8.2lf",x,y,z);

}

1.2.5.2 Lời chú thích

Các lời bình luận, các lời giải thích có thể đưa vào ở bất kỳ chỗ nào của chương trình để cho chương trình dễ hiểu, dễ đọc hơn mà không làm ảnh hưởng đến các phần khác Lời giải thích được đặt giữa hai dấu /* và */ (xem ví dụ trên) Trong một chương trình cần (và luôn luôn cần) viết thêm những lời giải thích để chương trình thêm rõ ràng, thêm dễ hiểu

1.2.5.3 Lệnh và khối lệnh

*Lệnh:

Một biểu thức kiểu như x=0 hoặc ++i hoặc scanf( ) trở thành câu lệnh khi

có đi kèm theo dấu ;

Trang 21

Một dãy các câu lệnh được bao bởi các dấu { } gọi là một khối lệnh Ví dụ: {

Khai báo ở đầu khối lệnh:

Các khai báo biến và mảng chẳng những có thể đặt ở đầu của một hàm mà còn có thể viết ở đầu khối lệnh:

Giá trị của một biến hay một mảng khai báo bên trong một khối lệnh không thể đưa ra sử dụng ở bất kỳ chỗ nào bên ngoài khối lệnh đó

Ở bất kỳ chỗ nào bên ngoài một khối lệnh ta không thể can thiệp đến các biến và các mảng được khai báo bên trong khối lệnh

Trang 22

Nếu bên trong một khối ta dùng một biến hay một mảng có tên là a thì điều này không làm thay đổi giá trị của một biến khác cũng có tên là a (nếu có) được dùng ở đâu đó bên ngoài khối lệnh này

Nếu có một biến đã được khai báo ở ngoài một khối lệnh và không trùng tên với các biến khai báo bên trong khối lệnh này thì biến đó cũng có thể sử dụng cả bên trong cũng như bên ngoài khối lệnh

Do tính chất biến a trong và ngoài khối lệnh

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

Qui tắc đầu tiên cần nhớ là:

Mỗi câu lệnh có thể viết trên một hay nhiều dòng nhưng phải kết thúc bằng dấu ;

Trang 23

Trong chương trình, khi ta sử dụng các hàm chuẩn, ví dụ như printf(), getch(), mà các hàm này lại chứa trong file stdio.h trong thư mục của C, vì vậy

ở đầu chương trình ta phải khai báo sử dụng ;

#include "stdio.h "

Qui tắc thứ tư là:

Một chương trình có thể chỉ có một hàm chính (hàm main()) hoặc có thể có thêm vài hàm khác

1.3 Môi trường lập trình turbo c

Turbo C là môi trường hỗ trợ lập trình C do hãng Borland cung cấp Môi trường này cung cấp các chức năng như: soạn thảo chương trình, dịch, thực thi chương trình… Phiên bản được sử dụng ở đây là Turbo C 3.0

1.3.1 Gọi Turbo C

Chạy Turbo C cũng giống như chạy các chương trình khác trong môi trường DOS hay Windows, màn hình sẽ xuất hiện menu của Turbo C có dạng như sau:

Dòng trên cùng gọi là thanh menu (menu bar) Mỗi mục trên thanh menu lại

có thể có nhiều mục con nằm trong một menu kéo xuống

Dòng dưới cùng ghi chức năng của một số phím đặc biệt Chẳng hạn khi gõ phím F1 thì ta có được một hệ thống trợ giúp mà ta có thể tham khảo nhiều thông tin bổ ích

Muốn vào thanh menu ngang ta gõ phím F10 Sau đó dùng các phím mũi tên qua trái hoặc phải để di chuyển vùng sáng tới mục cần chọn rồi gõ phím Enter Trong menu kéo xuống ta lại dùng các phím mũi tên lên xuống để di chuyển vùng sáng tới mục cần chọn rồi gõ Enter

Ta cũng có thể chọn một mục trên thanh menu bằng cách giữ phím Alt và

gõ vào một ký tự đại diện của mục đó (ký tự có màu sắc khác với các ký tự khác) Chẳng hạn để chọn mục File ta gõ Alt-F (F là ký tự đại diện của File)

Trang 24

1.3.2 Soạn thảo chương trình mới

Muốn soạn thảo một chương trình mới ta chọn mục New trong menu File (File ->New)

Trên màn hình sẽ xuất hiện một vùng trống để cho ta soạn thảo nội dung của chương trình Trong quá trình soạn thảo chương trình ta có thể sử dụng các phím sau:

Các phím xem thông tin trợ giúp:

- F1: Xem toàn bộ thông tin trong phần trợ giúp

- Ctrl-F1: Trợ giúp theo ngữ cảnh (tức là khi con trỏ đang ở trong một từ nào đó, chẳng hạn int mà bạn gõ phím Ctrl-F1 thì bạn sẽ có được các thông tin về kiểu dữ liệu int)

Các phím di chuyển con trỏ trong vùng soạn thảo chương trình

Sử dụng khối:

Khối là một đoạn văn bản chương trình hình chữ nhật được xác định bởi đầu khối là góc trên bên trái và cuối khối là góc dưới bên phải của hình chữ nhật Khi một khối đã được xác định (trên màn hình khối có màu sắc khác chỗ bình thường) thì ta có thể chép khối, di chuyển khối, xoá khối Sử dụng khối cho phép chúng

ta soạn thảo chương trình một cách nhanh chóng sau đây là các thao tác trên khối:

Ví dụ: Bạn hãy gõ đoạn chương trình sau:

#include <stdio.h>

#include<conio.h>

int main ()

Trang 25

1.3.3 Ghi chương trình đang soạn thảo vào đĩa

Sử dụng File/Save hoặc gõ phím F2 Có hai trường hợp xảy ra:

- Nếu chương trình chưa được ghi lần nào thì một hội thoại sẽ xuất hiện cho phép bạn xác định tên tập tin (FileName) Tên tập tin phải tuân thủ quy cách đặt tên của DOS và không cần có phần mở rộng (sẽ tự động có phần mở rộng là C hoặc CPP) Sau đó gõ phím Enter

- Nếu chương trình đã được ghi một lần rồi thì nó sẽ ghi những thay đổi bổ sung lên tập tin chương trình cũ

Chú ý: Để đề phòng mất điện trong khi soạn thảo chương trình thỉnh thoảng

- Phần mở rộng: phần này dài tối đa 3 ký tự

Ví dụ: Ghi chương trình vừa soạn thảo trên lên đĩa với tên là CHAO.CPP

1.3.4 Thực hiện chương trình

Để thực hiện chương trình hãy dùng Ctrl-F9 (giữ phím Ctrl + gõ phím F9)

Ví dụ: Thực hiện chương trình vừa soạn thảo xong và quan sát trên màn hình để thấy kết quả của việc thực thi chương trình sau đó gõ phím bất kỳ để trở lại với Turbo

1.3.5 Mở một chương trình đã có trên đĩa

Với một chương trình đã có trên đĩa, ta có thể mở nó ra để thực hiện hoặc sửa chữa bổ sung Để mở một chương trình ta dùng File/Open hoặc gõ phím F3

Trang 26

Sau đó gõ tên tập tin vào hộp File Name hoặc lựa chọn tập tin trong danh sách các tập tin rồi gõ Enter

Ví dụ: Mở tập tin CHAO.C sau đó bổ sung để có chương trình mới như sau:

printf(“Xin chao ban %s\n ”,ten);

printf(“Chao mung ban den voi Ngon ngu lap trinh C”); getch();

return 0;

}

Chú ý:

Các từ include, stdio.h, void, main, printf phải viết bằng chữ thường

Chuỗi trong nháy kép cần in ra "Bạn có thể viết chữ HOA, thường tùy, ý" Kết thúc câu lệnh phải có dấu chấm phẩy

Kết thúc tên hàm không có dấu chấm phẩy hoặc bất cứ dấu gì

Ghi chú phải đặt trong cặp /* … */

Thân hàm phải được bao bởi cặp { }

Các câu lệnh trong thân hàm phải viết thụt vào

Ghi lại chương trình này (F2) và cho thực hiện (Ctrl-F9) Hãy so sánh xem

có gì khác trước?

1.3.6 Thoát khỏi Turbo C và trở về DOS

Dùng File/Exit hoặc Alt-X

Trang 27

Bài 2 Đối tượng trong chương trình Mục tiêu:

- Nắm được cách khai báo hằng và các loại hằng có sẵn trong chương trình

- Nắm được cách khai báo biến, cách lấy địa chỉ của biến

#define number1 -50 Định nghiã hằng int number1 có giá trị là -50

#define sodem 2732 Định nghiã hằng int sodem có giá trị là 2732

Trang 28

(thêm L hoặc l vào đuôi)

Một số nguyên vượt ra ngoài miền xác định của int cũng được xem là long

Ví dụ:

#define sl 8865056L Định nghiã hằng long sl có giá trị là 8865056

#define sl 8865056 Định nghiã hằng long sl có giá trị là 8865056

Trang 30

Chú ý:

Cần phân biệt hằng ký tự '0' và '\0' Hằng '0' ứng với chữ số 0 có mã ASCII

là 48, còn hằng '\0' ứng với kýtự \0 (thường gọi là ký tự null) có mã ASCII là 0 Hằng ký tự thực sự là một số nguyên, vì vậy có thể dùng các số nguyên hệ

10 để biểu diễn các ký tự, ví dụ lệnh printf("%c%c",65,66) sẽ in ra AB

2.1.2.6 Hằng xâu ký tự

Hằng xâu ký tự là một dãy ký tự bất kỳ đặt trong hai dấu nháy kép

Ví dụ:

#define xau1 "Ha noi"

#define xau2 "My name is Duong"

Xâu ký tự được lưu trữ trong máy dưới dạng một bảng có các phần tử là các

ký tự riêng biệt Trình biên dịch tự động thêm ký tự null \0 vào cuối mỗi xâu (ký

tự \0 được xem là dấu hiệu kết thúc của một xâu ký tự)

Chú ý:

Cần phân biệt hai hằng 'a' và "a" 'a' là hằng ký tự được lưu trữ trong 1 byte, còn "a" là hằng xâu ký tự được lưu trữ trong 1 mảng hai phần tử: phần tử thứ nhất chứa chữ a còn phần tử thứ hai chứa \0

int a,b,c; Khai báo ba biến int là a,b,c

long dai,mn; Khai báo hai biến long là dai và mn

char kt1,kt2; Khai báo hai biến ký tự là kt1 và kt2

float x,y Khai báo hai biến float là x và y

double canh1, canh2; Khai báo hai biến double là canh1 và canh2

Biến kiểu int chỉ nhận được các giá trị kiểu int Các biến khác cũng có ý nghĩa tương tự Các biến kiểu char chỉ chứa được một ký tự Để lưu trữ được một xâu ký tự cần sử dụng một mảng kiểu char

2.2.1 Vị trí của khai báo biến

Các khai báo cần phải được đặt ngay sau dấu { đầu tiên của thân hàm và cần đứng trước mọi câu lệnh khác Sau đây là một ví dụ về khai báo biến sai:

Trang 31

2.2.2 Khởi đầu cho biến

Nếu trong khai báo ngay sau tên biến ta đặt dấu = và một giá trị nào đó thì đây chính là cách vừa khai báo vừa khởi đầu cho biến

2.2.3 Lấy địa chỉ của biến

Mỗi biến được cấp phát một vùng nhớ gồm một số byte liên tiếp Số hiệu của byte đầu chính là địa chỉ của biến Địa chỉ của biến sẽ được sử dụng trong một

số hàm ta sẽ nghiên cứu sau này (ví dụ như hàm scanf)

Để lấy địa chỉ của một biến ta sử dụng phép toán:

& tên biến

2.3 Biểu thức

Biểu thức là một sự kết hợp giữa các phép toán và các toán hạng để diễn đạt một công thức toán học nào đó Mỗi biểu thức có sẽ có một giá trị Như vậy hằng, biến, phần tử mảng và hàm cũng được xem là biểu thức

Trong C, ta có hai khái niệm về biểu thức:

Biểu thức gán

Biểu thức điều kiện

Biểu thức được phân loại theo kiểu giá trị: nguyên và thực Trong các mệnh

đề logic, biểu thức được phân thành đúng (giá trị khác 0) và sai (giá trị bằng 0) Biểu thức thường được dùng trong:

Trang 32

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

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

Làm chỉ số

Trong các toán tử của các cấu trúc điều khiển

Tới đây, ta đã có hai khái niệm chính tạo nên biểu thức đó là toán hạng và phép toán

2.4 Hàm chuẩn

1 stdio.h: Thư viện chứa các hàm vào/ ra chuẩn (standard input/output) Gồm các hàm printf(), scanf(), getc(), putc(), gets(), puts(), fflush(), fopen(), fclose(), fread(), fwrite(), getchar(), putchar(), getw(), putw()…

2 conio.h: Thư viện chứa các hàm vào ra trong chế độ DOS (DOS console) Gồm các hàm clrscr(), getch(), getche(), getpass(), cgets(), cputs(), putch(), clreol(),…

3 math.h: Thư viện chứa các hàm tính toán gồm các hàm abs(), sqrt(), log(), log10(), sin(), cos(), tan(), acos(), asin(), atan(), pow(), exp(),…

4 alloc.h: Thư viện chứa các hàm liên quan đến việc quản lý bộ nhơ Gồm các hàm calloc(), realloc(), malloc(), free(), farmalloc(), farcalloc(), farfree(), …

5 io.h: Thư viện chứa các hàm vào ra cấp thấp Gồm các hàm open(), _open(), read(), _read(), close(), _close(), creat(), _creat(), creatnew(), eof(), filelength(), lock(),…

6 graphics.h: Thư viện chứa các hàm liên quan đến đồ họa Gồm initgraph(), line(), circle(), putpixel(), getpixel(), setcolor(), …

7 string.h: Thư viện chứa các hàm liên quan đến xâu ký tự Gồm strlen(), toupper(), strupr(), strlwr(), strncpy(),…

Muốn sử dụng các hàm thư viện thì ta phải xem cú pháp của các hàm và sử dụng theo đúng cú pháp (xem trong phần trợ giúp của Turbo C)

Ngày đăng: 25/03/2022, 09:06

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

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

w