1. Trang chủ
  2. » Cao đẳng - Đại học

Giáo trình Ngôn ngữ lập trình (Ngành Kỹ thuật sửa chữa, lắp ráp máy tính Trung cấp)

97 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Giáo trình môn học: Ngôn ngữ lập trình C (Ngành Kỹ thuật sửa chữa, lắp ráp máy tính Trung cấp)
Tác giả Dennish Ritchie, B.W. Kernighan
Trường học Trường Cao đẳng Cộng đồng Đồng Tháp
Chuyên ngành Kỹ thuật sửa chữa, lắp ráp máy tính - Ngôn ngữ lập trình
Thể loại giáo trình
Năm xuất bản 2017
Thành phố Đồng Tháp
Định dạng
Số trang 97
Dung lượng 782,31 KB

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

Cấu trúc

  • BÀI 1 (7)
    • 2. Cách khởi động và thoát chương trình (7)
    • 3. Hệ thống thông tin giúp đỡ (8)
  • BÀI 2 (8)
    • 1. Hệ thống ký hiệu và từ khóa (9)
    • 2. Các kiểu dữ liệu: kiểu số, chuỗi, ký tự (10)
    • 3. Biến, hằng, biểu thức (12)
    • 4. Lệnh và khối lệnh (16)
    • 5. Lệnh gán, lệnh xuất nhập, lệnh gán kết hợp (17)
    • 6. Các phép toán (24)
    • 7. Cách chạy chương trình (25)
  • BÀI 3 (26)
    • 1. Lệnh rẽ nhánh có điều kiện if (26)
    • 2. Lệnh rẽ nhánh có điều kiện switch..case (27)
    • 3. Cấu trúc switch...case...default (28)
    • 4. Cấu trúc vòng lặp For (31)
    • 5. Cấu trúc vòng lặp while (33)
    • 6. Cấu trúc vòng lặp do..while (35)
  • BÀI 4 (41)
    • 1. Khái niệm hàm (41)
    • 2. Quy tắc xây dựng một hàm (43)
    • 3. Sử dụng hàm (44)
    • 4. Nguyên tắc hoạt động của hàm (45)
    • 5. Cách truyền tham số (46)
    • 6. Câu lệnh return và exit (53)
  • BÀI 5 (58)
    • 1. Khai báo mảng (58)
    • 2. Mảng và tham số của hàm (63)
    • 3. Sắp xếp mảng (67)
    • 4. Gán giá trị cho mảng (73)
    • 1. Khái niệm (79)
    • 2. Khai báo biến chuỗi (79)
    • 3. Nhập chuỗi ký tự (81)
    • 4. Các phép toán chuỗi ký tự (81)
    • 5. Các thao tác trên chuỗi ký tự (85)
  • BÀI 7 (91)
    • 1. Biến con trỏ (91)
  • TÀI LIỆU THAM KHẢO (97)

Nội dung

C không gắn với bất kỳ một hệ điều hành hay máy nào, và mặc dầu nó đã được gọi là " ngôn ngữ lập trình hệ thống" vì nó được dùng cho việc viết hệ điều hành, nó cũng tiện lợi cho cả việc

Cách khởi động và thoát chương trình

- Biết cách khởi động được và thoát khỏi chương trình C;

