Là kỹ thuật cài đặt một hoặc nhiều thuật toán
(giải thuật) có liên quan với nhau bằng một hoặc
nhiều ngôn ngữ lập trình để tạo ra một chương
trình máy tính.
Có 2 loại lập trình:
1. Lập trình thủ tục.
2. Lập trình hướng đối tượng.
36 trang |
Chia sẻ: lylyngoc | Lượt xem: 1756 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Chương 1: Khái niệm cơ bản về C, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
TIN HỌC ĐẠI CƯƠNG
Lý thuyết: 6 buổi
Thực hành: 8 buổi
GVHD: Dương Khai Phong
Email: khaiphong@gmail.com
Ngôn ngữ lập trình: C
NỘI DUNG CÁC BUỔI HỌC
1. Tổng quan về C (chương 1,2)
2. Các cấu trúc điều khiển trong C (chương 3)
3. Hàm và cấu trúc chương trình (chương 4)
4. Mảng, chuỗi và con trỏ (chương 5)
5. Kiểu cấu trúc, đệ qui, tập tin (chương 6,7,8)
6. Ôn tập
CHƯƠNG 1: KHÁI NIỆM CƠ BẢN VỀ C
1. Lập trình là gì?
2. Cấu trúc cơ bản của một chương trình C
3. Các kiểu dữ liệu cơ sở
4. Hằng, biến
5. Nhập / xuất dữ liệu
6. Tìm hiểu một số chương trình mẫu
1. LẬP TRÌNH LÀ GÌ?
Là kỹ thuật cài đặt một hoặc nhiều thuật toán
(giải thuật) có liên quan với nhau bằng một hoặc
nhiều ngôn ngữ lập trình để tạo ra một chương
trình máy tính.
Có 2 loại lập trình:
1. Lập trình thủ tục.
2. Lập trình hướng đối tượng.
1. LẬP TRÌNH LÀ GÌ?
BÀI
TOÁN
THUẬT
GIẢI
NGÔN NGỮ
LẬP TRÌNH
MÁY
TÍNH
Ngôn ngữ lập
trình? Dùng ngôn
ngữ lập trình nào?
1. LẬP TRÌNH LÀ GÌ?
Ngôn ngữ lập trình: là một hệ thống được ký
hiệu hóa theo một dạng nào đó mà cả người và
máy đều hiểu được.
Phân loại:
1. Ngôn ngữ Pascal
2. Ngôn ngữ Visual Basic
3. Ngôn ngữ C
4. Ngôn ngữ Java
5. …
1. LẬP TRÌNH LÀ GÌ?
Ngôn ngữ lập trình C: là phương tiện để mô tả
thuật giải có nhiều đặc điểm:
Linh động về cú pháp.
Một chương trình C chia thành một hoặc
nhiều hàm rời nhau.
Kiểu dữ liệu phong phú.
2. CẤU TRÚC CƠ BẢN CỦA MỘT CHƯƠNG
TRÌNH C:
< Khai báo hằng,
biến toàn cục >
#include
#include
#define PI 3.14
void Giai_PT_Bac_I();
void main()
{
…
}
void Giai_PT_Bac_I()
{
…
}
3. CÁC KIỂU DỮ LIỆU CƠ SỞ:
KÝ TỰ SỐ
CHUỖI SỐ NGUYÊN
SỐ THỰC
(DẤU PHẨY ĐỘNG)
Nhu cầu
KIỂU KHÔNG
GIÁ TRỊ: VOID
3. CÁC KIỂU DỮ LIỆU CƠ SỞ:
Kiểu ký tự: (char) là kiểu dữ liệu dùng để biểu
diễn ký tự thông qua bảng mã ASCII.
Bảng mã ASCII: là bảng mã máy tính dùng để
biểu diễn các kí tự (có 256 kí tự trong bảng mã này).
Chiếm 1 byte trong bộ nhớ.
Phân loại:
Kiểu ký tự
Phạm vi
biểu diễn
Số ký tự
Kích thước
bộ nhớ
char
(signed char)
-128 -> 127 256 1 byte
unsigned char 0 -> 256 256 1 byte
3. CÁC KIỂU DỮ LIỆU CƠ SỞ:
Kiểu số nguyên: là kiểu dữ liệu dùng để biểu
diễn các con số nguyên (không có phần thập phân)
Phân loại:
Kiểu số
Phạm vi
biểu diễn
Kích
thước bộ
nhớ
int -32768-> 32767 2 byte
unsigned int 0 -> 65535 2 byte
long (int) -2 tỷ.. -> +2 tỷ.. 4 byte
unsigned long (int) 0 -> 4 tỷ.. 4 byte
3. CÁC KIỂU DỮ LIỆU CƠ SỞ:
Kiểu dấu phẩy động: là kiểu dữ liệu dùng để biểu
diễn các con số dạng số thực (có phần thập phân)
Phân loại:
Kiểu số
Phạm vi
biểu diễn
Số chữ
Số có
nghĩa
Kích
thước
bộ nhớ
float -3.4E-38 -> 3.4E+38 7-8 4 byte
double -1.7E-308 -> 1.7E+308 15-16 8 byte
long double --3.4E-4932 -> 3.4E+4932 17-18 10 byte
4. HẰNG – BIẾN :
Hằng: là một giá trị bất biến trong suốt quá
trình thực thi chương trình. Hằng tương ứng với
các kiểu dữ liệu nhất định.
Phân loại:
• Hằng số
• Hằng ký tự
• Hằng chuỗi
4. HẰNG – BIẾN :
Hằng số: là một giá trị số đã xác định (có thể là số
nguyên hay số thực).
Cách định nghĩa một hằng trong chương trình:
#include
#include
#define PI 3.14
#define LUONGCANBAN 300000
void main()
{
…
}
Định nghĩa một hằng PI có
giá trị 3.14
4. HẰNG – BIẾN :
Hằng ký tự: là một giá trị ký tự đã xác định được
viết trong cặp dấu ngoặc đơn (‘’) (giá trị này tương
ứng với một giá trị trong bảng mã ASCII).
Cách định nghĩa một hằng trong chương trình:
#include
#include
#define MY_LETTER ‘A’
const int my_letter=‘a’;
void main()
{
…
}
Định nghĩa hằng bằng từ
khóa const
4. HẰNG – BIẾN :
Hằng chuỗi: là một giá trị chuỗi ký tự đã xác định
được viết trong cặp dấu ngoặc kép(“…”). Một hằng
chuỗi được lưu trữ tận cùng bằng ký tự null (\0).
Ví dụ: hằng chuỗi “Turbo C” sẽ được lưu như sau:
Cách định nghĩa một hằng trong chương trình:
#include
#include
#define MY_STR “Chao cac ban”
void main()
{…
}
T U R B O C \0
4. HẰNG – BIẾN :
Biến: là một giá trị có thể thay đổi được khi thực
thi chương trình.
Trước khi sử dụng biến ta cần phải khai báo
biến theo cú pháp sau:
#include
#include
#define MY_STR “Chao cac ban”
void main()
{
float x;
int a,b;
}
Khi có nhiều tên biến thì
giữa các biến ta phải dùng
dấu phẩy ‘,’
4. HẰNG – BIẾN :
Khởi tạo giá trị cho Biến: ta có thể gán cho
biến một giá trị ngay khi khai báo
#include
#include
#define MY_STR “Chao cac ban”
void main()
{
float x=5.2;
int a,b;
char kytu=‘D’;
a=15;
}
5. NHẬP / XUẤT DỮ LIỆU:
Các hàm nhập / xuất trong thư viện
chuẩn stdio.h:
Xuất / nhập cơ bản: printf / scanf
Nhập / xuất chuỗi: gets / puts
Nhập / xuất ký tự: getchar / putchar
5. NHẬP / XUẤT DỮ LIỆU CƠ BẢN:
Công dụng: dùng để xuất nội dung, thông tin các
hằng, biến ra màn hình.
Cú pháp:
printf(“dòng điều khiển”,[các biểu thức]);
Trong đó: dòng điều khiển có thể là:
Nội dung thông báo: chuỗi, số, …
Các ký tự điều khiển: \n, \t, \r, … (xem trang 15)
Các mã đặc tả để in các biểu thức tương ứng (mỗi
biểu thức khi in phải có một đặc tả). (xem trang 39)
printf
5. NHẬP / XUẤT DỮ LIỆU CƠ BẢN:
Bảng mô tả ý nghĩa các ký tự đặc tả:
printf
Kiểu dữ liệu Mã đặc tả Tác dụng
char %c
In một ký tự có mã ASCII
tương ứng.
int
long int
%[n]d
%[n]ld
In một số nguyên có chiều dài
n số.
float
double
%[n.m]f
%[n.m]lf
In một số thực có chiều dài n
số và m số thập phân
Chuỗi char[n] %s In một chuỗi ký tự
\n Xuống hàng
\t Cách một khoảng Tab
5. NHẬP / XUẤT DỮ LIỆU CƠ BẢN:
Ví dụ 1: xuất thông báo “Chào bạn, bạn khỏe không?”
printf(“Chao ban, ban khoe khong?”);
Ví dụ 2: xuất thông báo “Giá trị của PI là ….” với PI là
một hằng số có giá trị là 3.14
printf(“Gia tri cua PI la %f ”,PI);
Ví dụ 3: xuất thông báo “Dien tich HCN có dai=… và
rong=… la …” với dai,rong,DT là các biến số nguyên
printf(“Dien tich HCN có dai=%d và rong=%d la %d ”,
dai,rong,DT);
printf
5. NHẬP / XUẤT DỮ LIỆU CƠ BẢN:
Công dụng: dùng để nhập nội dung, thông tin cho các
biến, mảng.
Cú pháp chung:
scanf(“Mã đặc tả”,<Danh sách địa chỉ các biến tương
ứng với mã đặc tả>);
Ví dụ:
1. Nhập giá trị cho tuổi (tuổi là một biến số nguyên)
scanf(“%d”,&tuoi);
2. Nhập giá trị cho chiều dài, rộng của hình chữ nhật (dai,rong
là các biến số thực).
scanf(“%f%f”,&dai,&rong);
scanf
5. NHẬP / XUẤT DỮ LIỆU CƠ BẢN:
Lưu ý: khi dùng lệnh scanf để nhập dữ liệu là chuỗi
theo mã đặc tả là %s thì chuỗi nhập phải không có
khoảng trắng. (xem trang 44) Để nhập chuỗi có khoảng
trắng ta phải dùng theo cú pháp sau:
scanf(“%[^\n]”,Tên_biến_kiểu_chuỗi);
Ví dụ: nhập hoten cho sinh viên
char hoten[30];
scanf(“%[^\n]”,hoten);
scanf
5. NHẬP / XUẤT CHUỖI:
Để giải quyết vấn đề nhập chuỗi: ngôn ngữ C cung
cấp cho ta 2 hàm để nhập / xuất chuỗi.
Hàm gets: nhận một chuỗi từ bàn phím cho đến khi
gặp ký tự \n (tức nhấn phím Enter). (cho phép nhập
khoảng trắng giữa các từ).
Cú pháp: gets(Tên_mảng_ký_tự);
Hàm puts: xuất một chuỗi ra màn hình, hàm tự động
thêm ký tự \n vào cuối chuỗi khi xuất. Nếu xuất thành
công thì hàm trả về =\n , ngược lại =EOF (-1).(xem
trang 48)
Cú pháp: int puts(char *Tên_biến);
gets/puts
5. NHẬP / XUẤT KÝ TỰ:
Ngôn ngữ C cung cấp cho ta 2 hàm để nhập / xuất một
ký tự:
Hàm getchar: nhận một ký tự từ bàn phím và trả về
mã ASCII của ký tự nhận được.
Cú pháp: int getchar(void);
Hàm putchar: xuất một ký tự ra màn hình. Nếu xuất
thành công thì hàm trả về mã ASCII của ký tự xuất ,
ngược lại =EOF (-1).(xem trang 47)
Cú pháp: int putchar(int Tên_biến);
getchar/putchar
MỘT SỐ LƯU Ý VỚI CÁC HÀM NHẬP:
Các lệnh này chỉ nhận dữ liệu sau khi nhấn phím Enter.
Khi sử dụng các lệnh scanf, getchar để nhập các chuỗi,
ký tự liên tiếp thì cần lưu ý đến khả năng bị trôi lệnh của
các lệnh theo sau nó do mã phím \n còn lại trong vùng nhớ
chuẩn stdin. (xem trang 46)
=> Khắc phục: khử ký tự \n còn trong stdin bằng lệnh
fflush(stdin) sau lệnh scanf hoặc dùng ký tự đặc tả %*c
trong lệnh scanf.
Ngoài ra, ta có thể sử dụng một số hàm nhập / xuất khác
trong thư viện conio.h cho chương trình (xem trang 49)
Xuất chuỗi có màu sắc: cprintf
Nhập ký tự không cần chờ nhấn phím Enter: getch,getche
scanf, gets, getchar
CHƯƠNG 2: BIỂU THỨC, TOÁN TỬ TRONG C
1. Biểu thức là gì?
2. Các phép toán trong C
3. Phép gán
4. Phép toán tăng giảm một giá trị ++,--
5. Chuyển đổi kiểu dữ liệu
6. Toán tử phẩy (“,”), toán tử điều kiện (?)
1. BIỂU THỨC LÀ GÌ?
Là sự kết hợp hợp lệ của những phép toán thực
hiện trên các biến, hằng hoặc các giá trị của hàm.
Ví dụ: trong chương trình ta khai báo các biến
số nguyên như: a,b,c và Tổng, ta có một số biểu
thức sau:
a+b-c
(a+b)*5
Tong=(a+b)*c
2. CÁC PHÉP TOÁN TRONG C
PHÉP TOÁN
SỐ HỌC
QUAN HỆ &
LOGIC
TRÊN BIT
+
-
*
/
Phép toán
quan hệ
== , !=
> , <
>= , <=
Phép toán
logic
AND : &&
OR : ||
NOT : !
AND : &
OR : |
XOR : ^
Bù : ~
Dịch trái : <<
Dịch phải : >>%
3. PHÉP GÁN
Trong C có 2 loại phép gán:
Dạng 1: Biến=Biểu_thức
int c,a=3,b=5;
c=a+b; // KQ: c=8
Dạng 2: phép gán phức hợp
Biến=Biểu_thức
int c,a=3,b=6;
b+=a; // tương đương b=b+a; => KQ: b=9
c=b/=a; // tương đương c=b=b/a; => KQ: c=b=3
4. PHÉP TOÁN TĂNG, GIẢM: ++ , --
Có 2 loại dạng tăng / giảm:
Dạng 1: (Toán tử đứng trước) ++Biến; (--Biến;)
int c,a=3;
++a; // tương đương a=a+1; => KQ: a=4
c=++a; // tương đương a=a+1, rồi gán c=a => KQ: c=a=5
Dạng 2: (Toán tử đứng sau) Biến ++; (Biến--;)
int c,a=3;
a++; // tương đương a=a+1; => KQ: b=4
c=a++; // tương đương gán c=a, rồi thực hiện
a=a+1 => KQ: c=4 và a=5
5. CHUYỂN ĐỔI KIỂU DỮ LIỆU
Xét ví dụ sau: int a=5,b=2,c; float f,f1=7.5,f2=5;
Cùng kiểu dữ liệu
TH1: c=a+b;
c=a/b;
c=a%b;
// c=7
// c=2
// c=1
Kiểu dữ liệu thấp -> cao
TH3: f=a+b;
f=a/b;
f=a%b;
// c=7.0
// c=2.0
// c=1.0
???
Khác kiểu dữ liệu
TH2: f=f1+a;
f=a/f1;
f=f1/a;
// c=12.5
// c=0.66667
// c=1.5
Kiểu dữ liệu cao -> thấp
TH4: a=f1+f2;
a=f1/f2;
// c=12
// c=1 ???
5. CHUYỂN ĐỔI KIỂU DỮ LIỆU
Nhận xét 1:
TH1: không có vấn đề.
TH2: khi 2 toán hạng trong một phép toán khác kiểu dữ
liệu thì kiểu dữ liệu thấp được nâng thành kiểu dữ liệu
cao trước khi tính toán. (intlongfloatdouble).
TH3: cần phải ép kiểu trong khi tính toán để có kết quả
chính xác theo cú pháp sau:
f=()a/b;
TH4: nếu kết quả tính toán của biểu thức bên phải phép
gán có kiểu dữ liệu cao hơn bên trái thì phép gán có khả
năng mất dữ liệu khi gán cho biến bên trái.
6. TOÁN TỬ PHẨY “,” , TOÁN TỬ ĐIỀU KIỆN “?”
a/ Toán tử phẩy “,”: (xem trang 33)
Là toán tử kết hợp giữa phép gán và các biểu thức cách
nhau bởi dấu phẩy “,”. Kết quả của biểu thức bên phải
nhất được gán cho biến bên trái
b/ Toán tử (biểu thức) điều kiện “?”: (xem trang 33)
Cú pháp:
?:
Biểu_thức_1 thực hiện khi Biểu_thức_điều_kiện có kết
quả khác 0, ngược lại biểu_thức_2 thực hiện.
Ví dụ: char c,t=‘D’;
c=(t>=‘A’) && (t<=‘Z’)?t:‘A’; // KQ: c=‘D’
BÀI TẬP YÊU CẦU:
Sinh viên hoàn thành các Bài tập chương
2 (từ trang 54 đến hết trang 59)