Như vậ y khi dù ng thuậ t toá n cùng một dữ liệ u ban đầ u phả i cho Lưu đồ là một dạ ng đồ thị dùng để mô tả quá trì nh tí nh toá n một cá ch có hệ thố ng... CáC NGôN NGữ LậP TRìNH & CH
Trang 1I.2.3 Tí nh duy nhấ t :
Toà n bộ quá trì nh biế n đổi, cũng như trậ t tự thực hiệ n phả i được xá c định
và là duy nhấ t Như vậ y khi dù ng thuậ t toá n cùng một dữ liệ u ban đầ u phả i cho
Lưu đồ là một dạ ng đồ thị dùng để mô tả quá trì nh tí nh toá n một cá ch có
hệ thố ng Ngư ờ i ta thư ờ ng thể hiệ n thuậ t toá n bằ ng lư u đ ồ
II.2 Cá c ký hiệ u trê n lưu đ ồ :
Khố i mở đ ầ u hoặ c kế t
thú c
Dù ng mở đ ầ u hoặ c kế t thú c chư ơ ng trì nh
kế t quả
Trang 2Khè i tÝ nh to¸ n BiÓ u diÔ n c¸ c c« ng thø c
tÝ nh to¸ n vµ thay ® æ i gi¸ trÞ cñ a c¸ c biÕ n
II.3 Mé t sè vÝ dô biÓ u diÔ n thuË t to¸ n b» ng lu ® å
II.3.1 ThuË t to¸ n kh« ng ph© n nh¸ nh:
C By Ax
2 +
+ +
Trang 3II.3.2 ThuË t to¸ n cã ph© n nh¸ nh:
VÝ dô 1: T× m gi¸ trÞ max cñ a ba sè thù c a,b,c
VÝ dô 2: Gi¶ i ph ¬ ng tr× nh bË c nhÊ t Ax+B =0 ví i c¸ c nghiÖ m thù c
Ñ
Trang 4Ví dụ 3 : Giả i phư ơ ng trì nh bậ c hai Ax2+Bx+C =0 vớ i cá c nghiệ m thự c
S Delta = b*b - 4*a*c
ẹ Delta = 0 Xuaỏt (-b / (2*a)) S
II.3.3 Thuậ t toá n có chu trì nh:
Thuậ t toá n có chu trì nh với cá c bước lặ p xá c định thường được thể hiệ n bằ ng lư u đ ồ sau :
i = giaự trũ ban ủaàu
Leọnh S;
Taờng i
i <= nSẹ
vớ i n là giá trị kế t thú c
Trang 5Nhaọp (n)
i = 1
S = 0 Nhaọp (xi)
III CáC NGôN NGữ LậP TRìNH & CHươNG TRìNH DịCH:
III.1 Ngô n ngữ lậ p trì nh:
III.1.1 Giới thiệ u: Con người muốn giao tiế p với má y tí nh phả i thông qua
ngôn ngữ Con người muốn má y tí nh thực hiệ n công việ c, phả i viế t cá c yê u cầ u
đ ư a cho má y bằ ng ngôn ngữ má y hiể u được Việ c viế t cá c yê u cầ u ta gọi là lậ p trì nh (programming) Ngôn ngữ dùng để lậ p trì nh được gọi là ngôn ngữ lậ p trì nh
Nế u ngôn ngữ lậ p trì nh gầ n với vấ n đề cầ n giả i quyế t, gầ n với ngôn ngữ tự nhiê n thì việ c lậ p trì nh sẽ đơn giả n hơn nhiề u Những ngôn ngữ lậ p trì nh có tí nh chấ t như trê n được gọi là ngôn ngữ cấ p cao Nhưng má y tí nh chỉ hiể u được ngôn ngữ riê ng củ a mì nh, đ ó là cá c chuỗ i số 0 vớ i 1 và như vậ y rõ rà ng là khó khă n cho lậ p trì nh viê n, vì nó khô ng gầ n gũ i vớ i con ngư ờ i
Hiệ n tạ i, ngô n ngữ lậ p trì nh đ ư ợ c chia ra là m cá c loạ i sau:
III.1.2 Phâ n loạ i ngô n ngữ lậ p trì nh:
- Ngô n ngữ má y (machine language)
Trang 6- Hợ p ngữ (assembly language)
- Ngô n ngữ cấ p cao (higher-level language)
Do má y tí nh chỉ hiể u được ngôn ngữ má y, cho nê n một chương trì nh viế t trong ngô n ngữ cấ p cao phả i đ ư ợ c biê n dịch sang ngô n ngữ má y Cô ng cụ thự c hiệ n việ c biê n dịch đ ó đ ư ợ c gọ i là chư ơ ng trì nh dịch
III.2 Chươ ng trì nh dịch:
Chương trì nh dịch được chia ra là m 2 loạ i : trì nh biê n dịch (compiler) và trì nh thô ng dịch (interpreter)
III.2.1 Trì nh biê n dịch: là việ c chuyể n một chương trì nh trong ngôn ngữ
cấ p cao nà o đ ó (chư ơ ng trì nh nguồn) sang ngôn ngữ má y (chương trì nh đí ch)
- Thời gian chuyể n một chương trì nh nguồn sang chương trì nh đí ch được
Hì nh I.1 Chư ơ ng trì nh thự c thi theo cơ chế dịch củ a trì nh biê n dịch
III.2.2 Trì nh thô ng dịch: quá trì nh dịch và thự c thi xả y ra cù ng 1 thờ i
gian, dịch đ ế n đ â u thi hà nh lệ nh đ ế n đ ó
Chửụng trỡnh nguoàn Chửụng trỡnhthoõng dũch Keỏt quaỷ
Dửừ lieọu
Hì nh I.2 Chư ơ ng trì nh thự c thi theo cơ chế dịch củ a trì nh thô ng dịch
Trang 7CHươNG 2 LàM QUEN VớI NGôN NGữ C
* Giới thiệu ngôn ngữ C
Ngôn ngữ C do Dennis Ritchie là người đầ u tiê n đề xuấ t, đ∙ thiế t kế và cà i
đ ặ t C trong mô i trư ờ ng UNIX Nó có nguồ n gố c từ ngô n ngữ BCPL do Martin Richards đ ư a ra và o nă m 1967 và ngô n ngữ B do Ken Thompson phá t triể n từ ngô n ngữ BCPL nă m 1970 khi viế t hệ đ iề u hà nh Unix
C là ngôn ngữ lậ p trì nh đa dụng, cấ p cao nhưng lạ i có khả nă ng thực hiệ n cá c thao tá c như của ngôn ngữ Assembly Vì thế ngôn ngữ C nhanh chóng được
cà i đặ t, sử dụng trê n má y vi tí nh và đ∙ trở thà nh một công cụ lậ p trì nh khá mạ nh, hiệ n nay đang có khuynh hướng trở thà nh một ngôn ngữ lậ p trì nh chí nh cho má y
vi tí nh trê n thế giớ i
* Đặ c điể m ngô n ngữ C
Ngô n ngữ C có nhữ ng đ ặ c đ iể m cơ bả n sau :
- Tí nh cô đ ọ ng (compact) : Ngô n ngữ C chỉ có 32 từ khoá chuẩ n, 40 toá n
tử chuẩ n mà hầ u hế t đ ư ợ c biể u diể n bở i cá c d∙ y ký tự ngắ n gọ n
- Tí nh cấ u trúc (structured) : Ngôn ngữ C có một tậ p hợp cá c phá t biể u lậ p trì nh cấ u trú c như phá t biể u quyế t đ ịnh hoặ c lặ p Do đ ó , nó cho phép chú ng ta viế t chư ơ ng trì nh có tổ chứ c và dể hiể u
- Tí nh tư ơ ng thí ch (compactable) : Ngô n ngữ C có bộ lệ nh tiề n xử lý và cá c thư việ n chuẩ n là m cho cá c chương trì nh viế t bằ ng ngôn ngữ C có thể tương thí ch khi chuyể n từ má y tí nh nà y sang má y tí nh kiể u hoà n toà n khá c
- Tí nh linh đ ộ ng (flexible) : Ngôn ngữ C là một ngôn ngữ rấ t linh động về ngữ phá p, nó có thể chấ p nhậ n rấ t nhiề u cá ch thể hiệ n mà không có ở ngôn ngữ khá c như Pascal, nó giú p cho kí ch thư ớ c m∙ lệ nh có thể thu gọn lạ i để chương trì nh thự c thi nhanh chó ng hơ n
- Biê n dịch : Ngô n ngữ C đ ư ợ c biê n dịch bằ ng nhiề u bư ớ c và cho phép biê n dịch nhiề u tậ p tin chương trì nh riê ng rẽ thà nh cá c tậ p tin đối tượng (object)
và nối cá c đối tượng đó lạ i với nhau (link) thà nh một chương trì nh thực thi thống nhấ t
Trang 8- Ch ¬ ng tr× nh C bao giê cò ng cã mé t hay nhiÒ u hµ m, trong ® ã cã mé t
hµ m chÝ nh b¾ t bué c ph¶ i cã lµ hµ m main() §© y chÝ nh lµ hµ m ®îc thùc hiÖ n
® Ç u tiª n trong ch ¬ ng tr× nh
- CÆ p dÊ u “{ } “ ® Ó x¸ c ® Þnh mé t khè i lÖ nh
- Hµ m printf(“ Chao cac ban \n”) lµ hµ m chuÈ n cñ a C dï ng ® Ó xuÊ t c© u th« ng b¸ o “Chao cac ban” ra mµ n h× nh Ký tù “\n“ lµ ký tù ® Æ c biÖ t dï ng ® Ó xuè ng dßng
- DÊ u “;” ® Ó chÊ m dø t mé t lÖ nh
- Ch ¬ ng tr× nh C cã ph© n biÖ t ch÷ th ê ng ví i ch÷ hoa §a sè c¸ c tõ kho¸
cñ a C ® î c viÕ t b» ng ch÷ th ê ng, cßn mé t sè Ý t ® î c viÕ t b» ng ch÷ hoa mµ ta ph¶ i tu© n thñ chÆ t chÏ , nÕ u kh« ng th× ch ¬ ng tr× nh dÞch sÏ kh« ng hiÓ u
Trang 9Ví dụ 2 : Tư ơ ng tự như ví dụ 1 như ng viế t cá ch khá c :
#include <stdio.h>
#define max 50 /*Tiề n xử lý , đ ịnh nghĩ a max =50*/
void main()
for (n=10; n<=max; n++) /*Lặ p từ 10 đ ế n 50 bằ ng for*/
printf(“%3d \t %5d\n”,n,n*n); /*in n và n2 dạ ng 5d là nă m chữ số */
Ví dụ 3 : Chương trì nh in lũy thừa 2, 3, 4, 5; có dùng hà m để tí nh lũy thừa :
#include <stdio.h>
#define max 50 /*Tiề n xử lý , đ ịnh nghĩ a max =50*/
float luythua(int n, int m) /*Hà m luythua vớ i 2 thô ng số */
{ float s=1; /*Khai bá o và khở i tạ o biế n s*/
Hà m printf() sẽ xem xét chuỗi-địnhdạ ng, lấ y giá trị cá c tham số (nế u cầ n)
đ ể đ ặ t và o theo yê u cầ u củ a chuỗ i-đ ịnhdạ ng và gở i ra thiế t bị chuẩ n
Chuỗ i-đ ịnhdạ ng là mộ t chuỗ i ký tự , trong đ ó có nhữ ng ký tự xuấ t ra nguyê n vẹ n hoặ c xuấ t ở dạ ng đặ c biệ t, và có thể có những chuỗi điề u khiể n
cầ n lấ y giá trị củ a cá c tham số đ ể thay và o đ ó khi in ra
Trang 10\xdd XuÊ t ký tù cã m∙ ASCII d¹ ng Hex lµ dd
\ddd XuÊ t ký tù cã m∙ ASCII d¹ ng Dec lµ
s Chuç i ký tù tË n cï ng b» ng ‘\0’
Trang 11Flag : D¹ ng ® iÒ u chØ nh
nÕ u kh« ng cã in d÷ liÖ u ra ví i canh ph¶ i
- in d÷ liÖ u ra ví i canh tr¸ i + Lu« n b¾ t ® Ç u sè b» ng + hay -
0 : ChÌ n thª m 0 ® ø ng tr í c gi¸ trÞ >0 x,X : ChÌ n thª m 0x hay 0X ® ø ng tr í c sè nµ y e,E,f : Lu« n lu« n cã dÊ u chÊ m thË p ph© n
l Tham sè lµ long int (d,i,o,u,x,X)
double (e,E,f,g,G)
VÝ dô 1: char c=‘A’;
char s[]=“Blue moon!” ;
Trang 13I.2 KiÓ u d÷ liÖ u c¬ b¶ n
unsigned char Ký tù kh« ng dÊ u 1 byte 0→255
unsigned short Sè nguyª n ng¾ n kh«ng dÊ u 2 bytes 0→65535
enum Sè nguyª n cã dÊ u 2 bytes -32768→32767
short int Sè nguyª n cã dÊ u 2 bytes -32768→32767
int Sè nguyª n cã dÊ u 2 bytes -32768→32767
unsigned int Sè nguyª n kh« ng dÊ u 2 bytes 0 → 65535
long Sè nguyª n dµ i cã dÊ u 4 bytes -2147483648 →
2147483647 unsigned long Sè nguyª n dµ i kh« ng dÊ u 4 bytes 0→4294967295
float Sè thù c ® é chÝ nh x¸ c ® ¬n 4 bytes 3.4 E-38→3.4 E+38 double Sè thù c ® é chÝ nh x¸ c kÐp 8 bytes 1.7 E-308 → 1.7
E+308 long double Sè thù c ® é chÝ nh x¸ c h¬ n
int = short int = short = signed int = signed short int
long int = long
signed long int = long
unsigned int = unsigned = unsigned short = unsigned short int
unsigned long int = unsigned long
Trang 14I.3 Biế n
I.3.1 Tê n biế n : Tê n biế n là một chuỗi ký tự bắ t đầ u bằ ng ký tự chữ, ký tự
kế tiế p là ký tự chữ (dấ u gạ ch dưới “_” được xem là ký tự chữ) hoặ c số và không
Ví dụ :Hai biế n sau bị xem là cù ng tê n
bien_ten_dai_hon_32_ky_tu_dau_tien_1
bien_ten_dai_hon_32_ky_tu_dau_tien_2
I.3.2 Khai bá o biế n
Cá c biế n phả i đ ư ợ c khai bá o trư ớ c khi sử dụ ng nhằ m giú p cho chư ơ ng trì nh dịch có thể xử lý chú ng
Khai bá o biế n có dạ ng :
Kiể udữ liệ u tê nbiế n1 [,tenbiế n2 ] ;
Ví dụ : int a,b,c;
* Khai bá o và khở i tạ o biế n:
Kiể u dữ liệ u tê nbiế n = giá trị ;
I.3.3 Hà m nhậ p dữ liệ u chuẩ n
a) Hà m scanf()
Cú phá p: scanf(“chuỗi-địnhdạ ng“,điạ chỉ thamsố1, điạ chỉ thamsố2, )
- Chuỗ i-đ ịnhdạ ng củ a scanf() gồ m có ba loạ i ký tự :
+ Chuỗ i đ iề u khiể n + Ký tự trắ ng
+ Ký tự khá c trắ ng ! Chuỗ i đ iề u khiể n có dạ ng :
Trang 15Vớ i type: xá c đ ịnh kiể u củ a biế n đ ịa chỉ tham số sẽ nhậ n giá trị nhậ p và o
Hà m scanf() chỉ nhậ n cho đủ width ký tự hoặ c cho đế n khi gặ p ký tự trắ ng
đầ u tiê n Nế u chuỗi nhậ p và o nhiề u hơn thì phầ n còn lạ i sẽ dà nh lạ i cho lầ n gọi scanf() kế tiế p
Lư u ý : Nế u scanf(“%ul”, &money) thì giá trị nhậ p và o sẽ không được lưu
trữ trong biế n money, như ng chư ơ ng trì nh dịch khô ng bá o lỗ i
Ví dụ 3: Nhậ p và o tê n và bị giớ i hạ n trong khoả ng [A-Z,a-z]
char name[20];
printf(“Name : ”) ; scanf(“%[A-Za-z]”,&name);
Trong trư ờ ng hợ p nà y, nế u ta gõ sai dạ ng thì name =””
! Ký tự trắ ng: nế u có trong chuỗi-dạ ng sẽ yê u cầ u scanf() bỏ qua một hay nhiề u ký tự trắ ng trong chuỗ i nhậ p và o Ký tự trắ ng là ký tự khoả ng trắ ng (‘ ‘), tab (‘\t’), xuố ng hà ng (‘\n’) Một ký tự trắ ng trong chuỗi-địnhdạ ng sẽ được hiể u
là chờ nhậ p đ ế n ký tự khá c trắ ng tiế p theo
Trang 16Ví dụ 4: scanf(“%d “,&num);
Hà m scanf() cho ta nhậ p mộ t ký tự khá c trắ ng nữa thì mới thoá t ra Ký tự
đ ó sẽ nằ m trong vùng đệ m và sẽ được lấ y bởi hà m scanf() hoặ c gets() tiế p theo
! Ký tự khá c trắ ng: nế u có trong chuỗi-địnhdạ ng sẽ khiế n cho scanf() nhậ n
và o đ ú ng ký tự như thế
Ví dụ 5: scanf(%d/%d/%d”,&d,&m,&y);
Hà m scanf() chờ nhậ n một số nguyê n, cấ t và o d, kế đế n là dấ u ‘/’, bỏ dấ u
nà y đ i và chờ nhậ n số nguyê n kế tiế p đ ể cấ t và o m Nế u khô ng gặ p dấ u ‘/’ kế tiế p số nguyê n thì scanf() chấ m dứ t
Chú ý : Hà m scanf() đ òi hỏ i cá c tham số phả i là cá c địa chỉ của cá c biế n
hoặ c là mộ t con trỏ
* Toá n tử đ ịa chỉ & : Lấ y đ ịa chỉ củ a mộ t biế n
Ví dụ 6: int n; → biế n n
#include <stdio.h>
#include <conio.h>
void main()
{ char ch;
Trang 17printf("\nBan nhap vao 1 chu cai tu a den e: ");
while ((ch=getche()) != 'd')
{ printf("\nXin loi, %c la sai roi",ch);
printf("\n Thu lai lan nua \n");
}
}
L u ý : Hµ m getch() cßn cho phÐp ta nhË p vµ o 1 ký tù më ré ng nh c¸ c phÝ m F1, F2, , c¸ c phÝ m di chuyÓ n cursor C¸ c phÝ m nµ y lu« n cã 2 bytes: byte thø nhÊ t b» ng 0, cßn byte 2 lµ m∙ scancode cñ a phÝ m ® ã §Ó nhË n biÕ t ta ® ∙ gâ phÝ m ký tù hay phÝ m më ré ng, ta cã ch ¬ ng tr× nh sau:
F4 62 F5 63 F6 64 F7 65 F8 66 F9 67 F10 68 Home 71
Trang 18% 77 PgUp 73 PgDn 81
End 79 Ins 82 Del 83 Bả ng m∙ scancode củ a cá c phí m mở rộ ng
c Hà m kbhit(): Hà m int kbhit() sẽ kiể m tra xem có phí m nà o đ ư ợ c gõ
và o hay không Nế u có, hà m kbhit sẽ trả về một số nguyê n khá c 0, và ngược lạ i
Ký tự mà ta nhậ p và o qua hà m kbhit() có thể lấ y đ ư ợ c qua hà m getch() hoặ c getche()
Ví dụ :
void main()
{
printf("Press any key to continue:");
while (!kbhit()) /* do nothing */ ;
456789L -1234L
- Cá c hằ ng số nguyê n dương lớn hơn long sẽ được lưu trữ theo kiể u double
- Mộ t hằ ng số đ ư ợ c lư u trữ theo dạ ng long nế u theo số đ ó có ký tự l (L),
Trang 19dạ ng unsigned nế u sau đó có chữ u (U), dạ ng thậ p lục phâ n nế u trước số
c Hằ ng chuỗ i : Là mộ t chuỗ i ký tự nằ m trong hai dấ u nhá y kép “ “
Ví dụ : “Day la mot chuoi”
“Hang chuoi co ky tu đ ạ c biệ t như \ \n \248”
d Hằ ng biể u thứ c : Là mộ t biể u thứ c mà trong đ ó cá c toá n hạ ng đề u là
cá c hằ ng Khi đó chương trì nh dịch sẽ tí nh toá n biể u thức trước, và kế t quả được lư u trữ thẳ ng bằ ng mộ t hằ ng số tư ơ ng đ ư ơ ng
Ví dụ : 8*20-13 → kế t quả lư u trữ là 173
Trang 20‘a -’A’ → “ lµ 97-65 = 32
I.4.2 Khai b¸ o h» ng:
Có ph¸ p: const tª nh» ng = biÓ uthø c;
VÝ dô : const MAX = 50;
a PhÐp to¸ n hai to¸ n h¹ ng : +, -, *, /, %
+, -, * char, int, long, float,
double
KiÓ u cñ a to¸ n h¹ ng cã kiÓ u cao nhÊ t
/ nguyª n/nguyª n KiÓ u nguyª n vµ lµ phÐp chia nguyª n thù c(nguyª n)/thù c
Trang 21b PhÐp to¸ n mé t to¸ n h¹ ng : phÐp t¨ ng ++, phÐp gi¶ m
a hoÆ c a ⇔ a = a-1
Chó ý : Tuy nhiª n a++ sÏ kh¸ c ++a khi chó ng ® ø ng trong biÓ u thø c (cã
phÐp g¸ n)
a++ : T¨ ng a sau khi gi¸ trÞ cñ a nã ® î c sö dô ng
++a : T¨ ng a tr í c khi gi¸ trÞ cñ a nã ® î c sö dô ng
Trang 22C¸ c phÐp g¸ n phø c hî p : += , -= , *= , /= , %= , <<= , >>=
VÝ dô :n = n*(10+x) ⇔ n *= (10 +x)
<< : lµ phÐp dÞch chuyÓ n bit qua tr¸ i
>> : lµ phÐp dÞch chuyÓ n bit qua ph¶ i
I.5.4 PhÐp to¸ n quan hÖ :
printf(“Ch ¬ ng tr× nh t× m sè lí n nhÊ t trong 3 sè ”);
Trang 23B¶ ng ch© n trÞ:
false true false
true true true
false true true
if ((ch> =‘a’) and (ch< =‘z’)) or ((ch> =‘A’) and (ch< =‘Z’))
printf(“%c lµ chu cai \n”,ch);
Trang 24VÝ dô : A = i>= MAX ? 1: 0;
printf (“ max (a,b) = %d “, (a>b) ? a:b);
lower = (c > = ‘A’ && c< = ‘Z’) ? c - ‘A’ + ‘a’ :c;
I.5.8 To¸ n tö trª n bit (bit wise) :
dÞch tr¸ i << nh© n 2 dÞch ph¶ i >> chia 2
Trang 25VÝ dô 1:
void main()
{ unsigned x1; x2;
printf (“\n cho 2 sè hex(2 sè ) “);
scanf (“%x %x “, &x1, &x2);
printf (“% 02x & % 02x = % 02x\n”, x1, x2, x1& x2);
Trang 262 PhÐp OR dï ng ® Ó bË t c¸ c bit cÇ n thiÕ t lª n cò ng nhê vµ o mé t mÆ t n¹ Ch¼ ng h¹ n nh ta muè n bË t bit thø 7 cñ a biÕ n ch (unsigned char ch) lª n 1:
ch = ch | 0x80;
VÝ dô 3:
void main()
{ unsigned char x1,x2;
printf (“\n cho 2 sè hex (ff hay nhá h¬ n) :”);
scanf (“%x %x”, &x1, &x2);
KÕ t qu¶ = 0x0324 → 804 nghÜ a lµ 201* 4
VÝ dô 6:
void main()
{ unsigned char x1, x2 ;
printf (“ nhË p 1 sè hex < = ff vµ sè bit : “);
scanf ( %x %d “, &x1, &x2);
printf (“ %02x >> %d = %02x \n”, x1, x2, x1>> x2);
}
Chó ý : Trong phÐp dÞch ph¶ i C lµ m theo 2 c¸ ch kh¸ c nhau tï y thué c vµ o
Trang 27kiÓ u d÷ liÖ u cñ a to¸ n h¹ ng bª n tr¸ i
- NÕ u to¸ n h¹ ng bª n tr¸ i kiÓ u unsigned th× phÐp dÞch sÏ ®iÒ n 0 vµ o c¸ c bit
bª n tr¸ i
- NÕ u to¸ n h¹ ng bª n tr¸ i kiÓ u signed th× phÐp dÞch sÏ ®iÒ n bit dÊ u vµ o c¸ c bit bª n tr¸ i
VÝ dô 7: unsigned int num;
num = 39470; // 9A2E hexa num =
printf ("Chuong trinh doi so hexa sang nhi phan\n");
printf ("Nhap vao so hexa :");
Trang 29* Sự chuyể n kiể u bắ t buộ c:
Trong C có 2 trư ờ ng hợ p chuyể n kiể u: chuyể n kiể u tự đ ộ ng và chuyể n kiể u bắ t buộ c
Chuyể n kiể u bắ t buộc: được á p dụng khi chuyể n kiể u tự động không được
f= (double) a/ (double)b // kế t quả f= 100.0 / 6.0= 16.666
* Mức độ ưu tiê n của cá c phép toá n:
Trang 30char chuỗ i[50];
* Lưu ý : Tấ t cả cá c chuỗi đề u được kế t thúc bằ ng ký tự NULL (\0) Do đó,
nế u chuỗ i dà i 50 thì ta chỉ có thể chứ a tố i đ a 49 ký tự
I.6.2 Khở i đ ộ ng trị:
char chuỗ i[ ] = {‘A’, ‘N’, ‘H’, ‘ \0’};
char chuỗ i[ ] = "ANH";
I.6.3 Nhậ p / xuấ t chuỗ i:
Trang 31// chuỗ i = “Nguyễ n” vì hà m scanf cắ t khoả ng trắ ng
- Khi dù ng hà m gets trong chư ơ ng trì nh thì khô ng nê n dù ng hà m scanf ở
bấ t kì đâ u dù rằ ng dùng hà m scanf để nhậ p số mà ta nê n dùng hà m gets và hà m atoi, atof đ ể nhậ p số
Vì :
scanf(“%d”, &n); // ta nhậ p số 5 ↵
gets (chuỗ i); // lú c nà y chuỗ i = ““ (chuỗ i rỗ ng)
I.6.4 Hà m chuyể n đ ổ i số sang chuỗ i và ngượ c lạ i
số int = atoi (chuỗ isố ) // chuyể n chuỗ i số sang số nguyê n
số f = atof (chuỗ isố ) // chuyể n chuỗ i số sang số thự c
* Hai hà m nà y nằ m trong < stdlib h >
I.6.5 Cá c hà m về chuỗ i: (# include < string h> )
quả bằ ng 0 Nế u chuỗ i S1< S2 kế t quả là â m, nế u chuỗ i S1> S2 kế t quả > 0
hay chữ hoa
nhau
- int strnicmp(S1, S2, n): chỉ so sá nh n ký tự đ ầ u củ a 2 chuỗ i S1, S2 vớ i
nhau, khô ng phâ n biệ t chữ thư ờ ng, chữ hoa
- strcpy(dest, source): chép chuỗ i từ nguồ n source sang đ í ch dest
Ví dụ : char string[10];
char *str1 = "abcdefghi";
strcpy(string, str1);
printf("%s\n", string); // "abcdefghi"
- strncpy(dest, source, n): chép chuỗ i từ nguồ n sang đ í ch vớ i nhiề u nhấ t
là n ký tự
Ví dụ :
char string[10];
char *str1 = "abcdefghi";
strncpy(string, str1, 3); // string = "abcx1zwe12"
string[3] = '\0'; // Đặ t ký tự kế t thú c chuỗ i và o cuố i chuỗ i printf("%s\n", string); // "abc"
- strcat(dest, src): nố i chuỗ i src và o sau chuỗ i dest Chiề u dà i củ a chuỗ i
kế t quả bằ ng strlen(dest) + strlen(src)
Trang 32VÝ dô :
char destination[25];
char *blank = " ", *c = "C++", *turbo = "Turbo";
strcpy(destination, turbo); // destination = "Turbo"
strcat(destination, blank); // destination = "Turbo "
strcat(destination, c); // destination = "Turbo C++"
- strncat(dest, src, n): nè i nhiÒ u nhÊ t lµ n ký tù cñ a src vµ o cuè i chuç i
dest, sau ® ã thª m ký tù null vµ o cuè i chuç i kÕ t qu¶
printf("%s\n", destination); // destination = "United State"
- char * strchr(s, ch): tr¶ vÒ ® Þa chØ cñ a ký tù ch ® Ç u tiª n cã trong chuçi
- Kh« ng ® î c so s¸ nh 2 chuç i b» ng c¸ c to¸ n tö quan hÖ (S1== S2, S1>S2, S1>= S2), mµ ph¶ i dï ng hµ m strcmp(S1,S2)
Trang 33Ví dụ : Viế t chư ơ ng trì nh tì m kiế m 1 từ trong 1 câ u
II Các cấu trúc điều khiển trong C:
Ngôn ngữ C là ngôn ngữ lậ p trì nh cấ p cao có cấ u trúc, gồm: cấ u trúc tuầ n tự, chọ n, và lặ p
II.1 Cấ u trúc tuầ n tự (Sequence) :
Cá c lệ nh trong chư ơ ng trì nh đ ư ợ c thự c hiệ n tuầ n tự từ lệ nh nà y đế n lệ nh khá c cho đ ế n khi hế t chư ơ ng trì nh
Ví du : Viế t chương trì nh tí nh và in ra diệ n tí ch của hai đường tròn bá n kí nh
Trang 34printf ("Dien tich hinh tron 2 = %.2f\n",PI*r2*r2);
hieuso = PI*r1*r1 - PI*r2*r2;
printf ("Hieu so dien tich 2 hinh tron = %.2f\n",hieuso);
getch();
}
II.2 CÊ u tróc chä n
Ký hiÖ u : ® k lµ biÓ u thø c Logic
S1, S2 lµ c¸ c ph¸ t biÓ u hay 1 nhã m c¸ c ph¸ t biÓ u (lÖ nh)
YES
Chó ý : C¸ c lÖ nh if else lå ng nhau
if (® k1) S1; else if (® k2) S2; else if (® k3) S3; else S4;
VÝ dô 1: T× m max(a,b,c)
Trang 35else if (x>=2) fx= 4;
else { printf("\n Khong xac dinh") ; exit(0) ;}
II.2.2 Lệ nh chọ n lựa: switch_case
- (biể uthứ c) có kế t quả nguyê n
- Hằ ng: ký tự , số nguyê n, biể u thứ c có số nguyê n
- Nế u kế t quả bằ ng hằ ng I nà o đó thì nó sẽ là m lệ nh Si và tuầ n tự thực hiệ n
hế t cá c lệ nh ở dư ớ i cho đ ế n khi hế t lệ nh switch
- Muố n ngắ t sự tuầ n tự trê n thì phả i dù ng lệ nh break
Ví dụ : Nhậ p 1 ký tự số dạ ng hex đ ổ i ra số thậ p phâ n
#include <stdio.h>
#include <conio.h>
void main()
Trang 37float num1, num2;
char op;
clrscr();
printf ("Go vao so, toan tu, so \n");
scanf("%f %c %f", &num1, &op, &num2);
Chó ý : Trong phÇ n th© n lÖ nh ph¶ i cã biÕ n ® iÒ u khiÓ n vßng lÆ p
VÝ dô 1: ViÕ t ch ¬ ng tr× nh in ra b¶ ng m∙ ASCII
while (n <= 255)
Trang 38{ printf(“%c cã m∙ ASCII lµ %d”, n, n);
n ++
} }
VÝ dô 2: NhË p mé t chuç i ký tù , vµ kÕ t thó c nhË p b» ng ESC
VÝ dô 1: ViÕ t ch ¬ ng tr× nh in b¶ ng m∙ ASCII
#include <stdio.h>
Trang 39main ()
do { printf(“%c cã m∙ ASCII %d\n”, n, n);
VÝ dô 3: ViÕ t ch ¬ ng tr× nh in ra b¶ ng cö u ch ¬ ng b» ng vßng for
VÝ dô 4: ViÕ t ch ¬ ng tr× nh tÝ nh n giai thõ a
Trang 40* Ph¸ t biÓ u break, continue, goto:
1 Break:
LÖ nh break cho phÐp tho¸ t ra sí m khá i vßng lÆ p ( whiledo , for, dowhile),
lÖ nh switch
2 LÖ nh continue:
LÖ nh continue chØ dï ng trong vßng lÆ p lµ m cho ch ¬ ng tr× nh nh¶ y t¾ t vÒ
® iÒ u kiÖ n kiÓ m tra cñ a vßng lÆ p ® Ó b¾ t ® Ç u mé t vßng lÆ p mí i
VÝ dô : ViÕ t ch ¬ ng tr× nh nhË p mé t c© u ch÷ th ê ng kÕ t thó c b» ng dÊ u chÊ m, xuÊ t ra b» ng ch÷ hoa