Để chạy BC trên DOS, nhập BC tại dấu nhắc DOS và nhấn Enter nếu đường dẫn đã được thêm vào biến PATH chứa thư mục có BC.EXE Nếu PATH chưa được cấu hình, hãy tìm thư mục BORLANDC trên ổ đĩa máy tính Sau đó gõ lệnh :\BORLANDC\BIN\BC và nhấn Enter để khởi động BC từ thư mục BIN của BORLANDC. -**Support Pollinations.AI:**🌸 **Quảng cáo** 🌸 Đẩy mạnh nội dung SEO của bạn với Pollinations.AI! [Ủng hộ chúng tôi](https://pollinations.ai/redirect/kofi) và tối ưu hóa bài viết ngay hôm nay.

Để vừa khởi động BC vừa soạn thảo chương trình từ một tập tin do bạn đặt tên, hãy gõ lệnh BC [đường dẫn] Nếu tên file cần soạn thảo đã có thì tập tin đó được nạp lên để chỉnh sửa; nếu chưa có, BC sẽ tự động tạo mới tập tin đó.

Để khởi động trên Windows, mở Menu Start và chọn Run, sau đó gõ lệnh vào hộp Open như cách nhập ở DOS Nếu không dùng Run, bạn có thể mở Windows Explorer, vào ổ đĩa chứa thư mục BORLANDC, mở thư mục BORLANDC, tiếp tục vào thư mục BIN và chạy tập tin BC.EXE.

Ví dụ: Bạn gõ D:\BORLANDC\BIN\BC E:\BAITAP_BC\VIDU1.CPP

Câu lệnh này khởi động BC và nạp tập tin VIDU1.CPP từ thư mục BAITAP_BC trên ổ đĩa E Nếu VIDU1.CPP không tồn tại trong thư mục đó, hệ thống sẽ tự động tạo mới tập tin này.

2.2 Thoát khỏi chương trình C Ấn phím F10 (kích hoạt Menu), chọn menu File, chọn Quit;

Hoặc ấn tổ hợp phím Alt – X.

Hệ thống thông tin giúp đỡ

- Trình bày được hệ thống trợ giúp của C

- Ấn phím F1 để kích hoạt màn hình Help chính

- Muốn xem Help của hàm trong soạn thảo, di chuyển con trỏ đến vị trí hàm đó ấn tổ hợp phím Ctrl - F1

- Ấn tổ hợp phím Shift - F1 để xem danh sách các mục Help

- Ấn tổ hợp phím Alt - F1 để quay về màn hình Help trước đó.

Hệ thống ký hiệu và từ khóa

- Trình bày được tập kí tự dùng trong ngôn ngữ C

- Trình bày được các quy tắc cần nhớ khi viết chương trình

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

Mọi ngôn ngữ lập trình đều bắt đầu từ một bộ ký tự nhất định, trong đó các ký tự được ghép thành từ và các từ được liên kết với nhau bằng các quy tắc để hình thành các câu lệnh Một chương trình là tập hợp nhiều câu lệnh thể hiện một thuật toán nhằm giải một bài toán cụ thể Ngôn ngữ C được xây dựng dựa trên một bộ ký tự cụ thể, cho phép viết các câu lệnh đúng cú pháp và hiệu quả trong quá trình phân tích và thực thi thuật toán.

10 chữ số : 0 1 2 9 Các ký hiệu toán học : + - * / = ( )

Ký tự gạch nối : _ Các ký tự khác : , : ; [ ] {} ! \ & % # $

Dấu cách (space) dùng để tách các từ Ví dụ chữ VIET NAM có 8 ký tự, còn VIETNAM chỉ có 7 ký tự.

Khi viết chương trình, ta không được sử dụng bất kỳ ký tự nào khác ngoài các ký tự trên.

Để giải phương trình bậc hai ax^2 + bx + c = 0, ta cần tính biệt thức Delta = b^2 - 4ac nhằm xác định số và bản chất của nghiệm Vì ký hiệu Delta không được hỗ trợ trong ngôn ngữ C, ta phải dùng một ký hiệu thay thế như D hoặc delta để biểu diễn biệt thức này và đảm bảo tính nhất quán trong toàn bộ chương trình, từ phép tính Delta cho đến định nghĩa nghiệm và hiển thị kết quả.

Từ khóa là các từ được sử dụng để khai báo kiểu dữ liệu, để viết các toán tử và các câu lệnh trong chương trình Những từ khóa này xác định cú pháp và cách trình biên dịch hiểu mã nguồn, giúp mã nguồn được biên soạn và thực thi đúng mục đích Trong TURBO C, bảng dưới đây liệt kê các từ khóa phổ biến, phản ánh danh sách từ khóa mà người lập trình cần nắm để tạo ra các câu lệnh chuẩn và tối ưu hóa mã nguồn Việc nắm vững các từ khóa này sẽ cải thiện khả năng viết mã và giúp bài viết liên quan tới Turbo C dễ được tìm thấy hơn trên các công cụ tìm kiếm.

10 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ú ý :

- 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.

Tên là một khái niệm rất quan trọng trong lập trình, nó dùng để xác định và tham chiếu đến các đại lượng khác nhau trong một chương trình Các ví dụ về tên gồm có tên hằng (hằng số), tên biến (giá trị có thể thay đổi), tên mảng, tên hàm, tên con trỏ, tên tệp, tên cấu trúc và tên nhãn, cùng với nhiều loại tên khác Việc đặt tên một cách rõ ràng và nhất quán giúp mã nguồn dễ đọc, dễ bảo trì và tăng tính hiệu quả cho tài liệu hướng dẫn lập trình.

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

Tên là một chuỗi ký tự bao gồm chữ cái, chữ số và dấu gạch nối Ký tự đầu tiên của tên phải là chữ cái hoặc dấu gạch nối Tên không được trùng với khóa (khoá) Độ dài tối đa của tên được mặc định là 32 ký tự và có thể được đặt lại ở một giá trị khác theo thiết lập.

1 tới 32 nhờ chức năng : Option-Compiler-Source-Identifier length khi dùng TURBO C

Các tên đúng : a_1 delta x1 _step GAMA Các tên sai :

3MN Ký tự đầu tiên là số m#2 Sử dụng ký tự # f(x) Sử dụng các dấu ( ) do Trùng với từ khoá te ta Sử dụng dấu trắng

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

Trong C, AB khác với ab; ta thường dùng chữ hoa để đặt tên cho các hằng số và chữ thường để đặt tên cho hầu hết các đại lượng khác như biến, biến mảng, hàm và cấu trúc Tuy nhiên quy ước này không bắt buộc và người lập trình có thể chọn phong cách đặt tên phù hợp để mã nguồn dễ đọc và dễ bảo trì.

- Một số quy 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;

Qui tắc thứ hai là :

Các lời giải thích cần được đặt giữa các dấu /* và */ và có thể được viết

Trên một dòng Trên nhiều dòng Trên phần còn lại của dòng

Qui tắc thứ ba là :

Trong lập trình C, khi ta dùng các hàm chuẩn như printf(), các hàm này được định nghĩa trong thư viện stdio.h, chính vì vậy ở đầu chương trình ta phải thêm #include để khai báo việc sử dụng các hàm này.

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.

Các kiểu dữ liệu: kiểu số, chuỗi, ký tự

- Trình bày được các kiểu dữ liệu

Một giá trị kiểu char chiếm 1 byte ( 8 bit ) và biểu diễn được một ký tự thông qua bảng mã ASCII Ví dụ:

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 ) -128 đến 127 256 1 byte

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 : char ch1; unsigned char ch2;

Khi đó thực chất : ch1=-56; ch2 0;

Nhưng cả ch1 và ch2 đều biểu diễn cùng một ký tự có mã 200.

Có thể chia 256 ký tự làm ba nhóm :

