LINK DOWNLOAD MIỄN PHÍ TÀI LIỆU "cơ sở kỷ thuật lập trình ": http://123doc.vn/document/563775-co-so-ky-thuat-lap-trinh.htm
4
ging nh nhng hot đng ngh thut nhum màu sc cá nhân hn là khoa hc. Mt s
ngi nm đc mt vài ngôn ng lp trình, cùng mt s mo vt tn dng cu hình vt lý
c th ca h thng máy tính, to nên mt s sn phm l ca phn mm đc coi là mt
chuyên gia nm bt đc nhng bí
n ca ngh thut lp trình.
Các h thng máy tính trong giai đon này có cu hình yu, b nh nh, tc đ các
thit b vào ra thp làm chm quá trình np và thc hin chng trình. Chng trình đc
xây dng bng k thut lp trình tuyn tính mà ni bt nht là ngôn ng lp trình Assembler
và Fortran. Vi phng pháp lp trình tuyn tính, lp trình viên ch đc phép th hin
chng trình ca mình trên hai c
u trúc lnh, đó là cu trúc lnh tun t (sequential) và
nhy không điu kin (goto). H thng th vin vào ra nghèo nàn làm cho vic lp trình tr
nên khó khn, chi phí cho các sn phm phn mm quá ln, đ tin cy ca các sn phm
phn mm không cao dn ti hàng lot các d án tin hc b tht bi, đc bit là các h thng
tin hc có tm c ln. Nm 1973, Hoare khng
đnh, nguyên nhân tht bi mà ngi M
gp phi khi phóng v tinh nhân to v phía sao V n (Sao Kim) là do li ca chng trình
điu khin vit bng Fortran. Thay vì vit:
DO 50 I = 12, 523
(Thc hin s 50 vi I là 12, 13, , 523)
Lp trình viên (hoc thao tác viên đc bìa) vit thành:
DO 50 I = 12.523
(Du phy đã thay bng du chm)
Gp câu lnh này, chng trình dch ca Fortran đã hiu là gán giá tr thc 12.523
cho bin DO 50 I làm cho kt qu
chng trình sai.
gii quyt nhng vng mc trong k thut lp trình, các nhà tin hc lý thuyt đã
đi sâu vào nghiên cu tìm hiu bn cht ca ngôn ng, thut toán và hot đng lp trình,
nâng ni dung ca k thut lp trình lên thành các nguyên lý khoa hc ngày nay. Kt qu
ni bt nht trong giai đon này là Knuth xut bn b 3 tp sách mang tên “Ngh thut lp
trình” gii thiu ht sc t
m c s lý thuyt đm bo toán hc và các thut toán c bn x
lý d liu na s, sp xp và tìm kim. Nm 1968, Dijkstra công b lá th “V s nguy hi
ca toán t goto”. Trong công trình này, Dijkstra khng đnh, có mt s li do goto gây nên
không th xác đnh đc đim bt đu ca li. Dijkstra còn khng đnh thêm: “Tay ngh
ca mt lp trình viên t l ngh
ch vi s lng toán t goto mà anh ta s dng trong
chng trình”, đng thi kêu gi hu b trit đ toán t goto trong mi ngôn ng lp trình
ngoi tr ngôn ng lp trình bc thp. Dijkstra còn đa ra khng đnh, đng thái ca chng
trình có th đc đánh giá tng minh qua các cu trúc lp, r nhánh, gi đ qui là c s
ca lp trình cu trúc ngày nay.
Nhng kt qu
đc Dijikstra công b đã to nên mt cuc cách mng trong k
thut lp trình, Knuth lit kê mt s trng hp có li ca goto nh vòng lp kt thúc gia
chng, bt li . . ., Dijkstra, Hoare, Knuth tip tc phát trin t tng coi chng trình máy
tính cùng vi lp trình viên là đi tng nghiên cu ca k thut lp trình và phng pháp
Chng 1: i cng v k thut lp trình cu trúc
5
làm ch s phc tp ca các hot đng lp trình. Nm 1969, Hoare đã phát biu các tiên đ
phc v cho vic chng minh tính đúng đn ca chng trình, phát hin tính bt bin ca
vòng lp bng cách coi chng trình va là bn mã hoá thut toán đng thi là bn chng
minh tính đúng đn ca chng trình. Sau đó Dahl, Hoare, Dijiksta đã phát trin thành ngôn
ng lp trình cu trúc.
trin khai các nguyên lý lp trình c
u trúc, L. Wirth đã thit k và cài đt ngôn
ng ALGOL W là mt bin th ca ALGOL 60. Sau này, L. Wirth tip tc hoàn thin đ
tr thành ngôn ng lp trình Pascal. ây là ngôn ng lp trình gin d, sáng sa v cú pháp,
d minh ha nhng vn đ phc tp ca lp trình hin đi và đc coi là mt chun mc
trong ging dy lp trình.
Nm 1978, Brian Barninghan cùng Denit Ritche thit k ngôn ng lp trình C vi t
i
thiu các cu trúc lnh và hàm khá phù hp vi t duy và tâm lý ca ca ngi lp trình.
ng thi, hai tác gi đã phát hành phiên bn h điu hành UNIX vit ch yu bng ngôn
ng C, khng đnh thêm uy th ca C trong lp trình h thng.
1.2. CU TRÚC LNH, LNH CÓ CU TRÚC, CU TRÚC D LIU
1.2.1. Cu trúc lnh (cu trúc điu khin)
Mi chng trình máy tính v bn cht là mt bn mã hoá thut toán. Thut toán
đc coi là dãy hu hn các thao tác s cp trên tp đi tng vào (Input) nhm thu đc
kt qu ra (output). Các thao tác trong mt ngôn ng lp trình c th đc điu khin bi
các lnh hay các cu trúc điu khin, còn các đi tng chu thao tác thì đc mô t và biu
di
n thông qua các cu trúc d liu.
Trong các ngôn ng lp trình cu trúc, nhng cu trúc lnh sau đc s dng đ xây
dng chng trình. D nhiên, chúng ta s không bàn ti cu trúc nhy không điu kin goto
mc dù ngôn ng lp trình cu trúc nào cng trang b cu trúc lnh goto.
câu lnh GOTO.
Hình 1.1: Cu trúc tun t và cu trúc r nhánh dng đy đ
Cu trúc tun t
A;
B;
Sau khi thc hin lnh A thì thc hin lnh B
A
B
Cu trúc r nhánh dng đy đ
If (E) A; S
Else B;
Nu biu thc E có giá tr đúng (khác 0) thì
thchinA;NuEsaithìthchinB;
AB
Chng 1: i cng v k thut lp trình cu trúc
6
Hình 1.2. Các cu trúc lp
A, B : ký hiu cho các câu lnh đn hoc lnh hp thành. Mi lnh đn l đc gi là
mt lnh đn, lnh hp thành là lnh hay cu trúc lnh đc ghép li vi nhau theo qui đnh
ca ngôn ng, trong Pascal là tp lnh hay cu trúc lnh đc bao trong thân ca begin . . .
end; trong C là tp các lnh hay cu trúc lnh đc bao trong hai ký hiu { }.
E, E1, E2, E3 là các biu thc s hc hoc logic. Mt s ngôn ng lp trình coi giá tr
ca biu thc logic hoc đúng (TRUE) hoc sai (FALSE), mt s ngôn ng lp trình khác
nh C coi giá tr ca biu thc logic là đúng nu nó có giá tr khác 0, ngc li biu thc
logic có giá tr sai.
Cn lu ý rng, mt chng trình đc th hin bng các cu trúc điu khin lnh :
tun t, tuyn chn if else, switch . . case default, lp vi đi
u kin trc while , lp vi
điu kin sau do . . while, vòng lp for bao gi cng chuyn đc v mt chng trình, ch
s dng ti thiu hai cu trúc lnh là tun t và lp vi điu kin trc while. Phng pháp
lp trình này còn đc gi là phng pháp lp trình hn ch.
Cu trúc lp vi điu kin sau
do
A; S
while (E);
Thc hin A cho ti khi nào E vn còn
đúng;
Cu trúc lp FOR
For (E1; E2;E3)
A;
S
Cu trúc lp vi điu kin trc
While (E) A;
S
Trong khi biu thc E còn có giá tr đúng thì
thc hin A;
E
A
A
E
E1
E2
E3
A
Chng 1: i cng v k thut lp trình cu trúc
7
1.2.2. Lnh có cu trúc
Lnh có cu trúc là lnh cho phép cha các cu trúc điu khin trong nó. Khi tìm hiu
mt cu trúc điu khin cn xác đnh rõ v trí đc phép đt mt cu trúc điu khin trong
nó, cng nh nó là mt phn ca cu trúc điu khin nào. iu này tng nh rt tm
thng nhng có ý ngha ht sc quan trng trong khi xây d
ng và kim tra li có th xy
ra trong chng trình. Nguyên tc vit chng trình theo cu trúc: Cu trúc con phi đc
vit lt trong cu trúc cha, đim vào và đim ra ca mi cu trúc phi nm trên cùng mt
hàng dc. Ví d sau s minh ha cho nguyên tc vit chng trình:
if (E)
while (E1)
A;
else
do
B;
while(E2);
Trong ví d trên, while (E1) A; là cu trúc con nm trong thân ca cu trúc cha là if
(E) ; còn do B while(E2); là cu trúc con trong thân ca else. Do vy, câu lnh while(E1);
do . . . while(E2) có cùng cp vi nhau nên nó phi nm trên cùng mt ct, tng t nh
vy vi A, B và if vi else.
1.2.3. Cu trúc d liu
Các ngôn ng lp trình cu trúc nói chung đu ging nhau v cu trúc lnh và cu
trúc d liu. im khác nhau duy nht gia các ngôn ng
lp trình cu trúc là phng pháp
đt tên, cách khai báo, cú pháp câu lnh và tp các phép toán đc phép thc hin trên các
cu trúc d liu c th. Nm bt đc nguyên tc này, chúng ta s d dàng chuyn đi cách
th hin chng trình t ngôn ng lp trình này sang ngôn ng lp trình khác mt cánh
nhanh chóng mà không tn quá nhiu thi gian cho vic hc tp ngôn ng lp trình.
Thông thng, các cu trúc d liu đc phân thành hai loi: cu trúc d li
u có kiu
c bn (Base type) và cu trúc d liu có kiu do ngi dùng đnh ngha (User type) hay
còn gi là kiu d liu có cu trúc. Kiu d liu c bn bao gm: Kiu kí t (char), kiu s
nguyên có du (signed int), kiu s nguyên không du (unsigned int), kiu s nguyên dài có
du (signed long), kiu s nguyên dài không du (unsigned long ), kiu s thc (float) và
kiu s
thc có đ chính xác gp đôi (double).
Kiu d liu do ngi dùng đnh ngha bao gm kiu xâu kí t (string), kiu mng
(array), kiu tp hp (union), kiu cu trúc (struct), kiu file, kiu con tr (pointer) và các
kiu d liu đc đnh ngha mi hoàn toàn nh kiu danh sách móc ni (link list), kiu cây
(tree) . . .
Kích c ca kiu c bn đ
ng ngha vi min xác đnh ca kiu vi biu din nh
phân ca nó, và ph thuc vào tng h thng máy tính c th. xác đnh kích c ca kiu
nên dùng toán t sizeof( type). Chng trình sau s lit kê kích c ca các kiu c bn.
Chng 1: i cng v k thut lp trình cu trúc
8
Ví d 1.1. Kim tra kích c ca kiu.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <io.h>
void main(void) {
printf(“\n Kích c kiu kí t:%d”, sizeof(char));
printf(“\n Kích c kiu kí t không du:%d”, sizeof(unsigned char));
printf(“\n Kích c kiu s nguyên không du:%d”, sizeof(unsigned int));
printf(“\n Kích c kiu s nguyên có du:%d”, sizeof(signed int));
printf(“\n Kích c kiu s nguyên dài không du:%d”, sizeof(unsigned long ));
printf(“\n Kích c kiu s nguyên dài có du:%d”, sizeof(signed long ));
printf(“\n Kích c kiu s thc có đ chính xác đn:%d”, sizeof(float ));
printf(“\n Kích c kiu s thc có đ chính xác kép:%d”, sizeof(double ));
getch();
}
Kích c ca các kiu d liu do ngi dùng đnh ngha là tng kích c ca mi kiu
thành viên trong nó. Chúng ta cng vn dùng toán t sizeof(tên kiu) đ xác đnh đ ln tính
theo byte ca các kiu d liu này.
Mt đim đc bit chú ý trong khi lp trình trên các cu trúc d liu là cu trúc d liu
nào thì phi kèm theo phép toán đó, vì mt bin đc gi là thuc kiu d liu nào
đó nu
nh nó nhn mt giá tr t min xác đnh ca kiu và các phép toán trên kiu d liu đó.
1.3. NGUYÊN LÝ TI THIU
Hãy bt đu t mt tp nguyên tc và ti thiu các phng tin là các cu trúc lnh, kiu
d liu cùng các phép toán trên nó và thc hin vit chng trình. Sau khi nm chc nhng
công c vòng đu mi đt vn đ m rng sang h thng th vin tin ích ca ngôn ng.
Khi làm quen vi mt ngôn ng lp trình nào đó, không nht thit phi l thuc quá
nhiu vào h
thng th vin hàm ca ngôn ng, mà điu quan trng hn là trc mt bài
toán c th, chúng ta s dng ngôn ng đ gii quyt nó th nào, và phng án tt nht là
lp trình bng chính h thng th vin hàm ca riêng mình. Do vy, đi vi các ngôn ng
lp trình, chúng ta ch cn nm vng mt s các công c ti thiu nh sau:
1.3.1. Tp các phép toán
Tp các phép toán s
hc: + (cng); - (tr); * (nhân); % (ly phn d); / (chia).
Tp các phép toán s hc m rng:
++a ú a = a +1; // tng giá tr bin nguyên a lên mt đn v;
a ú a = a-1; //gim giá tr bin nguyên a mt đn v;
a+= n ú a = a+n; // tng giá tr bin nguyên a lên n đn v;
Chng 1: i cng v k thut lp trình cu trúc
9
a-=n ú a = a - n; // gim giá tr bin nguyên a n đn v);
a%=n ú a = a%n; // ly giá tr bin a modul vi n;
a/=n ú a=a/n;// ly giá tr bin a chia cho n;
a*=n ú a = a*n; // ly giá tr bin a nhân vi n;
Tp các phép toán so sánh: >, <, >=, <=, ==, != ( ln hn, nh hn, ln hn
hoc bng, nh hn hoc bng, đúng bng, khác). Qui tc vit đc th hin nh sau:
if ( a>b) { . . } // nu a ln hn b
if ( a<b) { . . } // nu a nh
hn b
if ( a>=b) { . . } // nu a ln hn hoc bng b
if ( a<=b) { . . } // nu a nh hn hoc bng b
if ( a==b) { . . } // nu a đúng bng b
if ( a!=b) { . . } // nu a khác b
Tp các phép toán logic: &&, ||, ! (và, hoc, ph đnh)
&&: Phép và logic ch cho giá tr đúng khi hai biu thc tham gia đu có giá tr
đúng (giá tr đúng ca mt biu thc trong C đc hiu là biu thc có giá tr khác 0).
||: Phép hoc logic ch cho giá tr sai khi c hai biu thc tham gia đu có giá
tr
sai.
!: Phép ph đnh cho giá tr đúng nu biu thc có giá tr sai và ngc li cho
giá tr sai khi biu thc có giá tr đúng. Ng ngha ca các phép toán đc minh ha
thông qua các câu lnh sau:
int a =3, b =5;
if ( (a !=0) && (b!=0) ) // nu a khác 0 và b khác 0
if ((a!=0) || (b!=0)) // nu a khác 0 hoc b khác 0
if ( !a ) // ph đnh a khác 0
if (a==b) // nu a đúng bng b
Các toán t thao tác bít (không s dng cho float và double)
& : Phép hi các bít.
| : Phép tuyn các bít.
^ : Phép tuyn các bít có loi tr.
<< : Phép dch trái (dch sang trái n bít giá tr 0)
>> : Phép dch ph
i (dch sang phi n bít có giá tr 0)
~ : Phép ly phn bù.
Chng 1: i cng v k thut lp trình cu trúc
10
Ví d 1.2: Vit chng trình kim tra các toán t thao tác bít.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <io.h>
void main(void){
unsigned int a=3, b=5, c; clrscr();
c = a & b; printf(“\n c = a & b=%d”,c);
c = a | b; printf(“\n c = a | b=%d”,c);
c = a ^ b; printf(“\n c = a ^ b=%d”,c);
c = ~a; printf(“\n c = ~a =%d”,c);
c = a << b; printf(“\n c = a << b=%d”,c);
c = a >>b; printf(“\n c = a >> b=%d”,c);
getch();
}
Toán t chuyn đi kiu: Ta có th dùng toán t chuyn đi kiu đ nhn đc kt qu
tính toán nh mong mun. Qui tc chuyn đi kiu đc thc hin theo qui tc: (kiu) bin.
Ví d 1.3: Tính giá tr phép chia hai s nguyên a và b.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <io.h>
void main(voi)(
int a=3, b=5; float c;
c= (float) a / (float) b;
printf(“\n thng c = a / b =%6.2f”, c);
getch();
}
Th t u tiên các phép toán : Khi vit mt biu thc, chúng ta cn lu ý ti th t
u tiên tính toán các phép toán, các bng tng hp sau đây phn ánh trt t u tiên tính toán
ca các phép toán s hc và phép toán so sánh.
Bng tng hp th t u tiên tính toán các phép toán s hc và so sánh
TÊN TOÁN T CHIU TÍNH TOÁN
( ), [] , -> L -> R
- , ++, , ! , ~ , sizeof() R -> L
* , /, % L -> R
Chng 1: i cng v k thut lp trình cu trúc
11
+ , - L -> R
>>, << L -> R
<, <=, > , >=, L -> R
== != L -> R
& L -> R
^ L -> R
| L -> R
&& L -> R
|| L -> R
?: R -> L
=, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>= R -> L
1.3.2. Tp các lnh vào ra c bn
Nhp d liu t bàn phím: scanf(“format_string, . . .”, ¶meter . . .);
Nhp d liu t tp: fscanf( file_pointer,”format_string, . . .”, ¶meter, . . .);
Nhn mt ký t t bàn phím: getch(); getchar();
Nhn mt ký t t file: fgetc(file_pointer, character_name);
Nhp mt string t bàn phím: gets(string_name);
Nhn mt string t file text : fgets(string_name, number_character, file_pointer);
Xut d liu ra màn hình: printf(“format_string . . .”, parameter . . .);
Xut d liu ra file : fprintf(file_pointer, “format_string . . .”, parameter. . .);
Xut mt ký t ra màn hình: putch(character_name);
Xut mt ký t ra file: fputc(file_pointer, character_name);
Xut mt string ra màn hình: puts(const_string_name);
Xut mt string ra file: fputs(file_pointer, const_string_name);
1.3.3. Thao tác trên các ki
u d liu có cu trúc
Tp thao tác trên string:
char *strchr(const char *s, int c) : tìm ký t c đu tiên xut hin trong xâu s;
char *stpcpy(char *dest, const char *src) : copy xâu scr vào dest;
Chng 1: i cng v k thut lp trình cu trúc
12
int strcmp(const char *s1, const char *s2) : so sánh hai xâu s1 và s2 theo th t t
đin, nu s1 < s2 thì hàm tr li giá tr nh hn 0. Nu s1>s2 hàm tr li giá tr
dng. Nu s1==s2 hàm tr li giá tr 0.
char *strcat(char *dest, const char *src) : thêm xâu scr vào sau xâu dest.
char *strlwr(char *s) : chuyn xâu s t ký t in hoa thành ký t in thng.
char *strupr(char *s): chuyn xâu s t ký t thng hoa thành ký t in hoa.
char *strrev(char *s): đo ngc xâu s.
char *strstr(const char *s1, const char *s2): tìm v trí đu tiên ca xâu s2 trong xâu s1.
int strlen(char *s): cho đ dài ca xâu ký t s.
Tp thao tác trên con tr:
Thao tác l
y đa ch ca bin: & parameter_name;
Thao tác ly ni dung bin (bin có kiu c bn): *pointer_name;
Thao tác tr ti phn t tip theo: ++pointer_name;
Thao tác tr ti phn t th n k t v trí hin ti: pointer_name = pointer_name +n;
Thao tác tr ti phn t sau con tr k t v trí hin ti: pointer_name;
Thao tác tr ti phn t sau n phn t k t v
trí hin ti:
Pointer_name = pointer_name - n;
Thao tác cp phát b nh cho con tr:
void *malloc(size_t size);
void *calloc(size_t nitems, size_t size);
Thao tác cp phát li b nh cho con tr : void *realloc(void *block, size_t size);
Thao tác gii phóng b nh cho con tr: void free(void *block);
Tp thao tác trên cu trúc:
nh ngha cu trúc:
struct struct_name{
type_1 parameter_name_1;
type_2 parameter_name_2;
. . . . . . . . . . . . . . . . . . . . . .
type_k parameter_name_k;
} struct_parameter_name;
Phép truy nhp ti thành phn cu trúc:
Chng 1: i cng v k thut lp trình cu trúc
13
struct_parameter_name.parameter_name.
Phép gán hai cu trúc cùng kiu:
struct_parameter_name1 = struct_parameter_name2;
Phép tham tr ti thành phn ca con tr cu trúc:
pointer_struct_parameter_name -> struct_parameter_name.
Tp thao tác trên file:
Khai báo con tr file: FILE * file_pointer;
Thao tác m file theo mode: FILE *fopen(const char *filename,const char *mode);
Thao tác đóng file: int fclose(FILE *stream);
Thao tác đc tng dòng trong file: char *fgets(char *s, int n, FILE *stream);
Thao tác đc tng khi trong file:
size_t fread(void *ptr, size_t size,size_t n, FILE *stream);
Thao tác ghi tng dòng vào file: int fputs(const char *s, FILE *stream);
Thao tác ghi tng khi vào file:
size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);
Thao tác kim tra s tn ti ca file: int access(const char *filename, int amode);
Thao tác đi tên file: int rename(const char *oldname,const char *newname);
Thao tác loi b file: int unlink(const char *filename);
1.4. NGUYÊN LÝ A PHNG
̇ Các bin đa phng trong hàm, th tc hoc chu trình cho dù có trùng tên
vi bin toàn cc thì khi x lý bin đó trong hàm hoc th tc vn không làm
thay đi giá tr ca bin toàn cc.
̇ Tên ca các bin trong đi ca hàm hoc th tc đu là hình thc.
̇ Mi bin hình thc truyn theo tr cho hàm hoc th tc đu là các bin đa
phng.
̇ Các bin khai báo bên trong các ch
ng trình con, hàm hoc th tc đu là
bin đa phng.
̇ Khi phi s dng bin ph nên dùng bin đa phng và hn ch ti đa vic
s dng bin toàn cc đ tránh xy ra các hiu ng ph.
Ví d hoán đi giá tr ca hai s a và b sau đây s minh ha rõ hn v nguyên lý đa
phng.
Ví d 1.4. Hoán đi giá tr ca hai bi
n a và b.
Không có nhận xét nào:
Đăng nhận xét