Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 153 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
153
Dung lượng
757,84 KB
Nội dung
1
Một sốkiếnthứccơsởvề lập trình
bằng ngônngữC
2
CHƯƠNG 1: CƠSỞNGÔNNGỮC
I. Phần mở đầu
Nội dung:
Giới thiệu ngônngữC & C++
Lậptrình hướng đối tượng (Object oriented programming)
Cơsởvề phần cứng và phần mềm để thực hiện chương trình C.
Giới thiệu ngônngữC & C++
- C là một loại ngônngữlậptrình bậc cao đa dụng phổ biến nhất hiện nay.
- C được phát triển từ ngônngữ B (K. Thompson, 1967) bởi Dennis Ritchie của hãng
AT&T Bell Labs và bắt đầu xuất hiện từ năm 1972.
- Yêu cầu của ngônngữ bậc cao: tính dễ đọc-viết (readability), tính dễ bảo trì
(maintainability) và khả năng linh động (portability).
C là ngôn ngữlậptrình độc lập với phần cứng và các hệ điều hành máy tính.
- 1978: quyển sách The C Programming Language (Kernighan & Ritchie) là tài liệu kinh
điển của ngônngữ C.
- 1983: American National Standards Institute (ANSI) thành lập ủy ban xây dựng chuẩn
cho ngônngữ C.
- 1990: Chuẩn ANSI C ra đời.
- 1983: yếu tố lậptrình hướng đối tượng + C ngônngữ C++ do Bjarne Stroustrup phát
triển ở Bell Labs.
- C++ là mộtngônngữ gần như là mở rộng của ngônngữ C, đã có 3 phiên bản: 1.1
(1986), 2.0 (1989) và 3.0 (1991). Chính phiên bản 3.0 là cơsở để xây dựng chuẩn ANSI
C++ .
Lập trình hướng đối tượng (Object Oriented Programming)
- Phương pháp lập trình:
* LT tuyến tính (linear)
* LT thủ tục (procedural) LT cấu trúc (structural) (Chương trình = Cấu trúc dữ
liệu + Giải thuật)
* LT hướng đối tượng (object-oriented)
3
- Đặc điểm LTHĐT:
* Đối tượng (Object): Dữ liệu + phương thức trọng tâm của quá trình phát triển
chương trình.
* Lớp (Class): tập hợp các đối tượng có tính chất chung giống nhau.
* Tính đóng gói dữ liệu (encapsulation): đối tượng bao gồm dữ liệu và phương
thức được đóng gói mà người sử dụng có thể tiếp cận đến dữ liệu thông qua các chức
năng mà không cần biết đến nọi dung lậptrình cụ thể của chúng.
* Tính kế thừa (inheritance): Sự kế thừa cho phép định nghĩa các lớp mới dựa trên
các lớp có sẵn cho phép sử dụng lại các module chương trình mà không cần thay đổi
chúng.
* Tính đa hình (polymorphism): trong các lớp kế thừa nhau, có thể định nghĩa
phương thứccó cùng tên hoặc ý nghĩa nhưng hoàn toàn khác nhau về mặt lập trình.
- Ưu điểm:
* Tính kế thừa loại bỏ những đoạn chương trình phải viết lại, mở rộng các lớp
nhanh chóng.
* Cơsở chương trình là đối tượng việc thiết kế và lậptrìnhthực hiện theo quy
trình chứ không theo kinh nghiệm hoặc thủ thuật tiết kiệm thời gian và tăng năng suất.
* Tính đóng gói đảm bảo tính bảo mật mà vẫn phát triển chương trình được.
* Cách tiếp cận đặt trọng tâm đối tượng có thể xây dựng mô hình chi tiết và dễ
cài đặt.
* Khả năng mở rộng hệ thống lớn hơn khả thi hơn.
- Ngônngữ LTHĐT:
Cơ sởvề phần cứng và phần mềm để thực hiện chương trìnhC
Phần cứng:
* Các loại máy tính có phần mềm biên dịch ngônngữC &C++ (tương thích ANSI
SIMULA (66)
SMALLTALK
(71)
SMALLTALK
(80)
JAVA (95)
ADA (83)
ADA (95)
EIFFEL (90)
C++ (86)
4
C)
* Đối với PC, cấu hình máy phù hợp với chương trình biên dịch ngôn ngữ.
Phần mềm:
* Các loại máy sử dụng HĐH Unix, C là ngônngữ mặc định.
* Đối với PC: Turbo C, Turbo C++, Borland C++, Symantec C, Visual C++, C++
Builder…
II. Chương trìnhC đầu tiên
Nội dung:
Với phần này ta làm quen với cấu trúc của một chương trìnhC và các thành phần cấu tạo
nên nó:
Chú thích
Chỉ thị #include
Tập Header
Hàm main()
Lệnh return
Hàm exit()
Kiểu dữ liệu void
Biên dịch và kết nối
Dò sửa lỗi
Ví dụ đơn giản chương trìnhC
1: /* Chuong trinh dau tien */
2: #include <stdio.h>
3:
4: main()
5: {
6: printf ("Chao ban! Day la chuong trinhC dau tien cua toi.\n");
7: return 0;
8: }
Chú thích
Trong ngônngữ C, hàng chú thích được giới hạn giữa hai dấu /* và */. Trình phiên dịch
C sẽ bỏ qua tất cả nôi dung chứa trong cặp dấu trên.
/* Chuong trinh dau tien */
5
Đối với C++, ta có thể sử dụng // ở đầu mỗi hàng chú thích.
/*
This comment does not increase the size of
the executable file (binary code), nor does
it affect the performance speed.
*/
Tương đương với:
// This comment does not increase the size of
// the executable file (binary code), nor does
// it affect the performance speed.
Chú ý: Các đoạn chú thích không được phép lồng vào nhau.
Chỉ thị #include
#include <stdio.h>
Chỉ thị #include có tác dụng bảo bộ tiền xử lý C tìm tập tin ứng với nội dung <tên > và
chép nội dung tập tin vào vị trí của include trong chương trình. Các tập tên ứng với nội
dung trong < > thường là các tập tin header ứng với những hàm thông dụng trong thư
viện của C, thường năm trong thư mục INCLUDE\. Nếu các tập header nằm tại thư mục
làm việc, ta dùng ngoặc kép “ “ thay cho ngoặc < >.
Chú ý
: NgônngữC phân biệt chữ Hoa và chữ thường !!!
Hàm main()
Hàm main() ở hàng 4 là hàm đặc biệt trong C. Mọi chương trìnhC phải có hàm này và
chạy chương trình bắt đầu từ hàm này. Nội dung các dòng lệnh trong hàm nằm giữa
ngoặc { }.
Trong hàm có lệnh đặc biệt return có nhiệm vụ trả lại một giá trị nào đó cho hàm. Mặc
định nó trả lại một giá trị số nguyên (int). Hàng 5 trả lại giá trị 0, nghĩa là chương trình
kết thúc bình thường; nếu giá trị trả lại khác 0, điều đó nghĩa là chương trình kết thúccó
lỗi.
Hàm exit() , hàm cơsở của thư viện C được định nghĩa trong tập header stdlib.h (khi
muốn dùng hàm này, phải gọi #include <stdio.h>), dùng để kết thúc chương trình,
nhưng không trả lại giá trị nào cả.
Ví dụ:
1: /* Chuong trinh dau tien */
2: #include <stdio.h>
3: #include <stdlib.h>
4: void main()
6
5: {
6: printf ("Chao ban! Day la chuong trinhC dau tien cua toi.\n");
7: exit(0);
8: }
Trong chương trình trên, hàng 4 có thêm từ khóa void để xác định kiểu dữ
liệu trống (empty). Nếu void được thêm vào trước tên hàm, hàm sẽ không
phải trả lại một giá trị nào cả. Trong trường hợp trên, vì hàm exit(0) không
trả giá trị, từ void phải được thêm ở hàng 4.
Biên dịch và kết nối (compiling and linking)
Lỗi chương trình và dò sửa lỗi (debugging)
Khi chương trình nguồn được dịch và kết nối, có thể xuất hiện những lỗi cú pháp, lỗi kết
nối… mà ta cần phải sửa lại cho đúng trước khi chương trình được dịch thành dạng thi
hành được (executable).
Các chương trình thường cung cấp cho người sử dụng công cụ dò sửa lỗi (debugger).
Sinh viên nên tập làm quen với công cụ này để nâng cao hiệu quả lập trình.
III. Các thành phần cơsở của chương trìnhC
Nội dung:
Với phần này ta làm quen với các thành phần cơsở cấu tạo nên ngônngữ C:
Hằng và biến
Biểu thức
Câu lệnh
Cụm câu lệnh
Cấu trúc hàm
Kiểu và tên hàm
Đối số của hàm
Cách gọi hàm
Program.c
Program.obj
Program.exe
BIEN DICH
(kiem tra cu phap,
…)
KET NOI
(ket noi cac modul thu vien,…)
7
Các thành phần cơsở
Hằng và biến
Hằng là đại lượng không thay đổi giá trị trong quá trình thi hành chương trình.
Biến là đại lượng mà giá trị của nó có thể thay đổi trong quá trình thi hành chương trình.
Biểu thức
Biểu thức là tổ hợp các hằng, biến và các toán tử xác định các phép toán.
(2 + 3*i) / 10
Toán tử số học
Ký hiệu Ý nghĩa
+ Cộng
- Trừ
* Nhân
/ Chia
% Phần dư (modulo)
Câu lệnh
Câu lệnh là một tổ hợp có nghĩa (ở 2 vế) các biểu thức và chấm dứt bởi dấu
chấm phẩy (;).
i = (2 + 3) * 10;
i = 2 + 3 * 10;
j = 6 % 4;
k = i + j;
return 0;
exit(0);
printf ("Ket thuc chuong trinh");
Cụm câu lệnh
Cụm câu lệnh là nhóm câu lệnh bắt đầu bằng ngoặc { và kết thúcbằng ngoặc }. Cụm câu
lệnh được thi hành như một câu lệnh bởi bộ biên dịch C.
for(. . .) {
s3 = s1 + s2;
mul = s3 * c;
remainder = sum % c;
8
}
Cấu trúc một hàm C
Một hàm được cấu tạo bởi 6 phần:
- Kiểu hàm
- Tên hàm
- Đối số
- Ngoặc mở {
- Thân hàm
- Ngoặc đóng }
Kiểu hàm là kiểu dữ liệu mà hàm sẽ trả. Mặc định hàm trả kiểu int. Kiểu void se không
trả giá gì nào cả.
Tên hàm phải có nghĩa và đúng cú pháp.
Tên không đúng
Cú pháp
2 (digit) Tên hàm không được khởi đầu bằngsố
* (Asterisk) Tên hàm không được khởi đầu bằng dấu
+ (Addition) Tên hàm không được khởi đầu bằng từ khóa
. (dot) Tên hàm không được khởi đầu bằng .
total-number Tên hàm không được chứa ký hiệu toán tử
account'97 Tên hàm không được chứa dấu ‘
Tên hợp lệ: print2copy, total_number, _quick_add, Method3
Đối số hàm C
Đối số là những biến nằm trong ngoặc đơn sau tên hàm. Đối số hàm C chỉ có tính tham
trị, nghĩa là nó chỉ truyền giá trị vào trong hàm chứ không thay đổi giá trị ngoài hàm.
Ví dụ: Hàm cộng 2 số nguyên
1: /* This function adds two integers and returns the result */
2: int integer_add( int x, int y )
3: {
4: int result;
5: result = x + y;
6: return result;
7: }
Lời khuyên
Không nên tạo hàm quá phức tạp và dài, mànên chia nhỏ (tạo nhiều hàm con) ra để dễ
dàng theo dõi trong quá trình điều chỉnh hoặc sử lỗi chương trình.
Cách gọi hàm
9
Ví dụ: Chương trình tính phép cộng và xuất giá trị lên màn ảnh
1: /* Calculate an addition and print out the result */
2: #include <stdio.h>
3: /* This function adds two integers and returns the result */
4: int integer_add( int x, int y )
5: {
6: int result;
7: result = x + y;
8: return result;
9: }
10:
11: int main()
12: {
13: int sum;
14:
15: sum = integer_add( 5, 12);
16: printf("The addition of 5 and 12 is %d.\n", sum);
17: return 0;
18: }
Bài tập
1. Viết một hàm C nhân 2 số nguyên với nhau và trả lại giá trị nhân.
2. Viết chương trình gọi hàm nhân ở BT1 để nhân 3 với 5 và xuất kết quả lên màn
ảnh.
IV. Kiểu và tên dữ liệu trong C
Nội dung:
Với phần này ta làm quen với các bốn kiểu dữ liệu cơsở của ngônngữ C:
char
int
float
double
Từ khóa
Từ khóa là từ dành riêng để xác định một đặc trưng của ngôn ngữ, không được dùng làm
biến, hằng hoặc tên hàm. ANSI Ccó 32 từ khóa sau (và chỉ viết bằng chữ thường !!):
Keyword
Description
Keyword
Description
auto Storage class specifier
int Type specifier
10
break Statement long Type specifier
case Statement register Storage class specifier
char Type specifier return Statement
const Storage class modifier
short Type specifier
continue Statement signed Type specifier
default Label sizeof Operator
do Statement static Storage class specifier
double Type specifier struct Type specifier
else Statement switch Statement
enum Type specifier typedef Statement
extern Storage class specifier
union Type specifier
float
Type specifier unsigned Type specifier
for
Statement void Type specifier
goto Statement volatile Storage class modifier
if Statement while Statement
Kiểu dữ liệu char
Một đối tượng của kiểu char biểu thị một ký tự đơn ứng với bảng mã ký tự 8 bits ASCII.
Biến ký tự
char variablename;
hoặc:
char variablename1, variablename2, variablename3;
Format Ký tự: %c
Hằng ký tự
x = `A';
x = 65;
hoặc
x = `a';
x = 97;
Ký tự thóat (\)
Ký tự
Mô tả
\b BACKSPACE
\f Kết thúc trang (form-
feed)
[...]... không đư c chứa ký hiệu đ c biệt như *, @, #, ?, v.v C nh báo Không bao giờ dùng từ khóa c a C ho c tên cc hàm thư viện C làm tên biến m c dù c thể đư c Bài tập 1 Viết chương trình xuất cc giá trị sốc a cc ký tự Z và z 2 Viết chương trình xuất c ccc ký tự c giá trị số 72 and 104 3 Cho số double dbl_num = 123.456;,viết chương trình xuất giá trị trên theo format float và doule 4 Viết chương trình. .. c1 to character: A Convert the value of c2 to character: a Ví dụ: Biến đổi số thành ký tự (dùng format %c) 1: /* Converting numeric values back to characters */ 2: #include 3: 4: main() 5: { 6: char c1 ; 7: char c2 ; 8: 9: c1 = 65; 10: c2 = 97; 11: printf("The character that has the numeric value of 65 is: %c. \n", c1 ); 12: printf("The character that has the numeric value of 97 is: %c. \n", c2 );... xuất giá trị bằngsốc a ký tự xuống hàng (\n) V Đ c và viết qua cc giao tiếp nhập xuất (I/O) chuẩn Nội dung: Với phần này ta tìm hiểu kỹ hơn với lệnh printf() c ng như cc lệnh nhập xuất sau: Hàm getc() Hàm putc() Hàm getchar() Hàm putchar() Cc giao tiếp nhập xuất chuẩn (I/O) Ngôn ngữC xử lý một tập tin như một chuỗi byte (8 bits), gọi là stream và c thể thu nhận ho c ghi lại nó qua cc giao tiếp... \t Xuất cc ký tự Dùng hàm printf(), địnhnghi4a trong stdio.h, để xuất lên màn ảnh Ví dụ: In cc ký tự lên màn ảnh 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: /* Printing out characters */ #include main() { char c1 ; char c2 ; c1 = `A'; c2 = `a'; printf("Convert the value of c1 to character: %c. \n", c1 ); printf("Convert the value of c2 to character: %c. \n", c2 ); return 0; } Kết quả: Convert... 5: { 6: int ch1, ch2; 7: 8: printf("Please type in two characters together:\n"); 9: ch1 = getc( stdin ); 10: ch2 = getchar( ); 11: printf("The first character you just entered is: %c\ n", ch1); 12: printf("The second character you just entered is: %c\ n", ch2); 13: return 0; 14: } Kết quả: Please type in two characters together: Hi The first character you just entered is: H The second character you just... Từ khóa chuyển đổi dữ liệu: 35 signed unsigned short long Cc hàm toán h c c bản: Hàm sin(), cos(), tan() Hàm pow(), sqrt() Từ khóa chuyển đổi signed signed char ch; Biến char c ng hòa c dấu,nghĩa là khoảng giá trị c a nó sẽ là -128 đến 127 Biến char không dấu c khoảng từ 0 – 255 Ghi chú Để chuyển mộtsố dương thành 1 số âm ở dạng nhị phân, ta lấy phần bù c a số dương dạng nhị phân rồi c ng thêm... main() { putchar(65); putchar(10); putchar(66); putchar(10); putchar(67); putchar(10); return 0; } Kết quả: A B C Hàm printf() #include int printf(const char *format-string, ); VD: printf("The sum of two integers %d + %d is: %d.\n",a,b ,c) ; Cc đ c tả format dùng với printf(): %c Ký tự %d Số nguyên %i Số nguyên (như %d) %f Số th c dấu phẩy động %e Số th c dạng a.aaae+bbb %E Số th c dạng a.aaaE+bbb... liệu số th ccó độ chính x c gấp đôi Số th c 64 bits, c ít nhất 10 số lẻ thập phân Biến double double double variablename; variablename1, variablename2, variablename3; Format double: %e, %E Quy ư c đặt tên biến 13 Cc ký tự sau đây đư c dùng đặt tên biến: A-Z, a-z, 0-9 (nhưng không đư c đặt đầu), dấu gạch dưới (_) Biến không đư c chứa ký hiệu toán tử Biến không đư c chứa dấu (.) Biến không đư c chứa... Exercises 1 Phân biệt c gì kh c: for (i=0, j=1; i .
Một số kiến th c c sở về lập trình
bằng ngôn ngữ C
2
CHƯƠNG 1: C SỞ NGÔN NGỮ C
I phần c sở c a chương trình C
Nội dung:
Với phần này ta làm quen với c c thành phần c sở c u tạo nên ngôn ngữ C:
Hằng và biến
Biểu th c
C u