Nhóm 1: Nhóm các ký tự điều khiển có mã từ 0 đến 31 Chẳng hạn ký tự mã 13 dùng để chuyển con trỏ về đầu dòng, ký tự 10 chuyển con trỏ xuống dòng dưới ( trên cùng một cột ) Các ký tự nhóm này nói chung không hiển thị ra màn hình

Nhóm 2 : Nhóm các ký tự văn bản có mã từ 32 đến 126 Các ký tự này có thể được đưa ra màn hình hoặc máy in.

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 ).

Trong C, các kiểu số nguyên cơ bản gồm int, long và unsigned (số nguyên không dấu) với unsigned cho phép biểu diễn các giá trị từ 0 trở lên; kích thước và phạm vi biểu diễn của các kiểu này phụ thuộc vào nền tảng và được nêu rõ trong bảng dưới đây.

Kiểu Phạm vi biểu diễn Kích thước

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

- Kiểu số phẩy động độ chính xác đơn (float), kép (double)

Trong ngôn ngữ C, có ba kiểu dữ liệu dấu phẩy động là float, double và long double, và kích thước cùng phạm vi biểu diễn của chúng được liệt kê 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 Float 3.4E-38 đến 3.4E+38 7 đến 8 4 byte

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

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ơn3.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ự.

Biến, hằng, biểu thức

Hằng là các đại lượng mà giá trị của nó không thay đổi trong quá trình tính toán

Nguyên tắc đặt tên hằng ta đã xem xét trong mục 1.3. Để đặt tên một hằng, ta dùng dòng lệnh sau :

#define tên hằng giá trị

Trong C, biểu thức #define MAX 1000 định nghĩa MAX là một hằng số macro với giá trị 1000 và mọi lần MAX xuất hiện sau này sẽ được thay thế bằng 1000 bởi tiền xử lý trước khi biên dịch, vì vậy MAX thường được gọi là tên hằng (hằng số macro) Ví dụ khác là #define pi 3.141593, đặt tên cho một hằng số pi với giá trị là 3.141593 Việc dùng các hằng số như MAX và pi giúp mã dễ đọc, dễ bảo trì và cho phép thay đổi giá trị ở một chỗ duy nhất, đồng thời tối ưu hóa cú pháp và thống nhất tham số trong chương trình.

Hằng int là số nguyên có giá trị trong khoảng từ -32768 đến 32767

Cần phân biệt hai hằng 5056 và 5056.0 : ở đây 5056 là số nguyên còn 5056.0 là hằng thực.

Hằng long là số nguyên có giá trị trong khoảng từ -2147483648 đến

Hằng long được viết theo cách :

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

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

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

Hằng int hệ 8 được viết theo cách 0c1c2c3 Ở đây ci là một số nguyên dương trong khoảng từ 1 đến 7 Hằng int hệ 8 luôn luôn nhận giá trị dương.

#define h8 0345 Định nghiã hằng int hệ 8 có giá trị là

Trong hệ này ta sử dụng 16 ký tự : 0,1 ,9,A,B,C,D,E,F.

Cách viết Giá trị a hoặc A 10 b hoặc B 11 c hoặc C 12 d hoặc D 13 e hoặc E 14 f hoặc F 15

Hằng số hệ 16 có dạng 0xc1c2c3 hoặc 0Xc1c2c3 Ở đây ci là một số trong hệ 16

Cho ta các hắng số h16 trong hệ 16 có giá trị như nhau Giá trị của chúng trong hệ 10 là :

Hằng ký tự là một ký tự riêng biệt được viết trong hai dấu nháy đơn, ví dụ 'a'

Giá trị ASCII của ký tự 'a' là 97, tức là mã ASCII của chữ 'a' Mỗi ký tự có thể tham gia vào các phép toán như mọi số nguyên khác, vì giá trị của chúng được dùng làm đại diện số cho ký hiệu của chúng Ví dụ, trong lập trình, ta có thể cộng, trừ hoặc so sánh các ký tự dựa trên giá trị ASCII của chúng và dùng chúng để xử lý chuỗi một cách hiệu quả.

#define kt 'a' Định nghiã hằng ký tự kt có giá trị là 97 Hằng ký tự còn có thể được viết theo cách sau :

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ểu diễn

Ví dụ chữ 'a' có mã thập phân 97 trong bảng mã ASCII; khi đổi sang hệ bát phân (octal) nó được biểu diễn là 0141 Vì vậy ký tự 'a' có thể viết dưới dạng '\141' Đối với một số ký tự đặc biệt khác, ta cũng cần sử dụng cách viết tương tự bằng cách thêm dấu '\' để tạo các escape sequence.

'\r' CR ( về đầu dòng ) '\f' LF ( sang trang )

Để hiểu đúng, cần phân biệt hằng ký tự '0' và hằng '\0' trong lập trình Hằng '0' đại diện cho chữ số 0 và có mã ASCII là 48, trong khi hằng '\0' (ký tự escape cho null) biểu thị ký tự null và 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

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.

#define xau2 "My name is Giang"

Xâu ký tự được lưu trữ trên máy tính dưới dạng một mảng các ký tự riêng biệt, trong đó mỗi phần tử đại diện cho một ký tự Trình biên dịch tự động thêm ký tự null \0 vào cuối mỗi xâu để đánh dấu sự kết thúc của chuỗi, giúp các hàm xử lý chuỗi nhận diện được độ dài thực sự mà không cần lưu trữ thông tin độ dài ở riêng một biến.

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

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

Mỗi biến cần phải được khai báo trước khi đưa vào sử dụng Việc khai báo biến được thực hiện theo mẫu sau :

