CHƯƠNG 4: HÀM
1. Khái niệm hàm
1.1Khái niệm và phân loại
Một chương trình viết trong ngôn ngữ C là một dãy các hàm, trong đó có một
hàm chính(hàm main). Hàm chia các bài toán lớn thành các công việc nhỏ, có thể có
những đoạn chương trình viết lặp đi lặp lại nhiều lần, để tránh rườm rà và mất thời
gian khi viết chương trình; người ta thường phân chia chương trình thành nhiều
module, mỗi module giải quyết một công việc vào đó. Thứ tự các hàm trong chương
trình là bất kỳ, song chương trình bao giờ cũng đi thực hiện từ main().
              
                                            
                                
            
 
            
                 53 trang
53 trang | 
Chia sẻ: phuongt97 | Lượt xem: 696 | Lượt tải: 0 
              
            Bạn đang xem trước 20 trang nội dung tài liệu Giáo trình Lập trình cơ bản (Phần 2), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
i chương trình 
3.2 Tên mảng là 1 hằng địa chỉ 
 [] tương đương với *(+) 
 &[] tương đương với (+) 
Trong đó là biến con trỏ, là 1 biểu thức số nguyên. 
Ví dụ: giả sử có khai báo: 
 #include 
 #include 
 #include 
 int main() 
 { 
 int *a; 
 84 
Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 
 int i; 
 clrscr(); 
 a=(int*)malloc(sizeof(int)*10); 
 for (i=0;i<10;i++) 
 a[i] = 2*i; 
 printf(“truy cap theo kieu mang:”); 
 for (i=0;i<10;i++) 
 printf(“%d”,a[i]); 
 printf(“truy cap theo kieu con tro:”); 
 for (i=0;i<10;i++) 
 printf(“%d”,a + i);; 
 getch(); 
 retrun 0; 
 } 
 Với khai báo ở trên, hình ảnh của con trỏ a trong bộ nhớ 
3.3 Con trỏ trỏ tới các phần tử của mảng 1 chiều 
Giả sử con trỏ ptr chỉ đến phần tử a[i] nào đó của mảng a thì: 
 ptr + j chỉ đến phần tử đứng sau a[i], tức là a[i + j] 
 ptr - j chỉ đến phần tử đứng trước a[i], tức là a[i - j] 
Ví dụ: 
 Giả sử có 1 mảng mang_int, cho con trỏ contro_int chỉ đến phần tử thứ 5 trong 
mảng. In ra các phần tử của contro_int & mang_int. 
 #include 
 #include 
 #include 
 85 
Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 
 int main() 
 { 
 int i, mangint[10]; 
 int *controint; 
 clrscr() 
 for(i=0;i<=9;i++) 
 mangint[i]=i*2; 
 controint=&mangint[5]; 
 printf(“\n noi dung cua mang int ban dau=”); 
 for (i=0;i<=9;i++) 
 printf(“%d”, mangint[i]); 
 printf(“\n noi dung cua contro int ban dau=”); 
 for (i=0;i<=5;i++) 
 printf(“%d”, controint[i]); 
 for i=0;i<5;i++) 
 controint [i]++; 
 printf(“\n -----------------------------------------
 “); 
 printf(“\n noi dung cua mang int sau khi tang 1=”); 
 for (i=0;i<=9;i++) 
 printf(“%d”, mangint[i]); 
 printf(“\n noi dung cua contro int sau khi tang 
 1=”); 
 for (i=0;i<5;i++) 
 printf(“%d”, controint[i]); 
 for i=0;i<5;i++) 
 if(controint !=null) 
 free(controint); 
 getch(); 
 return 0; 
 } 
 Kết quả của chương trình 
 86 
Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 
4. Con trỏ và hàm 
 Khi tham số hình thức của hàm là một con trỏ thì theo nguyên tắc gọi hàm ta 
 dùng tham số thực tế là 1 con trỏ có kiểu giống với kiểu của tham số hình thức. Nếu 
 lúc thực thi hàm ta có sự thay đổi trên nội dung vùng nhớ được chỉ bởi con trỏ tham 
 số hình thức thì lúc đó nội dung vùng nhớ được chỉ bởi tham số thực tế cũng sẽ bị 
 thay đổi theo. 
 Ví dụ: xét hàm hoán vị được viết như sau: 
 #include 
 #include 
 void hoanvi(int *a, int *b) 
 { 
 int c=*a; 
 *a=*b; 
 *b=c; 
 } 
 int main() 
 { 
 int m=20, n=30; 
 clrscr(); 
 printf(“truoc khi goi ham m=%d, n=%d\n”,m,n); 
 hoanvi(&m,&n); 
 printf(“sau khi goi ham m=%d, n=%d”,m,n); 
 getch(); 
 return 0; 
 } 
 87 
Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 
 Kết quả thực thi chương trình 
 Truớc khi gọi hàm Khi gọi hàm Sau khi gọi hàm 
 m=20 , n=30 a=&m; b=&n; Con trỏ a,b bị giải phóng 
 Lúc này m,n đã thay đổi: 
 *a=m; *b=n; m=30, n=20 
 &m, &n m=20 , n=30 
 Đổi chỗ ta được &m, &n 
 a=30, b= 20 
 m = 30 , n= 20 
 &m, &n 
 BÀI TẬP THỰC HÀNH 
