Bài giảng Cơ sở lập trình - Trần Tấn Từ

CHƯƠNG 1: CÁC THÀNH PHẦN CƠ BẢN

Mục tiêu

Kết thúc chương, sinh viên có thể:

> Nắm được các thành phần cơ bản của ngôn ngữ lập trình C: bộ ký hiệu, từ khóa, tên và cách đặt tên, cách ghi lời chú thích.

> Nắm được cấu trúc chung của một chương trình C.

> Hiểu và vận dụng được các phép toán, các hàm đã được xây dựng cho các kiểu dữ liệu cơ sở: kiểu số nguyên, kiểu số thực, kiểu ký tự, kiểu boolean.

1.1 Bộ ký hiệu và từ khóa

 

doc 156 trang phuongnguyen 8860
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Cơ sở lập trình - Trần Tấn Từ", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Cơ sở lập trình - Trần Tấn Từ

Bài giảng Cơ sở lập trình - Trần Tấn Từ
TRƯỜNG ĐẠI HỌC PHẠM VĂN ĐỎNG
KHOA CÔNG NGHỆ THÔNG TI N
TRẦN TẤN TỪ
BÀI GIẢNG
Cơ ĩở lập TRÌNH
(Dùng cho sinh viên các lớp đại học Công nghệ
thông tin, đại học Sư phạm tin học)
- Tài liệu lưu hành nội bộ -
LỜI NÓI ĐẦU
Cơ sở lập trình là học phần giúp cho sinh viên nắm được kiến thức cơ bản để cài đặt thành công một thuật toán thành chương trình bằng ngôn ngữ lập trình C. Qua đó, trang bị cho sinh viên kiến thức nền để tiếp cận và học tập tốt các ngôn ngữ lập trình khác trong các học kỳ tiếp theo.
Bài giảng được biên soạn và giảng dạy cho sinh viên năm thứ nhất, bậc đại học ngành Công nghệ thông tin và ngành Sư phạm tin học kể từ năm 2008, theo hình thức đào tạo niên chế. Hiện nay chương trình đào tạo tại Trường Đại học Phạm Văn Đồng được chuyển đổi sang đào tạo theo học chế tín chỉ. Chính vì vậy, bài giảng được chỉnh sửa, bổ sung cho phù hợp với hình thức đào tạo theo học chế tín chỉ.
Cũng nhân đây tôi xin chân thành cám ơn hội đồng chuyên môn khoa Công nghệ thông tin, Th.S Huỳnh Triệu Vỹ và Th.S Võ Đức Lân đã dành thời gian đọc và đóng góp nhiều ý kiến quý báu để bài giảng được hoàn chỉnh hơn, đáp ứng nhu cầu học tập của sinh viên Khoa Công nghệ thông tin - Trường Đại học Phạm Văn Đồng.
Bài giảng không sao tránh khỏi những thiếu sót, mong các bạn đồng nghiệp đóng góp ý kiến để bài giảng hoàn thiện hơn trong các lần chỉnh sửa sau.
Xin chân thành cám ơn quý thầy cô, các bạn đồng nghiệp !
Quảng Ngãi, ngày 25/12/2013
TRẦN TẤN TỪ
CHƯƠNG 1:	CÁC THÀNH PHẦN CƠ BẢN
Mục tiêu
Kết thúc chương, sinh viên có thể:
Nắm được các thành phần cơ bản của ngôn ngữ lập trình C: bộ ký hiệu, từ khóa, tên và cách đặt tên, cách ghi lời chú thích.
Nắm được cấu trúc chung của một chương trình C.
Hiểu và vận dụng được các phép toán, các hàm đã được xây dựng cho các kiểu dữ liệu cơ sở: kiểu số nguyên, kiểu số thực, kiểu ký tự, kiểu boolean.
Bộ ký hiệu và từ khóa
Bộ ký hiệu
26 chữ cái la tinh hoa: A, B, ..Z.
26 chữ cái la tinh thường: a, b, .z.
10 chữ số thập phân: 0,1,...,9.
Các ký hiệu toán học: +, -, *, /, = , (, ).
Các ký hiệu đặc biệt: . , ; “ ‘ _ @ # $ ! A [ ] { } .
Dấu cách hay khoảng trống.
Từ khóa
Là các từ dùng riêng của ngôn ngữ lập trình C và mỗi từ khóa có một ý nghĩa và tác dụng cụ thể.
* Chú ý:
Không thể định nghĩa lại từ khóa.
Các từ khóa trong C được viết dưới dạng chữ thường.
Một số từ khóa thông dụng hay dùng trong ngôn ngữ lập trình C
auto
break
case
char
continue
default
do
double
else
extern
float
for
goto
if
int
long
register
return
short
sizeof
static
struct
switch
typedef
union
usnigned
void
volatile
while
asm ....
Tên và cách đặt tên
Trong chương trình, người lập trình có thể dùng rất nhiều tên: tên chương trình, tên biến, tên hằng, tên hàm,. Mọi tên đều phải khai báo trước khi sử dụng. Qui tắc đặt tên:
- Tên bao gồm dãy các ký tự liền nhau như các chữ cái a,.,z, A,. Z, các chữ số 0, ., 9 và dấu gạch nối dưới.
Tên không được bắt đầu bằng chữ số.
Tên không được chứa các ký tự đặc biệt như dấu cách, dấu chấm câu.... Số ký tự tối đa trong tên của Turbo C là 32.
Tên không được trùng với từ khóa.
C là ngôn ngữ lập trình phân biệt chữ hoa và chữ thường, vì vậy tên NGHIEM sẽ khác với các tên: Nghiem, nghiem,..
Không được đặt tên bằng tiếng Việt (C xem cách làm đó là sai cú pháp) .
Các ví dụ về đặt tên:
+ Một số tên đặt đúng: Gia_tri, _DX, pi, ...
+ Một số tên đặt sai: 3X, PI$, Bien 1,...
Chú thích
Khi viết chương trình bạn nên thêm vào các lời chú thích để cho chương trình sáng sủa và dễ hiểu. Trình biên dịch sẽ không biên dịch các chú thích để tạo ra mã chương trình mà nó có tác dụng thuyết minh thêm cho dễ hiểu.
Phần văn bản nằm giữa cặp ký hiệu mở /* và đóng */ chính là phần chú thích. Phần chú thích có thể nằm trên nhiều dòng, miễn là nằm trong cặp dấu mở và đóng nêu trên.
Lưu ý: Trong C++ lời chú thích nằm sau cặp dấu //và viết trên một dòng.
Cấu trúc chung của một chương trình C
Cấu trúc tổng thể của một chương trình C thường có các khối thông dụng sau:
#include 
#define 
typedefs 
/* để gọi các tập tin tiền xử lý */
/* định nghĩa các hằng số */
/* định nghĩa kiểu dữ liệu */
Function prototype
/* khai báo nguyên mẫu hàm gồm tên và tham số */
Khai báo các biến ngoài
 main() /* chương trình C bắt buộc phải có hàm main */
{ Khai báo các biến cục bộ, các hằng của hàm main
Các câu lệnh thực hiện của hàm main
return 
}
Function prototype	/* định nghĩa nội dung tường minh của hàm */
{
Khai báo các biến, hằng của hàm.
Các câu lệnh thực hiện của hàm.
}
Như vậy, một chương trình C thường bao gồm các thành phần: các chỉ tiền xử lý, các định nghĩa: kiểu, hằng, khai báo biến ngoài, các hàm tự tạo, hàm main. Trong đó:
+ #include /* để gọi các tập tin tiền xử lý */
Ví dụ 1.1: #include 
+ #define /* định nghĩa các hằng số */
Ví dụ 1.2: #define MAX 100
+ typedef /* định nghĩa kiểu dữ liệu */
Ví dụ 1.3: typedef int Songuyen;
+ Function prototype /* khai báo nguyên mẫu hàm gồm tên và tham số */ Trong phần khai báo nguyên mẫu hàm, bạn chỉ ra kiểu giá trị trả về của hàm, tên hàm, tham số hình thức của hàm.
Ví dụ 1.4: Khai báo nguyên mẫu hàm tính diện tích hình tròn
float Tinh_dien_tich(float radius);
+ Khai báo các biến ngoài (biến toàn cục): Là nơi khai báo các biến có tầm tác dụng trong cả chương trình.
Ví dụ 1.5: int n;
+ Trong chương trình C có thể có nhiều hàm, trong đó hàm main là hàm chính, bắt buộc phải có và các câu lệnh được thực hiện tuần tự từ trên xuống dưới. Về nguyên tắc hàm phải trả lại một giá trị cho tên hàm, nhưng nếu không muốn sử dụng giá trị trả về, bạn có thể viết như sau: void main(). Từ khóa void để chỉ hàm không có giá trị riêng của nó (tức hàm không mang một giá trị cụ thể nào khi thực hiện xong hàm)
+ /* định nghĩa nội dung tường minh của hàm */
Ví dụ 1.6: Định nghĩa nội dung hàm tính diện tích hình tròn với tham số là radius (bán kính của hình tròn).
float Tinh_dien_tich(float radius)
#define PI 3.14
{ float dientich;
dientich = PI*radius*radius;
return(dientich);
}
Lưu ý: Định nghĩa của hàm Tinh_dien_tich sẽ được viết phía dưới hàm main.
* Một số ví dụ:
Ví dụ 1.7: Chương trình in ra màn hình chữ “Chao cac ban” và “Hen gap lai”
Giải
#include 
main()
{
printf(“Chao cac ban\n”);
printf(“Hen gap lai\n”);
getch();
}
Giải thích chương trình ví dụ 1.7
#include : Khai báo tập tin tiền xử lý stdio.h (viết tắt của từ standard input/output) là tập tin tiền xử lý chứa các hàm vào/ra chuẩn. Trong chương trình có sử dụng hàm printf (hàm ra chuẩn) được định nghĩa trong tập tin stdio.h.
Hàm printf là hàm cho in ra màn hình nội dung nằm trong cặp dấu “ ” Ký tự \n là ký tự điều khiển xuống dòng mới.
Phần thân của chương trình bao gồm đoạn chương trình:
main()
{
}
getch(); Khi chương trình viết ra màn hình 2 câu “Chao cac ban” và “Hen gap lai” thì dừng lại cho người sử dụng xem. Nếu không có lệnh này thì chương trình trở về màn hình văn bản chương trình, người sử dụng sẽ không xem được kết quả, lúc đó phải bấm tổ hợp phím Alt + F5 mới xem được kết quả.
Ví dụ 1.8: Chương trình tính diện tích hình tròn.
Giải
#include 
main()
{ float R,Dien_tich;
printf(“Nhap ban kinh R = “);
scanf(“%f”,&R);
Dien_tich = 3.14*R*R;
printf(“Dien tich hinh tron co ban kinh %f là %f”,R,Dien_tich); getch();
}
Giải thích chương trình ví dụ 1.8
float R, Dien_tich; Khai báo biến R và Dien_tich có kiểu số thực.
printf(“Nhap ban kinh R = “); in ra màn hình dòng: Nhap ban kinh R = scanf(“%f”,&R); Hàm đọc giá trị từ bàn phím vào cho biến R. %f là mã định dạng để qui định đọc giá trị vào cho biến R có kiểu số thực, &R được hiểu là đọc giá trị vào cho ô nhớ của biến R.
Dòng lệnh printf(“Dien tich hinh tron co ban kinh %f là %f”,R,Dien_tich); In ra giá trị của biến R và biến Dien_tich với qui cách in là số thực.
Ví dụ 1.9: Chương trình tính diện tích hình tròn có sử dụng chương trình con.
Giải
#include 
main()
float Tinh_dien_tich(float radius);
main()
{ float R;
pritnf(“Nhap ban kinh R = “);
scanf(“%f”,&R);
printf(“Dien tich hinh tron = %f “,Tinh_dien_tich(R));
getch();
}
float Tinh_dien_tich(float radius)
#define PI 3.14
{ float dientich;
dientich = PI*radius*radius;
return(dientich);
}
Giải thích chương trình ví dụ 1.9
#define PI 3.14. Đây là khối ghép định nghĩa một macro. Với định nghĩa này, khi ngôn ngữ lập trình C dịch chương trình, bất cứ chỗ nào trong chương trình xuất hiện tên PI sẽ được thay thế bằng 3.14.
Việc tính diện tích được thực hiện bằng hàm Tinh_dien_tich với tham số là radius. Nguyên mẫu hàm Tinh_dien_tich được khai náo trước hàm main() và định nghĩa tường minh nội dung của hàm ở sau hàm main.
1.3 Kiêu dữ liệu cơ sở
Kiêu dữ liệu
Dữ liệu là dạng biểu diễn vật lý của thông tin. Những dạng dữ liệu cơ bản được xử lý trong máy tính điện tử gồm: Các ký tự, hình ảnh, âm thanh, tri thức, sự kiện, luật dẫn. Theo nghĩa rộng, dữ liệu thô là các số, ký tự, hình ảnh hay các kết quả khác của các thiết bị chuyển đổi các lượng vật lý thành các ký hiệu. Các dữ liệu loại này thường được xử lý tiếp bởi con người hoặc đưa vào máy tính. Trong máy tính, dữ liệu được lưu trữ và xử lý tại đó hoặc chuyển cho một người hay một máy tính khác. Dữ liệu thô là một thuật ngữ tương đối, bởi vì dữ liệu đã được xử lý tại bước này có thể là dữ liệu thô ở bước tiếp theo. Trong máy tính điện tử, dữ liệu được biểu diễn bằng chuỗi các ký hiệu của một bảng chữ cái nào đó, mà phổ biến nhất là bảng chữ cái nhị phân (gồm 2 ký hiệu “0” và “1”). Một chương trình máy tính là một tập hợp dữ liệu được hiểu là các lệnh.
Kiểu dữ liệu là một tập hợp các giá trị mà một biến thuộc kiểu đó có thể nhận được và trên đó xác định một số phép toán. Các kiểu dữ liệu này thường được quy định bởi ngôn ngữ lập trình, hay nói cách khác mỗi ngôn ngữ lập trình có một tập các kiểu dữ liệu khác nhau. Trong các ngôn ngữ lập trình, mỗi kiểu dữ liệu chỉ biểu diễn được một miền giá trị xác định nào đó, sự giới hạn này là do phụ thuộc vào kích thước của vùng nhớ biểu diễn số đó. Vì vậy, các thông tin đặc trưng của một kiểu dữ liệu bao gồm:
+ Tên kiểu dữ liệu.
+ Kích thước vùng nhớ biểu diễn nó (tức miền giá trị).
+ Các phép toán sử dụng trên kiểu dữ liệu đó.
Kiêu số nguyên
Là tập hợp các số nguyên có thể biểu diễn được trong máy tính và được định nghĩa với một số từ khóa. Mỗi từ khóa tương ứng với một kiểu số nguyên có dải biểu diễn giá trị trong phạm vi nhất định. Nhưng kiểu số nguyên cơ bản trong ngônngữ lập trình C là kiểu số nguyên có dấu, được định nghĩa với từ khóa int chiếm 2 byte.
Bảng các từ khóa số nguyên và phạm vi biểu diễn
Kiểu biến
Từ khóa
Số byte
Phạm vi biểu diễn
Character
char
1
-128 ... +127
Integer
int
2
-32768...+32767
Short Integer
short
2
-32768...+327Ó7
Unsigned character
unsigned char
1
0...255
Unsigned Integer
unsigned int
2
0..65535
Unsigned Short Integer
unsigned short
2
0..65535
Long Integer
long
4
-2147483648...
+2147483647
Unsigned Long Integer
Unsigned long
0. 4294967295
Lưu ý: Kiểu char thực chất là kiểu ký tự, song C cho phép dùng các ký tự như là số nguyên. Vì vậy, khi tính toán trong biểu thưc số học thì kiểu char được sử dụng như là số nguyên (chỉ mã ASCII tương ứng của ký tự đó) nhưng khi tính toán trong biểu thức ký tự thì nó được hiểu là ký tự. Đây chính là sự mềm dẻo của ngôn ngữ lập trình C.
Có nhiều phép tính được định nghĩa cho số nguyên: phép tính số học, phép tính quan hệ, phép tính logic số học.
Bảng liệt kê các phép tính số học đối với kiểu số nguyên
Phép toán
Ký hiệu
Ví dụ
Cộng
+
a + b
Trừ
-
a - b
Nhân
*
a * b
Chia lấy phần nguyên
/
a / b
Chia lấy số dư
%
a % b
Về nguyên tắc phép chia 2 số nguyên cho kết quả là số nguyên. Muốn nhận được kết quả là số thực, bạn phái viết (float) a / b.
Ví dụ 1.10: a = 15; b = 2; Vậy kết quả a/b sẽ là 15/2 = 7. Bạn muốn nhận kết quả của phép chia là số thực phải viết: (float) a/b; Lúc đó 15/2 = 7.5
Để khởi tạo một biến có kiểu nguyên ta viết:
int i; i = 10; Hoặc viết int i = 10;
Hằng số nguyên có định kiểu trước: Để ghi hằng số nguyên với kiểu định trước bạn ghi thêm một ký tự vào cuối dãy số: L cho kiểu long, U cho kiểu Unsigned Integer, UL cho kiểu Unsigned Long.
Ví dụ 1.11: 20000U là hằng số nguyên theo kiểu Unsigned Integer;
* Cách biểu diễn số nguyên dưới dạng số Hecxa:
+ Ngoài cách viết theo dạng số thập phân, C còn quy ước cho phép viết số nguyên dưới dạng số Hecxa, ký tự bắt đầu 0x hoặc 0X. Chẳng hạn số 65 trong hệ thập phân được viết dưới dạng số Hecxa là 0X41.
+ Nếu viết số nguyên dưới dạng số ở hệ cơ số 8 thì ký tự bắt đầu 0. Chẳng hạn số 65 trong hệ thập phân được viết dưới dạng số ở hệ cơ số 8 là: 0101.
Hai cách viết trên rất thuận lợi cho những người lập trình hệ thống. Lúc đó, một byte có thể biểu diễn hai chữ số Hecxa vì một số Hecxa được biểu diễn bằng một cụm số nhị phân 4 bít. Chẳng hạn: số 255 trong hệ thập phân, biểu diễn trong hệ Hecxa là 0xFF.
Ví dụ 1.12: Chương trình tính tổng 2 số nguyên.
Giải
#include 
main()
{ int m=5,n=10;
long tong;
tong = m+n;
getch();
}
Kiểu số thực
Là tập hợp các số thực có thể biểu diễn được trong máy tính và được định nghĩa bởi một số từ khóa: float, double, long double.
Trong máy tính số thực được biểu diễn dưới 2 dạng: dạng bình thường và dạng có phần mũ (dạng số khoa học).
+ Dạng bình thường: 3.14, 5.0
+ Dạng số khoa học: 1.254567E+02 tương đương với 1.254567*102 = 125.4567
Phạm vi biểu diễn và độ chính xác của số thực lớn hơn nhiều so với số nguyên nên số thực thích hợp với những đại lượng cần giá trị lớn và độ chính xác cao.
Bảng các từ khóa của số thực và phạm vi biểu diễn
Kiểu biến
Từ khóa
Số byte
Phạm vi biểu diễn
Số thực với độ chính xác đơn Single-precision floating-point
float
4
3.4e-38 ... 3.4e38 độ chính xác 7 chữ số
Số thực với độ chính xác kép
Double-precision floating-point
double
8
1.7e-308 ... 1.7e308
độ chính xác 15 chữ số
Số thực với độ chính xác kép (độ dài lớn)
Long double-precision floatingpoint
long
double
10
3.4e-4832 ... 1.1e4932
độ chính xác 19 chữ số
Cách viết hằng số thực:
+ Không cần phần lẻ sau dấu chấm: 7.
+ Không cần dấu chấm ở phần định trị nếu có phần mũ: 2E-8
+ Viết dạng bình thường: 5.6
+ Không cần số 0 đầu tiên: . 1512
+ Chấp nhận dùng chữ e: 0.07e-3
Các phép tính số học đối với kiểu thực: Cộng, trừ, nhân, chia. Khác với kiểu số nguyên, phép chia (/) cho kết quả là số thực và không tồn tại phép toán % cho kiểu số thực.
Khởi tạo biến số thực ta viết: float x; x = 7.43; Hoặc viết float x = 7.43;
Hằng số thực định trước kiểu: Ta có thể viết hằng số thực với kiểu được định trước bằng cách ghi thêm ký tự vào cuối dãy số (F cho kiểu float, L cho kiểu Long).
Ví dụ 1.13: 0.1234567E-33L là hằng số thực kiểu long.
Các hàm số học dùng cho kiểu số nguyên và số thực
Các hàm số học dùng cho kiểu số nguyên và kiểu số thực được định nghĩa trong tập tin tiền xử lý math.h và được sử dụng với các đối số là số nguyên hoặc số thực. Nếu ký hiệu i là tham số nguyên, f là tham số thực. Ta có bảng biểu diễn như sau:
Hàm
Kiểu giá trị trả về
Tác dụng
abs(i)
Int
Trả về giá trị tuyệt đối của số nguyên i
fabs(d)
Double
Trả về giá trị tuyệt đối của số thực d
sin(d)
Doub ... nh gồm: hodem, ten, tuoi. Chương trình lặp đi lặp lại việc nhập cho đến chừng nào ký tự đầu của hodem là rỗng thì kết thúc nhập. Dữ liệu nhập vào được lưu lên tập tin DULIEU.DAT.
Xem danh sách: Cho phép đọc dữ liệu từ tập tin DULIEU.DAT và viết lên màn hình thành bảng danh sách học sinh theo mẫu sau:
STT Ho va ten Tuoi
Sắp xếp danh sách: Sắp xếp danh sách học sinh có trong tập tin vừa nhập tăng dần theo tên.
Thoát: Nếu người dùng chọn chức năng này thì kết thúc chương trình.
Giải:
Việc ghi tập tin dữ liệu struct không cần phải ghi từng phần tử một mà ghi cả một struct ra tập tin, song khi đọc dữ liệu từ bàn phím vào cho biến struct thì phải đọc lần lượt cho từng phần tử của struct.
#include 
#include 
#include 
struct hocsinh
{ char hodem[20];
char ten[10];
int tuoi;
} hs,tam;
FILE *f;
int i;
int menu(void); void nhap(void); void xem(void); void sapxep(void); main()
{
int chon;
for (;;)
{ clrscr();
chon = menu();
switch (chon)
{
case 1 : nhap();
break;
case 2 : xem();
break;
case 3 : sapxep();
break;
case 4 : exit(0);
}
}
}
int menu(void)
{
int c;
char s[10];
clrscr();
printf("1. Nhap danh sach \n");
printf("2. Xem danh sach \n");
printf("3. Sap xep danh sach \n");
printf("4. Thoat \n");
do
{ printf("Bam so de chon (1/2/3/4)"); gets(s);
c = atoi(s);
} while (c 4);
return c;
}
int n;
void nhap(void)
{ int T =1;
char c;
clrscr();
f = fopen("D:\\DULIEU.DAT","wb");
i = 1;
while (T)
{
clrscr();
printf("\n Nguoi thu %d",i);
printf("\n Ho dem :");gets(hs.hodem); if (hs.hodem[0] =='\0') break;
printf("\n Ten :");gets(hs.ten);
printf("\n Tuoi :");scanf("%d",&hs.tuoi); fwrite(&hs,sizeof(hs), 1 ,fp);
while (getchar() != '\n');
i++;
}
fclose(f);
}
void xem(void)
{ int j;
char c;
clrscr();
j = 0;
printf("STT Ho va ten	Tuoi\n");
f = fopen("D:\\DULIEU.DAT","rb");
while (fread(&hs,sizeof(hs),1,f),!feof(f))
{ printf("%3d ",j+1); printf("%-20s",hs .hodem); printf("%-10s",hs.ten); printf("%5d",hs.tuoi); printf("\n");
j++;
}
fclose(f);
getch();
}
void sapxep(void)
{ struct hocsinh ds[10];
int j,sl=0;
clrscr();
f = fopen("D:\\DULIEU.DAT","r+b");
while (fread(&hs,sizeof(hs),1,f),!feof(f))
{ sl++;
ds[sl] = hs;
}
for (i=1;i<=sl-1;i++)
for (j=i+1;j<=sl;j++)
if (strcmp(ds[i].ten,ds[j].ten)>0)
{ tam = ds[i];
ds[i] = ds[j];
ds[j] = tam;
}
fseek(fp,0,SEEK_SET);
for (i=1;i<= sl;i++)
fwrite(&ds[i],sizeof(hs),1,f);
printf("Da sap xep xong ");
getch();
fclose(f);
}
Ví dụ về chuyển tham số là tên tập tin cho hàm
Giả sử bạn viết chương trình đếm số ký tự có trong một tập tin văn bản đã có
trên đĩa.
Y êu cầu kỹ thuật: Khi gõ lệnh thực hiện chương trình gõ tên tập tin chương trình, sau đó gõ tiếp tham số là tên tập tin muốn đếm.
Giải:
#include 
#include 
main(int dsl, char *ds2[])
{
int ch;
FILE *f;
long dem = 0;
if (ds1 !=2)
{
printf("Khong nhap ten tap tin can dem");
exit(1);
}
if ((f = fopen(ds2[1],"r")) == NULL)
{
printf("Khong the mo tap tin %s\n",ds2[1]);
exit(1);
}
while ((ch=getc(f)) != EOF)
{
putc(ch,stdout);
dem++;
}
fclose(f);
printf("Tap tin %s co %ld ky tu\n",ds2[1],dem);
getch();
}
9.4 Bài tập thực hành
Viết chương trình thực hiện các công việc:
Tạo tập tin STN1.DAT chứa 50 số tự nhiên đầu tiên.
Tạo tập tin STN2.DAT chứa các số tự nhiên từ 51 đến 100.
Ghép tập tin STN1.DAT với tập tin STN2.DAT thành tập tin STN3.DAT. In ra màn hình nội dung của tập tin STN3.DAT.
Dùng trình soạn thảo Notepad củaWindow tạo trên thư mục gốc ổ đĩa D: tập tin văn bản có tên VIDU.TXT trong đó có chứa vài dòng văn bản với nội dung tuỳ ý.
Khởi động C, viết chương trình thực hiện các công việc:
Đọc tập tin VIDU.TXT và viết nội dung của tập tin lên màn hình.
Đếm tổng số dòng của văn bản.
Tính tổng số từ có trong văn bản.
Tính số lượng của từng loại ký tự có trong văn bản.
Gỉa sử có một tập tin văn bản lưu dãy các số nguyên dương trên nhiều dòng, mỗi dòng lưu đúng 10 số, giữa 2 số cách nhau ít nhất một ký tự trắng. Viết chương trình đọc dãy số từ tập tin, sau đó viết các số chẳn lên màn hình và thông báo số lượng số chẳn có trong tập tin.
Viết chương trình đếm số lượng ký tự là nguyên âm có trong một tập tin văn bản (tên tập tin văn bản nhập từ bàn phím). Biết rằng: Các nguyên âm bao gồm: A, E, I, O, U.
Viết chương trình tạo tập tin văn bản chứa tên, tuổi, địa chỉ của bạn (mỗi thứ chiếm một dòng). Sau đó chương trình sẽ đọc nội dung tập tin và in ra màn hình với quy định: thông tin của một người nằm trên một dòng.
Để quản lý điểm thi vào lớp 10 của thí sinh, mỗi thí sinh cần lưu giữ các thông tin: số báo danh, họ đệm, tên, điểm toán, điểm văn. Viết chương trình thực hiện các công việc sau:
Mở tập tin mới có tên DULIEU.DAT để nhập họ đệm, tên, điểm toán, điểm văn. Việc nhập được tiến hành cho đến chừng nào nhập họ đệm là xâu rỗng thì kết thúc.
Sắp xếp danh sách theo tăng dần theo tên có trong tập tin DULIEU.DAT.
In ra màn hình danh sách trúng tuyển (Thí sinh có tổng điểm 2 môn > 12).
STT	Ho va ten	Diem	toan Diem van	Tong diem
In ra màn hình danh sách hỏng (Thí sinh có tổng điểm 2 môn < 12).
STT	Ho va ten	Diem	toan Diem van	Tong diem
Yêu cầu kỹ	thuật: Tổ chức	chương	trình thành bảng chọn	có 5 chức năng.
Mỗi chức năng giải quyết một công việc nêu trên trong một chương trình con. Chức năng 5 dùng để chấm dứt chương trình.
PHỤ LỤC 1:	MÔI TRƯỜNG IDE CỦA TURBO C
Môi trường IDE (Integrated Development Environment) của Turbo C cung cấp cho bạn mọi thứ như: soạn thảo, dịch, liên kết, chạy, quản lý và gỡ rối một chương trình. Nếu máy của bạn chạy hệ điều hành từ Windows XP trở về trước thì có thể cài đặt bộ Turbo C 2.0 hoặc Turbo C 3.0 để sử dụng. Nếu máy của bạn cài hệ điều hành Windows 7 thì cài bộ TurboC_BOSBox_setup.
Bắt đầu từ Turbo C 3.0 trở đi là C++, các tập tin được tạo ra có phần mở rộng mặc định là CPP, vì vậy khi soạn thảo tập tin mã nguồn trong môi trường này, bạn phải lưu tập tin với tên có cả phần mở rộng là .C.
Sau khi cài đặt xong Turbo C, thường có một thư mục có tên TC, trong đó có chứa các thư mục con và các tập tin làm việc như sau:
TC\INCLUDE: Chứa các tập tin header
TC\LIB: Chứa các tập tin thư viện
TC\BGI: Chứa các tập tin có phần mở rộng BGI, CHR phục vụ cho đồ hoạ
TC\EXAMPLE: Chứa các tập tin ví dụ.
TC\BIN: Chứa các tập tin thực hiện chương trình như TC.EXE, ...
Môi trường phát triển tích hợp (DOS IDE) của trình biên dịch Turbo C được khởi động từ tập tin TC.EXE (Bạn có thể tạo icon của chương trình lên desktop và khởi động từ icon này trong chế độ Windows)
Khởi động và thoát khỏi
- Khởi động:
+ Từ dấu nhắc hệ điều hành, chuyển vào làm việc với thư mục có chứa tập tin thực thi Turbo C (C:\TC\BIN) và gõ TC
+ Nhắp đúp chuột lên icon của chương trình trên desktop.
[I]	NONAME00.CFP	l=[t]=j|
I	I
=^= 1:1 —lE	
Fl Help ftlt-F8 Next Msg fllt-F? Preu Msg filt-F9 Compile F9 Make F10 Menu
= File Edit Search Run Compile Debug Project Options Uindou Help
Thoát khỏi: Kết thúc làm việc với Turbo C: Bấm F10 -> File -> Quit hoặc bấm tổ hợp phím Alt+X.
Một số chức năng cơ bản trong bộ soạn thảo Turbo C
Tạo tập tin chương trình mới: bấm F10 -> File -> New.
Mở tập tin mã nguồn có sẵn: bấm F10 File Open hoặc bấm F3. Một hộp thoại được mở ra để bạn tìm và mở tập tin mã nguồn cần thiết.
Lưu tập tin mã nguồn: F10 File Save hoặc bấm F2, sau đó chỉ rõ đường dẫn và đặt tên cho tập tin cần lưu.
Lưu tập tin chương trình với tên khác: Bấm F10 File Save as
Tạo tập tin thực thi: Bấm F10 Compile Make hoặc bấm F9 để tạo tập tin thực thi. Việc tạo tập tin thực thi trải qua 2 giai đoạn: Biên dịch (compile) và liên kết (link). Đầu tiên tập tin nguồn được chuyển thành tập tin đối tượng (object file), sau đó liên kết với các chương trình chứa trong các thư viện để tạo thành tập tin thực thi. Quá trình make thành công, sẽ có màn hình thông báo.
Trường hợp quá trình make có lỗi ở khâu biên dịch hoặc liên kết, bạn phải tiến hành sửa các lỗi theo thông báo.
Thực hiện chương trình: Bấm F10 -> Run -> Run hoặc bấm tổ hợp phím Ctrl+F9 để chạy chương trình. Trường hợp chạy chương trình có tham số thực hiện lệnh Bấm F10 Run Arguments ... hộp thoại Programs Arguments xuất hiện, bạn nhập các tham số.
Xem màn hình kết quả: Khi thực hiện chương trình xong, điều khiển sẽ trả về màn hình soạn thảo, muốn xem màn hình kết quả bấm tổ hợp phím Alt+F5.
Turbo C 3.0 cho phép mở nhiều cửa số soạn thảo cùng một lúc, bạn có thể di chuyển qua lại giữa các cửa sổ bằng phím F6. Để đóng một cửa sổ, đứng tại cửa số đó và bấm Alt+F3.
Một số phím tắt thường dùng khi soạn thảo chương trình nguồn:
+ Đánh dấu khối: Bấm Shift đồng thời bấm phím mũi tên để di chuyển con trỏ đến cuối khối.
+ Sao chép khối vào clipboard: Ctrl+Insert
+ Dán khối từ clipboard ra màn hình soạn thảo: Shift+Insert
+ Xóa dòng: Bấm Ctrl+Y tại dòng con trỏ đang đứng.
+ Hủy bó lệnh vừa thực hiện: Bấm Alt+BackSpace.
Huỷ phiên Debug hiện thời và xoá vùng nhớ mà chương trình đã cấp phát: Bấm F10 -> Run -> Program reset hoặc bấm tổ hợp phím Ctrl+F2.
Gỡ rối chương trình: Bạn muốn chương trình chỉ chạy đến một dòng lệnh nhất định, hãy đưa con trỏ tới dòng đó và bấm F4 hoặc chọn lệnh F10 Run Go to cursor.
Chạy từng bước: Bấm F7 hoặc chọn F10 Run Trace into. Khi chạy từng bước đến dòng lệnh có gọi hàm mà bạn nghi vấn có lỗi, bấm F7 để nhảy đến hàm đó và chạy từng bước các dòng lệnh của hàm nhằm tìm lỗi có trong hàm.
Chạy bước qua: Bấm F8 hoặc F10 Run chọn Step over. Khi chạy từng bước đến dòng lệnh có gọi hàm mà bạn chắc rằng hàm đó không chưa lỗi, bấm F8 để không nhảy đến xem xét hàm đó làm gì.
Cửa sổ Watch và điểm ngắt (breakpoint): Khi chạy từng bước, bạn có thể dùng cửa sổ Watch để xem vị trí các biến trong chương trình. Bấm Ctrl+F7 để mở cửa số Watch, trong cửa sổ này, bấm Insert để đưa từng biến cần theo dõi vào cửa sổ Watch. Để tạo điểm ngắt, bạn đưa con trỏ đến dòng cần đặt điểm ngắt, bấm Ctrl+F8. Dựa vào điểm ngắt, chương trình được phân thành từng đoạn để dò lỗi
Quan sát các lời gọi hàm: Bấm F10 Debug Call satck hoặc bấm tổ hợp phím Ctrl+F3. Lúc này, quá trình dò lỗi bạn sẽ quan sát được các chuỗi kể cả đối số của hàm được gọi.
PHỤ LỤC 2:	MÔI TRƯỜNG IDE CỦA Bloodshed Dev-C++
Dev-C++ là ngôn ngữ được viết bằng ngôn ngữ Delphi, chạy được trên môi trường Windows (có cả phiên bản cho Linux) Bạn có thể download bộ devcpp- 4.9.9.2_setup và cài đặt vào máy.
Dev-C++ là bộ chương trình mã nguồn mở, miễn phí, chạy ổn định và nhẹ.
Môi trường IDE của Dev-C++ có nhiều chức năng, thư viện được mở rộng, template, tiện ích,... Với IDE này, bạn có thể soạn thảo chương trình nguồn của C và cho thực thi các chương trình đó. Sau khi cài đặt thành công, khởi động chương trình Dev-C++, màn hình làm việc có dạng:
- Bạn chọn File	New Source File hoặc bấm tổ hợp phím Ctrl+N, sẽ xuất
hiện cửa sổ cho bạn soạn thảo chương trình nguồn
Chọn File	Save (Ctrl+S) để ghi tập tin. Khi ghi bạn cần lưu ý ngoài việc
gõ tên vào hộp File name, bạn cần chỉ rõ C Source file (*.C) trong hộp Save as type.
Chọn File Save as (Ctrl+F12) để đặt tên khác cho tập tin đã có tên.
Chọn Execute Compile hoặc bấm tổ hợp phím Ctrl+F9 để biên dịch chương trình.
Chọn Execute -> Run hoặc bấm tổ hợp phím Ctrl+F10 để chạy chương trình.
Chọn Execute Conpile & Run hoặc bấm phím F9 để biên dịch và chạy chương trình.
Bạn tìm hiểu thêm các chức năng thông qua hệ thống menu của chương trình.
TÀI LIỆU THAM KHẢO
Tiếng Việt
Phạm Văn Ất (1995), Kỹ thuật lập trình C, Nhà xuất bản Khoa học và kỹ thuật.
Nguyễn Đình Tê, Hoàng Đức Hải (1996), Ngôn ngữ lập trình C. Nhà xuất bản Giáo dục.
Nguyễn Cấn (1996), Tự học ngôn ngữ lập trình C+ +, Nhà xuất bản Đồng Nai.
Lê Văn Doanh, Trần Khắc Tuấn (1996), 101 thuật toán và chương trình viết bằng ngôn ngữ C, Nhà xuất bản Khoa học và kỹ thuật - Hà Nội.
Quách Tuấn Ngọc (1998), Ngôn ngữ lập trình C, Nhà xuất bản Giáo dục.
Dương Thiên Tử (2006), Kỹ thuật lập trình C, Nhà xuất bản Thanh niên.
Địa chỉ trên Internet
MỤC LỤC
CHƯƠNG, MỤC	Trang
Chương 1: Các thành phần cơ bản	1
Bộ ký hiệu và từ khóa 	1
Cấu trúc chung của một chương trình C	2
Kiểu dữ liệu cơ sở	6
Kiểu dữ liệu 	6
Kiểu số nguyên 	6
Kiểu số thực	8
Kiểu ký tự	10
Kiểu Boolean 	12
Câu hỏi và bài tập chương 1 	12
Chương 2: Tiền xử lý - Hằng - Biến - Toán tử - Biểu thức - Câu lệnh 13
Tiền xử lý 	13
Hằng 	15
Biến 	16
Biểu thức và toán	tử	17
Câu lệnh 	24
Câu hỏi và bài tập	chương 2	25
Chương 3: Nhập và xuất dữ liệu	28
 Câu lệnh nhập dữ liệu 	28
