Professional Documents
Culture Documents
1
NỘI DUNG
Chương 1: Tổng quan
*Tổng quan ngôn ngữ C
*Các thành phần trong C
*Nhập, xuất
*Xử lý lỗi
2
LỊCH SỬ RA ĐỜI
*Ngôn ngữ C do Dennis Ritchie xây dựng từ
năm 1972 tại phòng thí nghiệm Bell Telephone
với mục đích tạo ngôn ngữ để viết HĐH UNIX.
Song nhờ có các tính năng ưu việt và tính mềm
dẻo nên được giới tin học chấp nhận
*Năm 1978, xuất bản quyển sách “The C
programming language” do Kernighan và
Ritchie viết.
3
ĐẶC ĐIỂM
* Bộ lệnh phù hợp với phương pháp lập trình có
cấu trúc
* Kiểu dữ liệu phong phú, cho phép định nghĩa
kiểu dữ liệu mới.
* Linh động về cú pháp, ít từ khóa.
*Ngôn ngữ mạnh và mềm dẻo, được dùng để viết
OS, chương trình điều khiển, soạn thảo văn bản,
đồ hoạ, bảng tính… và các chương trình dịch cho
các ngôn ngữ khác .
4
KHUYẾT ĐIỂM
6
Giới thiệu cơ bản về Dev-C++
7
Cấu trúc một chương trình C
8
Cấu trúc một chương trình C
Về cơ bản C không qui định 1 cách chặt chẽ cấu
trúc của một chương trình; C chỉ qui định một
chương trình phải có hàm main, và đồng thời đó là
chương trình chính của chương trình. Thông
thường một chương trình C gồm các phần:
*Khai báo thư viện;
*Khai báo biến; hằng;
*Chương trình chính;
9
Cấu trúc một chương trình C
10
CÁCH TRÌNH BÀY CHƯƠNG
TRÌNH
*Mỗi lệnh nằm trên một dòng. Cuối dòng
lệnh PHẢI có dấu chấm phẩy (;).
*Lệnh quá dài có thể được viết thành nhiều
dòng sao cho mỗi lệnh phải được quan sát
trọn vẹn trong pham vi cửa sổ lệnh.
11
CÁCH TRÌNH BÀY CHƯƠNG
TRÌNH (tt)
*Không nên đặt nhiều lệnh trên cùng một
dòng, ngay cả các khai báo biến, nếu các
biến có khác kiểu cũng nên đặt trên các
dòng khác nhau.
*Có các chú thích, ghi chú đầy đủ
*Chương trình phân cấp các khối lệnh con
theo từng cột
12
Tạo chương trình đầu tiên
13
Tạo chương trình đầu tiên
#include <stdio.h>
void main()
{
printf("Xin chao cac ban!");
}
Hoặc
#include <stdio.h>
int main()
{
printf("Xin chao cac ban!");
return 0;
} 14
Tạo chương trình đầu tiên
*B3: Lưu lại với tên file là bt1.cpp (lưu ngoài màn
hình hoặc document)
*B4: Click nút ktra lỗi F9
*B5: Click nút chạy chương trình F10
*Lưu ý: Thử lại click F11 ( cả ktra và chạy chương
trình)
15
Tạo chương trình đầu tiên
16
CÁC KHÁI NIỆM
20
CÁC KHÁI NIỆM
21
CÁC KHÁI NIỆM
22
CÁC KHÁI NIỆM
24
DÒNG GHI CHÚ (COMMENT)
25
CÁC THÀNH PHẦN TRONG C
26
KHAI BÁO SD THƯ VIỆN
27
KHAI BÁO SD THƯ VIỆN
31
BỘ KÝ TỰ THƯỜNG DÙNG
34
KIỂU SỐ NGUYÊN
KIỂU LUẬN LÝ
STT TÊN KIỂU GHI CHÚ KÍCH THƯỚC
1 bool Gồm 2 giá trị: true hoặc false
36
BT3.CPP
37
TÊN
*Mỗi chúng ta ai cũng có tên, do vậy trong lập
trình C các thành phần cũng sẽ có tên. Ví dụ như
tên hàm, tên biến, tên hằng số, tên nhãn,…
*Tên hợp lệ là một chuỗi liên tiếp gồm ký tự chữ,
số hoặc dấu gạch dưới. Tên phân biệt chữ hoa
chữ thường và không trùng với từ khóa.
*Tên phân biệt chữ hóa chữ thường nên: a khác
A, TỔNG khác tính tổng.
38
TÊN
39
BIẾN
40
QUY TẮC ĐẶT TÊN
Dùng để đặt tên biến, tên hằng, tên hàm, …
* Bắt đầu bằng một ký tự.
* Các ký tự trong tên biến chỉ có thể là các ký tự
chữ, số hoặc dấu gạch dưới (_)
* Không được trùng với các từ khoá.
* Không được trùng với phạm vi khai báo.
* Tên dễ hiểu, súc tích và gợi nhớ.
* Phân biệt chữ hoa và thường
41
KHAI BÁO BIẾN
42
BT4.CPP
43
PHẠM VI BIẾN
* Mỗi biến được khai báo ở đâu thì sẽ được dùng
và có phạm vi hoạt động tương ứng từ nơi nó
khai báo đến dấu đóng ngoặc nhọn } ngang cấp
với nó.
* Biến toàn cục
* Biến cục bộ
* Biến tĩnh
44
BT5.CPP
45
ĐỊNH NGHĨA HẰNG SỐ
*Hằng là đại lượng không thay đổi giá trị trong quá trình thi hành
chương trình
*Dùng toán tử #define
Cú pháp: #define <tên_hằng> <giá_trị_hằng>
Ví dụ: #define MAX 100;
*Biến hằng được định nghĩa nhờ từ khoá const với cú pháp như sau:
const <kiểu_dữ_liệu> <tên_biến> = <giá_trị>;
Ví dụ: const int MAX = 100;
47
HẰNG SỐ
*Hằng ký tự: Được đặt trong dấu nháy đơn. Ví dụ: 'A', 'a'
tương ứng với giá trị nguyên 65, 97 trong bảng mã
ASCII.
*Hằng chuỗi: Là tập hợp các ký tự được đặt trong cặp dấu
nháy kép " ". Ví dụ: “Lap trinh C"
*Chú ý: Một hằng chuỗi được trữ tận cùng bằng ký tự null
(\0)
48
HẰNG SỐ
49
HẰNG SỐ
50
BT6.CPP
51
TOÁN TỬ TOÁN HỌC
52
BT7.CPP
53
ÉP KIỂU
*Thông thường, nếu cả hai toán hạng là số nguyên sau đó
kết quả sẽ là một số nguyên.
*Tuy nhiên, một hoặc cả hai toán hạng là số thực thì sau
đó kết quả sẽ là một số thực.
*Khi cả hai toán hạng của toán tử chia là số nguyên thì sau
đó phép chia được thực hiện như là một phép chia số
nguyên và không phải là phép chia thông thường mà
chúng ta sử dụng.
54
ÉP KIỂU
*Phép chia số nguyên luôn cho kết quả là phần nguyên của
thương.
*Ví dụ: 7 / 5 = 1 chứ không phải 7 / 5 = 1.4.
*Để khắc phục lỗi này thì ta có thể chuyển một số hoặc cả
2 số sang kiểu thực rồi thực hiện phép chia.
*Cách chuyển kiểu (hay ép kiểu) ta như sau:
(kiểu cần chuyển) biến.
VD: (float) a;
55
BT8.CPP
56
TOÁN TỬ QUAN HỆ
57
TOÁN TỬ LÝ LUẬN
58
TOÁN TỬ TĂNG GIẢM
*Các toán tử tăng một (++) và giảm một (- -) cung cấp các
tiện lợi tương ứng cho việc cộng thêm 1 vào một biến số
hay trừ đi 1 từ một biến số.
59
BT9.CPP
60
TOÁN TỬ GÁN
61
TOÁN TỬ GÁN
62
BT10.CPP
63
TOÁN TỬ LẤY KÍCH THƯỚC
64
THỨ TỰ ƯU TIÊN PHÉP TOÁN
Toán tử Độ ưu tiên Trình tự kết hợp
() [] -> 1 Từ trái qua phải
! ~ ++ -- - + * & sizeof 2 Từ phải qua trái
* / % 3 Từ trái qua phải
+ - 4 Từ trái qua phải
<< >> 5 Từ trái qua phải
< <= >= > 6 Từ trái qua phải
== != 7 Từ trái qua phải
& 8 Từ trái qua phải
| 9 Từ trái qua phải
^ 10 Từ trái qua phải
&& 11 Từ trái qua phải
|| 12 Từ trái qua phải
? : 13 Từ phải qua trái
= += -= *= /= %= 65 14 Từ phải qua trái
66
Tập tin Header <stdio.h>
*#include<stdio.h> - câu lệnh tiền xử lý
*stdio.h - tập tin header (header file)
*Chứa các macro sử dụng cho nhiều hàm nhập/xuất trong
C
*Các macro trong stdio.h giúp các hàm printf(), scanf(),
putchar(), getchar() thực thi
67
Chữ f trong printf và scanf
*Chúng ta đã biết print nghĩa là in, scan là quét hay ta gọi
trong này là để nhập.
*Vậy tại sao chúng lại có chữ f đằng sau để thành printf và
scanf ?
*Chữ f này có nghĩa là format (định dạng).
68
CHUỖI ĐỊNH DẠNG
STT KIỂU GHI CHÚ ĐỊNH DẠNG
KIỂU LIÊN TỤC (SỐ THỰC)
1 float %f
2 double %lf
3 long double %lf
KIỂU RỜI RẠC (SỐ NGUYÊN)
Ký tự %c
1 char
Số nguyên %d
2 unsigned char Số nguyên dương %d
3 int Số nguyên %d
4 unsigned int Số nguyên dương %u
5 long Số nguyên %ld
6 unsigned long Số nguyên dương %lu
7 char * Chuỗi %s
69
printf ( )
*Cú pháp:
printf(“Chuỗi định dạng ”,[Các biểu thức]);
*Giải thích:
➢Chuỗi định dạng: dùng để qui định kiểu dữ liệu, cách
biểu diễn, độ rộng, số chữ số thập phân... Một số định
dạng khi đối với số nguyên, số thực, ký tự.
➢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 (,).
70
printf ( )
71
printf ( )
72
printf ( )
73
printf ( )
74
BT12.CPP
75
scanf()
*Cú pháp:
scanf(“Chuỗi định dạng”, địa chỉ của các biến);
*Giải thích:
➢Chuỗi định dạng: dùng để qui định kiểu dữ liệu, cách
biểu diễn, độ rộng, số chữ số thập phân... Một số định
dạng khi nhập kiểu số nguyên, số thực, ký tự.
➢Đị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:
&<tên biến>.
76
KIỂU DỮ LIỆU CƠ BẢN
77
KIỂU DỮ LIỆU DẪN XUẤT
78
BT13.CPP
79
Lỗi khi nhập chuỗi bằng scanf
*Nếu dùng hàm scanf để nhập chuỗi thì sẽ thấy rằng
không thể nhập được chuỗi có dấu cách hoặc nếu trước
đó nhập số thì sau đó không nhập được chuỗi nữa.
*Lý do là scanf chỉ đọc được dữ liệu không có khoảng
trắng (đấu cách, dấu tab, enter, …) và các khoảng cách
này sẽ được lưu vào bộ đệm bàn phím do đó chỉ nhận
được chuỗi đầu tiên trước đấu cách mà thôi, sau mỗi dấu
cách, các giá trị tiếp theo nếu phù hợp với kiểu dữ liệu
của các biến tiếp theo thì nó sẽ gán luôn cho chúng và sẽ
không được nhập nữa
80
BT14.CPP
81
BT14.CPP
82
KHẮC PHỤC
*Để nhập được chuỗi có khoảng trắng (dấu cách) chúng ta
sử dụng hàm gets.
83
BT15.CPP
84
VÙNG ĐỆM NHẬP/XUẤT
*Là một không gian lưu trữ tạm thời trong bộ nhớ hoặc
trên thẻ điều khiển thiết bị
*Được sử dụng để đọc và viết các ký tự ASCII
*Bộ đệm Nhập/Xuất: Buffered File I/O, Console I/O
*Các hàm Console I/O chuyển các thao tác đến thiết bị
xuất nhập chuẩn của hệ thống
*Trong ‘C’ các hàm console I/O đơn giản nhất là:
➢getchar( )
➢putchar( )
85
getchar( )
*Hàm không có đối số.
*Dùng đọc dữ liệu nhập, một ký tự từ bàn phím
*Các ký tự đặt trong vùng đệm đến khi người dùng gõ
phím enter
86
BT16.CPP
87
putchar( )
*Hàm xuất ký tự trong ‘C’
*Có một đối số
88
BT17.CPP
89
XUẤT KÝ TỰ ĐẶC BIỆT
Ký tự Ý nghĩa Ví dụ
printf(“ \’ ”);
\’ Xuất dấu nháy đơn
Kết quả: ‘
printf(“ \” ”);
\” Xuất dấu nháy đôi
Kết quả: “
Xuất dấu chéo pritnf(“ \\ ”);
\\
ngược “\” Kết quả: \
Dùng để gán ký tự
\0 Ký tự Null
kết thúc của chuỗi
\a Alert : Tiếng bip
90
XUẤT KÝ TỰ ĐẶC BIỆT
Ký tự Ý nghĩa Ví dụ
Tab vào một printf(“xyz\tzyx”);
\t
đoạn ký tự trắng Kết quả: xyz zyx
print("xyz\t\bzyx”);
\b Xuất lùi về sau
Kết quả: xyzzyx
printf(“xyz\nzyx”);
\n hoặc
Xuống dòng Kết quả: xyz
endl
zyx
printf("xyz\rzyx”);
\r Về đầu dòng 91
Kết quả: zyx
92
CÁC LỖI THƯỜNG GẶP KHI
VIẾT CHƯƠNG TRÌNH
*Quên khai báo các biến sử dụng trong chương
trình.
*Lưu một giá trị vào một biến nhưng không cùng
kiểu dữ liệu với biến.
93
CÁC LỖI THƯỜNG GẶP KHI
VIẾT CHƯƠNG TRÌNH
*Sử dụng giá trị của phép chia không chính xác. Lỗi này
thường xuất hiện trong các biểu thức có nhiều toán hạng
và lỗi này rất khó phát hiện.
Ví dụ: 3.2 + 2/3 + 1.5 thì sẽ cho kết quả sẽ bằng 4.7
thay vì kết quả đúng phải bằng 5.36666666666667
*Sử dụng một biểu thức mà trong đó chứa nhiều loại dữ
liệu nhưng lại không biết chắc chắn kiểu dữ liệu của kết
quả.
94
BÀI TẬP 1
Cho biết kết quả của những lệnh sau:
int a, b;
b=a++ + ++a + --a;
printf("a=%d, b=%d“,a,b);
Với a = 2 Kết quả:
Với a = 9 Kết quả:
----------------------------------------------------------------------
int a, b;
b=--a + --a;
--b;
printf(“a=%d, b=%d,a,b);
Với a = 19 Kết quả:
95
Với a = 10 Kết quả:
int a, b;
b=a%2 + a/2 + --a;
printf("a=%d, b=%d“,a,b);
Với a = 17 Kết quả:
Với a = 3 Kết quả:
------------------------------------------------------------------------------------
int a, b;
b=a/3 + a--;
printf("a=%d, b=%d“,a,b);
Với a = 8 Kết quả:
Với a =21 Kết quả:
-----------------------------------------------------------------------------------
96
Các định danh nào sau đây là không hợp lệ?
* Main
* Tinh Tong
* Tinh-Tong
* Tinh_Tong
* x_Mu_2
* 2_Mu_2
* using
* class
* Tien$
* default
* yahoo.com
97
* Cho biết những chỗ sai và sửa lại cho đúng
int n = -100;
uint i = -100;
int = 2.9;
long m = 2, p = 4;
int 2k;
float y = y * 2;
char ch = “b”;
*Viết chương trình in ra màn hình thông tin cá nhân theo
mẫu sau:
Ho ten:
Lop:
Thong tin lien lac:
Dia chi:
98
So dien thoai:
BÀI TẬP 2
Mô tả giải thuật bằng mã giả, lưu đồ và viết các
chương trình sau:
* Viết chương trình nhập vào giờ phút và giây,
đổi ra giây và xuất kết quả ra màn hình.
* Viết chương trình nhập vào 3 số nguyên a, b
và c, tính giá trị trung bình cộng của 3 số trên
và xuất kết quả ra màn hình.
99
* Viết chương trình cho phép nhập vào một số đo
nhiệt độ theo độ Fahrenheit và xuất ra nhiệt độ
tương đương của nó theo độ Celsius, sử dụng
công thức chuyển đổi:
5 0
0
C = ( F − 32)
9
* Viết chương trình nhập vào 3 số nguyên a, b và
c, cho biết 3 số vừa nhập có thứ tự tăng dần
(a<b<c) không? Và xuất kết quả.
100