Bài tập 1 
 Khai báo 1 biến nguyên a và biến trỏ kiểu nguyen p, cho p trỏ đến a. in ra màn 
hình địa chỉ của a, nội dung trong p, địa chỉ của biến trỏ p. 
 #include 
 #include 
 #include 
 void main() 
 { 
 int a, *p; 
 clrscr(); 
 p=&a; 
 printf("\nDia chi cua bien nho a= %x",&a); 
 printf("\nNoi dung cua bien tro p= %x",p); 
 printf("\n dia chi cu bien tro p= %x",&p); 
 getch(); 
 } 
Bài tập 2 
 88 
Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 
 Viết chương trình nhập vào từ bàn phím n số nguyên, cấp phát một vùng nhớ 
động để lưu trữ n số nguyên đó, hiện các số vừa nhập, tính tổng, trung bình cộng, 
max, min của dãy số đó. 
#include 
#include 
#include 
void main() 
{ 
 clrscr(); 
 int *a,n ,i; 
 printf("\n nhap so luong phan tu n= "); 
 scanf("%d",&n); 
 // cap phat bo nho 
 a=(int*)malloc(n*sizeof(int)); 
 //nhap du lieu 
 for(i=0;i<n;i++) 
 { 
 printf("\n Nhap so thu %d ",i+1); 
 scanf("%d",a+i); 
 } 
 // hien du lieu 
 printf("\n day so vua nhap la: "); 
 for(i=0; i<n; i++) 
 { 
 printf(" %d",*(a+i)); 
 } 
 //tinh tong 
 int tong=0; 
 for(i=0; i<n; i++) 
 { 
 tong=tong + *(a+i); 
 } 
 printf("\n tong cua day so do la: %d",tong); 
 89 
Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 
 //tinh tb cong 
 printf("\n Trung binh cong cua day do la: 
 %f",tong/(n*1.0)); 
 // tim max 
 int max= *a; 
 for(i=0; i<n; i++) 
 { 
 if(max< *(a+i)) 
 max= *(a+i); 
 } 
 printf("\n so lon nhat la: %d",max); 
 //tim min 
 int min = *a; 
 for(i=0; i<n; i++) 
 { 
 if(min >*(a+i)) 
 min = *(a+i); 
 } 
 printf("\n so nho nhat la: %d", min); 
 getch(); 
} 
 90 
Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 
 Chương 7 : CHUỖI KÝ TỰ 
1. Khái niệm 
 Trong C không có kiểu xâu, do vậy ngôn ngữ C sử dụng mảng để lưu trữ chuỗi ký 
tự, mỗi phần tử của mảng sẽ là một kiểu dữ liệu kiểu char 
 Chuỗi ký tự là một dãy các ký tự hoặc một mảng các ký tự. Các ký tự được lưu 
theo thứ tự từ trái sang phải của chuỗi và bắt đầu bằng phần tử có chỉ số 0 cho đến 
hết chuỗi. Kết thúc chuỗi là ký tự ‘\0’ (còn được gọi là ký tự NULL trong bảng mã 
ASCII). 
Các hằng chuỗi ký tự được đặt trong cặp dấu nháy kép ””. 
2. Khai báo 
2.1 Khai báo theo mảng 
 Cú pháp: char [Chiều dài tối đa] 
VD: Trong chương trình, ta có khai báo: 
 char Ten[12]; 
 Trong khai báo trên, bộ nhớ sẽ cung cấp 12+1 bytes để lưu trữ nội dung của chuỗi 
ký tự Ten; byte cuối cùng để lưu ký tự ‘\0’ để chấm dứt chuỗi. 
Ghi chú: 
  Chiều dài tối đa của biến chuỗi là một hằng nguyên nằm trong khoẳng từ 1 đến 
 255 bytes. 
  Chiều dài tối đa không nên khai báo thừa để tránh lẵng phí bộ nhớ, nhưng cũng 
 không nên khai báo thiếu. 
2.2 Khai báo theo con trỏ 
 Cú pháp: char *; 
 VD: Trong chương trình, ta có khai báo: 
 char *Ten; 
 Trong khai báo trên, bộ nhớ sẽ dành 2 bytes để lưu trữ địa chỉ của biến con trỏ 
Ten đang chỉ đến, chưa cung cấp nơi để lưu trữ dữ liệu. Muốn có chỗ để lưu trữ dữ 
liệu, ta phải gọi đến hàm malloc() hoặc calloc có trong alloc.h, sau đó mới gán dữ liệu 
cho biến. 
 91 
Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 
3. Các thao tác trên chuỗi 
3.1 Nhập chuỗi từ bàn phím 
 Để nhập một chuỗi ký tự từ nàn phím, ta sử dụng hàm gets() với cú pháp như 
sau: 
 gets() 
VD: char Ten[20]; 
 gets(Ten); 
 Ta cũng có thể sử dụng hàm scanf() để nhập dữ liệu cho biến chuỗi, tuy nhiên 
lúc này ta chỉ có thể nhập được một chuỗi không có dấu khoẳng trắng. 
 Ngoài ra, hàm cgets() (trong conio.h) cũng được sử dụng để nhập chuỗi. 
Chú ý: 
 Nếu trước lệnh nhập chuỗi có lệnh nhập số thì phải xóa vùng đệm bàn phím 
trước khi nhập chuỗi bằng lệnh sau: 
 fflush(stdin); 
Ví dụ 
 int n; 
 char s[50]; 
 printf(“nhap so n =”); 
 scanf(“%d”,&n); 
 printf(“nhap chuoi s = ”); 
 fflush(stdin); gets(s); 
3.2 Xuất chuỗi ra màn hình 
 Để xuất chuỗi (biểu thức chuỗi) lên màn hình, ta sử dụng hàm puts(), với cú pháp 
như sau: 
 puts() 
 VD: Nhập vào một chuỗi và hiển thị trên màn hình chuỗi vừa nhập. 
 #include 
 #include 
 #include 
 int main() 
 { 
 92 
Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 
 char Ten[12]; 
 printf(“Nhap chuoi:”); gets(Ten); 
 printf(“Chuoi vua nhap”);puts(Ten); 
 getch(); 
 return 0; 
 } 
 Ngoài ra, ta có thể sử dụng hàm printf(), cputs() (trong conio.h) để hiển thị 
 chuỗi lên màn hình. 
3.3 Một số hàm xử lý chuỗi 
 Hàm cho biết độ dài thực sự (số ký tự) của chuỗi ký tự lưu trong mảng 
 int strlen(s); 
ví dụ: 
 char s[100] = “Ha Noi Viet Nam”; 
 int a = strlen(s); 
sẽ trả về độ dài thực của sâu s gán vào biến nhớ a, cụ thể là a = 15 
 Lệnh gán chuỗi từ sâu này vào sâu khác 
 strcpy(s1, s2 ); 
sẽ thưc hiện chép chuỗi ký tự trong sâu s2 vào s1. 
Chú ý: 
 Trong ngôn ngữ C không thể sử dung phép gán ( = ) để gán hai chuỗi do đó phải 
sử dụng lệnh strcpy này. 
 Lệnh nối hai sâu lại với nhau 
 strcat( s1,s2); 
sẽ thưc hiện nối sâu S2 vào sâu S1 
ví dụ: 
 char s1[100] = “Ha Noi”; 
 char s2[100] =”Viet Nam”; 
 strcat (s1,s2); 
kết quả xâu s1 sẽ thay đổi và đó là:”Ha NoiViet Nam” 
 Lệnh chuyển sâu thành chữ hoa 
 strupr(s); 
 93 
Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 
 Lệnh chuyển sâu thành chữ thường. 
 strlwr(s); 
3.4 Một số thao tác cơ bản trên chuỗi 
  Đêm ký tự, đếm từ 
 Cho một chuỗi s và đếm xem trong chuỗi có bao nhiêu chữ thỏa mãn một điều 
kiện nào đó: 
 int dem = 0 
 for( i =0; i<strlen(s);i++) 
 if(s[i] thỏa mãn điều kiện) dem ++; 
 printf(“so ky tu dem duoc la: %d”,dem) ; 
 Thuật toán đếm số từ co trong chuỗi s theo tiêu chuẩn nhận biết đầu từ( là 
cặp ký tự thỏa mãn ký tự trước là dấu cách, ký tự sau khác dấu cách). 
 int dem; 
 if(s[0] = = ‘ ’ ) dem = 0 ; 
 else dem = 1; 
 for( i = 1;i < strlen(s);i++ ) 
 { 
 if(s[i] = =’ ’&& s[i+1]!=’ ’) 
 dem ++; 
 } 
 printf(“so tu dem duoc là: %d”,dem) ; 
 Chuẩn hóa chuỗi ký tự 
 Một chuỗi ký tự ở dạng chuẩn nếu không có dấu cách ở đầu, không có dấu cách 
ở cuối và giữa hai từ có duy nhất một dấu cách. 
 Thuật toán chuẩn hóa được chia làm 3 bước như sau 
Bước 1: Xóa dấu cách ở đầu 
 int i = 0 ; 
 while (s[i] = =’ ’&&i < strlen(s)) 
 { 
 i++ ; 
 strcpy(&s[0],&s[i]); 
 94 
Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 
 } 
Bước 2: Xóa dấu cách thừa giữu hai từ 
 int i = 0; 
 while(i<strlen(s)-1) 
 { 
 if(s[i] == ‘ ‘&& s[i+1] == ‘ ‘ ) 
 strcpy(&s[i],&s[i+1]); 
 i++; 
 } 
Bước 3: xóa dấu cách ở cuối chuỗi 
 while(s[strlen(s)-1] ==’ ’ ) s[strlen(s)-1]= ‘\0’; 
  Tách từ 
 + Tách từ đầu tiên 
 i=0; 
 while(s[i] = =' ')i++; 
 for(j=0;(i<strlen(s))&&(s[i]!=' ');i++,j++) 
 tudau[j] = s[i]; 
 tudau[j]='\0'; 
  Tách từ cuối cùng 
 i = strlen(s)-1; 
 while(s[i] = =' ')i--; 
 j=i; 
 while(s[i]!=' ')i--; 
 i++; 
 for(int x = 0;i<=j;i++) 
 { 
 tucuoi[x] = s[i]; 
 x++; 
 } 
 tucuoi[x] = '\0'; 
 95 
Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 
 96 
Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 
 BÀI TẬP THỰC HÀNH 
Bài tập 1 
 Lập trình đọc vào một sâu. Đọc vào từ bàn phím một kí tự bất kì, rồi đếm xem 
số lần xuất hiện ký tự này trong sâu. Báo kết quả ra màn hình. 
#include 
#include 
#include 
int dem(char s[],char a) 
{ 
 int d=0;//so ki tu 
 int l=strlen(s); 
 for(int i=0;i<l;i++) 
 { 
 if(s[i] == a) 
 d++; 
 } 
 return d; 
} 
void main() 
{ 
 int i; 
 char s[100],ch; 
 clrscr(); 
 printf("\n nhap vao mot cau: "); 
 fflush(stdin);gets(s); 
 printf("\n Nhap vao mot ki tu bat ki:"); 
 ch = getche(); 
 //dem so lan xuat hien cua ki tu 
 printf("\nki tu %c xuat hien %d lan trong xau 
 ",ch,dem(s,ch)); 
 getch(); 
} 
 97 
Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 
Bài tập 2 
 Viết chương trình đọc vào một xâu. Đếm số từ của một sâu. Từ được hiểu là 
xâu khác rỗng và không có dấu cách. 
 #include 
 #include 
 #include 
 int sotu(char S[]) 
 { 
 int dem=0,n; 
 n=strlen(S); 
 if(S[0]!=' ')dem=1; 
 for(int i=1;i<n;i++) 
 { 
 if(S[i]= =' '&& S[i+1]!=' ')dem++; 
 } 
 return dem; 
 } 
 void main() 
 { 
 int i; 
 char s[100]; 
 clrscr(); 
 printf("\n nhap vao mot sau ki tu: "); 
 fflush(stdin);gets(s); 
 //dem so tu cua mot sau 
 printf("sau ban vua nhap co: %d tu",sotu(s)); 
 getch(); 
 } 
 98 
Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 
Bài tập 3 
 Lập trình đọc vào một câu từ bàn phím rồi đưa ra màn hình dưới dạng một cột. 
thí dụ đọc vào TIÊN HỌC LỄ HẬU HỌC VĂN kết quả đưa ra thành 
 TIÊN 
 HỌC 
 LỄ 
 HẬU 
 HỌC 
 VĂN 
#include 
#include 
#include 
void hien(char s[]) 
{ 
 int l=strlen(s),n=0; 
 while(s[n]= =' ')n++; 
 for(int i = n ; i<l ; i++) 
 { if(s[i]!=' ') 
 printf("% c",s[i]); 
 else 
 printf("\n"); 
 } 
} 
void main() 
{ int i; 
 char s[100]; 
 clrscr(); 
 printf("\n nhap vao mot cau: "); 
 fflush(stdin);gets(s); 
 printf("hien cau moi tu tren mot dong la:\n"); 
 hien(s); 
 getch(); 
} 
 99 
Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 
Bài tập 4 
 Nhập vào từ bàn phím họ tên của một người. Hiện tên và họ của người đó lên 
màn hình. 
#include 
#include 
#include 
void main() 
{ 
 char s[100],ten[10],ho[10]; 
 int i=0,j=0; 
 clrscr(); 
 printf("\n nhap vao ten cua mot nguoi: "); 
 fflush(stdin);gets(s); 
 // tach ho 
 while(s[i]= =' ')i++; 
 do{ 
 ho[j]=s[i]; 
 i++; j++; 
 }while(s[i]!=' '); 
 ho[j]='\0'; 
 printf("\n ho cua nguoi nay la: %s",ho); 
 // tach ten 
 j=0; 
 i=strlen(s); 
 while(s[i]= =' ')i--; 
 int i1=i; 
 while(s[i1]!=' ')i1--; 
 do{ 
 ten[j]=s[i1]; 
 i1++; j++; 
 }while(i1<=i); 
 ten[j]='\0'; 
 printf("\n ten cua nguoi nay la: %s",ten); 
 getch(); } 
 100 
Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 
 PHỤ LỤC 
 HƯỚNG DẪN DEBUG TRÊN MÔI TRƯỜNG BORLAND C 
 Mặc dù chương trình không còn lỗi nhưng khi chạy chương trình vẫn ra kết quả 
sai, những lỗi đó có thể là: 
 • Dùng chấm phẩy sau: if, else, for, while,  mà chưa thực hiện lệnh. 
 • Định dạng nhập xuất sai hay khai báo sai kiểu dữ liệu. 
 • Chia cho 0. 
 • Không có điều kiện dừng (điều kiện dừng sai). 
 • Phân tích thuật toán thiếu (chưa vét hết các trường hợp) hoặc sai. 
Các thao tác debug: 
Nhấn F7 hoặc F8 để chạy từng bước (nếu không có lỗi khi biên dịch) 
 - F7: Đi từng lệnh của hàm con nếu có gọi hàm. 
 - F8: không vào chi tiết từng lệnh khi gọi đến hàm con (chỉ đưa ra kết quả của hàm 
 con). 
 Quan sát vệt sáng để biết chương trình đang thực hiện đến vị trí lệnh nào. 
 - Nhấn Ctrl+F7 (hoặc nhấn phím Insert nếu đã có cửa sổ Watch): Nhập vào biến 
 cần theo dõi giá trị các biến khi thực hiện xong lệnh hay hàm nào đó. 
 101 
Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 
 - Có thể xóa biến trên cửa sổ Watch bằng cách chọn biến trên cửa sổ Watch và 
 nhấn phím Delete. 
 - Nếu không thấy cửa sổ hiển thị giá trị biến (Watch) nhấn Alt+W+W hoặc vào 
 menu Window chọn Watch. 
Nếu muốn bỏ qua một đoạn nào đó (tức không cần kiểm tra đọan đó) thì 
nhấn F4 để chương trình thực thi tới vị trí dòng của dấu nháy rồi dừng lại đó (dấu 
nháy phải tại vị trí những dòng phía sau của vệt sáng, nhấn F6 để chuyển qua lại các 
cửa sổ). 
 - Muốn thay đổi giá trị của biến ta dùng phím Ctrl+F4 để hiển thị cửa sổ. 
 102 
Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 
 Nhập vào tên biến ở ô Expression, chọn nút Evaluate (hoặ nhấn Enter), ô Result 
sẽ hiển thị kết quả tại thời điểm đó, sau đó nhập giá trị mới cho biến tại ô New Value 
  Enter (dùng phím tab để di chuyển vị trí chọn). 
Ngoài ra có thể đánh dấu để chương trình thực thi đến vị trí đánh dấu (khi chưa chạy 
từng bước) dùng phím F8 để đánh dấu ngay vị trí dấu nháy. Vị trí đánh dấu sẽ có vệt 
sáng màu đỏ. 
 Có thể đánh dấu nhiều vị trí khác nhau. Nhấn Ctrl+F9 để chương trình thực thi 
đến vị trí đánh dấu theo thứ tự từ trên xuống dưới, đồng thời cũng có thể dùng phím 
F7 hoặc F8 giống như trên để chạy từng bước. 
 103 
Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 
 Ngoài ra, có thể dùng phím ALT+F5 để xem kết quả xuất trong quá trình debug 
(để kiểm tra nhập xuất). 
 Trong quá trình chạy từng bước có thể kết thúc bằng cách nhấn Ctrl+F2. 
  Các thao tác liên quan đến cửa sổ Watch 
 - Di chuyển cửa sổ Watch: Chọn cửa sổ Watch, nhấn Ctrl+F5. Sau đó dùng phím 
 mũi tên để di chuyển cửa sổ tới vị trí mới. Nhấn phím Enter. 
 - Thay đổi kích thứơc cửa sổ Watch (khi đang chọn bằng Ctrl+F5 trên cửa sổ 
 Watch) nhấn Shift + phím mũi tên rồi nhấn phím Enter. 
 TÀI LIỆU THAM KHẢO 
  PHẠM VĂN ẤT: “Kỹ thuật lập trình C: cơ sở và nâng cao”. Nhà Xuất BảnKhoa Học 
Kỹ Thuật – 1996. 
  Lê Mạnh Thạnh, Giáo trình môn lập trình C, NXB Giáo dục, 2000; 
  Nguyễn Linh Giang, Nguyễn Xuân Thực, Lê Văn Thái, Giáo trình kỹ thuật lập trình 
C, NXB Giáo dục, 2005; 
  Ngô Trung việt, Giáo trình ngôn ngữ lập trình C và C++ , NXB Giao thông vận tải, 
1995; 
  B. Kernighan and D. Ritchie, The C programming language, Prentice Hall, 1990. 
 104 
            Các file đính kèm theo tài liệu này:
 giao_trinh_lap_trinh_co_ban_phan_2.pdf giao_trinh_lap_trinh_co_ban_phan_2.pdf