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

TÀI LIỆU LẬP TRÌNH C+

175 150 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 175
Dung lượng 0,97 MB

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

Nội dung

Phần sụn là một thiết bị phần cứng lập trình được bằng cách sử dụng phần mềm.Thiết bị có thể xem như phần sụn tiêu biểu là các bộ EEPROM bộ nhớ chỉ đọc có thểlập trình được hoặc xóa được

Trang 1

Chương 1 Mở đầu

1.1 Phần cứng, phần mềm, và sụn

Một hệ thống bao gồm phần cứng, phần mềm và phần sụn, tất cả được ghép nốinhau Phần cứng là những phần của hệ thống mà ta có thể tiếp xúc đến, thí dụ như cáclinh kiện, ốc vít và đai ốc, vỏ máy, các dây dẫn điện vv… Phần mềm là các chươngtrình chạy trên phần cứng lập trình được và sự thay đổi hoạt động của chúng phụ thuộcvào các đầu vào của hệ thống Các đầu vào này có thể được lựa chọn từ một bàn phímphần cứng ghép nối hoặc từ một thiết bị ngoại vi Chương trình không thể tồn tại màkhông có một vài dạng phần cứng lập trình được như một bộ vi xử lý hoặc một bộ điềukhiển Phần sụn là một thiết bị phần cứng lập trình được bằng cách sử dụng phần mềm.Thiết bị có thể xem như phần sụn tiêu biểu là các bộ EEPROM (bộ nhớ chỉ đọc có thểlập trình được hoặc xóa được bằng điện) và các thiết bị ghép nối, được lập trình bằngcách sử dụng các thanh ghi Trong hầu hết các ứng dụng, phần cứng hoạt động chuyêndụng hoạt động nhanh hơn phần cứng hoạt động kết hợp với phần mềm, mặc dù các hệthống chạy phần mềm chương trình có khẳ năng dễ dàng sử đổi và đòi hỏi thới giannghiên cứu và phát triển ít hơn

1.2 Lịch sử ngôn ngữ C

Dennis Ritchie phát triển ngông ngữ C lần đầu tiên tại phòng thí nghiệm Bell củacông ty AT & T (Hoa kỳ) Mục tiêu ông ta đặt ra khi đó là sử dụng một ngôn ngữ bậccao để xây dựng hệ điều hành UNIX theo một phương châm dễ dàng trong việc bảo trì,hiệu quả và dễ di chuyển (portable) Để đạt được mục đích này ông đã thiết kế mộtngôn ngữ có nhiều ảnh hưởng, quan trong nhất là ngôn ngữ BCPL Ảnh hưởng củangôn ngữ này lên C được tiếp tục một cách gián tiếp thông qua ngôn ngữ B

Thoạt đầu ngôn ngữ C được ứng dụng chủ yếu trong lập trình hệ thống Các chươngtrình dịch, các hệ điều hành và các tiện ích đều được viết bằng ngôn ngữ C Ngôn ngữnày tỏ ra ưu việt hơn trong lĩnh vực này và ngày nay đã được ứng dụng trong nhiềulĩnh vực và các hệ thống máy tính khác nhau Sau khi được chấp nhận, không giốngnhư các ngôn ngữ khác, ngôn ngữ C đã có xu hướng hình thành những nhóm tách biệt

Trang 2

Tới năm 1983, ngôn ngữ này đã phát triển đến giai đoạn cần có biện pháp để tiêuchuẩn hóa Để đạt được mục đích này ủy ban X3J11 của ANSI (Viện tiêu chuẩn quốcgia hoa kỳ) được thành lập để chuẩn hóa ngôn ngữ này và xây dựng lên tiêu chuẩnANSC-C Hầu hết các sản phẩm C hiện nay đều tuân theo tiêu chuẩn này mà khôngtheo những quy định lúc ban đầu.

1.3 Sơ lược về cấu trúc máy tính

Các phần chính của máy tính cơ bản là một đơn vị xử lý trung tâm (hoặc thườnggọi là bộ vi xử lý), bộ nhớ và các mạch vào ra Các phần tử đó được nối với nhau quađường bus chính: bus địa chỉ, bus điều khiển và bus dữ liệu Hình 1.1 mô tả một hệthống cơ bản Các các thiết bị ngoại vi như bàn phím, màn hình, ổ đĩa, có thể nối trựctiếp với các bus: dữ liệu, địa chỉ và điều khiển, hoặc ghép với các mạch vào ra

Hìn h

1 - 1 :

Thông thường bộ nhớ bao gồm: bộ nhớ truy cập ngẫu nhiên (RAM: RamdomAcesses Memory) và bộ nhớ chỉ đọc ROM (ROM: Read only Memory) Bố nhớ ROMcất dữ thông tin để sử dụng lâu dài, trong khi bộ nhớ truy cập ngẫu nhiên không phải là

bộ nhớ dữ liệu để sử dụng lâu dài và dữ liệu sẽ mất đi khi ngắt nguồn nuôn

Bộ RAM được sử dụng để chạy các chương trình ứng dụng và cất giữ thông ti một cáctạm thời

Bộ vi xử lý là bộ điều khiển chính của máy tính Nó đem về từ bộ nhớ các lệnhnhị phân, rồi giải mã các lệnh đó thành một dãy các tác động đơn giản và thực hiện các

Bus dữ liệu

Bus địa chỉ

Bus điều

Bộ nhớ (RAM hoặcROM)

CPU hoặcMicro-processorMạch giao

Trang 3

tác động theo các bước kế tiếp nhau Các bước này được đồng bộ hóa nhờ một đồng hồ

hệ thống Để truy cập lên một vị trí trong bộ nhớ, hay thường gọi là ô nhớ, bộ vi xử lýđặt địa chỉ ô nhớ lên bus địa chỉ Nội dụng của địa chỉ này được đặt lên bus dữ liệu và

bộ vi xử lý đọc dữ liệu từ bus dữ liệu Để cất dữ liệu vào bộ nhớ, bộ vi xử lý đặt dữliệu lên bus dữ liệu Sau đó, địa chỉ của ô nhớ trong bộ nhớ được đặt lên bus địa chỉ và