Kiểu dữ liệu của biến tên biến ;

Ví dụ về khai báo biến trong C/C++ cho thấy cách khai báo nhiều biến cùng kiểu trên một dòng: int a,b,c; long dai,mn; char kt1,kt2; float x,y; double canh1, canh2 Mỗi cụm khai báo nêu rõ kiểu dữ liệu và danh sách các biến tên riêng, giúp chương trình dễ đọc và dễ bảo trì Việc khai báo nhóm theo kiểu dữ liệu như int a,b,c; hoặc long dai,mn; hoặc char kt1,kt2; còn float x,y và double canh1, canh2 cho thấy cách tổ chức biến hợp lý, tối ưu hóa cú pháp và tăng tính rõ ràng cho phần khởi tạo và sử dụng biến sau này.

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

Biến kiểu int chỉ có thể chứa giá trị kiểu int và các kiểu dữ liệu khác cũng tuân theo quy tắc tương tự Biến kiểu char chỉ chứa được một ký tự duy nhất Để lưu trữ một chuỗi ký tự, ta cần dùng một mảng kiểu char, tức là một dãy ký tự được lưu trữ trong mảng char.

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

Các khai báo trong thân hàm phải được đặt ngay sau dấu { đầu tiên và phải đứng trước mọi câu lệnh khác để đảm bảo cú pháp và luồng thực thi đúng Ví dụ về khai báo biến sai cho thấy vị trí khai báo không phù hợp có thể gây lỗi biên dịch hoặc hành vi không mong muốn: (Khái niệm về hàm và cấu trúc chương trình sẽ nghiên cứu sau này) main()

{ int a,b,c; a=2; int d; /* Vịtrí của khai báo sai */

Nếu trong khai báongay 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.

Việc khởi đầu và việc khai báo biến rồi gán giá trị cho nó sau này là hoàn toàn tương đương.

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

Trong bộ nhớ máy tính, mỗi biến được cấp phát một vùng nhớ gồm một số byte liên tiếp Địa chỉ của biến là vị trí của byte đầu tiên trong vùng nhớ đó, tức là số hiệu của byte đầu Địa chỉ của biến sẽ được sử dụng trong một số hàm mà chúng 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 dùng phép toán lấy địa chỉ, ký hiệu là & trong ngôn ngữ 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ức toán học Mỗi biểu thức có giá trị riêng do các yếu tố cấu thành và các phép tính được thực hiện bên trong nó Trong toán học và lập trình, hằng, biến, phần tử mảng và hàm đều được xem là biểu thức vì chúng có thể cho ra giá trị khi được đánh giá Hiểu rõ khái niệm biểu thức giúp nắm bắt cách xây dựng công thức, tối ưu hóa biểu thức và áp dụng chúng vào lời giải các bài toán và bài tập lập trình.

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

Biểu thức điều kiện là một khái niệm quan trọng trong logic và lập trình, được phân loại theo kiểu giá trị thành hai nhóm: giá trị nguyên và giá trị thực Trong các mệnh đề logic, biểu thức được xem là đúng khi giá trị khác 0 và sai khi giá trị bằng 0, từ đó quyết định luồng thực thi và các hành động cần thực hiện dựa trên điều kiện đó.

Biểu thức thường được dùng trong :

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

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

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

Trong biểu thức toán học và mã lệnh, hai khái niệm cốt lõi tạo nên ý nghĩa của nó là toán hạng và phép toán Toán hạng gồm hằng số, biến, phần tử mảng và hàm như đã trình bày ở phần trước, là các thành phần cấu thành mọi biểu thức Trên nền tảng này, phần tiếp theo sẽ đi sâu vào các phép toán, giải thích cách chúng tác động lên toán hạng để tạo ra kết quả mong muốn, đồng thời giúp người đọc nắm bắt cách xây dựng các biểu thức phức tạp trong lập trình và toán học.

Lệnh và khối lệnh

- Phân biệt được lệnh và khốilệnh;

- Trình bày được phạm vi hoạt động của biến và mảng;

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 ;

Trong chương trình C, dấu ; là dấu hiệu kết thúc câu lệnh.

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ụ :

Trong Turbo C, khối lệnh được xem như một câu lệnh riêng lẻ Nói cách khác, bất cứ nơi nào có thể viết được một câu lệnh thì ở đó cũng có thể đặt một khối lệnh.

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 :

Sự lồng nhau của các khối lệnh và phạm vi hoạt động của các biến và mảng:

Bên trong một khối lệnh lại có thể viết lồng khối lệnh khác Sự lồng nhau theo cách như vậy là không hạn chế

Khi máy bắt đầu làm việc với một khối lệnh thì các biến và mảng khai báo bên trong nó mới được hình thành và được hình thành và được cấp phát bộ nhớ Các biến này chỉ tồn tại trong thời gian máy làm việc bên trong khối lệnh và chúng lập tức biến mất ngay sau khi máy ra khỏi khốilệ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 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

Khi làm việc bên trong một khối lệnh, nếu ta dùng một biến hoặc mảng có cùng tên a, thì biến a ở ngoài khối không bị ảnh hưởng và vẫn giữ giá trị ban đầu Đây là hiện tượng che khuất biến (shadowing): phạm vi biến của a được giới hạn trong khối và biến a ở ngoài tồn tại riêng với một giá trị khác Các thao tác gán hoặc gọi trong khối chỉ tác động lên biến a nội bộ, còn biến a ở ngoài vẫn bất động cho tới khi phạm vi thoát ra Nhờ hiểu rõ cơ chế phạm vi này, ta có thể tránh nhầm lẫn khi đặt tên biến trùng nhau và đảm bảo luồng dữ liệu đúng với ý định của chương trình.

Phạm vi biến là khái niệm quan trọng trong lập trình Nếu một biến được khai báo ở bên ngoài một khối lệnh và không trùng tên với các biến được khai báo bên trong khối, biến đó có thể được truy cập và sử dụng cả ở bên trong lẫn ở bên ngoài khối Điều này có nghĩa là biến ngoài khối có phạm vi nhìn thấy rộng và không bị che khuất bởi các biến nội bộ trong khối Ngược lại, khi bên trong khối khai báo một biến trùng tên với biến ở ngoài, biến ở ngoài sẽ bị che khuất trong phạm vi của khối và chỉ biến bên trong mới được sử dụng khi đang ở bên trong khối Hiểu rõ nguyên tắc này giúp kiểm soát phạm vi biến, tránh lỗi truy cập và tối ưu hóa quản lý biến trong chương trình.

Xét đoạn chương trình sau :

} Khi đó đoạn chương trình sẽ in kết quả như sau : a trong =4 b=6 a ngoài =5 b=6

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

Lệnh gán, lệnh xuất nhập, lệnh gán kết hợp

- Trình bày được cú pháp của các lệnh gán, lệnh xuất nhập;

5.1 Lệnh gán (assignment statement): Dùng để gán giá trị của một biểu thức cho một biến.

Cú pháp: =

Ví dụ: int main() { int x,y; x ; /*Gán hằng số 10 cho biến x*/ y = 2*x; /*Gán giá trị 2*x=2*10 cho x*/ return 0;

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, hay nói cách khác là có sự tương thích giữa các kiểu dữ liệu Điều này giúp chương trình biên dịch đúng và tránh lỗi khi chạy Ví dụ minh họa cho sự không tương thích kiểu trong C: int main() { int x, y; x = 10; /*Gán hằng số 10 cho biến x*/ y = "Xin chao"; } ở đây dòng y = "Xin chao"; là không hợp lệ vì chuỗi không thể gán cho biến kiểu int, cho thấy cần tuân thủ nguyên lý tương thích kiểu hoặc dùng ép kiểu (cast) nếu có yêu cầu.

/*y có kiểu int, còn “Xin chao” có kiểu char* */ return 0;

Khi biên dịch chương trình này, C sẽ báo lỗi "Cannot convert „char *‟ to

„int‟" tức là C không thể tự động chuyển đổi kiểu từ char * (chuỗi ký tự) sang int

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

An example C program demonstrates basic variable declarations and type conversions: it declares int x, y; float r; and char ch It assigns 9000 to r, then sets x to 10, illustrating an integer assignment It assigns the character literal 'd' to y, showing how a char literal can be stored in an int variable It then assigns the character literal 'e' to r, illustrating implicit conversion from char to float Finally, it assigns 65.7 to the char variable ch, highlighting narrowing conversion from float to char The program ends with return 0.

Trong nhiều trường hợp để đảm bảo sự tương thích về kiểu dữ liệu, ta phải thực hiện ép kiểu một cách tường minh Việc chuyển đổi kiểu dữ liệu giúp chương trình hiểu đúng giá trị và tránh lỗi khi xử lý các biến có kiểu khác nhau Cú pháp của phép chuyển đổi kiểu phụ thuộc vào ngôn ngữ lập trình và được trình bày rõ ràng để chỉ ra kiểu đích và kiểu nguồn, từ đó tạo ra sự nhất quán và ổn định cho quá trình xử lý dữ liệu.

Chuyển đổi kiểu của thành kiểu mới Chẳng hạn như: float f; f = (float) 10 / 4; /* f lúc này là 2.5*/

- Khi một biểu thức được gán cho một biến thì giá trị của nó sẽ thay thế giá trị cũ mà biến đã lưu giữ trước đó.

Trong câu lệnh gán, dấu bằng (=) là một toán tử và có thể đóng vai trò là một thành phần của biểu thức; khi biểu thức gán được đánh giá, giá trị của nó bằng với giá trị của biến được gán và biến sẽ lưu trữ giá trị đó.

Ví dụ: int x, y; y = x = 3; /* y lúc này cùng bằng 3*/

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

= ;

2.5.2 Lệnh xuất,nhập a Lệnh nhập

Trong lập trình C, hàm scanf cho phép đọc dữ liệu từ bàn phím và gán cho các biến của chương trình khi chương trình đang thực thi Hàm này thuộc thư viện stdio.h và được sử dụng để nhập dữ liệu theo định dạng đã chỉ định, giúp bạn xử lý nhanh chóng các giá trị người dùng cung cấp.

Cú pháp: scanf(“Chuỗi định dạng”, địa chỉ của các biến);

Chuỗi định dạng là tập hợp các quy tắc dùng để quy định kiểu dữ liệu, cách biểu diễn, độ rộng và số chữ số thập phân của dữ liệu; các định dạng này thường áp dụng khi nhập vào các kiểu dữ liệu như số nguyên, số thực và ký tự, nhằm đảm bảo dữ liệu được lưu trữ và hiển thị đúng chuẩn Ý nghĩa của chuỗi định dạng là kiểm soát cách dữ liệu được biểu diễn, giới hạn độ rộng và độ chính xác, từ đó cải thiện tính nhất quán và hiệu quả xử lý trong hệ thống.

%[số ký số]d Nhập số nguyên có tối đa

%[số ký số] f Nhập số thực có tối đa tính cả dấu chấm

%4d Nhập số nguyên tối đa 4 ký số, nếu nhập nhiều hơn 4 ký số thì chỉ nhận được 4 ký số đầu tiên

Trong ô nhập số thực, giới hạn tối đa là 6 ký tự, bao gồm cả dấu chấm thập phân Nếu người dùng nhập vượt quá 6 ký tự, hệ thống sẽ chỉ nhận 6 ký tự đầu tiên (hoặc 5 ký tự khi có dấu chấm), đảm bảo đầu vào tuân thủ quy tắc này và thuận tiện cho quá trình xử lý dữ liệu.

- Địa chỉ của các biến: là địa chỉ (&) của các biến mà chúng ta cần nhập giá trị cho nó Được viết như sau: &.

Ví dụ: scanf(“%d”,&bien1);/*Doc gia tri cho bien1 co kieu nguyen*/ scanf(“%f”,&bien2); /*Doc gia tri cho bien2 co kieu thưc*/ scanf(“%d%f”,&bien1,&bien2);

/*Doc gia tri cho bien1 co kieu nguyen, bien2 co kieu thuc*/ scanf(“%d%f%c”,&bien1,&bien2,&bien3);

 Chuỗi định dạng phải đặt trong cặp dấu nháy kép (“”)

 Các biến (địa chỉ biến) phải cách nhau bởi dấu phẩy (,)

 Có bao nhiêu biến thì phải có bấy nhiêu định dạng

 Thứ tự của các định dạng phải phù hợp với thứ tự của các biến

Để nhập giá trị kiểu char trong C một cách chính xác, nên dùng fflush(stdin) để làm sạch vùng đệm bàn phím và loại bỏ các ký tự còn lại trước khi gọi scanf(), từ đó giảm thiểu sai lệch khi nhập dữ liệu ký tự và đảm bảo dữ liệu được đọc đúng ý người lập trình.

Để nhập chuỗi ký tự (không chứa khoảng trắng và không kết thúc bằng khoảng trắng) trong ngôn ngữ C, ta cần khai báo kiểu mảng ký tự hoặc con trỏ ký tự, sau đó dùng định dạng %s và truyền tên biến thay cho địa chỉ biến khi nhập dữ liệu Việc kết hợp khai báo đúng kiểu và định dạng %s giúp đảm bảo chuỗi ký tự được lưu trữ đúng vùng nhớ và thuận tiện cho các thao tác xử lý sau này, đồng thời tối ưu hóa quá trình nhập dữ liệu không chứa khoảng trắng.

 Để đọc vào một chuỗi ký tự có chứa khoảng trắng (kết thúc bằng phím Enter) thì phải dùng hàm gets()

Ví dụ: int biennguyen; float bienthuc; char bienchar; char chuoi1[20], *chuoi2;

Nhập giá trị cho các biến: scanf(“%3d”,&biennguyen);

Nếu ta nhập 1234455 thì giá trị của biennguyen là 3 ký số đầu tiên (123) Các ký số còn lại sẽ còn nằm lại trong vùng đệm. scanf(“%5f”,&bienthuc);

Nếu ta nhập 123.446 thì giá trị của bienthuc là 123.4, các ký số còn lại sẽ còn nằm trong vùng đệm. scanf(“%2d%5f”,&biennguyen, &bienthuc);

Nếu ta nhập liên tiếp 2 số cách nhau bởi khoảng trắng như sau: 1223 3.142325

- 2 ký số đầu tiên (12) sẽ được đọc vào cho biennguyen.

- 2 ký số tiếp theo trước khoảng trắng (23) sẽ được đọc vào cho bienthuc scanf(“%2d%5f%c”,&biennguyen, &bienthuc,&bienchar) Nếu ta nhập liên tiếp 2 số cách nhau bởi khoảng trắng như sau: 12345 3.142325:

- 2 ký số đầu tiên (12) sẽ được đọc vào cho biennguyen.

- 3 ký số tiếp theo trước khoảng trắng (345) sẽ được đọc vào cho bienthuc

- Khoảng trắng sẽ được đọc cho bienchar

Nếu ta chỉ nhập 1 số gồm nhiều ký số như sau: 123456789:

- 2 ký số đầu tiên (12) sẽ được đọc vào cho biennguyen.

- 5 ký số tiếp theo (34567) sẽ được đọc vào cho bienthuc.

Trong ngôn ngữ C, scanf("%s", chuoi1) hoặc scanf("%s", chuoi2) sẽ đọc một chuỗi ký tự cho từng biến cho đến khi gặp ký tự trắng (khoảng trắng như space, tab hoặc xuống dòng) Ví dụ nhập "Nguyen Van Linh" thì biến chuoi1 (hoặc chuoi2) nhận giá trị "Nguyen" vì %s chỉ đọc một từ đầu tiên trước dấu trắng Khi dùng scanf("%s%s", chuoi1, chuoi2) và với chuỗi input tương tự, chuoi1 nhận "Nguyen" và chuoi2 nhận "Van" (từ tiếp theo sau khoảng trắng), phần còn lại có thể bị bỏ qua hoặc đòi hỏi nhập tiếp theo tùy cách xử lý buffer Vì vậy với định dạng %s, mỗi đối số nhận một từ liên tiếp, không chứa khoảng trắng; để đọc cả một chuỗi có dấu cách, cần dùng các hàm khác như fgets hoặc đọc từng từ bằng cách lặp và loại bỏ ký tự trắng trước khi nhận chuỗi tiếp theo.

Vì sao như vậy? C sẽ đọc chuỗi từ đầu đến khi gặp khoảng trắng và gán giá trị cho biến đầu tiên; phần còn lại sau khoảng trắng là giá trị của các biến tiếp theo Ví dụ với chuỗi chuoi1 và hàm gets(chuoi1); chuỗi được đọc và các phần tử được phân bổ cho các biến theo thứ tự tương ứng.

Nếu nhập chuỗi : Nguyen Van Linh thì giá trị của biến chuoi1 là Nguyen Van Linh b Lệnh xuất:

Hàm printf (nằm trong thư viện stdio.h) dùng để xuất giá trị của các biểu thức lên màn hình.

Cú pháp: printf(“Chuỗi định dạng ”, Các biểu thức);

Chuỗi định dạng dùng để quy định kiểu dữ liệu, cách biểu diễn, độ rộng và số chữ số thập phân của dữ liệu Đối với số nguyên, số thực và ký tự, một số định dạng áp dụng cụ thể để đảm bảo cách hiển thị và lưu trữ đúng chuẩn Ý nghĩa của định dạng là mô tả cách dữ liệu sẽ được hình thành khi nhập, xuất hoặc xử lý, từ giới hạn độ rộng và số chữ số thập phân đến cách căn lề và biểu diễn ký tự Việc nắm bắt chuỗi định dạng giúp trình bày dữ liệu rõ ràng, nhất quán và hỗ trợ tối ưu hóa nội dung liên quan đến xử lý và hiển thị dữ liệu trên các nền tảng khác nhau.

%[.số chữ số thập phân] f

Xuất số thực có theo quy tắc làm tròn số.

%o Xuất số nguyên hệ bát phân

%x Xuất số nguyênhệ thập lục phân

%e hoặc %E hoặc %g hoặc %G Xuất số nguyên dạng khoa học (nhân 10 mũ x)

%4d In số nguyên tối đa 4 ký số, nếu số cần in nhiều hơn 4 ký số thì in hết

%6f In số thực tối đa 6 ký số (tính luôn dấu chấm), nếu số cần in nhiều hơn 6 ký số thì in hết

%.3f In số thực có 3 số lẻ, nếu số cần in có nhiều hơn 3 số lẻ thì làm tròn

- Các biểu thức: là các biểu thức mà chúng ta cần xuất giá trị của nó lên màn hình, mỗi biểu thức phân cách nhau bởi dấu phẩy (,)

Ví dụ: include int main(){ int bien_nguyen34, ie; float bien_thuc3.456703; printf(“Gia tri nguyen cua bien nguyen

=%d\n”,bien_nguyen); printf(“Gia tri thuc cua bien thuc =%f\n”,bien_thuc); printf(“Truoc khi lam tron=%f \n Sau khi lam tron=%.2f”,bien_thuc, bien_thuc); return 0;

} Kết quả in ra màn hình như sau:

Nếu ta thêm vào dòng sau trong chương trình: printf(“\n Ky tu co ma ASCII %d la %c”,i,i);

Kết quả ta nhận được thêm:

***SORRY, THIS MEDIA TYPE IS NOT SUPPORTED.*** printf(“ So nguyen la %d \n So thuc la %f”,i, (float)i );

***SORRY, THIS MEDIA TYPE IS NOT SUPPORTED.*** printf(“\n So thuc la %f \n So nguyen la %d”,bien_thuc,

***SORRY, THIS MEDIA TYPE IS NOT SUPPORTED.*** printf(“\n Viet binh thuong =%f \n Viet kieu khoa hoc=%e”,bien_thuc, bien_thuc);

Kết quả in ra màn hình:

***SORRY, THIS MEDIA TYPE IS NOT SUPPORTED.***

Lưu ý: Đối với các ký tự điều khiển, ta không thể sử dụng cách viết thông thường để hiển thị chúng.

Ký tự điều khiển là các ký tự đặc biệt được dùng để điều khiển các thao tác xuất nhập dữ liệu, ảnh hưởng đến cách dữ liệu được truyền, nhận và xử lý trong hệ thống Trong tài liệu này, một số ký tự điều khiển được mô tả trong bảng để làm rõ chức năng của chúng trong quá trình giao tiếp dữ liệu và thao tác với chuỗi văn bản, bao gồm các thao tác như xuống dòng, kết thúc chuỗi và định dạng đầu ra.

Ký tự điều khiển Giá trị thập lục phân Ký tự được hiển thị Ý nghĩa

\a 0x07 BEL Phát ra tiếng chuông

\b 0x08 BS Di chuyển con trỏ sang trái 1 ký tự và xóa ký tự bên trái (backspace)

\r 0x0D CR Trở về đầu dòng

\t 0x09 HT Tab theo cột (giống gõ phím Tab)

\ddd ddd Ký tự có mã ACSII trong hệ bát phân là số ddd

\xHHH oxHHH Ký tự có mã ACSII trong hệ thập lục phân là HHH

Đoạn mã C này minh họa cách in ra các ký tự đặc biệt bằng chuỗi escape trong printf: âm thanh beep với \a, di chuyển con trỏ sang trái 1 ký tự bằng \b, in xuống tab \t và in dấu backslash \\; tiếp đó là cách hiển thị các ký tự nháy đơn và nháy kép bằng \' và \", in ký tự hỏi bằng \? và chỉ ra hai cách mã ký tự cho cùng một ký tự 'A': mã octal 101 (\101) và mã thập lục phân 41 (\x41) Chương trình cũng nhắc người dùng nhấn phím để tiếp tục ở từng bước, quay về đầu dòng bằng \r và kết thúc với trả về 0.

Kết quả trước khi gõ phím Enter:}

Kết quả sau khi gõ phím Enter:

Các phép toán

- Trình bày được các phép toán số học, các phép toán quanhệ;

+ : cộng áp dụng trên tất cả các toán hạng có kiểu dữ liệu char, int

– : trừ float, double (kể cả long, short, unsigned)

% : lấy phần dư áp dụng trên các toán hạng có kiểu dữ liệu char, int, long

) chỉ sử dụng cặp ngoặc () trong biểu thức, cặp ngoặc đơn được thực hiện theo thứ tự ưu tiên từ trong ra ngoài

Kết quả của phép toán quan hệ là một số nguyên kiểu int, bằng 1 khi điều kiện đúng và bằng 0 khi điều kiện sai Phép toán quan hệ được áp dụng lên các toán hạng và có thể dùng với các kiểu dữ liệu như char, cho phép so sánh ký tự hoặc giá trị số Việc trả về 1 hoặc 0 giúp việc kiểm tra điều kiện trong chương trình trở nên nhanh chóng và tối ưu cho các ngôn ngữ lập trình.

* Thứ tự ưu tiên giữa toán tử số học và toán tử quan hệ

Toán tử số học Toán tử quan hệ

6 –3 < 4 → có giá trị 1 (đúng), tương đương (6 – 3) < 4

–2 * –4 < 3 + 2 → có giá trị 0 (sai), tương đương (–2 * –4) < (3 + 2)

Cách chạy chương trình

- Dịch và chạy được chương trình C

Ctrl – F9: Dịch và chạy chương trình Alt – F5: Xem màn hình kết quả.

Lệnh rẽ nhánh có điều kiện if

- Nêu được ý nghĩa của lệnh rẽ nhánh if;

- Vận dụng được lệnh rẽ nhánh if vào bài tập lập trình;

Một câu lệnh if cho phép chương trình thực hiện một khối lệnh khi điều kiện được đánh giá là đúng, và bỏ qua hoặc thực thi một khối lệnh khác khi điều kiện sai Nói cách khác, câu lệnh if cho phép chương trình rẽ nhánh, quyết định khối lệnh nào sẽ được thực thi dựa trên kết quả của điều kiện so sánh Thông qua việc sử dụng toán tử so sánh và các cấu trúc mở rộng như else và else if, câu lệnh if giúp kiểm soát luồng chương trình và xử lý các tình huống khác nhau một cách linh hoạt Đây là nền tảng của lập trình điều kiện, rất phổ biến trong các ngôn ngữ như C, Java, Python và nhiều ngôn ngữ khác.

1.2.Cú pháp if (điều kiện) { khối lệnh 1; } else { khối lệnh 2; } if (điều kiện) { khối lệnh 1; }

Trong cú pháp lập trình, câu lệnh if có hai dạng: có else và không có else Điều kiện là một biểu thức logic có giá trị đúng (khác 0) hoặc sai (bằng 0) Khi chương trình thực hiện câu lệnh if, nó sẽ đánh giá biểu thức điều kiện và nếu đúng sẽ thực thi các lệnh trong khối lệnh 1; ngược lại, nếu sai, chương trình sẽ thực thi khối lệnh 2 (nếu có else) hoặc không làm gì (nếu không có else).

Đặc điểm chung của các câu lệnh có cấu trúc là bản thân chúng chứa các câu lệnh khác, cho phép xây dựng các nhánh điều kiện phức tạp và kiểm soát luồng chương trình một cách linh hoạt Điều này làm cho câu lệnh if có thể lồng nhau, cho phép đánh giá nhiều điều kiện theo thứ tự hoặc phụ thuộc lẫn nhau và thực hiện các nhánh mã tương ứng Nhờ khả năng lồng câu lệnh if, mã nguồn trở nên dễ quản lý hơn, giúp tối ưu hóa luồng kiểm tra điều kiện và mở rộng khi bổ sung thêm điều kiện mới.

Trong các câu lệnh if có nhiều cấp lồng nhau, cần xác định đúng đối tượng đi với từ khóa else Quy tắc là else sẽ gắn với câu lệnh if gần nhất chưa được ghép cặp với một else khác Điều này có nghĩa là một else có thể liên kết với if ở mức lồng sâu nhất mà chưa có phần else tương ứng Ví dụ: if (n>0) if (a>b) c = a; else c = b; sẽ được hiểu là if (n>0) { if (a>b) c = a; else c = b; }.

Để tìm số lớn nhất giữa hai số a và b, ta có thể dùng phép gán có điều kiện hoặc câu lệnh nếu Với phép toán gán có điều kiện, max được gán bằng max = (a > b) ? a : b, nghĩa là chọn giá trị lớn hơn giữa a và b Hoặc có thể tìm bằng câu lệnh if: nếu (a > b) max = a; else max = b Cách tiếp cận này đơn giản và hiệu quả cho các bài toán so sánh hai số, đồng thời minh họa cách áp dụng toán tử điều kiện hoặc câu lệnh điều kiện để xác định giá trị lớn nhất.

Ví dụ 2 về tính năm nhuận cho biết một năm n được xem là năm nhuận nếu nó chia hết cho 4 nhưng không chia hết cho 100, hoặc nếu nó chia hết cho 400 Chú ý rằng một số nguyên a được coi là chia hết cho b khi phần dư của phép chia bằng 0, tức là a % b == 0.

{ int nam; cout > nam ; if (nam%4 == 0 && year%100 !=0 || nam%400 == 0) cout

Ngày đăng: 25/10/2022, 20:32

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