Viết các chương trình con Trong đó - Phần a dùng để lạp các thư viện cần sử dụng cho chương trình được viết như sau: #include Ví dụ: include - Phần b dùng để định nghĩa các giá trị hằng
Trang 1Bài 1: Ngôn ngữ lập trình C
I Các khái niệm cơ bản
1 Bảng ký tự sử dụng trong C
Bảng ký tự được sử dụng trong ngôn ngữ lập trình C bao gồm
- Nhóm các chữ cái: chữ in hoa A,B,C…,Z và chữ in thường a,b,c,…,z
Tên sai: ha noi, viet%nam…
Tên có thể do ngôn ngữ C sinh ra để nhằm hai mục đích: thứ nhất làđịnh danh các thành phần có sẵn, thứ hai viết các lệnh trong chương trình.Tên chuẩn là những tên do ngôn ngữ lập trình C đặt ra để định danh cácthành phần
Ví dụ: scanf,printf,getch()…
Từ khoá (key word) là các tên do ngôn ngữ lập trình sinh ra để viết các
lệnh, để định danh các thành phần đặc biệt
Ví dụ: for,while, if, int, float…
Chú ý: tên do chúng ta đặt ra không được phép trùng với từ khoá, khôngnên trùng với các tên chuẩn
3 Các kiểu dữ liệu
bản mã ASCII
1 byte
4 Khái niệm về hằng và biến nhớ
Trang 2Là một đại lượng có thể thay đổi trong chương trình, biến nhớ được
sử dụng để lưu dữ liệu của chương trình, do vậy nó rất quan trọng tronglập trình, nếu không có biến nhớ thì chúng ta không thể lập trình đượcbởi vì không có chỗ chứa dữ liệu cho việc tính toán và sử lý
5 Các phép toán
Các phép toán trong C gọi là các toán tử (operator), bao gồm:
a Các phép toán số học
- Ký hiệu: +, -,*, /,%
- Ý nghĩa: cộng ,trừ, nhân, chia, chia dư
- Dữ liệu tác động: kiểu số nguyên hoặc số thực
- Kết quả: các phép toán số học cho kết quả là dữ liệu kiểu số
Ví dụ:
2+5, 5*6, 3/2
Chú ý: đối với phép chia(/) nếu hai vế dữ liệu là số nguyên thì máy
sẽ chia lấy phần nguyên, nếu một trong hai vế là số thực thì máy chokết quả chính xác
Ví dụ:
7/4 sẽ cho kết quả là 1(là phần nguyên của 7 chia 4)
7.0/4 hoặc 7/4.0 sẽ cho kết quả là 1.75
7%4 sẽ cho kết quả là 3(là phân dư của 7 chia 4)
b Các phép toán quan hệ
- Ký hiệu: >, <, >=, <=, ==, !=
Trang 3- Ý nghĩa : lớn hơn, nhỏ hơn, lớn hơn hoặc bằng, nhơ hơn hoặcbằng, so sánh bằng, và khác
- Dữ liệu tác động: là các dữ liệu kiểu số và chữ, nếu là chữ thì máy
sẽ so sánh mã ASCII của các chữ đo
- Kết quả: phép toán cho kết quả là loogic(đúng hoặc sai)
Máy sẽ thực hiện tính toán vế phải và đưa kết quả vào vế trái do
đó vế trái luôn luôn là một biến nhớ
II Biểu thức, câu lệnh, khối lệnh và chương trình
Trang 4Biểu thức là sự kết hợp giữa các toán tử(phép toán ) và các dữ liệu đểthực hiện tính toán, khi máy thực hiện tính biểu thức sẽ tuân theo thứ tự ưutiên của phép toán cũng giống như toán học.
Ví dụ: (8+3*(2-4))/2 máy sẽ thực hiện phép trù trước, rồi đếnphép nhân,cộng, chia và kết quả là 1
Để yêu cầu máy thực hiện các thao tác chúng ta phải viết ra các lệnhtương ứng, bằng cách sử dụng các tên chuẩn và từ khóa kết hợp với viết
biểu thức Kết thúc mỗi câu lệnh phải có dấu chấm phẩy(;)
Một câu lệnh được viết trên một dòng, và trên một dòng có thể viết đượcnhiều câu lệnh
Thồng thường một câu lệnh chưa đủ để thực hiện một chức năng haymột thao tác nào đó được yêu cầu, do vậy chúng ta phải viết thành nhiềucâu lệnh và tạo thành một khối lệnh Khối lệnh phải được viết vào trongcặp dấu ngoặc nhọn { }
c Khai báo các kiểu dữ liệu mới
d Khai báo các chương trình con
e Khai bào các biến nhớ toàn cục
f Viết chương trình chính
g Viết các chương trình con
Trong đó
- Phần a dùng để lạp các thư viện cần sử dụng cho chương trình được
viết như sau:
#include<tên thư viện>
Ví dụ: include<conio.h>
- Phần b dùng để định nghĩa các giá trị hằng cách viết như sau
#define tên hằng giá_trị_cần đặt_cho_hằng
Ví dụ: #define myname “abc”
- Phần c khai báo biến nhớ trong chương trình thường được thực hiện ở
phần đầu trong chương trình(hàm main), tuy nhiên trong môi trườngTC3.0 có thể thực hiện bất cứ chỗ nào nhưng phải trước khi sử dụngchúng
Trang 5- Phần f viết trương trình chính, mỗi một chương trình có duy nhất một
chương trình chính và nó sẽ điều khiển toàn bộ các hoạt động củachương trình Chương trình chính được viết như sau:
Void main()
{
Các câu lệnh}
Cấu trúc một chương trình C đơn giản
#include<stdio.h>
#include<conio.h>
Void main(){
Khai báo biến nhớCác câu lệnh}
IV Cách thực hiện một chương trình trên máy
Khi thực hiện chương trình thì máy tình sẽ thực hiện các câu lệnh trongchương trình chính Quá trình thực hiện sẽ tuần tự từ trên xuống dưới và từtrái sang phải
Thì máy sẽ thực hiện các câu lệnh theo tuần tự sau: A1,A2,B1,B2,C1,A3
V Môi trường lập trình TurboC
1 Giới thiệu TurboC và khởi động
Trang 6Sau khi cài đặt song ta có thư mục TC hoặc TC30 trong thư mục này có các thư mục con sau.
Để khởi động chương trình này chúng ta chạy tệp tin TC.EXE trong thư mục Bin của TurboC
Màn hình giao diện của TurboC có dạng sau:
2, Các thao tác lập trình trên TurboC
TC
BININCLUDE LIB
Chứa các tệp tin chính của chýõng trình trong đó có tệp TC.EXE
Chứa các tệp tin khai báo thý viện ( *.h)
Chứa các tệp tin mã lệnh của các thý viện (*.LIB)
Trang 7Tên phím Ý nghĩa
Shift + các phím mũi
tên
Đánh dấu khối lệnh
Shift + insert Dán khối đã chép ở trong máy vào cị trí con trỏ trên màn
hình
cùng
Một số thông báo lỗi hay gặp khi lập trình bằng TC
Unable to open include file ’…’ Không mở được tệp thư viện(có thể viết sai
tên thư viện hoặc đường dẫn đến thư viện chưa đúng)
Undefined symbol_main in modul
c0.asm
Chưa viết chương trình chính hoặc viết tên chương trình chính bị sai
Unterminated string or character
constant
Chưa có dấu nháy kép kết thúc viết hằng chuỗi kí tự
Trang 8Bài 2: CẤU TRÚC LỆNH ĐIỀU KHIỂN
Trang 9- Điều khiển : Là các cặp kí tự điều khiển để hiện dữ liệu lên màn hình
và phải được viết trong cặp dấu nháy kép, mỗi cặp kí tự điều khiển baogồm dấu “%” và sau đó là một ký tự định kiểu
- Dữ liệu cần hiện: Là các biểu thức dữ liệu cần hiện ra màn hình,các
biểu thức này cách nhau bởi dấu phẩy
Để sử dụng được lệnh hiện dữ liệu lên màn hình ta phải nạp thư viện
- Để hiện dữ liệu có xuống dòng trên màn hình ta sử dụng \n trong điều
khiển của lệnh printf
Ví dụ
printf(“yen bai \n ngày %d”,12);
màn hình sẽ hiện ra như sau:
yen baingay 12
trong điều khiển của lệnh printf.
Màn hình sẽ hiện ra như sau:
Yen bai ngay 12
2 Lệnh nhập dữ liệu từ bàn phím
Cú pháp :
scanf(“điều khiển”,& tên biến nhớ);
Trang 10Trong đó
- điều khiển : Để quy định dữ liệu nhập vào dưới dạng nào, cách viết
như điều khiển trong lệnh printf
- Tên biến nhớ: Dùng để lưu trữ dữ liệu nhập vào từ bàn phím, phải có
dấu & ở trước
Để sử dụng được lệnh nhập dữ liệu từ bàn phím ta phải nạp thư viện
Ví dụ: scanf(“%d%f”,&a,&b);
Sẽ nhập số nguyên vào biến nhớ a, số thực vào biến nhớ b
- Có thể quy định độ rộng dữ liệu khi nhập, phải viết độ rộng đó vàogiữa dấu % và kí tự định kiểu tương ứng Nếu gõ thừa máy sẽ tựđộng cắt bỏ
Trang 11printf("nhap so thu nhat a1= ");scanf("%d",&a1);
printf("\nnhap so thu hai a2= ");scanf("%d",&a2);
printf("\nnhap so thu 3 a3= ");scanf("%d",&a3);
printf("\nnhap so thu 4 a4= ");scanf("%d",&a4);
printf("\nnhap so thu 5 a5= ");scanf("%d",&a5);
printf("5 so vua nhap la: %d\t%d\t%d\t%d\t%d\t",a1,a2,a3,a4,a5);
printf("\ntrung binh cong 5 so vua nhap la:%f",(a1+a2+a3+a4+a5)/5.0); getch() ;
E là một biểu thức hay giá trị
Trang 12) ( 3
Trang 13xac=xa-xc;yac=ya-yc;
ab=sqrt(xab*xab+yab*yab);
bc=sqrt(xbc*xbc+ybc*ybc);
ac=sqrt(xac*xac+yac*yac);
printf("\ndo dai doan thang AB la: %f",ab);
printf("\ndo dai doan thang BC la: %f",bc);
printf("\ndo dai doan thang AC la: %f",ac);
getch() ;}
printf(“Ngay 12 thang 09 nam 2009”);
hiện lên màn hình dòng chữ “Yen Bai” mầu đỏ, dòng chữ “Ngay 12thang 09 nam 2009” mầu xanh
Trang 14- Điều kiện lựa trọn: là biểu thức logic có giá trị đúng hoặc sai
- Hành động 1 và 2: là các khối lệnh để thực hiện cho trường hợp 1 và 2tương ứng
Trang 15Viết chương trình giải bất phương trình bậc nhất: ax + b > 0
#include<conio.h>
#include<stdio.h>
void main(){
if(b > 0) printf("\n BPT luon dung voi moi x");
else printf("\n BPT vo nghiem");
}
if(a > 0) printf("\n Nghiem cua BPT la: x > %f",-b*1.0/a); if(a < 0) printf("\n Nghiem cua BPT la: x < %f",-b*1.0/a); getch() ;
Trang 16{ printf("\n Nghiem cua phuong trinh la:");
printf("\n x1= %f",(-b+sqrt(d))/2.0*a);
printf("\n x2= %f",(-b-sqrt(d))/2.0*a);
} }
case giá_trị_1: hành động 1;[break;]
case giá_trị_2: hành động 2;[break;]
Trang 17- Các giá trị 1,2,…,k là các giá trị số nguyên hoặc ký tự để so sánh.
- Các hành động 1,2,…,k là các khối lệnh để thực hiện ứng với từngtrường hợp trên
- Từ khóa break sau mỗi hành động để kết thúc lệnh sau mỗi trường hợp
sẩy ra Có thể có hoặc không có các từ khóa break này
Sơ đồ khối:
Trang 18Chức năng:
Máy sẽ so sánh biểu thức trọn lần lượt với các giá trị 1, giá trị 2, giá trị
3,… giá trị k Nếu gặp một giá trị i(i=1,2, ,k) nào đó bằng giá trị biểu thức
chọn thì máy sẽ thực hiện các hành động đứng sau giá trị i đó đến khi gặp
từ khóa break hoăc hết mọi hành động có trong lệnh switch Nếu tất cả các
trường hợp từ 1 đến k không sẩy ra điều kiện bằng thì mặc định máy sẽthực hiện hành động X sau từ khóa default
Chú ý:
- Lệnh switch có thể không có phần từ khóa default và khối lệnh x, khi
đó máy sẽ không làm gì trong trường hợp không xẩy ra điều kiện bằnggiữa biểu thức trọn và giá trị tương ứng của case
Trang 19Ví dụ:
switch(t)
{
case 1: printf(“chu nhat”);break;
case 2: printf(“thu 2”);break;
case 3: printf(“thu 3”);break;
case 4: printf(“thu 4”);break;
case 5: printf(“thu 5”);break;
case 6: printf(“thu 6”);break;
case 7: printf(“thu 7”);break;
default: printf(“khong la mot ngay trong tuan”);
}
Bài tập:
Viết chương trình đọc vào từ bàn phím một số nguyên n(1 ≤ n ≤ 10)rồi đưa ra tiếng anh của số đó Chẳng hạn ,nếu gõ vào n = 2 thì đưa ra: 2 ->TWO
case 1:printf("\n so 1 tieng anh la ONE");break;
case 2:printf("\n so 2 tieng anh la TWO");break;
case 3:printf("\n so 3 tieng anh la THREE");break;
case 4:printf("\n so 4 tieng anh la FOUR");break;
case 5:printf("\n so 5 tieng anh la FIVE");break;
case 6:printf("\n so 6 tieng anh la SIX");break;
case 7:printf("\n so 7 tieng anh la SEVEN");break;
case 8:printf("\n so 8 tieng anh la EIGHT");break;
case 9:printf("\n so 9 tieng anh la NINE");break;
Trang 20case 10:printf("\n so 10 tieng anh la TEN");break;
default: printf("\n nhap du lieu sai");
- Các nhóm lệnh 1,2,3 là các lệnh điều khiển trong quá trình lặp của for
- Hành động lặp là khối lệnh để máy tính thực hiện lặp lại nhiều lần
Sơ đồ khối:
Chức năng:
Máy thực hiện nhóm lệnh 1 duy nhất một lần đầu tiên, sau đó thực hiệntính biểu thức 2 và nếu kêt quả tương ứng với giá trị đúng thì máy thực hiệnhành đông lặp, tiếp theo máy thực hiện nhóm lênh 3, và lặp lại kiểm tra biểuthức 2 cho đến khi kết quả tương ứng với giá trị sai
Trang 21Vi dụ:
For(i=1;i<5;i++)printf(“\n i= %d”,i);
- Các nhóm lệnh 1,3 và biểu thức 2 có thể không xuất hiện trong lênh fornhưng phải có dấu chấm phẩy (;) khi đó nếu không có biểu thức 2 thìmáy sẽ xem như điều kiện lặp luôn luôn đúng và sẽ lặp vô tận
- Trong mỗi nhóm lệnh 1 và 3 có thể có nhiều lệnh cách nhau bởi dấuphẩy đối với biểu thức 2 có thể thay đổi bằng một nhóm lệnh và khi đómáy sẽ lấy kết quả của lệnh cuối cùng làm điều kiện lặp hoặc dừng
int n,i;
clrscr();
printf("Nhap vao so n= ");scanf("%d",&n);
printf("\n Cac so chan tu 1 den %d la: ",n);
for(i=1; i<=n;i++)
if(i%2 = =0)printf(" %d",i);
printf("\n Cac so le tu 1 den %d la:",n);
Trang 22for(i=1;i<=n;i++)
if(i%2!=0)printf(" %d",i);
getch() ;}
Nhập n, tính tổng S=1+
n
1
4
1 3
1 2
printf(“\n nhan mot phim bat ki de thoat ”);
Trang 23gotoxy(x,y) ; printf("*");
x++;
} x=40-y;
- Điều kiện lặp : là biểu thức so sánh hoặc biểu thức nguyên
- Hành động lặp: là các lệnh sẽ được thực hiện hiều lần trong quá trìnhlặp, nếu có nhiều lệnh phải có dấu { } để đóng khối
Printf(“\n x = %d va y = %d”,x,y);
x +=2;y ;
Điều kiện lặp
Hành động lặp đúng
sai
Trang 24}Chú ý: nếu hành động sai ngay từ đầu thì máy sẽ không thực hiện hành độnglặp dù chỉ một lần.
Hành động lặp
đúng
sai
Trang 25- Hành động lặp ít nhất được thưc hiện một lần dù cho điều kiện lặp luôn
có giá trị sai vì máy kiểm tra điều kiện lặp sau khi thực hiện hành độnglặp, điều này khác với lệnh while
Trang 264 Lệnh break, continue, goto
lệnh break có tác dụng dừng vòng lặp (for ,while, do-while) trong mọi
trường hợp
Lệnh continue làm cho chương trình bỏ qua phần còn lại của vòng lặp và
nhảy sang lần lặp tiếp theo Những câu lệnh viết sau lệnh continue sẽ không
được thực hiện
ví dụ:
for(i=0; i <10;i++){
printf(“%d”,i);
if(i>5) continue;
i++;
}
Trang 27Lệnh goto: Lệnh này cho phép nhảy vô điều kiện tới bất kỳ điểm nào
trong chương trình
Ví dụ:
Nhập vào từ bàn phím 1 số bất kì Kiểm tra số đó là chẵn hay lẻ, hiệnkết quả lên màn hình Sau khi hiện song hỏi người dùng có tiếp tục chươngtrình không Nếu có thì lập lại hành động trước đó Nếu không thì kết thúcchương trình
#include<conio.h>
#include<stdio.h>
void main(){
if(x%2 = =0)printf(“\nso do la so chan”);
else printf(“\nso do la so le”);
printf("\n co tiep tuc truong trinh ko(c/k)?");
if(ch = ='c')goto L;
getch()
}Bài tập:
Nhập vào từ bàn phím 3 số bất kì Hiện số lớn nhất trong 3 số đó lênmàn hình Sau khi hiện song hỏi người dùng có tiếp tục chương trình không.Nếu có thì lập lại hành động trước đó Nếu không thì kết thúc chương trình
Trang 28printf("\n so lon nhat la: %d",max);
printf("\n co tiep tuc truong trinh ko(c/k)?"); ch=getche();
Trang 29Có thể minh họa chương trình con như hình sau :
Để nhận các dữ liệu đưa vào cho chương trình con và nếu có thể chứa
dữ liệu kết quả ra chúng ta phải sử dụng tham số (parameters) của chươngtrình con
Tham số tồn tại dưới hai hình thức đó là tham số thực và tham số hìnhthức Tham số hình thức là tham số để khai báo và xây dựng trương trìnhcon, còn tham số thực để xác định dữ liệu đưa vào khi gọi chương trình con
Trong một số ngôn ngữ lập trình cung cấp hai loại chương trình conriêng biệt đó là hàm(function) và thủ tục (procedures) nhưng trong C chỉcung cấp một loại đó là hàm
Để tạo một hàm chúng ta cần xác định
- Hàm tạo ra sẽ thực hiện công việc gì ?
- Sau khi thưc hiện song có cần trả về một dữ liệu hay nhiều dữ liệukhông ?
- Để thực hiện được công việc đó ta cần những dữ liệu nào ?
II, Khai báo và xây dựng hàm
Chương trình con thực hiện công việc A
Dữ liệu đưa vào
để thực hiện
công việc A
Dữ liệu kết quả của công việc A
Trang 301 khai báo hàm
Khai báo hàm được thực hiện ở phần đầu chương trình, khai báo để chỉcho máy biết các thông tin về hàm bao gồm : kiểu dữ liệu trả về có haykhông ,tên hàm, các tham số bao gồm kiểu và tên của từng tham số
Cú pháp khai báo như sau :
Tên_kiểu_trả_về tên_hàm( kiểu1 tham_số1,kiểu2 tham_số2 ) ;
Trong đó :
- Tên kiểu trả về : là một tên kiểu dữ liệu quy định kết quả trả về làkhiểu gì
- Tên hàm : tự đặt theo quy định đặt tên của ngôn ngữ C
- Kiểu1 tham_số1 : xác định tên của tham số thứ nhất và kiểu củatham số đó,
Ví dụ :
int sum(int a , int b) ;
float max(float x, float y);
Nếu trong hàm không có dữ liệu trả về thì viết kiểu trả về là void nếu
không có tham số thì bỏ trống và phải có cặp dấu đóng mở ngoăc () sau tênhàm
Khi cần kết thúc thực hiện hàm và trả về dữ liệu nào đây, chúng ta viết
lệnh return vào vị trí cần thiết nhất trong hàm