dữ liệu lại được đọc từ bus dữ liệu và địa chỉ bộ nhớ cần có

1.4 Biên dịch, liên kết, và viết một chương trình chấp hành

Bộ vi xử lý chỉ hiểu được thông tin dưới dạng nhị phân và thao tác trên một dãycác lệnh nhị phân hay thường gọi là mã máy Khi viết chương trình lớn trực tiếp dướidạng mã máy sẽ gặp rất nhiều khó khăn, nên các ngôn ngữ bậc cao đã được phát triển

để dẽ sử dụng thay mã máy Một ngôn ngữ bậc thấp rất giống với mã máy và thườngkéo theo việc sử dụng các macro từ khóa để thay thế cho các chỉ thị mã máy Ngôn ngữbậc cao có cú pháp gần như viết tiếng Anh và như vậy làm cho chương trình càng trởlên đẽ đọc và dễ sửa đổi Trong đó, các chương trình hoạt động thực tại của của phầncứng như thế nào, người viết chương trình không thể nhìn thấy được Khi đó mộtchương trình dịch sẽ chuyển chương trình ngôn ngữ bậc cao ra mã máy Các ngônngưc bậc cao có thể kết ra là: C, Basic, COBOL, FORTRAN và PASCAL Một ví dụ

về ngôn ngữ bậc thấp là hợp ngữ (Assembly) dung cho 80386

Hình 1-2 giới thiệu các công đoạn để tạo ra một ngôn ngữ mã máy từ một chươngtrình mã nguồn trong ngôn ngữ C

Hình 1-2: Các quá trình soạn thảo, biên dịch và liên kết

Tệp chấp

Tệp mã đối Tệp mã

Các thư viện và

mã đối tượngkhác

