trợ trong thư viện chuẩn và những hàm được dịch riêng lẻ khác kết nối lại bởi bộ liên kết để cho ra mã có thể thực thi được. Bộ nạp (Loader): Mã thực thi được thi hành bởi bộ nạp của[r]
Trang 1NHẬP MÔN TIN HỌC
NHỮNG KHÁI NIỆM CƠ BẢN VỀ NGÔN NGỮ C
TS Đào Nam Anh
Trang 2Tài liệu
Slides do TS.Đào Nam Anh thực hiện dựa trên tài liệu [1,2] và các mã nguồn [3]:
1 B W Kernighan and D M Ritchie The C
Programming Language Prentice Hall 1978, ISBN 0-13-110163-3
2 TS.Nguyễn Thị Thu Hà, TS.Nguyễn Hữu
Quỳnh, TS.Nguyễn Thị Thanh Tân,
Giáo trình Nhập môn tin học, Khoa CNTT,
Đại học Điện lực, 2013
Trang 3Nội dung
1 Giới thiệu về ngôn ngữ lập trình C
2 Cấu trúc chương trình C
3 Biên dịch và thực thi một chương trình C
4 Các kiểu dữ liệu cơ sở và dẫn xuất
5 Biến, hằng, định danh
6 Nhập và xuất trong C
7 Bài tập c nh
Trang 41.Giới thiệu về ngôn ngữ lập trình C
4
Ngôn ngữ C do Brian W.Kernighan và Dennis M.Ritchie phát triển vào đầu những năm 70 với mục đích ban đầu là phát triển
hệ điều hành UNIX
Cuố sách viết về C đầu tiên “The Programming Language” do Brian W.Kernighan và Dennis M.Ritchie viết năm 1978
Trang 51.Giới thiệu về ngôn ngữ lập trình C
C được Viện Tiêu chuẩn hoá của Mỹ (ANSI:
American National Standard Institute) làm thành
tiêu chuẩn với tên gọi ANSI C
C rất hiệu quả để viết các chương trình thuộc
nhiều lĩnh vực khác nhau C cũng được dùng để
lập trình hệ thống Mã C rất dễ di chuyển, nghĩa
là phần mềm viết cho loại máy tính này có thể
chạy trên một loại máy tính khác và ít bị lỗi
Trang 61.Giới thiệu về ngôn ngữ lập trình C
.
Ngôn ngữ lập trình C hiện tại thường sử dụng các trình
dịch:
Turbo C/C++, Borland C/C++ của hãng Borland
International Inc
C-Free của của hãng phần mềm ProgramArts
Dev C/C++ của hãng Bloodshed Software
Các phần mềm mã nguồn mở Code::Blocks, Eclipse
MSC, VC của Microsoft Corp
Lattice C của Lattice
Sau này, C++ đã được phát triển từ C, bổ sung các yếu
tố về lập trình hướng đối tượng từ C
Trang 71.Giới thiệu về ngôn ngữ lập trình C
.
C là ngôn ngữ lập trình cấu trúc Tuy nhiên, C không phải
là ngôn ngữ cấu trúc khối, không cho phép việc tạo hàm trong hàm
C là ngôn ngữ có độ thích nghi cao Bởi các kiểu dữ liệu và cấu trúc điều khiển của C có hầu hết trên các máy tính nên thư viện lúc chạy cần để cài đặt chương trình khá gọn
C độc lập với kiến trúc máy đặc thù, mọi chương
trình chạy không liên quan tới sự thay đổi về phần
cứng của máy tính
Trang 81.Giới thiệu về ngôn ngữ lập trình C
.
C được sử dụng rộng rãi trong các lĩnh vực chuyên nghiệp vì đáp ứng được yêu cầu và có tính hiệu quả cao
C cung cấp những cấu trúc điều khiển như các câu
lệnh lựa chọn, lệnh lặp giống ở Pascal
C cung cấp con trỏ và khả năng định địa chỉ số học
C cho phép hàm được gọi đệ quy và các biến cục bộ của hàm sẽ được tự động sinh ra hoặc được tạo mới với mỗi lần gọi mới
C tương đối thoải mái trong chuyển đổi dữ liệu
Trang 91.Giới thiệu về ngôn ngữ lập trình C
u c cơ n a t chương nh C
C có chính xác là 32 từ khóa Những từ khóa này kết hợp với cú pháp của C hình thành ngôn ngữ C Nhưng nhiều
trình biên dịch cho C đã thêm vào những từ khóa dùng cho việc tổ chức bộ nhớ ở những giai đoạn tiền xử lý nhất định
Một số quy tắc khi lập trình C như sau:
Tất cả từ khóa là chữ thường (không in hoa)
Ðoạn mã trong chương trình C có phân biệt chữ thường
và chữ hoa Ví dụ: do while thì khác với DO WHILE
Từ khóa không thể dùng cho các mục đích khác như đặt tên biến (variable name) hoặc tên hàm (function name)
Trang 101.Giới thiệu về ngôn ngữ lập trình C
u c cơ n a t chương nh C
Cấu trúc cơ bản nhất
của C gồm 5 phần:
Phần tiền xử lý, phần
khai báo các biến
ngoài, các hàm
nguyên mẫu, định
nghĩa các hàm và
phần chương trình
chính Một chương
trình C thông thường
có dạng như sau:
#include<stdio.h>//Gọi tiền xử lý
#define // định nghĩa hằng xâu ký tự typedef // Định nghĩa kiểu dữ liệu function prototype // Nguyên mẫu các hàm int x,y; // Phần khai báo các biến ngoài void main // Chương trình chính
{ float a;
int k=6;
printf ();
scanf();
các câu lệnh, lời gọi hàm
getch();
}
function 1// Định nghĩa hàm {
các câu lệnh trong thân của hàm }
function 2 {
các câu lệnh trong thân của hàm }
Trang 111.Giới thiệu về ngôn ngữ lập trình C
u c cơ n a t chương nh C
11
Phần tiền xử lý: Sử dụng các thư viện cần dùng
trong chương trình bắt đầu bằng dấu # và từ khoá
include Tên thư viện được đặt sau từ khoá include
và đặt trong dấu <>
Thư viện hàm chuẩn dùng cho những tác vụ
chung Thư viện ở trong một tập tin (file) lớn
trong khi đa số còn lại chứa nó trong nhiều tập
tin nhỏ
Hàm được chứa trong thư viện có thể được dùng
cho nhiều loại tác vụ khác nhau
Vài trình biên dịch cho phép hàm được thêm vào
thư viện chuẩn trong khi số khác lại yêu cầu tạo
một thư viện riêng
#include<stdio.h>//Gọi tiền xử lý
#define // định nghĩa hằng xâu ký tự typedef // Định nghĩa kiểu dữ liệu function prototype // Nguyên mẫu các hàm int x,y; // Phần khai báo các biến ngoài void main // Chương trình chính
{ float a;
int k=6;
printf ();
scanf();
các câu lệnh, lời gọi hàm
getch();
}
function 1// Định nghĩa hàm {
các câu lệnh trong thân của hàm }
function 2 {
các câu lệnh trong thân của hàm }
Trang 121.Giới thiệu về ngôn ngữ lập trình C
u c cơ n a t chương nh C
CNTT Nhập môn tin học
12
Phần khai báo các biến ngoài: Đây là
khu vực các biến toàn cục, được khai báo
tại phần các biến ngoài của chương trình
C
Khai báo các hàm nguyên mẫu: Trong
Pascal chương trình con có 2 loại: thủ tục
và hàm, ở trong C chỉ có một loại chương
trình con duy nhất đó là hàm Hàm trong
C có thể trả về giá trị hay không trả về
giá trị Trong các hàm có sử dụng khai
báo các biến dùng trong phạm vi hàm đó
#include<stdio.h>//Gọi tiền xử lý
#define // định nghĩa hằng xâu ký tự typedef // Định nghĩa kiểu dữ liệu function prototype // Nguyên mẫu các hàm int x,y; // Phần khai báo các biến ngoài void main // Chương trình chính
{ float a;
int k=6;
printf ();
scanf();
các câu lệnh, lời gọi hàm
getch();
}
function 1// Định nghĩa hàm {
các câu lệnh trong thân của hàm }
function 2 {
các câu lệnh trong thân của hàm }
Trang 131.Giới thiệu về ngôn ngữ lập trình C
u c cơ n a t chương nh C
13
Phần định nghĩa các hàm: Chương trình C
được chia thành từng đơn vị gọi là hàm
Tên hàm luôn được theo sau là cặp dấu
ngoặc đơn () Trong dấu ngoặc đơn có thể
có hay không có các tham số (parameters)
Một định nghĩa hàm thường gồm các câu
lệnh, lời gọi hàm, chúng đều được nằm
giữa 2 dấu {} Dấu ngoặc nhọn mở { đánh
dấu điểm bắt đầu của một khối mã lệnh, dấu
ngoặc nhọn đóng } đánh dấu điểm kết thúc
của khối mã lệnh đó
#include<stdio.h>//Gọi tiền xử lý
#define // định nghĩa hằng xâu ký tự typedef // Định nghĩa kiểu dữ liệu function prototype // Nguyên mẫu các hàm int x,y; // Phần khai báo các biến ngoài void main // Chương trình chính
{ float a;
int k=6;
printf ();
scanf();
các câu lệnh, lời gọi hàm
getch();
}
function 1// Định nghĩa hàm {
các câu lệnh trong thân của hàm }
function 2 {
các câu lệnh trong thân của hàm }
Trang 141.Giới thiệu về ngôn ngữ lập trình C
u c cơ n a t chương nh C
14
Phần chương trình chính - Hàm main():
Hàm main() là hàm đầu tiên được gọi đến
khi một chương trình bắt đầu chạy Hệ
điều hành luôn trao quyền điều khiển cho
hàm main() khi một chương trình C được
thực thi Lệnh getch() cuối thân chương
trình dùng để lưu lại trên màn hình các kết
quả
#include<stdio.h>//Gọi tiền xử lý
#define // định nghĩa hằng xâu ký tự typedef // Định nghĩa kiểu dữ liệu function prototype // Nguyên mẫu các hàm int x,y; // Phần khai báo các biến ngoài void main // Chương trình chính
{ float a;
int k=6;
printf ();
scanf();
các câu lệnh, lời gọi hàm
getch();
}
function 1// Định nghĩa hàm {
các câu lệnh trong thân của hàm }
function 2 {
các câu lệnh trong thân của hàm }
Trang 151.Giới thiệu về ngôn ngữ lập trình C
u c cơ n a t chương nh C
15
Dấu kết thúc câu lệnh: Dòng int x,y;
trong đoạn mã mẫu là một câu lệnh
(statement) Một câu lệnh trong C được kết
thúc bằng dấu chấm phẩy (;) C không hiểu
việc xuống dòng dùng phím enter, khoảng
trắng dùng phím spacebar hay một khoảng
cách do dùng phím tab Có thể có nhiều
hơn một câu lệnh trên cùng một hàng
nhưng mỗi câu lệnh phải được kết thúc
bằng dấu chấm phẩy Một câu lệnh không
được kết thúc bằng dấu chấm phẩy được
xem như một câu lệnh sai
#include<stdio.h>//Gọi tiền xử lý
#define // định nghĩa hằng xâu ký tự typedef // Định nghĩa kiểu dữ liệu function prototype // Nguyên mẫu các hàm int x,y; // Phần khai báo các biến ngoài void main // Chương trình chính
{ float a;
int k=6;
printf ();
scanf();
các câu lệnh, lời gọi hàm
getch();
}
function 1// Định nghĩa hàm {
các câu lệnh trong thân của hàm }
function 2 {
các câu lệnh trong thân của hàm }
Trang 161.Giới thiệu về ngôn ngữ lập trình C
u c cơ n a t chương nh C
Dòng chú thích (Comment): Những chú thích thường
được viết để mô tả công việc của một lệnh đặc biệt, một hàm hay toàn bộ chương trình Trình biên dịch sẽ không dịch chúng Trong C, chú thích bắt đầu bằng ký hiệu /*
và kết thúc bằng */ Trường hợp chú thích có nhiều
dòng, ta phải chú ý ký hiệu kết thúc (*/), nếu thiếu ký hiệu này, toàn bộ chương trình sẽ bị coi như là một chú thích Trong trường hợp chú thích chỉ trên một dòng ta
có thể dùng // Ví dụ:
float a; // Biến ‘a’ đã được khai báo như là một kiểu số thực (float)
Trang 171.Giới thiệu về ngôn ngữ lập trình C
Biên ch c thi t chương nh
# include file
Tập tin thêm vào
Source file
Mã nguồn
Compiler
Trình biên dịch
Object File
Tập tin đối tượng
Library File
Thư viện
Other User-generated Object
File
Các tập tin thực thi khác của người
dùng
Linker
Bộ liên kết
Executable File
Tập tin thực thi
Trang 181.Giới thiệu về ngôn ngữ lập trình C
Biên ch c thi t chương nh
18
Soạn thảo/Xử lý từ: Lập trình viên dùng một trình
xử lý từ (word processor) hay trình soạn thảo (editor)
để viết mã nguồn (source code) C chỉ chấp nhận loại
mã nguồn viết dưới dạng tập tin văn bản chuẩn
Mã nguồn: Ðây là đoạn văn bản của chương trình mà
người dùng có thể đọc Nó là đầu vào của trình biên dịch C
Bộ tiền xử lý C: Từ mã nguồn, bước đầu tiên là
chuyển nó qua bộ tiền xử lý của C Bộ tiền xử lý này
sẽ xem xét những câu lệnh bắt đầu bằng dấu #
Những câu lệnh này gọi là các chỉ thị tiền biên dịch (directives)
Trang 191.Giới thiệu về ngôn ngữ lập trình C
Biên ch c thi t chương nh
Mã nguồn mở rộng C: Bộ tiền xử lý của C khai triển
các chỉ thị tiền biên dịch và đưa ra kết quả
Trình biên dịch C (Compiler)
Trình biên dịch C dịch mã nguồn mở rộng thành ngôn ngữ máy để máy tính hiểu được Nếu chương trình
quá lớn nó có thể được chia thành những tập tin riêng biệt và mỗi tập tin có thể được biên dịch riêng rẽ
Trang 201.Giới thiệu về ngôn ngữ lập trình C
Biên ch c thi t chương nh
Bộ liên kết (Linker): Mã đối tượng cùng với những thủ tục hỗ
trợ trong thư viện chuẩn và những hàm được dịch riêng lẻ khác kết nối lại bởi bộ liên kết để cho ra mã có thể thực thi được
Bộ nạp (Loader): Mã thực thi được thi hành bởi bộ nạp của
hệ thống