C là một ngôn ngữ lập trình tương đối nhỏ gọn vận hành gần với phần cứng và nó giống với ngôn ngữ Assembler hơn hầu hết các ngôn ngữ bậc cao. Hơn thế, C đôi khi được đánh giá như là có khả năng di động, cho thấy sự khác nhau quan trọng giữa nó với ngôn ngữ bậc thấp như là Assembler, đó là việc mã C có thể được dịch và thi hành trong hầu hết các máy tính, hơn hẳn các ngôn ngữ hiện tại trong khi đó thì Assembler chỉ có thể chạy trong một số máy tính đặc biệt. Vì lý do này C được xem là ngôn ngữ bậc trung.
MỘT SỐ KHÁI NIỆM CƠ BẢN TRONG C 1.1 Bộ ký tự Mọi ngôn ngữ lập trình xây dựng từ ký tự Ngôn ngữ C xây dựng ký tự sau: 26 chữ hoa : A B C Z 26 chữ thường : a b c z 10 chữ số : Các ký hiệu toán học : + - * / = ( ) Ký tự gạch nối : _ Các ký tự khác : , : ; [ ] {} ! \ & % # $ Dấu cách (space) dùng để tách từ @Lưu ý: Khi viết chương trình, ta không sử dụng ký tự khác ký tự 1.2 Từ khóa Từ khoá từ sử dụng để khai báo kiểu liệu, để viết toán tử câu lệnh Bảng liệt kê từ khoá TURBO C: Asm break case cdecl Char const continue default Do double else enum extern far float for Goto huge if int interrupt long near pascal register return short signed sizeof static struct switch tipedef union unsigned void volatile while @Lưu ý: - Không dùng từ khoá để đặt tên cho hằng, biến, mảng, hàm, - Từ khoá phải viết chữ thường, ví dụ: viết từ khoá khai báo kiểu nguyên int INT 1.3 Tên Khái niệm tên quan trọng trình lập trình, thể rõ ý nghĩa chương trình mà dùng để xác định đại lượng khác thực chương trình Tên thường đặt cho hằng, biến, mảng, trỏ, nhãn, … Chiều dài tối đa tên 32 ký tự Tên biến hợp lệ chuỗi ký tự liên tục gồm: Ký tự chữ, số dấu gạch Ký tự đầu tên phải chữ dấu gạch Khi đặt tên không đặt trùng với từ khóa Ví dụ 1.1: Các tên đúng: delta, a_1, Num_ODD, Case Các tên sai: 3a_1 (ký tự đầu số) num-odd (sử dụng dấu gạch ngang) int (đặt tên trùng với từ khóa) del ta (có khoảng trắng) f(x) (có dấu ngoặc tròn) Ví dụ 1.2: number khác Number case khác Case (case từ khóa, bạn đặt tên Case đúng) @Lưu ý: Trong C, tên phân biệt chữ hoa, chữ thường 1.4 Kiểu liệu Có kiểu liệu C là: char, int, float, double TT Kiểu liệu Kích thước unsigned char byte char byte enum bytes unsigned int bytes short int bytes int bytes unsigned long bytes long bytes float bytes 10 double bytes 11 long double 10 bytes Miền giá trị đến 255 – 128 đến 127 – 32,768 đến 32,767 đến 65,535 – 32,768 đến 32,767 – 32,768 đến 32,767 đến 4,294,967,295 – 2,147,483,648 đến 2,147,483,647 3.4 * 10–38 đến 3.4 * 1038 1.7 * 10–308 đến 1.7 * 10308 3.4 * 10–4932 đến 1.1 * 104932 1.5 Lời thích Trong lập trình cần phải ghi để giải thích biến, hằng, thao tác xử lý giúp cho chương trình rõ ràng dễ hiểu, dễ nhớ, dễ sửa chữa để người khác đọc vào dễ hiểu Trong C có ghi sau: // /* nội dung ghi */ Tóm lại, ghi dạng // dùng để ghi hàng dạng /* … */ ghi hàng nhiều hàng CẤU TRÚC CỦA MỘT CHƯƠNG TRÌNH C Một chương trình bao gồm nhiều hàm, hàm người lập trình tổ chức để giải công việc toán cần giải Một chương trình C để thực thi cần phải có hàm main() Cấu trúc chương trình sau: • Các #include ( dùng để khai báo sử dụng hàm chuẩn) • Các #define ( dùng để định nghĩa ) • Khai báo đối tượng liệu ( biến, mảng, cấu trúc vv ) • Khai báo nguyên mẫu hàm • Hàm main() • Định nghĩa hàm ( hàm main đặt sau xen vào hàm khác) Ví dụ 1.3: ? #include //k.báo sử dụng thư viện xuất/nhập chuẩn C void main(void) { double x,y; //Khai báo biến x,y //kiểu số thực printf("\n Nhap x va y"); //xuất liệu hình scanf("%lf%lf",&x,&y); //nhập liệu từ bàn phím } @Lưu ý: Một số qui tắc cần nhớ viết chương trình: - Mỗi câu lệnh viết hay nhiều dòng phải kết thúc dấu (;) - Trong chương trình, ta sử dụng hàm chuẩn, đầu chương trình ta phải khai báo sử dụng, ví dụ: #include "stdio.h" HẰNG - BIẾN - TOÁN TỬ - BIỂU THỨC 3.1 Khai báo //và Hằng đại lượng mà giá trị không thay đổi trình tính toán Nguyên tắc đặt tên theo nguyên tắc đặt tên C + Khai báo Cú pháp: #define Diễn giải: #define: Từ khóa để định nghĩa biến : tên mà ta cần định nghĩa : Giá trị khởi gán cho Ví dụ: #define MAX 1000 Lúc này, tất tên MAX chương trình xuất sau thay 1000 Vì vậy, ta thường gọi MAX tên hằng, biểu diễn số 1000 3.2 Khai báo biến + Khai báo Cú pháp: ; Diễn giải: - : kiểu liệu muốn khai báo cho biến - : gồm tên biến có kiểu liệu, tên biến cách dấu phẩy (,), cuối dấu chấm phẩy (;) Ví dụ int iTuoi; //khai báo biến iTuoi có kiểu int float fTrongLuong; //khai báo biến fTrongLuong có kiểu float char cKyTu1, cKyTu2; //khai báo biến cKyTu1, cKyTu2 có kiểu char + Vừa khai báo vừa khởi gán giá trị cho biến Có thể kết hợp việc khai báo với toán tử gán để biến nhận giá trị lúc khai báo Ví dụ Khai báo trước, gán giá trị sau ? void main(void) { int a, b, c; a = 1; b = 2; c = 5; … } Vừa khai báo vừa gán giá trị: ? void main(void) { int a = 1, b = 2, c = 5; … } + Phạm vi biến Khi lập trình, phải nắm rõ phạm vi biến Nếu khai báo sử dụng không đúng, không rõ ràng dẫn đến sai sót khó kiểm soát a Khai báo biến (biến toàn cục): Vị trí biến đặt bên tất hàm, cấu trúc Các biến toàn cục có ảnh hưởng đến toàn chương trình Chu trình sống chạy chương trình đến lúc kết thúc chương trình b Khai báo biến (biến cục bộ): Vị trí biến đặt bên hàm, cấu trúc… Chỉ ảnh hưởng nội bên hàm, cấu trúc đó… Chu trình sống lúc hàm, cấu trúc gọi thực đến lúc thực xong 3.3 Biểu thức Biểu thức phối hợp toán tử toán hạng Ví dụ: a+b b = + * 2/i a = % (7 + 1) x++ * 2/4 + – power(i, 2) Toán hạng sử dụng biểu thức số, biến, hàm 3.4 Phép toán Trong C có nhóm toán tử yếu sau đây: + Phép toán số học + : phép cộng – : phép trừ * : phép nhân / : phép chia % : phép chia lấy phần dư, áp dụng toán hạng có kiểu liệu char, int, long + Phép toán quan hệ > : lớn >= : lớn < : nhỏ > : dịch phải b)? a:b; kết max = NHẬP VÀ XUẤT DỮ LIỆU 4.1 Lệnh xuất Cú pháp: printf ("chuỗi định dạng"[, đối mục 1, đối mục 2,…]); Chức năng: Đưa kết hình - : dùng để định dạng cho liệu xuất hình - , …: mục kiện cần in hình Các biến, biểu thức phải định trị trước in - Chuỗi định dạng: đặt cặp nháy kép (" "), gồm loại: + Đối với chuỗi kí tự ghi in giống + Đối với kí tự chuyển đổi dạng thức cho phép kết xuất giá trị đối mục hình tạm gọi mã định dạng Sau dấu mô tả định dạng: %c : Ký tự đơn %s : Chuỗi %d : Số nguyên hệ thập phân %f : Số chấm động (ký hiệu thập phân) %e : Số chấm động (ký hiệu có số mũ) %g : Dùng %e %f, tuỳ theo loại ngắn hơn, không in số vô nghĩa %x : Hệ 16 không dấu %u : Số thập phân không dấu %o : Số nguyên bát phân không dấu l : Tiền tố dùng kèm với %d, %u, %x, %o để số nguyên dài (ví dụ %ld) Ví dụ: ? #include //cần khai báo tiền xử lý stdio.h, hàm main() // có dùng hàm printf void main (void) { printf(“Hello!”); } //Cho hình kết quả: Hello Ví dụ: { ig = ip/60; ip %= 60; } void main(void) { int igio, iphut; printf("Nhap vao so phut: "); scanf("%d", &iphut); time(igio, iphut); printf("%02d:%02d\n", igio, iphut); getch(); } Giải thích chương trình: Hàm time có hai tham số hình thức ig, ip có kiểu int tham số có toán tử địa & trước cho biết tham số dạng truyền tham biến 8.4 Quy tắc hoạt động hàm Khi gặp lời gọi hàm bắt đầu thực Nói cách khác, máy gặp lời gọi hàm vị trí chương trình, máy tạm dời chỗ chuyển đến hàm tương ứng Quá trình diễn theo trình tự sau: - Cấp phát nhớ cho biến cục - Gán giá trị tham số thực cho tham số hình thức tương ứng - Thực câu lệnh thân hàm - Khi gặp câu lệnh return dấu } cuối thân hàm máy xoá tham số hình thức, biến cục khỏi hàm Nếu trở từ câu lệnh return có chứa biểu thức giá trị biểu thức gán cho hàm Giá trị hàm sử dụng biểu thức chứa 8.5 Bài tập thực hành: Viết lại tập số & dạng hàm ĐỆ QUI Giải thuật đệ quy: Giải thuật đệ quy giải thuật có chứa thao tác gọi đến Giải thuật đệ quy cho phép mô tả dãy lớn thao tác số thao tác có chứa thao tác gọi lại giải thuật (gọi đệ quy) Giải thuật giải toán đệ quy thường đẹp, gọn gàng, dễ hiểu, dễ sửa đổi Tuy nhiên, việc xử lý giải thuật đệ quy lại thường gây khó khăn cho máy tính (tốn không gian nhớ thời gian xử lý), ngôn ngữ lập trình cho phép mã hóa giải thuật đệ quy (ví dụ: FORTRAN) Chương trình đệ quy: Chương trình đệ quy chương trình mà thân có câu lệnh lời gọi đến Chương trình đệ quy phải có hai thành phần: - Thành phần không chứa đệ qui, điều kiện để kết thúc trình đệ qui Thành phần có chứa đệ quy, sau bước, phạm vi thành phần phải thay đổi gặp điều kiện kết thúc @Lưu ý: Muốn giải toán giải thuật đệ qui việc ta phải đưa toán dạng tổng quát Từ ta phải xác định cho điều kiện suy biến toán (tức điều kiện để kết thúc giải thuật đệ qui) điều kiện gọi đệ qui Ví dụ toán tính n! Ta có n=0, 0!=1, n=1, 1!=1x1 0!x1 n=2, 2!=1x1x21!x2 n=3, 3!=1x1x2x3 2!x3 =>n!=1x1x2x3x x n(n-1)! x n Như vậy: - Điều kiện suy biến n=0, 0!=1 - Điều kiện gọi đệ qui n>0, n!=n x (n-1)! Vậy, có 0! =>1! =>2!=>3! =>n! Giải thuật tính n! #include long int gthua(int n); void main(void) { int n; scanf(“%d”,&n); printf(“Giai thừa của%d là: %d”,n,gthua(n)); } int long gthua(int n) { if(n==0) return 1; elsse return(n*gthua(n-1)); } Khi thực lời gọi gthua(3) phát sinh lời gọi gthua(2), đồng thời phải lưu giữ thông tin trạng thái xử lý chưa hoàn thành (return(3 * gthua(2))) vào Stack Gặp lời gọi gthua(2), tiếp tục làm phát sinh lời gọi gthua(1), đồng thời vẩn phải lưu trử thông tin trạng thái xử lý dang dở (return( 2*gthua(1)))vào Stack - Cứ gặp lời gọi trường hợp suy biến (return(1))) Khi gặp trường hợp suy biến, thông tin lưu tạm Stack lấy xử lý (thông tin lấy theo kiểu lưu trữ Stack, thông tin vào sau lấy trước) Và vậy, dùng kết gthua(0) để tính gthua(1), dùng kết gthua(1) để tính gthua(2), dùng kết gthua(2) để tính gthua(3) Cuối kết phép tính giai thừa Cụ thể thực lấy tính toán Stack sau: - Lấy return(1*gthua(0)) để thực gthua(1)=1*gthua(0)=1*1=1 - Lấy return(2*gthua(1)) để thực gthua(2)=2*gthua(1)=2*1=3 - Lấy return(3*gthua(2)) để thực gthua(3)=3*gthua(2)=3*2=6 Bài tập thực hành Sử dụng đệ qui để viết hàm tìm ước số chung lớn số Sử dụng đệ qui để viết hàm tính tổng S = 1+2+….+n MẢNG MỘT CHIỀU Mảng chiều tập hợp phần tử có kiểu liệu Giả sử bạn muốn lưu n số nguyên để tính trung bình, bạn khai báo n biến để lưu n giá trị sau tính trung bình Ví dụ : bạn muốn tính trung bình 10 số nguyên nhập vào từ bàn phím, bạn khai báo 10 biến: a, b, c, d, e, f, g, h, i, j có kiểu int lập thao tác nhập cho 10 biến sau: printf("Nhap vao bien a: "); scanf("%d", &a); 10 biến bạn thực lệnh 10 lần, sau tính trung bình: (a + b + c + d + e + f + g + h + i + j)/10 Điều phù hợp với n nhỏ, n lớn khó thực Vì vậy, khái niệm mảng sử dụng 10.1 Khai báo Ví dụ : int ia[10]; với int kiểu mảng, ia tên mảng, 10 số phần tử mảng, tức mảng ia có tối đa 10 phần tử Ý nghĩa: Khai báo mảng số nguyên gồm 10 phần tử, phần tử có kiểu int Các phần tử mảng ia mô tả sau: Từ ví dụ ta có cú pháp khai báo mảng sau: Tên_kiểu tên_biến[spt]; Diến giải: - Tên_kiểu tên kiểu liệu mà bạn muốn khai báo cho mảng - Tên_biến tên mảng mà bạn muốn khai báo - Spt: số phần tử tối đa mảng mà bạn muốn khai báo hay gọi kích thức mảng 10.2 Tham chiếu đến phần tử mảng Sau mảng khai báo, phần tử mảng có số để tham chiếu Chỉ số đến n-1 (với n kích thước mảng) Trong ví dụ 2, ta khai báo mảng 10 phần tử số đến Như vậy, để truy xuất đến phần tử thứ i mảng ia ta viết ia[i], i phép nhận giá trị từ đến mảng ia khia báo có 10 phần tử 10.3 Nhập liệu cho mảng Mảng dãy phần tử có kiểu liệu, việc nhập liệu cho phần tử mảng giống nhập liệu cho biến thông thường Ví dụ for (i = 0; i < 10; i++) //vòng for có giá trị i chạy từ đến { printf("Nhap vao phan tu thu %d: ", i + 1); scanf("%d", &ia[i]); } Ví dụ 4: Viết chương trình nhập vào n số nguyên Tính in trung bình cộng #include #include void main(void) { int ia[50], i, in, isum = 0; printf("Nhap vao gia tri n: "); scanf("%d", &in); //Nhap du lieu vao mang for(i = 0; i < in; i++) { printf("Nhap vao phan tu thu %d: ", i + 1); scanf("%d", &ia[i]); //Nhap gia tri cho phan tu thu i } //Tinh tong gia tri cac phan tu for(i = 0; i < in; i++) isum += ia[i]; //cong don tung phan tu vao isum printf("Trung binh cong: %.2f\n", (float) isum/in); getch(); } Ví dụ 5: Có loại tiền 1, 5, 10, 25 50 đồng Hãy viết chương trình nhập vào số tiền sau cho biết số số tiền gồm loại tiền, loại tờ #include #include #define MAX void main(void) { int itien[MAX] = {50, 25, 10, 5, 1}; //Khai bao va khoi tao mang voi phan tu int i , isotien, ito; printf("Nhap vao so tien: "); scanf("%d", &isotien); //Nhap vao so tien for (i = 0; i < MAX; i++) { ito = isotien/itien[i]; //Tim so to cua loai tien thu i printf("%4d to %2d dong\n", ito, itien[i]); isotien = isotien%itien[i]; //So tien lai sau da loai tru cac loai tien da co } getch(); } 10.4 Đọc liệu từ mảng Việc đọc liệu mảng cần rõ cần đọc liệu phần tử thứ mảng Ví dụ 5: for(i = 0; i < 10; i++) printf("%3d ", ia[i]); 10.5 Sử dụng biến mảng Ngoài kiểu int, bạn khai báo mảng kiểu char, float, double… Ví dụ 6: char cloai[20]; float ftemp[10]; Cách tham chiếu, nhập liệu, đọc liệu thực Bài tập thực hành Xây dựng hàm để thực công việc sau - Hàm Khoi_tao cho phép nhập vào mảng gồm n phần tử số nguyên - Hàm In_xuôi hàm In_nguoc cho phép in mảng hình theo thứ tự xuôi ngược - Hàm Tim_max hàm Tim_min để tìm giá trị nhỏ lớn mảng - Hàm Tinh_tong cho phép Tính tổng giá trị mảng - Hàm Tinh_tong_duong hàm Tinh_tong_am cho phép tính tổng phần tử có giá trị dương âm mảng - Hàm Sap_xep_tang hàm Sap_xep_giam để xếp mảng theo thứ tự tăng dần giảm dần - Xây dựng chương trình gồm menu sau: -MENU CHUONG TRINH 1: Khoi tao mang 2: In mang man hinh 3: In mang dao nguoc man hinh 4: Tim gia tri max cua mang 5: Tim gia tri cua mang 6: Tinh tong 7: Tinh tong cac phan tu duong 8: Tinh tong cac phan tu am 9: Sap xep tang dan 10 Sap xep giam dan 11: Thoat Moi ban chon so tuong ung: Khi người sử dụng chọn số tương ứng mục tương ứng menu gọi đến hàm tương ứng để thực Gợi ý: - Xây dựng tất hàm tương ứng với yêu cầu đề - Xây dựng thêm hàm có tên gọi inmenu để in menu yêu cầu - Viết hàm main, gọi hàm inmenu, tiếp đến dùng lệnh switch theo mẫu switch (ichon){ case 1: gọi hàm khoi tạo mảng break; case 2: gọi hàm in mảng hình break; … case 10: gọi hàm xếp giảm dần } Lưu ý, chương trình đóng lại người sử dụng chọn số 11 (dùng vòng lặp bao bên lệnh switch, điều kiện dừng người sử dụng nhấn số 11) Tự học lập trình C - Bài 11: Mảng nhiều chiều Khai báo mảng: Ví dụ 1: Khai báo mảng chiều int ia[5][10]; với int kiểu mảng, ia tên mảng, số phần tử mảng x 10 Ý nghĩa: Khai báo mảng chiều số nguyên gồm 50 phần tử, phần tử có kiểu int Từ ví dụ 1, ta có cú pháp khai báo mảng đa chiều sau: tên_kiểu tên_biến[spt1][spt2]…[sptn]; Diễn giải: - tên_kiểu: kiểu liệu muốn khai báo cho mảng tên_biến: Tên biến mảng, tên đặt theo qui tắc đặt tên C spt1, spt2,…, sptn: số phần tương ứng chiều mảng n chiều Tham chiếu đến phần tử mảng chiều Sau mảng khai báo, phần tử mảng chiều có số để tham chiếu, số hàng số cột Chỉ số hàng đến số hàng – số cột đến số cột – Tham chiếu đến phần tử mảng chiều ia: ia[chỉ số hàng][chỉ số cột] Nhập liệu cho mảng chiều Mảng chiều giống ma trận hai chiều, có kích thước số dòng nhân số cột, để nhập liệu cho phần tử ma trận bạn cần duyệt qua phần tử hàng ma trận đưa liệu vào cho phần tử tương ứng biến thông thường Ví dụ 2: for (int i = 0; i < 5; i++) //vòng for có giá trị i chạy từ đến cho dòng //tương ứng với dòng duyệt qua phần tử dòng tương ứng for (int j = 0; j < 10; j++) //vòng for có giá trị j chạy từ đến cho cột { printf("Nhap vao phan tu ia[%d][%d]: ", i + 1, j + 1); scanf("%d", &ia[i][j]); } @Lưu ý:Phép lấy địa phần tử mảng hai chiều áp dụng phần tử mảng hai chiều có kiểu nguyên, lại phép lấy địa cho phần tử mảng nhiều chiều không thực Chúng ta sửa lại ví dụ để nhập kiểu liệu khác cho mảng hai chiều cách dừng biến trung gian sau: float fa[5][10], tg; for (int i = 0; i < 5; i++) for (int j = 0; j < 10; j++) { printf("Nhap vao phan tu ia[%d][%d]: ", i + 1, j + 1); scanf("%f", &tg); fa[i][j]=tg; } Đọc liệu từ mảng chiều Để đọc liệu từ mảng hai chiều cần xác định đọc phần tử thứ mảng, tức cần biết số dòng số cột phần tử Ví dụ 3: in giá trị phần tử mảng chiều hình for (int i = 0; i < 5; i++) //vòng for có giá trị i chạy từ đến cho dòng { for (int j = 0; j < 10; j++) //vòng for có giá trị j chạy từ đến cho cột printf("%3d ", ia[i][j]); printf("\n"); //xuống dòng để in hàng } Ví dụ 4: Viết chương trình nhập vào ma trận số nguyên n x n In ma trận vừa nhập vào in theo chiều ngược lại dòng #include #include #define MAX 50; void main(void) { int ia[MAX][MAX], i, j, n; printf("Nhap vao cap ma tran: "); scanf("%d", &n); //Nhap du lieu vao ma tran for (i = 0; i < n; i++) for (j = 0; j < n; j++) { printf("Nhap vao phan tu ia[%d][%d]: ", i + 1, j + 1); scanf("%d", &ia[i][j]); } //In ma tran for (i = 0; i < n; i++) { for (j = 0; j < n; j++) printf("%3d ", ia[i][j]); printf("\n"); //xuống dòng để in hàng } printf("\n"); //Tao khoang cach giua ma tran //In ma tran theo thu tu nguoc for (i = 0; i< n; i++) { for (j = n-1; j >= j ) printf("%3d ", ia[i][j]); printf("\n"); //xuống dòng để in hàng } getch();} Bài tập thực hành Viết hàm cho phép nhập vào ma trận vuông kích thước NxN Viết hàm tính tổng phần tử đường chéo Viết hàm tính tổng phần tử đường chéo phụ Viết hàm in tổng dòng ma trận Viết hàm in tổng cột ma trận Viết hàm kiểm tra ma trận có phải ma trận đơn vị không Viết hàm kiểm tra ma trận có phải ma trận chéo không Viết hàm kiểm tra ma trận có phải ma trận tam giác không Xây dựng menu hàm main để gọi thực câu đến câu [...]... nhầm lẫn nào Khi một hàm đư c gọi tới, vi c đầu tiên là giá trị c a c c tham số th c đư c gán cho c c tham số hình th c Như vậy c c tham số hình th c chính là c c bản sao c a c c tham số th c Hàm chỉ làm vi c trên c c tham số hình th c C c tham số hình th c có thể bị biến đổi trong thân hàm, c n c c tham số th c thì không bị thay đổi Ví dụ 5: #include #include // khai bao prototype... nhiêu lần để nó c độ dày 1m 6 Viết chương trình tìm c c số nguyên tố từ 2 đến N, với N đư c nhập vào 7 Viết chương trình tính biểu th c: 1-2+3-4+…+(2n-1)-2n CHƯƠNG TRÌNH CON - HÀM 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ỏ hơn, giúp th c hiện những c ng vi c lặp lại nào đó một c ch nhanh chóng mà không... c a C - [khai báo c c tham số hình th c] : c c tham số hình th c và kiểu c a chúng - [Khai báo c c biến c c bộ]: khai báo c c biến c c bộ, c c biến này chỉ c t c dụng trong nội bộ hàm - [return]: là lệnh th c hiện gán giá trị trả về cho hàm - [biểu th c] : là giá trị trả về cho hàm, c thể là biến, hằng, biểu th c nhưng phải c giá trị x c định và c kiểu dữ liệu là kiểu đã khai báo cho hàm Ví dụ 1:... lệnh break, goto ho c return - Với mỗi biểu th c có thể viết thành một dãy biểu th c con phân c ch nhau bởi dấu phẩy Khi đó c c biểu th c con đư c x c định từ trái sang phải Tính đúng sai c a dãy biểu th c con trong biểu th c thứ 2 đư c x c định bởi biểu th c con cuối c ng - Trong thân for () c thể chứa một ho c nhiều c u tr c điều khiển kh c - Khi gặp lệnh break, c u tr c lặp xâu nhất sẽ... nhanh chóng mà không phải viết lại đoạn chương trình 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ừ hàm main() Trong C chương trình con chỉ tồn tại dới dạng hàm chứ không c thủ t c Hàm c thể xem là một đơn vị đ c lập c a chương trình C c hàm c vai trò ngang nhau, vì vậy không c phép xây dựng một hàm bên trong c c hàm kh c 8.1 Khai báo và định nghĩa hàm Xây... th c còn đúng + C pháp: while (biểu th c) ; Diễn giải: - Biểu th c: c thể là một biểu th c ho c nhiều biểu th c con Nếu là nhiều biểu th c con thì c ch nhau bởi dấu phẩy (,) và tính đúng sai c a biểu th c đư c quyết định bởi biểu th c con cuối c ng - Trong thân while () c thể chứa một ho c nhiều c u tr c điều khiển kh c - Trong thân while c thể sử dụng lệnh continue để chuyển... báo c c đối và đưa ra c u lệnh c n thiết để th c hiện yêu c u đề ra cho hàm Một hàm đư c viết theo mẫu sau: ( [khai báo c c tham số hình th c] ) { [Khai báo c c biến c c bộ] [C c câu lệnh] [return[biểu th c] ;] } Giải thích: - : giá trị kiểu dữ liệu c a dữ liệu sẽ trả về cho hàm - : tên c a hàm mà bạn muốn định nghĩa, đư c đặt theo qui t c đặt tên c a C -... c c bộ C c tham số dùng khi khai báo hàm đư c gọi là tham số hình th c C c tham số đư c cung c p cho hàm khi gọi hàm là tham số th c Tham số th c có thể là một biểu th c, trong khi tham số hình th c thì không thể là 1 biểu th c Dãy c c tham số th c phải tương ứng về kiểu với tham số hình th c Có những hàm không c n c tham số Vì vậy, khi khai báo ta c thể dùng từ khóa void để báo rằng hàm không c n... Hàm in ra bảng c u chương 2 void in_cuuchuong2(void) { for(int i=1;i ... hàng C U TR C CỦA MỘT CHƯƠNG TRÌNH C Một chương trình bao gồm nhiều hàm, hàm người lập trình tổ ch c để giải c ng vi c toán c n giải Một chương trình C để th c thi c n phải c hàm main() C u tr c. .. hàm, c u tr c C c biến toàn c c có ảnh hưởng đến toàn chương trình Chu trình sống chạy chương trình đến l c kết th c chương trình b Khai báo biến (biến c c bộ): Vị trí biến đặt bên hàm, c u tr c ... đúngthì th c khối lệnh thoát khỏi c u tr c if Ngư c lại, bt_logic c giá trị đúngthì th c khối lệnh thoát khỏi c u tr c if … Ngư c lại, bt_logic n-1 đúngthì th c khối lệnh n-1 thoát khỏi c u tr c if,