Bộ liên kết(Thêm vào cácthông tin bổ

Trình biên dịch(Biến đổi mãnguồn thành mã

Bộ soạn thảo

(tạo và sửa

đổi mã

Trang 4

Bộ soạn thảo dùng để viết và sửa đổi một tệp mã nguồn C; Sau đó một chươngtrình dịch sẽ chuyển đổi mã nguồn này sang một dạng mã mà bộ vi xử lý có thể hiểuđược, cụ thể là mã máy Tệp tin do chương trình dịch tạo ra được đặt tên là tệp mã đốitượng Tệp tin này không thể thực hiện được vì nó không có đầy đủ các thông tin cần

có để chạy một chương trình Giai đoạn cuối cùng của quá trình là liên kết; qua trìnhnày đòi hỏi phải đưa thêm mã máy vào chương trình để nó có thể sử dụng các thiết bịnhư bàn phím, màn hình,… Một bộ liên kết sẽ kết nối tệp mã đối tượng với các tệp mã

đối tượng khác và với các thư viện để tạo ra một chương trình chấp hành được (thực

thi được) Các thư viện này chứa các module mã đối tượng khác đã được biên dịchsang mã nguồn

Nếu quá trình dịch hoặc liên kết phát sinh lỗi hoặc những cảnh báo thì mã nguồnphải được sửa đổi để loại trừ các lỗi Quá trình biên dịch/liên kiết phải được tiến hànhmột lần nữa Các thông báo trong quá trình dịch hoặc liên kết không làm dừng chươngtrình hoặc bộ kết nối để tránh tạo ra một đầu ra, nhưng các lỗi thì sẽ làm ngừng Vìvậy, tất cả các lỗi trong quá trình biên dịch hoặc liên kết phải được loại bỏ, trong khiđối với các lời cảnh báo thì yêu cầu đặt ra chỉ là lên loại bỏ

Turbo C phiên bản 2.0 là một gói phần mềm phát triển được tích hợp để thích hợp vớicác hệ thống nhúng trên cơ sở máy tính cá nhận Nó bao gồm: bộ soạn thảo, chươngtrình dịch, bộ liên kết và trình gỡ rối (được sử dụng để chạy thử chương trình) Bộ khởiđộng được dùng để viết và sửa đổi tệp mã nguồn và được khởi động bằng cách thaycho tệp chấp hành TC.EXE

1.5 Ứng dụng của ngôn ngữ C trong lĩnh vực điện tử - viễn thông

Ngôn ngữ C có đặc tính ưu việt hơn các ngôn ngữ lập trình khác là nó gần với mãmáy, do đó tất cả các ứng dụng được viết bằng C đều chạy rất nhanh hơn khi viết trêncac ngôn ngữ lập trình bậc cao khác và được sử dụng rất rộng rãi

Trong lĩnh vực điện tử viễn thông C được sử dụng để lập trình điều khiển ghép nối vớimáy tính, lập trình cho vi điều khiển, lập trình các hệ thống nhúng, lập trình hệ thống,

và lập trình mạng,…

Trang 5

Chương 2 CÁC KHÁI NIỆM CƠ BẢN

2.1 Tập ký tự dung 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ựnày được nhóm lại với nhau nhiều cách để lập lên các từ Các từ lại liên kết với nhautheo một quy tắc nào đó để tạo lên câu lệnh Một chương trình bao gồm nhiều câu lệnh

và diễn đạt một thuật toán để giải một bài toán Ngôn ngữ C được xây dựng dựa trên

Trang 6

char const continue default

interrupt long near pascalregister return short signedsizeof static struct switchtypedef union unsigned voidvolatile while

Ý nghĩa và cách sử dụng của chúng sẽ được lần lượt giới thiệu ở các mục

Chú ý:

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

- Từ khóa phải được viết bằng chữ thường Chẳng hạn không được viết INT mà phảiviết int

2.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 tượng khác nhautrong 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 quy tắc sau:

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

Chú ý:

Trang 7

- Trong C phân biệt chữ hoa và chữ thường

- Chữ hoa thường dùng để đặt tên cho các hằng, chữ thường thường được dùng để đặttên cho hầu hết các đối tượng như biến, mảng, hàm, cấu trúc (tuy nhiên điều này khôngbắt buộc)

2.4 Kiểu dữ liệu, các kiểu dữ liệu cơ bản

Các biến trong chương trình có thể được lưu trữ dưới dạng các số hoặc dưới dạng các

kí tự Thí dụ, điện trở của một đoạn đây đồng được lưu trữ như một con số (một giá trịthực) còn tên của một linh kiện được lưu trữ dưới dạng kí tự

Ngôn ngữ C có bốn kiểu dữ liệu cơ bản: char (ký tự đơn), int(số nguyên có dâu),float(dấu phẩy động đơn chính xác), double (dấu phẩy động kép chính xác) Các kiểu

dữ liệu mở rộng: short, long, unsigned int Miền giá trị của các kiểu dữ liệu như sau:

Bảng 2.1 Một số giới hạn tiêu biểu cho các kiểu dữ liệu

Số nguyên là một giá trị bất kỳ không chứa dấu thập phân; vùng giá trị của số nguyênphụ thuộc vào số byte được lưu trữ số đó Một giá trị đấu phẩy động là một số bất kỳ

và có thể chứa một đấu phấy thập phân; giá trị này luôn được mô ta trong khuôn mẫu

có dấu Lại một lần nữa, vùng giá trị phụ thuộc vào số byte được sử dụng

Trang 8

2.5 Định nghĩa kiểu bằng typedef

Công dụng: Từ khóa typedef dùng để đặt tên cho một kiểu dữ liệu Tên kiểu sẽ dùng

để khai báo dữ liệu sau này Nên chọn một tên vừa ngắn gọn vừa dễ nhớ

Cú pháp: Đặt từ khóa typedef vào trước một khai báo thông thường, khi đó tên dữ liệu

trở thành tên kiểu Ví dụ câu lệnh:

Hằng này được viết theo 2 cách:

Cách một (dạng thập phân): số nguyên, dấu chấm thập phân và phần phân Ví dụ:

Chú ý: phần nguyên hay phần thập phân có thể vắng mặt nhưng dấu chấm không thểthiếu, ví dụ cho phép viết:

Trang 9

Cách 2: (dạng khoa học hay dạng mũ): Số được tách thành 2 phần định trị và phần bậc.Phần định trị là một số nguyên hoặc sô thực dạng thập phân, phần bậc là số nguyên.Hai phần này cách nhau bởi ký tự e hoặc E Ví dụ:

123.456E-4 (biểu diễn giá trị 0.0123456)0.12E3 (biễu diễn giá trị 1230.0)-49.5e (biểu diễn giá trị -0.495)

Trong hệ này sử dụng 16 kí tự trong khoảng từ 0 đến 16 Để tránh nhầm lẫn giữa số 11

và hai số 1 người ta dùng quy ước sau:

Trang 10

Trong đó các ci là một chữ số trong khoảng từ 0 đến 16 Ví dụ:

0xa9, 0Xa9, 0xA9, 0XA9

Là 4 hằng số hệ 16 như nhau Giá trị của chúng trong hệ 10 là 10*16 + 9 = 169

2.6.6 Hằng kí tự

Là một kí tự riêng biết được viết trong 2 dấu nháy đơn, ví dụ ‘a’ Giá trị của ‘a’ chính

là mã ASCII của chữ a Như vậy giá trị của ‘a’ là 97 Hằng kí tự có thể tham gia vàocác phép toán như mọi số nguyên khác Ví dụ:

‘9’ – ‘0’ = 57 – 48 = 9Hằng kí tự có thể được viết theo cách

‘\c1c2c3’

Trong đó c1c2c3 là một số hệ 8 mà giá trị của nó bằng mã ASCII của kí tự cần biểudiễn Ví dụ, chữ a có mã hệ 10 là 97 đổi ra hệ 8 là 0141 Vậy hằng kí tự ‘a’ có thể viếtdưới dạng ‘\141’

Trang 11

Cần phân biệt ‘a’ và “a”, ‘a’ là hằng kí tự được lưu trữ trong một byte, còn “a” là mộthằng xâu kí tự được lưu trữ trong một mảng gồm hai phần tử: phần tử thứ nhất chứachữ a còn phần tử thứ 2 chứa \0.

2.6.8 Khai báo

Ví dụ có khai báo sau:

define MAX 1000Khi đó tên MAX được sử dụng trong chương trình đều được thay bằng 1000 MAX làtên hằng (hay macro)

int a, b, c; /* khai báo 3 biến kiểu int*/

long m, n ; /* khai báo 2 biến kiểu long*/

char c ; /* khai báo 1 biến kiểu char*/

float x, y ; /* khai báo 2 biến kiểu float*/

double k, h ; /* khai báo 2 biến kiểu double*/

}

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ự, chẳng hạn biến kiểu char chỉ chứa được một kí tự Để lưu trữ một dãy kí tự cầnphải sử dụng một mảng các kí tự

2.7.2 Vị trí của các khai báo

Các khai báo cần đặt ngay sau dấu { đầu tiên của thân hàm và cần đứng trước mọi câulệnh khác

Trang 12

Ví dụ:

main(){

int a, b, c ; a=35}

Có thể khởi tạo giá trị ban đầu cho biến bằng cách gán cho biến một giá trị khi khaibáo Ví dụ:

int a, b = 20, c, d=40;

float e= - 35.1 ;

2.7.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 đầuchính là địa chỉ của biến Địa chỉ biến dùng trong một số hàm nhứ hàm scanf Để nhậnđịa chỉ biến ta dùng phép toán:

&tên_biến ;

2.8 Mảng

2.8.1 Khái niệm và cách khai báo

Mỗi biến chỉ có thể chứa một giá trị Để chứa một dãy số hay một bảng số ta có thểdùng nhiều biến nhưng cách này không tiện lợi Vì vậy trong những trường hợp này sửdụng mảng là rất tiện lợi

Mảng có thể hiểu là một tập hợp nhiều phần tử có cùng một kiểu giá trị và có chungmột tên Mỗi phần tử của mảng có vai trò như một biến và chứa được một giá trị Cóbao nhiêu kiểu biến thì cũng có bấy nhiêu kiểu dữ liệu mảng Khi khai báo mảng ta cấnquan tâm đến các yếu tố:

- kiểu mảng (int, float, double,…)

- Tên mảng

- Số chiều và kích thước mảng

Khái niệm về kiểu mảng và tên mảng cũng giống như khái niệm về kiểu biến và tênbiến Số chiều và kích thước của mảng được giải thích thông qua ví dụ sau:

Trang 13

int a[10], b[4][2];

Khai báo trên sẽ xác định 2 mảng kiểu int a và b Mảng a là mảng một chiều và kíchthước bằng 10 Mảng có 10 phần tử được đánh số như sau: a[0], a[1], a[2]…a[9] Mỗiphần tử a[i] chứa một giá trị kiểu int và mảng a có thể biểu diễn được một dãy 10 sốnguyên

Mảng b là mảng hai chiều, một chiều có kích thức 4 và một chiều có kích thước 2.Mảng có 8 phần tử, chúng được đánh số và sắp xếp như sau:

Trang 14

2.8.3 Lấy địa chỉ phần tử mảng.

Để lấy được địa chỉ của mảng một chiều ta dùng toán tử & Chẳng hạn:

&a[i]

Nhưng đối với mảng nhiều chiều thì không thể lấy địa chỉ bằng phép toán tử &

nghĩa là không thể viết: &b[i][j].

Môt chú ý quan trọng là tên mảng biểu diễn địa chỉ đầu của mảng Như vậy ta có:

a = &a[0];

2.9 Xâu

2.9.1 Khái niệm và cách khai báo

Xâu là một mảng một chiều chứa các kí tự Một kí tự đơn lẻ trong xâu được lưutrữ bằng cách sử dụng 8 bít

Khai báo:

char Ten_xau[kich_thuoc];

Tên xâu là địa chỉ bộ nhớ dùng cho kí tự đầu tiên trong xâu, kích thước là số kí

tự được lưu trữ trong bộ nhớ dành cho xâu

Các xâu có xu hướng thay đổi về độ dài vì thế cần khai báo xâu với số cực đại của các

kí tự cần có Chương trình sẽ tự động thêm vào kí tự “\0” để đánh dấu kết thúc xâu Một vài thí dụ về các xâu:

- Tên các máy tính như: “IBM C”, “MaccroVAX”

- Tên các bộ vi xử lý như: “Intel i80386”, “Motorola MC6800”

- Tên các phần tử trong mạch điện trở như: “Điện trở 1”, “Vòng khóa pha”, “Bộkhuyêch đại vi sai”

Trang 15

Hình 2.1 Thí dụ về sắp xếp xâu

Như vậy, kí tự đầu tiên của xâu là str1[0] và kí tự kết thúc của xâu là str1[size-1].Cũng giống với các mảng, có khả năng vượt tràn qua chỗ kết thúc của xâu Điều nàylàm cho dữ liệu bị đọc ra hoặc viết vào những vùng nhớ của bộ nhớ không được gáncho mục đích này Xâu đã được định kích thước luôn chứa ít nhất số lượng cực đại củacác kí tự được nhập vào Nếu như một xâu được đọc vào từ bàn phím thì số lớn nhấtcủa các kí tự được nhập vào từ bàn phím có thể bị hạn chế bởi bộ đệm bàn phím Mộtmacro BUFSIZ, được định nghĩa trong stdio.h có thể được sử dụng để xác định kíchthước của nó

Trang 16

trình sẽ tiếp tục nhắc xâu văn bản chừng nào mà mà kí tự dầu tiên của xâu nhập vào là

kí tự ‘X’

Khi chạy thí dụ trên ta được kết quả:

Enter a name (enter ‘X’ to exit)>> C for engineering programming

Name entered is C for engineering programming

Enter a name (enter ‘X’ to exit)>> lap trinh C trong KTDT

Name entered is lap trinh C trong KTDT

Enter a name (enter ‘X’ to exit)>> X

Hàm strcpy() được chứa trong thư viện chuẩn Nó sao chép xâu đối thứ hai vào xâu đối

Trang 17

2.9.4 Hàm xâu chuẩn

Các hàm chuẩn thao tác với xâu nằm trong thư viện chuẩn string.h của C Tất cảcác hàm xâu đều trả lại một giá trị; chẳng hạn, strlen() trả lại một giá trị là chiều dàicủa xâu và các hàm strcat(), strupr(), strlwr() và strcpy() đều trả lại những con trỏ xâukết quả Con trỏ này có thể được sử dụng nếu cần, nhưng xâu kết quả cũng đượcchuyển giao ngược lại như là đối số đầu tiên của các hàm này Hàm strcmp() trả lại chỉ

số 0 nếu nhứ hai xấu là đồng nhất

Trang 18

string.h Biếu đổi một xâu chữ

hoa thành một xâu chữthường

Một con trỏ vào xâu kếtquả

char *strupr(char

*str1)

string.h Biếu đổi một xâu chữ

thường thành một xâuchữ hoa

Một con trỏ vào xâu kếtquả

stdio.h Tương tự như hàm

printf như lối ra dẫn tớixâu str

Số các kí tự nối ra

int scanf(char

*str, *format_str,

arg1,…)

stdio.h Tương tự như hàm

scanf như lối vào dẫntới xâu str

Số các trường được quétxong

Trang 19

Chương 3 CẤU TRÚC CHƯƠNG TRÌNH VÀ CÁC LỆNH VÀO RA CƠ BẢN

3.1 Lời chú thích

Trong quá trình lập trình, người lập trình thường sử dụng những chú thích để giảithích về các khai báo, các lệnh, các hàm chức năng, thuật toán, … giúp cho chươngtrình dễ đọc hơn Các lời chú thích này cần đặt trong cặp dấu:

Câu lệnh được chia làm hai loại: câu lệnh đơn và câu lệnh có cấu trúc Câu lệnh đơnchỉ gồm một lệnh duy nhất như: lệnh gán, lệnh nhập hay xuất dữ liệu, lệnh gọi hàm,lệnh nhảy… Câu lệnh có cấu trúc có thể là lệnh ghép gồm một khối lệnh đặt giữa cặpdâu {}, lệnh lựa chọn (if, case) hay các lệnh lặp (for, while, do while)

Trang 20

int a,b,c[50] ;float x, y, z;

x=5.7; y=a*x ;a=b=3 ;

printf(“\nx=%5.2f\nz=%5.2f”, y,z);

}

3.2.2.2 Sự lồng nhau của các khối lệnh

Một khối lệnh có thể chứa nhiều khối lệnh khác trong thân nó Sự lồng nhau như vậy làkhông hạn chế Thân hàm cũng là một khối lệnh và đó là một khối lệnh cực đại vì nókhông bị chứa bên trong một khối lệnh nào

2.10.3 Phạm ví hoạt động của các biến và mảng

Khi máy bắt đầy làm việc với một khối lệnh thì các biến và các mảng khai báo bêntrong khối lệnh đó mới được hình thành và được cấp phát bộ nhớ Các biến này chỉtong tại trong thới gian máy làm việc với khối lệnh và chúng sẽ lập tức biến mất ngaysau khi máy thoát ra khỏi khối lệnh đó Như vây:

- 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 khối lệnh ta không thể can thiệp đến các biến và cácmảng được khai báo bên trong khối lệnh

- Nếu một biến a được khai báo bên trong một khối lệnh trùng tên với một biến a

đã được khai báo bên ngoài khối lệnh thì không làm thay đổi giá trị của biến a

đã được khai báo ngoài khối lệnh trước đó

{

int a ;

…{

int a ;}

}

Trang 21

Trong trường hợp này máy sẽ cấp phát hai ô nhớ khác nhau cho hai biến này vàthời gian tồn tại của hai biến này cũng khác nhau.

- Nếu 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ácbiến khai báo bên trong khối lệnh thì nó có thể được sử dụng cả bên trong cũngnhư bên ngoài khối lệnh

3.3 Cấu trúc cơ bản của một chương trình

Thông thường một chương trình được chia thành những nhiệm vụ nhỏ được gọi là cáchàm Có những đoạn mã được phân định rõ rang để thực hiện những tác động riêngbiết Hàm chính main() là đoạn chương trình cơ bản dùng để điều khiển tiến trình củachương trình những chương trình con

Các tên hàm có thể phân biệt đến 31 ký tự (các tên với nhiều hơn con số này sẽ phụthuộc và độ hoàn thiện của chương trình dịch) Tên hàm được đặt theo quy tắc đặt tên

đã trình bày

Tất cả các chương trình C đều có một hàm chính main(), định nghĩa điểm nhập vàochương trình và bằng các hàm được gọi, điều khiển toàn bộ tiến trình của chương trình.Hàm này có thể được đặt ở bất kỳ chỗ nào trong chương trình nguồn, nhưng thườngđược đặt ở phần đầu tập tin định vị (để dễ tím hơn) Xét thí dụ sau:

/*chương trình 3.1*/

#include <stdio.h>

int main(void)

func6() {

func4() {

func5() {

func3() {

func2() {

func1() {

main() {

Trang 22

{ /* Điểm bắt đầu chương trình */

puts (“C for Electronic Engineering”);

/*C trong kỹ thuật điện tử */

return(0);

} /*Điểm kết thúc chương trình*/

Trong thí dụ trên hàm puts() để hiện thị xâu “C for Electronic Engineering” Từ khóa

int đặt trước hàm main() xác định rằng chương trình trả lại một giá trị cho hệ điều hành (hoặc chương trình gọi) Trong trường hợp này, giá trị trả lại bằng 0 (return(0)) Bình

thường thì giá trị trả lại khác 0 được sử dụng khi do chương trình bị thoát ra do có lỗi,giá trị hiện tại của giá trị này cho ta một chỉ dẫn để biết vì sao chương trình thoát ra

Từ void bên trong dấu ngoặc đơn của hàm main() xác định rằng không có trao đổi dữ

liệu giữ chương trình và hệ điều hành, thí dụ không có giá trị được chuyển giao vàochương trình

Khi chạy chương trình máy tính sẽ tìm hàm main() và lần lượt thực hiện các các câulệnh trong thân hàm hàm main() bắt đầu từ dấu { của hàm cho đến dấu } kết thúc củahàm main() thì kết thúc chương trình

3.4 Một số chú khi viết chương trình

- Mỗi câu lệnh có thể viết trên một dòng hay nhiều dòng và phải được kết thúc bởi dấy(;) Ngược lại, nhiều câu lệnh có thể viết trên cùng một dòng

Muốn viết một xâu hằng kí tự trên nhiều dòng thì phải đặt thêm kí tự / trước khi xuốngdòng để báo cho TURBO C biết một chuỗi kí tự vẫn còn tiếp tục ở dòng dưới

Thí dụ:

{

printf(“\n Xin chao/

\nTURBO C”) ;}

và cũng có thể viết:

{

int a, b;

a=2; b=3;

Trang 23

- Các lời chú thích được viết trong cập dấu /* */

- Khi sử dụng một hàm nào đó cần phải biết hàm đó nằm trong tệp thư viện nào củachương trình và phải khai báo tệp thư viện đó bằng lệnh:

#include “Tên thư viện”

ở phần đầu của chương trình Ở cuối câu lệnh #include không có đâu chấm phẩy (;).

Thí dụ, khi sử dụng lệnh printf để xuất dữ liệu ra màn hình, hàm này nằm trong thưviệc stdio.h trong thư mục của C Do đó phải khai báo:

Một số chú ý đối với câu lệnh scanf:

Trang 24

- Không dùng tên biến như trong câu lệnh printf mà phải dùng địa chỉ của biến phéptoán &.

- Mỗi biến ứng với một đặc tả Như vậy số đặc tả bằng số biến

- Dùng đặc tả %d đối với biến nguyên và %f đối với biến kiểu thực

3.6 Đưa kết quả lên màn hình

Thông thường màn hình là thiết bị đầu ra chuẩn để xuất dữ liệu ra từ chươngtrình Để xuất dữ liệu ra màn hình ta dùng các hàm printf(), puts(), putchar() Các hàmnày đều nằm trong thư viện chuẩn stdio.h của C

3.6.1 Hàm printf()

Cú pháp:

printf(“format”,arg1, arg2, arg3….argn);

Hàm printf gửi một xâu đã đinh dạng tới đầu ra chuẩn (màn hình) Xâu này có thểhiện thị các biến đã được định dạng và những kí tự điều khiển đặc biệt như ‘\n’ –xuống dòng, đấu tab ‘\t’,

Thí dụ sử dụng hàm printf như sau:

Trang 25

Hàm này xuất một kí tự đơn ch ra màn hình.

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

Để đưa kết quả ra máy in cần sử dụng hàm fprintf và đưa thêm tham số stdprn vàotrước chuỗi điều khiển

Cú pháp:

fprintf(stdprn,chuỗi điều khiển, arg1, arg2,…, argn)

Tham số stdprn chỉ ra rằng: thiết bị đưa ra là máy in, chuỗi điều khiển và cáctham số arg1 đến argn có ý nghĩa hoàn toàn tương tự như hàm printf

Trang 26

R3=250.0; /* 250 ohms */

puts("Chuong trinh tinh dien tro tuong duong cua");

puts("3 dien tro mac song song");

puts("Chuong trinh tinh tan so cong huong cua");

puts("mach L-C noi tiep ");

Trang 27

Chương 4 BIỂU THỨC

Toán hạng có thể xem là một đại lượng có một giá trị nào đó Theo nghĩa đó, toán hạngbao gồm hằng, biến, phần tử mảng và hàm Biểu thức được lập nên từ các toán hạng vàcác phép tính để tạo nên những giá trị mới Biểu thức dùng để diễn đạt một công thức,một quy trình tính toán, vì vậy nó là thành phần không thể thiếu trong một chươngtrình

4.1 Biểu thức

Biểu thức là 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ứcnào đó Khi viết biểu thức nên dùng các dấu ngoặc tròn để thể hiện đúng trình tự tínhtoán trong biểu thức Mỗi biểu thức sẽ có một giá trị và nói chung cái gì có giá trị đềuđược xem là biểu thức Trong C đưa ra nhiều quan niệm mới về biểu thức như biểuthứ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, 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 các trường hợp:

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

- Làm tham số thực của hàm (như hàm printf)

- Làm chỉ số

- Trong các toán tử if, switch, for, while, do while

Thí dụ: Tính tần số cộng hưởng của mạch LC song song.

Trong mạch LC song song hiệu ứng xảy ra trái ngược với trường hợp mạch LC nốitiếp Ở tần số thấp thì trở kháng thấp do diện cảm bị tụ diện làm cho ngắn mạch Ở tần

số cao, tụ điện lại làm ngắn mạch cuộn cảm và cũng dẫn đến trở kháng thấp Ở tần sốriêng mạch cộng hưởng đẫn đến trở kháng vào rất cao Hiện tượng này làm cho dòngtrong mỗi mạch nhánh của mạch gần như bằng nhau và ngược chiều; như vậy có dòngvào rất nhỏ Hiện tượng này được gọi là cộng hưởng song song Một cuộn cảm khôngtổn hao có điện trở bằng 0 và không có dòng vào (nếu như tụ điện không có tổn hao)

Trang 28

Đương nhiện mạch cổng hưởng song song hoàn hảo không có trong thực tế vì thường

có một điện trở trong cuộn cảm và tụ điện cũng có đôic hút tổn hao Hình 4.1 giớithiệu sơ đồ mạch diện song song:

Tần số mạch cổng hưởng được xác định bằng phương trình:

4

12

1

2

2

Hz L

float L=1.0e-3, C=1.0e-6, r=1.0, f _ch ;

/*L tinh bang 1mH, c tinh bang 1uF, dien tro la ohm*/

puts(“Chuong trinh tinh tan so cong huong”);

puts(“cua mot mach LC song song cong huong”);

f_ch=1/(2*PI)*sqrt(1/(L*C) – (r*r)/(4*L*L)) ;

printf(“Tan so cua mach cong huong la: %.3f Hz”, f_ch);

}

Kết quả chương trình khi chạy như sau:

Chuong trinh tinh tan so cong huong

cua mot mach LC cong huong

cL

rv(f)

Hình 4.1 Mạch LC mắc song song

Trang 29

Tan so cua mach cong huong la: 5.032 328Hz

Nguyên tắc khi dùng lệnh gán là kiểu của biến và kiểu của biểu thức phải giống nhau,

gọi là có sự tương thích giữa các kiểu dữ liệu Chẳng hạn thí dụ sau cho thấy một sựkhông tương thích về kiểu:

Tuy nhiên trong đa số trường hợp sự tự động biến đổi kiểu để có sự tương thích vềkiểu sẽ được thực hiện Thí dụ:

int main() {

int x,y;

float r;

char ch;

Trang 30

r = 9000;

x = 10; /* Gán hằng số 10 cho biến x */

y = 'd'; /* y có kiểu int, còn ‘d’ có kiểu char*/

r = 'e'; /* r có kiểu float, ‘e’ có kiểu char*/

ch = 65.7; /* ch có kiểu char, còn 65.7 có kiểu float*/

return 0;

} Trong nhiều trường hợp để tạo ra sự tương thích về kiểu, ta phải sử dụng đến cách thứcchuyển đổi kiểu một cách tường minh Cú pháp của phép toán này như sau:

(Tên kiểu) <Biểu thức>

Chuyển đổi kiểu của <Biểu thức> thành kiểu mới <Tên kiểu> Chẳng hạn:

Thí dụ:

int x, y;

y = x = 3; /* y lúc này cũng bằng 3*/

Có thể gán trị cho biến lúc biến được khai báo theo cách thức sau:

<Tên kiểu> <Tên biến> = <Biểu thức>;

Trang 31

Các phép toán này áp dụng trên các kiểu dữ liệu char, int, float, double (kể cả các kiểu

mở rộng của nó)

Phép toán chia lấy phần dư % áp dụng trên các kiểu char, int, long

Thứ tự ưu tiên: Đảo dấu +, – ( ) *, / , % +, –

Trang 32

Ta có thể kết hợp vài toán tử lại với nhau thành biểu thức như sau:

10>5&&!(10<9)||3<=4 cho kết quả là đúng

Thứ tự ưu tiên của các toán tử quan hệ và logic:

Trang 33

Ý nghĩa: Trước tiên E1 được ước lượng, nếu đúng E2 được ước lượng và nó trở thành

giá trị của biểu thức; nếu E1 sai, E3 được ước lượng và trở thành giá trị của biểu thức Thí dụ:

X = 10

Y = X > 9 ? 100 : 200Thì Y được gán giá trị 100, nếu X nhỏ hơn 9 thì Y sẽ nhận giá trị là 200 Đoạn mã nàytương đương cấu trúc if như sau:

X = 10

if (X < 9) Y = 100 else Y = 200

4.3.5.2 Toán tử con trỏ & và *

Một con trỏ là địa chỉ trong bộ nhớ của một biến Một biến con trỏ là một biếnđược khai báo riêng để chứa một con trỏ đến một đối tượng của kiểu đã chỉ ra nó Contrỏ sẽ được tìm hiểu kỹ hơn trong chương sau con trỏ Trong C có hai toán tử được sửdụng để thao tác với các con trỏ:

Toán tử thứ nhất là &, là một toán tử quy ước trả về địa chỉ bộ nhớ của hệ số của

Thí dụ: m = &count

Câu lệnh trên nghĩa là đặt vào biến m địa chỉ bộ nhớ của biến count Chẳng hạn,biến count ở vị trí bộ nhớ 2000, giả sử count có giá trị là 100 Sau câu lệnh trên m sẽnhận giá trị 2000

Toán tử thứ hai là *, là một bổ sung cho &; đây là một toán tử quy ước trả về giá

trị của biến được cấp phát tại địa chỉ theo sau đó Thí dụ:

q = *m

sẽ đặt giá trị của count vào q Bây giờ q sẽ có giá trị là 100 vì 100 được lưu trữ tạiđịa chỉ 2000

4.3.5.3 Toán tử dấu phẩy ,

Toán tử dấu , được sử dụng để kết hợp các biểu thức lại với nhau Bên trái củatoán tử dấu “,” luôn được xem là kiểu void Điều đó có nghĩa là biểu thức bên phải trởthành giá trị của tổng các biểu thức được phân cách bởi dấu phẩy Thí dụ:

Trang 34

Các cặp dấu ngoặc vuông thực hiện thao tác truy xuất phần tử trong mảng

4.4 Bảng tổng kết về độ ưu tiên của các phép toán

Độ ưu tiên của các phép toán theo thứ tự từ trên xuống dưới từ trái qua phải

Bảng tổng kết về độ ưu tiên

Trang 35

4.5 Chuyển đổi kiểu dữ liệu

Khi các kiểu dữ liệu hỗn hợp trong một phép toán với hai toán hạng, quy tắc sauđây xác định kiểu dữ liệu kết quả:

1 Kiểu ký tự bất kỳ như unsigned char, char, short int biến đổi sang kiểu nguyên

2 Hoặc nếu một trong hai toán hạng là long double thì toán hạng kia sẽ biến đổisang long double

3 Hoặc nếu một trong hai toán hạng là double, thì toán hạng kia sẽ biến đổi sangdouble

4 Hoặc nếu một trong hai toán hạng là float, thì toán hạng kia sẽ biến đổi sangfloat

5 Hoặc nếu một trong hai toán hạng là unsigned long, thì toán hạng kia sẽ biếnđổi sang unsigned long

6 Hoặc nếu một trong hai toán hạng là long int thì toán hạng cong lại sẽ biến đổisang long int

7 Hoặc nếu một trong hai toán hạng là unsigned int thì toán hạng kia sẽ biến đổithành unsigned int

8 Cả hai toán hạng đều là kiểu int

Một kiểu dữ liệu có thể bị thay đổi một cách tạm thời khi sử dụng một kỹ thuật épkiểu (casting) Để ép kiểu, đặt kiểu cần chuyển về trong cặp dấu ngoặc đơn trước toánhạng hoặc biểu thức cần chuyển Thí dụ như trong chương trình sau:

Trang 36

4.6 Các phép toán xử lý bít và ứng dụng trong điện tử viễn thong

4.6.1 Các hệ đếm

Trong cuộc sống hàng ngày chúng ta thường dùng các hệ cơ số 10 để biểu diễncác giá trị số Điều này rất tự nhiên vì từ xa xưa con người bình thường đã biết dùng 10 ngón tay của mình để như là một công cụ tính toán sơ đẳng

Trong thế giới máy tính thì khác, do máy tính được cấu tạo nên từ các mạch điện

tử và các mạch này chỉ có hai có hai trạng thái có điện và không có điện Do đó đểbiễu diễn một giá trị số trong máy tính người ta sử dụng hệ đếm cơ số hai hay hệ đếmnhị phân (Binary number system) Trong hệ đếm này chỉ tồn tại hai chữ số 0 và 1tương ứng với hai trạng thái có điện và không có diện của các mạch điện tử

Nếu dùng hệ cơ số hai để biểu diễn các số có giá trị lớn sẽ gặp bất tiện là số hệhai thu được quá dài, thí dụ:

Trang 37

4.6.2 Chuyển đổi số giữa các hệ đếm

4.6.2.1 Chuyển đổi giữa hệ thập phân và hệ nhị phân

a Chuyển từ hệ thập phân sang hệ nhị phân:

Quy tắc: Lấy phần nguyên chia cho 2 và ghi lại phần dư, tiếp tục lấy thương

chia cho 2 và ghi lại phần dư Tiếp tục làm như vậy cho đến khi thương bằng 0 Sau đóviết các số dư theo chiều từ phép chia cuối cùng đến phép chia đầu tiên Thí dụ:

Cách đổi một

số hệ mười sang hệ hai Quy tắc đổi số thập phân hệ mười sang hệ hai: Lấp số

cần đổi nhânvới 2, tích gồm phần nguyên và phần lẻ Lấy phần lẻ nhân tiếp với 2 cho đến khi nàotích thu được bằng 1 thì dừng lại Chọn riêng phần nguyên của các tích thu được vàviết theo thứ tự từ phép nhân đầu tiên đến phép nhân cuối cùng Thí dụ:

Hìn h 4.3 Các đổi một số thập phân hệ mười sang hệ hai

b Chuyển từ hệ nhị phân sang hệ thập phân:

,250,50,0

(0,125)10 = (0,001)2

0,125 x 2 =0,250 x 2 = 0,50 x 2 =

001

(33)10 = (100001)2

01

210

220

240

280

2161233

Trang 38

Để chuyển từ hệ nhị phân sang thập phân ta tính tổng các tích số giữa các hệ sốvới các trọng số 2i tại từng vị trí thứ i.

Thí dụ:

(1110,11)2 = 1.23 + 1.22 + 1.21 + 0.20 + 1.2-1 + 1.2-2

= 8 + 4 + 2 + 0,5 + 0,25 = (14,75)10

4.6.2.2 Chuyển đổi giữa thập lục hoặc hệ bát phân sang hệ nhị phân

Quy tắc: Nhóm 4 bit (hoặc 3 bit cho hệ bát phân) bắt đầu từ bit ngoài cùng bên phải,

tính gia trị số học theo quy luất giá trị riêng cho từng nhóm Viết các giá trị này liêntiếp nhau

Ý nghĩa: Nhân logic trên các bit Phép toán này thực hiện trên từng cặp bit tương ứng

của các toán hạng theo quy tắc trong bảng sau:

Trang 39

4.6.3.2 Phép toán OR

Kí hiệu: |

Ý nghĩa: Cộng logic trên các bit Phép toán này thực hiện trên từng cặp bit tương ứng

của các toán hạng theo quy tắc trong bảng sau:

Ý nghĩa: Phép cộng logic trên các bit Thực hiện trên từng cặp bit tương ứng của các

toán hạng theo quy tắc trong bảng sau

Thí dụ:

Trang 40

Viết chương trình nhập vào hai số ở hệ hexa và thực hiện các phép toán AND,

OR, XOR, NAND và NOR giữa hai số.

#include <stdio.h>

int main(void)

{

int value1, value2;

/* & - bitwise AND operator */

/* | - bitwise OR operator */

/* ^ - bitwise XOR operator */

/* ~ - bitwise NOT operator */

printf("Nhap vao hai so he hexa >>> ");

scanf("%x %x",&value1,&value2);

printf("Ket qua AND hai so: %x\n",value1 & value2);

printf("Ket qua OR hai so: %x\n",value1 | value2);

printf("Ket qua XOR hai so: %x\n",value1 ^ value2);

printf("Ket qua NAND hai so: %x\n",~(value1 & value2));

printf("Ket qua NOR hai so: %x\n", ~(value1 | value2));

getch();

return(0);

}

Ngày đăng: 11/08/2016, 05:42

HÌNH ẢNH LIÊN QUAN

Hình  1-2    giới  thiệu  các  công  đoạn  để  tạo  ra  một  ngôn  ngữ  mã  máy  từ  một  chương trình mã nguồn trong ngôn ngữ C. - TÀI LIỆU LẬP TRÌNH C+
nh 1-2 giới thiệu các công đoạn để tạo ra một ngôn ngữ mã máy từ một chương trình mã nguồn trong ngôn ngữ C (Trang 3)
Bảng 2.1. Một số giới hạn tiêu biểu cho các kiểu dữ liệu - TÀI LIỆU LẬP TRÌNH C+
Bảng 2.1. Một số giới hạn tiêu biểu cho các kiểu dữ liệu (Trang 7)
4.4. Bảng tổng kết về độ ưu tiên của các phép toán - TÀI LIỆU LẬP TRÌNH C+
4.4. Bảng tổng kết về độ ưu tiên của các phép toán (Trang 34)
Bảng 4-2. Bảng chân lý phép toán AND trên bit - TÀI LIỆU LẬP TRÌNH C+
Bảng 4 2. Bảng chân lý phép toán AND trên bit (Trang 38)
Bảng 4-4. Bảng chân lý phép toán OR trên bit - TÀI LIỆU LẬP TRÌNH C+
Bảng 4 4. Bảng chân lý phép toán OR trên bit (Trang 39)
Bảng 4-3. Bảng chân lý phép toán OR trên bit - TÀI LIỆU LẬP TRÌNH C+
Bảng 4 3. Bảng chân lý phép toán OR trên bit (Trang 39)
Hình 5-5. Mạch RC với điện áp nhảy bậc ở lối vào tại t=0 - TÀI LIỆU LẬP TRÌNH C+
Hình 5 5. Mạch RC với điện áp nhảy bậc ở lối vào tại t=0 (Trang 55)
Bảng 8-1: Bảng mô tả các chân nối của cổng LPT - TÀI LIỆU LẬP TRÌNH C+
Bảng 8 1: Bảng mô tả các chân nối của cổng LPT (Trang 77)
Hình 8.3. Tín hiệu trên đường truyền của các bít biểu diễn 2 kí tự ‘A’ - TÀI LIỆU LẬP TRÌNH C+
Hình 8.3. Tín hiệu trên đường truyền của các bít biểu diễn 2 kí tự ‘A’ (Trang 81)
Bảng 8.1. Mô tả chức năng của các đường tín hiệu - TÀI LIỆU LẬP TRÌNH C+
Bảng 8.1. Mô tả chức năng của các đường tín hiệu (Trang 83)
Hình 8.4: Đường truyền ghép nối không cân bằng - TÀI LIỆU LẬP TRÌNH C+
Hình 8.4 Đường truyền ghép nối không cân bằng (Trang 84)
Bảng 8.2: Bảng các thông số của các chuẩn ghép nối thông tin cơ bản. - TÀI LIỆU LẬP TRÌNH C+
Bảng 8.2 Bảng các thông số của các chuẩn ghép nối thông tin cơ bản (Trang 85)
Hình 8.3 Sơ đồ nối dây giữa hai cổng RS-232C theo kiểu không móc nối - TÀI LIỆU LẬP TRÌNH C+
Hình 8.3 Sơ đồ nối dây giữa hai cổng RS-232C theo kiểu không móc nối (Trang 86)
Hình 8.5 Sơ đồ nối DTE với DCE - TÀI LIỆU LẬP TRÌNH C+
Hình 8.5 Sơ đồ nối DTE với DCE (Trang 87)
Hình 8.6 là sơ đồ biểu diễn quá trình thông tin sử dụng kỹ thuật móc nối mềm. - TÀI LIỆU LẬP TRÌNH C+
Hình 8.6 là sơ đồ biểu diễn quá trình thông tin sử dụng kỹ thuật móc nối mềm (Trang 87)

TỪ KHÓA LIÊN QUAN

w