Nhập dữ liệu bằng hàm scanf	28
Nhập dữ liệu với hàm getchar() và getch() 	31
Câu lệnh xuất dữ liệu 	32
Xuất dữ liệu bằng hàm printf	32
Xuất dữ liệu bằng hàm putch	34
Các lệnh trình bày màn hình	35
Bài tập thực hành 	36
Chương 4: Cấu trúc điều khiển	39
Câu lệnh điều kiện 	39
Câu lệnh if 	39
Câu lệnh switch	41
Câu lệnh lặp	45
Câu lệnh while 	45
Câu lệnh do ... while 	47
Câu lệnh for 	49
Các câu lệnh rẽ nhánh vô điều kiện 	53
Câu lệnh break 	53
Câu lệnh continue 	54
Câu lệnh goto	55
Câu hỏi và bài tập thực hành	56
Chương 5: Kiểu dữ liệu mảng - Kiểu dữ liệu con trỏ 	60
 Kiểu dữ liệu mảng	60
Khái niệm mảng	60
Mảng một chiều 	60
Mảng hai chiều 	70
Điạ chỉ mảng	75
Kiểu dữ liệu con trỏ 	76
Khái niệm về con trỏ và biến động 	76
Khai báo biến con trỏ 	77
Sử dụng con trỏ	77
Các phép toán trên con trỏ	77
Mảng con trỏ	79
Các hàm cấp phát bộ nhớ động 	80
Mối quan hệ giữa con trỏ với mảng	81
Con trỏ và mảng một chiều 	81
Con trỏ và mảng hai chiều	82
Bài tập thực hành 	82
Chương 6: Chuỗi ký tự	85
Khái niệm 	85
Khai báo chuỗi ký tự	85
Các hàm nhập / xuất dữ liệu dùng cho chuỗi ký tự	86
Các hàm thư viện	xử lý chuỗi ký tự	87
Mối quan hệ giữa con trỏ với chuỗi ký tự	93
Một số ví dụ tổng	hợp về xử lý chuỗi ký tự	94
Bài tập thực hành 	96
Chương 7: Chương trình con - Hàm	99
Khái niệm về chương trình con	99
Định nghĩa hàm 	99
Lời gọi hàm, truyền tham số cho hàm 	102
Biến toàn cục và biến địa phương 	104
Biến toàn cục 	104
Biến địa phương	105
Chương trình minh họa 	105
Các lớp lưu trữ biến 	106
Đệ quy 	107
Khái niệm 	107
Các thành phần của giải thuật đệ quy 	108
Phân loại giải thuật đệ quy 	109
Cơ chế hoạt động của giải thuật đệ quy 	109
Ưu nhược điểm của giải thuật đệ quy 	111
Con trỏ hàm 	111
Một số hàm thông dụng 	112
Bài tập thực hành 	115
Chương 8: Khai báo kiểu - Kiểu liệt kê - Kiểu cấu trúc 	118
Khai báo kiểu	118
Kiểu liệt kê 	119
Kiểu cấu trúc	120
Khái niệm và định nghĩa 	120
Truy cập vào phần tử kiểu struct 	122
Khai báo mảng struct 	122
Truyền tham số struct cho hàm 	125
Con trỏ struct 	127
Hàm đọc và xác lập thời gian, ngày tháng 	128
Bài tập thực hành 	130
Chương 9: Kiểu dữ liệu tập tin 	132
 Khái niệm về kiểu dữ liệu tập tin và các dạng tập tin 	132
Khai báo biến tập tin - Một số hàm thường dùng khi thao tác trên tập tin...132
Các ví dụ minh họa 	137
Ví dụ về nhập, xuất cho tập tin văn bản	137
Ví dụ về nhập, xuất cho tập tin nhị phân 	138
Ví dụ về chuyển tham số là tên tập tin cho hàm	143
Bài tập thực hành 	144
Phụ lục 1: Môi trường IDE của Turbo C 	146
Phụ lục 2: Môi trường IDE của Bloodshed Dev-C++ 	149
Tài liệu tham khảo 	151
Mục lục	152

File đính kèm:

  • docbai_giang_co_so_lap_trinh_tran_tan_tu.doc
  • pdfcosolaptrinh_7641_488715.pdf