Escolar Documentos
Profissional Documentos
Cultura Documentos
Ngän ngæî C âæåüc Dennis Ritchie thiãút kãú taûi phoìng thê nghiãûm Bell nàm 1972 våïi muûc
âêch viãút hãû âiãöu haình UNIX. Tuy nhiãn nhåì tênh æu viãût vaì linh âäüng cuía C nãn C âaî âæåüc
giåïi tin hoüc sæí duûng khàõp nåi nhæ mäüt ngän ngæî chênh thäúng. Do coï nhiãöu phiãn baín C cuía
nhiãöu nhaì saín xuáút pháön mãöm nãn nàm 1983 ANSI (American National Standard Institute)
xáy dæûng tiãu chuáøn ANSI C. Täø chæïc ISO cuîng xáy dæûng chuáøn cho C. Hai chuáøn naìy giäúng
nhau vaì âæåüc biãút âãún våïi tãn chung laì ANSI C.
Trang 1
Chæång I : Täøng quan
+ Säú bæåïc cáön thæûc hiãûn trong thuáût toaïn laì hæîu haûn âãø sau mäüt säú láön làûp nháút âënh ta
phaíi âæåüc nghiãûm cuía baìi toaïn
+ Tênh täúi æu: thäng thæåìng âäúi våïi mäüt baìi toaïn coï nhiãöu phæång phaïp giaíi khaïc nhau
ta phaíi choün ra trong säú âoï phæång phaïp giaíi täúi æu nháút vãö thåìi gian thæûc hiãûn, cho kãút quaí
chênh xaïc nháút, khäúi læåüng tênh toaïn êt nháút vaì âån giaín khi viãút chæång trçnh.
Vê duû :
+ Phaït biãøu baìi toaïn : Trong låïp coï bao nhiãu ngæåìi tãn Xuán ?
+ Âáöu vaìo :
• Danh saïch låïp
• Tãn cáön kiãøm tra : Xuán
+ Âáöu ra :
• Säú ngæåìi coï tãn Xuán
+ Thuáût toaïn :
• Láúy danh saïch låïp
• Láúy tãn cáön kiãøm tra : Xuán
• Xoïa bäü âãúm vãö 0
• Láön læåüt âäúi våïi tæìng tãn trong danh saïch : So saïnh våïi tãn cáön kiãøm tra,
nãúu âuïng thç cäüng 1 vaìo bäü âãúm
• Thäng baïo giaï trë bäü âãúm ( säú sinh viãn coï tãn Xuán )
A A A
Thæûc hiãûn cäng viãûc A Goüi chæång trçnh con A Nháûp xuáút dæî liãûu
Begin
Sai
B
Âuïng End
Trang 2
Chæång I : Täøng quan
Trang 3
Chæång I : Täøng quan
Trang 4
Chæång I : Täøng quan
Vê duû :
#include <stdio.h> // khäng phaíi laì lãûnh
main()
{
int i,j;
i=0;
return 0; // ba doìng trãn laì 3 lãûnh nãn coï dáúu ;
}
Chæång trçnh C laì mäüt táûp håüp nhiãöu haìm trong âoï phaíi coï 1 haìm chênh goüi laì main().
Haìm laì âoaûn maî lãûnh âäüc láûp âæåüc âàût tãn vaì thæûc hiãûn mäüt cäng viãûc xaïc âënh khi
âæåüc goüi âãún. Mäüt haìm coï thãø goüi âãún nhiãöu haìm khaïc.
Haìm main() laì haìm âæåüc maïy tênh thæûc hiãûn træåïc tiãn trong mäüt chæång trçnh.
void ham1(void)
{
......
}
void ham2(void)
{
......
}
main()
{
......
ham1();
......
ham2();
......
}
Trang 5
Chæång I : Täøng quan
Vê duû : tênh diãûn têch hçnh chæî nháût biãút chiãöu daìi vaì chiãöu räüng coï sæí duûng haìm
#include <stdio.h>
#include <conio.h>
int tich(int x,int y); // khai baïo nguyãn máùu haìm
main()
{
int x,y; // khai baïo biãún
printf(“\nNhap chieu dai:”);scanf(“%d”,&x); // haìm âoüc tæì baìn phêm
printf(“\nNhap chieu rong:”);scanf(“%d”,&y);
printf(“\nDien tich hinh chu nhat: %d”,tich(x,y)); // haìm in ra maìn hçnh
getch(); // âoüc mäüt kê tæû âãø chåì
return 0;
}
int tich(int x,int y) // âënh nghéa haìm
{
return (x*y);
}
Trang 6
Chæång I : Täøng quan
Vê duû : tênh diãûn têch hçnh chæî nháût biãút chiãöu daìi vaì chiãöu räüng khäng duìng haìm
#include <stdio.h>
#include <conio.h>
main()
{
int x,y;
printf(“\nNhap chieu dai:”);scanf(“%d”,&x);
printf(“\nNhap chieu rong:”);scanf(“%d”,&y);
printf(“\nDien tich hinh chu nhat: %d”,x*y);
getch();
return 0;
}
Trang 7
Chæång II : Kiãøu dæî liãûu, biãún vaì hàòng
kiãøu array
kiãøu dæî liãûu coï kiãøu struct
cáúu truïc
kiãøu file
Trang 8
Chæång II : Kiãøu dæî liãûu, biãún vaì hàòng
Ta nãn nhåï ràòng bäü nhåï maïy tênh khäng räùng khi maïy tênh laìm viãûc. Caïc khäúi nhåï cáúp
phaït cho biãún coï thãø âaî coï giaï trë træåïc âoï. Ta chæa khåíi taûo x nãn ta khäng biãút âæåüc giaï trë x.
Trang 9
Chæång II : Kiãøu dæî liãûu, biãún vaì hàòng
Vê duû : 10 % 3 =1 ; 5 / 3 = 1 ;
• Biãøu diãùn säú nguyãn dæåïi daûng Hexa ( hãû tháûp luûc phán) :
Hãû tháûp phán sæí duûng : 0 1 2 3 4 5 6 7 8 9
Hãû nhë phán sæí duûng : 0 1
Hãû tháûp luûc phán sæí duûng : 0 1 2 3 4 5 6 7 8 9 A B C D E F
Vê duû : säú 53 åí daûng nhë phán laì 110101, åí daûng Hexa laì 35.
Säú nguyãn âæåüc biãøu diãùn dæåïi daûng Hexa : 0xgiaï_trë_Hexa hoàûc 0Xgiaï_trë_Hexa
Vê duû : 0x12 (=18) ; 0X12 (=18)
Âäúi våïi säú hãû 8 ta viãút thãm säú 0 vaìo træåïc : 0giaï_trë_Oct
Vê duû : 0123 (=83)
• Biãøu diãùn säú ám trong maïy tênh:
Säú ám : Vê duû : int x= - 21 ;
21 : 0000 0000 0001 0101
Säú buì 1 : 1111 1111 1110 1010
Säú buì 2 : 1111 1111 1110 1011
• Hiãûn tæåüng traìn säú :
Hiãûn tæåüng naìy xaíy ra khi kãút quaí dæû kiãún cuía pheïp tênh säú hoüc væåüt ra khoíi daíi giaï trë
coï thãø biãùu diãùn âæåüc cuía kiãøu dæî liãûu âoï. Luïc âoï kãút quaí thæûc tãú seî laì kãút quaí sai.
Vê duû : 32767 + 1 seî coï kãút quaí -32768
Âãø khàõc phuûc ta chuyãøn sang sæí duûng caïc kiãøu dæî liãûu coï daíi giaï trë cho pheïp räüng hån
Chuïng ta nãn khai baïo våïi kiãøu dæî liãûu täúi æu âãø væìa coï kãút quaí mong muäún væìa tiãút
kiãûm bäü nhåï.
Nãúu chuïng ta âàût mäüt säú ám vaìo biãún khäng dáúu hoàûc âàût mäüt säú vaìo kiãøu dæî liãûu coï
daíi giaï trë nhoí hån säú âoï thç trçnh biãn dëch seî khäng baïo läùi nhæng ta seî coï kãút quaí khäng
mong muäún.
Trang 10
Chæång II : Kiãøu dæî liãûu, biãún vaì hàòng
V. Kiãøu Boolean:
Thæûc ra ngän ngæî C khäng âënh nghéa roî raìng kiãøu Boolean. Kiãøu naìy täön taûi dæåïi
daûng säú nguyãn.
Säú nguyãn coï giaï trë 0 âæåüc hiãøu laì FALSE, coìn laûi âæåüc hiãøu laì TRUE. Nãúu kãút quaí laì
FALSE thç coï giaï trë laì 0, nãúu kãút quaí laì TRUE thç coï giaï trë laì 1.
Caïc pheïp toaïn logic vaì caïc pheïp toaïn quan hãû cho kãút quaí kiãøu Boolean
Trang 11
Chæång II : Kiãøu dæî liãûu, biãún vaì hàòng
Trang 12
Chæång II : Kiãøu dæî liãûu, biãún vaì hàòng
Vê duû : Âãø in ra mäüt doìng våïi tiãúng chuäng træåïc vaì sau doìng chæî :
printf(“\aHello%c”,7);
• Caïc kê tæû âäö hoüa coï maî säú tæì 127 âãún 255. Caïc kê tæû naìy coï thãø âæa ra maìn hçnh
nhæng khäng thãø âæa ra maïy in nhåì caïc lãûnh DOS.
Hàòng kê tæû âæåüc biãøu diãùn nàòm giæîa 2 dáúu nhaïy âån : ‘a’,’7’,....
Kê tæû âæåüc biãøu diãùn dæåïi daûng Hexa : \xHHH
Kê tæû âæåüc biãøu diãùn dæåïi daûng Octal : \DDD
Vê duû : ‘A’ coï thãø viãút nhæ sau : \x41 hoàûc \101
Mäüt säú haìm xæí lê kê tæû : (âæåüc cung cáúp trong thæ viãûn ctype.h)
Haìm Taïc duûng
int toascii(int c) chuyãøn c thaình maî ASCII
int tolower(int c) chuyãøn c thaình chæî thæåìng
int toupper(int c) chuyãøn c thaình chæî hoa
Vê duû : Nháûp chæî thæåìng tæì baìn phêm vaì chuyãøn thaình chæî hoa:
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
main()
{
int chu_thuong,chu_hoa;
chu_thuong=getchar();
chu_hoa=toupper(chu_thuong);
putchar(chu_hoa);
getch();
return 0;
}
Trang 13
Chæång II : Kiãøu dæî liãûu, biãún vaì hàòng
Haìm toascii xoïa táút caí caïc bit ngoaûi træì 7 bit cuäúi -> kãút quaí thuäüc [0,127]
Kãút quaí : 511 127 ∆
Hàòng xáu kê tæû : laì daîy kê tæû nàòm giæîa 2 dáúu ngoàûc keïp
Vê duû : “Ngän ngæî”
Xáu kê tæû âæåüc læu trong 1 maíng ä nhåï liãön nhau coï caïc pháön tæí laì caïc kê tæû riãng biãût,
pháön tæí cuäúi cuìng laì kê tæû NULL ( \0 laì kê hiãûu kãút thuïc cuía xáu kê tæû ) . Vê duû :
T O I \0
Sæû khaïc nhau giæîa ‘Z’ vaì “Z” :
- ‘Z’ gäöm 1 byte, “Z” gäöm 2 byte læu trong bäü nhåï
- ‘Z’ coï thãø âæåüc sæí duûng trong biãøu thæïc toaïn hoüc, coìn “Z” thç khäng.
Trang 14
Chæång II : Kiãøu dæî liãûu, biãún vaì hàòng
Trang 15
Chæång III : Cáu lãûnh, biãøu thæïc vaì toaïn tæí
Trang 16
Chæång III : Cáu lãûnh, biãøu thæïc vaì toaïn tæí
Trang 17
Chæång III : Cáu lãûnh, biãøu thæïc vaì toaïn tæí
IV.3. Pheïp tàng / giaím giaï trë 1 âån vë (duìng våïi caïc biãún):
i=i+1 <=> i++ hoàûc ++i
i=i-1 <=> i-- hoàûc --i
Sæû khaïc nhau giæîa 2 lãûnh gaïn a= ++i vaì a= i++ :
++i : tàng i lãn 1 âån vë, sau âoï måïi gaïn.
i++ : gaïn træåïc, sau âoï måïi tàng i lãn 1 âån vë.
Vê duû : x=0;a=x++; // a=x; x++; : a=0, x=1;
x=0;a=++x; // x++; a=x; : a=1,x=1;
Trang 18
Chæång III : Cáu lãûnh, biãøu thæïc vaì toaïn tæí
Vê duû : Giaí sæí ta muäún tçm giaï trë låïn nháút max cuía 2 säú a vaì b. Ta coï thãø viãút nhæ sau :
max = a > b ? a : b
Nãúu a > b laì TRUE thç max âæåüc gaïn bàòng a, nãúu khäng thç âæåüc gaïn bàòng b.
Vê duû: printf(“There %s %d fish”, (n>1) ? ”are”:”is”, n);
printf("There %s %d dog%s", (n>1)?"are":"is", n, (n>1)?"s":"");
Ta khäng nãn viãút : x = f (...) + g (...); nãúu 1 trong 2 haìm f vaì/hoàûc g coï thãø laìm thay
âäøi giaï trë cuía caïc biãún truyãön cho haìm coìn laûi. C khäng chè roî haìm naìo seî âæåüc thæûc hiãûn
træåïc.
Tæång tæû : * printf("%d %d\n", ++n, power(2, n)); /* sai */
* a[i] = i++;
Trang 19
Chæång III : Cáu lãûnh, biãøu thæïc vaì toaïn tæí
Viãûc chuyãøn âäøi kiãøu giaï trë xaíy ra tæû âäüng khi trong biãøu thæïc coï caïc toaïn haûng khaïc
kiãøu. Viãûc chuyãøn âäøi kiãøu giaï trë cuîng xaíy ra khi gaïn giaï trë kiãøu naìy cho biãún (hoàûc pháön tæí
maíng) kiãøu kia, khi truyãön giaï trë caïc âäúi säú cho caïc tham säú, trong cáu lãûnh return.
int → long → float → double → long double.
Khi chuyãøn âäøi theo chiãöu ngæåüc laûi thç seî bë máút maït thäng tin, coï thãø coï caính baïo
nhæng khäng coï läùi.
Vê duû: int n;
long p;
float x,s;
s=n*p+x;
âáöu tiãn khi tênh n*p, n âæåüc âäøi thaình kiãøu long. Têch coï kiãøu long nãn khi tênh täøng,
têch âæåüc chuyãøn thaình kiãøu float. Täøng coï kiãøu float seî âæåüc gaïn cho s.
Trang 20
Chæång III : Cáu lãûnh, biãøu thæïc vaì toaïn tæí
Haìm YÏ nghéa
int abs(int i) traí laûi giaï trë tuyãût âäúi cuía säú nguyãn i
double fabs(double d) traí laûi giaï trë tuyãût âäúi cuía säú thæûc d
double sin(double d) traí laûi haìm sin
double cos(double d) traí laûi haìm cos
double cosh(double d) traí laûi haìm ch (hyberbolic)
double tan(double d) traí laûi haìm tg
double exp(double d) traí laûi giaï trë e muî d
double log(double d) traí laûi haìm loga cå säú e
double log10(double d) traí laûi haìm loga cå säú 10
double pow(double d1, double d2) traí laûi giaï trë d1 muî d2
double floor(double d) traí laûi haìm càõt troìn säú
double ceil(double d) traí laûi haìm laìm troìn säú
double fmod(double d1, double d2) traí laûi haìm pháön dæ cuía pheïp chia d1/d2
double sqrt(double d) traí laûi haìm càn báûc hai
void srand(double d) khåíi taûo bäü säú ngáùu nhiãn
Vê duû :
floor(3.2) = 3. floor(3.7) = 3.
ceil(3.2) = 4. ceil(3.7) = 4.
Âãø laìm troìn caïc säú thæûc tæì 2.5 âãún cáûn 3.5 thaình 3 ta duìng floor(i+0.5)
Trang 21
Chæång III : Cáu lãûnh, biãøu thæïc vaì toaïn tæí
5. Ban âáöu 4 säú x,y,z,t âãöu bàòng 5. Thæûc hiãûn caïc lãûnh :
y=x++;
t=++z;
Hoíi kãút quaí cuäúi cuìng cuía 4 säú trãn.
6. Láûp lãûnh tênh biãøu thæïc :
2
z = e tan( x ) +3−cos ( x)
7. Viãút chæång trçnh nháûp 4 säú nguyãn, tênh täøng 2 säú nguyãn åí giæîa
Vê duû : nháûp 4 säú a <= b <= c <= d , xuáút ra b + c.
8. Viãút âoaûn lãûnh tênh haìm dáúu nhæ sau :
− 1 nãúu n < 0
sign(n) = 0 nãúu n = 0
1 nãúu n > 0
Trang 22
Chæång IV : Nháûp xuáút dæî liãûu
I.1. Daûng :
int printf(“xáu âënh daûng”, daîy caïc biãøu thæïc )
Vê duû :
printf(“%d %d %c”,1,2,’c’);
ÅÍ vê duû trãn ta tháúy coï sæû tæång æïng 1-1 vaì âuïng trçnh tæû giæîa caïc maî âënh daûng trong
xáu âënh daûng vaì daîy caïc biãøu thæïc.
- Khi khäng coï dáúu træì thç kãút quaí âæåüc däön vãö phêa bãn phaíi nãúu âäü daìi thæûc tãú
cuía noï nhoí hån âäü daìi cuía khuän in daình cho noï. Caïc vë trê dæ thæìa seî âæåüc láúp bàòng caïc
khoaíng träúng. Nãúu daîy säú fw bàõt âáöu bàòng säú 0 thç caïc vë trê dæ thæìa seî âæåüc láúp âáöy bàòng säú 0
- Khi coï dáúu træì thç kãút quaí âæåüc däön vãö phêa bãn traïi vaì caïc vë trê dæ thæìa luän
âæåüc láúp bàòng caïc khoaíng träúng.
Trang 23
Chæång IV : Nháûp xuáút dæî liãûu
Trang 24
Chæång IV : Nháûp xuáút dæî liãûu
Trang 25
Chæång IV : Nháûp xuáút dæî liãûu
Vê duû :
#include <stdio.h>
#include <conio.h>
main()
{
char x[10],y[10];
printf("\nNhap vao day :");
scanf("%[1234567890]%[^0123456789]",x,y);
printf("\n%s",x);
printf("\n%s",y);
getch();
return 0;
}
Khi ta nháûp 12345abcdefg123 thç kãút quaí seî laì :
x=12345 vaì y=abcdefg.
• Giaï trë traí vãö cuía haìm :
Haìm traí vãö säú nguyãn bàòng säú caïc giaï trë nháûn âæåüc (læu vaìo bäü nhåï).
Trong vê duû trãn, giaï trë traí vãö cuía haìm laì 2.
Trang 26
Chæång IV : Nháûp xuáút dæî liãûu
Vê duû : int a;
char b;
scanf(“%c%d”,&b,&a);
vaì ta nháûp c^3 thç b=’c’ vaì a=3.
Vê duû : int a;
char b;
scanf(“%d%c”,a,b);
vaì ta nháûp 3^c thç a=3 vaì b=’^‘.
Vê duû : int a;
char b;
scanf(“%d %c”,a,b);
vaì ta nháûp 3^c thç a=3 vaì b=’c‘.
Nhæ váûy nãúu giæîa 2 maî âënh daûng ta coï thãm vaìo caïc khoaíng tràõng thç khi nháûp dæî
liãûu, maïy seî nhaíy qua caïc khoaíng tràõng, dáúu xuäúng doìng, dáúu tab..... âãún khi gàûp kê tæû khaïc.
Vê duû : int a,b;
scanf(“%d%d”,&x,&y);
Nãúu ta goî vaìo 34^^45 thç x=34,y=45.
Nãúu ta goî ^^^34^^45^^^^ hoàûc nháûp hai säú âoï trãn nhiãöu doìng thç váùn coï kãút quaí trãn.
• Khuän âoüc : khuän âoüc cuîng nhæ khuän in.
Vê duû : scanf(“%3d %3d”,&a,&b);
Ta nháûp vaìo 12^^23 kãút quaí : a=12;b=23.
1234567 kãút quaí : a=123;b=456.
Chuïng ta nãn nháûp vaìo caïc säú trãn tæìng doìng âãø khäng bë láùn läün.
Vê duû :
#include <stdio.h>
#include <conio.h>
main()
{
int x,y;
printf(“\nNhap vao so x :”);
scanf(“%d”,&x);
printf(“\nNhap vao so y :”);
scanf(“%d”,&y);
printf(“\nx=%d”,x);
printf(“\ny=%d”,y);
getch();
return 0;
}
Khi ta nháûp 23^^^34^^^↵ thç kãút quaí laì Nhap vao so x : 23^^^34
Trang 27
Chæång IV : Nháûp xuáút dæî liãûu
Nhap vao so y :
x=23
y=34
Dæî liãûu nháûp vaìo tæì baìn phêm âæåüc læu vaìo stdin âãø chåì xæí lê chæï khäng âæåüc xæí lê
træûc tiãúp tæì baìn phêm. Do dæî liãûu âaî coï sàôn trong stdin nãn maïy tênh âoüc luän säú naìy vaì gaïn
cho biãún tæång æïng maì khäng chåì ta goî tiãúp vaìo tæì baìn phêm. Trong stdin seî coìn laûi caïc kê tæû
^^^ vaì kê tæû xuäúng doìng (\n).
Trang 28
Chæång IV : Nháûp xuáút dæî liãûu
Vê duû :
#include <stdio.h>
#include <conio.h>
main()
{
char name[20];
printf(“Nhap vao ten cua ban :”);
gets(name);
printf(“\nTen cua ban la : %s“,name);
getch();
return 0;
}
Ta cuîng coï thãø duìng haìm naìy âãø âoüc mäüt säú nguyãn :
gets(str);
i=atoi(str);
hoàûc âoüc mäüt säú thæûc:
gets(str);
f=atof(str);
Trang 29
Chæång IV : Nháûp xuáút dæî liãûu
Trang 30
Chæång IV : Nháûp xuáút dæî liãûu
VII. Caïc haìm vaìo ra trãn maìn hçnh vaì baìn phêm :
Caïc haìm naìy thuäüc táûp tin conio.h
Trang 31
Chæång IV : Nháûp xuáút dæî liãûu
Caïc hàòng maìu : âæåüc sæí duûng våïi caïc haìm textcolor() vaì haìm textbackground()
Newcolor coï giaï trë tæì 0 âãún 15 tæång æïng våïi caïc maìu åí baíng trãn
Âãø caïc kê tæû nháúp nhaïy ta cäüng thãm 128 vaìo giaï trë maìu.
Vê duû : textcolor(WHITE);
hoàûc textcolor(15);
Trang 32
Chæång IV : Nháûp xuáút dæî liãûu
Trang 33
Chæång IV : Nháûp xuáút dæî liãûu
Trang 34
Chæång V : Caïc cáu lãûnh âiãöu khiãøn
F
biãøu thæïc
khäúi lãûnh 1
Trang 35
Chæång V : Caïc cáu lãûnh âiãöu khiãøn
F
biãøu thæïc Khäúi lãûnh 2
khäúi lãûnh 1
Daûng 1 : nãúu biãøu thæïc coï giaï trë khaïc 0 (TRUE) thç thæûc hiãûn khäúi lãûnh 1, nãúu bàòng 0
(FALSE) thç tiãúp tuûc thæûc hiãûn lãûnh tiãúp theo sau lãûnh if.
Daûng 2 : nãúu biãøu thæïc coï giaï trë khaïc 0 (TRUE) thç thæûc hiãûn khäúi lãûnh 1, nãúu bàòng 0
(FALSE) thç thæûc hiãûn khäúi lãûnh 2.
Biãøu thæïc khäng nháút thiãút phaíi laì biãøu thæïc so saïnh maì coï thãø laì biãøu thæïc säú hoüc.
Vê duû : tçm säú låïn nháút vaì nhoí nháút trong 2 säú nháûp tæì baìn phêm.
#include <stdio.h>
#include <conio.h>
main()
{
float x,y,min,max;
printf(“Nhap so thuc thu nhat:”);scanf(“%f”,&x);
printf(“Nhap so thuc thu hai :”);scanf(“%f”,&y);
if ( x<y )
{ min = x;
max = y;
}
else
{ min = y;
max = x;
}
printf(“\n Gia tri lon nhat = %f, Gia tri nho nhat = %f”,max, min);
getch();
return 0;
}
Ta coï thãø thay thãú lãûnh trãn bàòng lãûnh :
min=(x<y)? x:y;
max=(x>y)? x:y;
Trang 36
Chæång V : Caïc cáu lãûnh âiãöu khiãøn
Nãúu säú tæì khoïa if bàòng säú tæì khoïa else thç ta coï tæång æïng tæìng càûp if-else
Nãúu säú tæì khoïa if nhiãöu hån säú tæì khoïa else thç else âæåüc gàõn våïi if liãön træåïc noï.
Vê duû :
if (n>0)
if (a>b)
z=a;
else z=b;
Nhæ váûy else seî gàõn liãön våïi if thæï hai.
Trang 37
Chæång V : Caïc cáu lãûnh âiãöu khiãøn
float a,b,c,delta;
printf(“\nNhap vao 3 he so:”);
scanf(“%f%f%f”,&a,&b,&c);
if (a==0)
if (b==0)
if (c==0)
printf(“\nPhuong trinh dung voi moi x”);
else printf(“\nPhuong trinh vo nghiem!”);
else printf(“\nPhuong trinh co 1 nghiem x: %f”,(-c) / b);
else
{
delta=b*b-4*a*c;
if (delta<0.0)
printf(“\nPhuong trinh vo nghiem”);
else if (delta==0.0)
printf(“\nPhuong trinh co mot nghiem kep : x = %f”,-b/(2*a));
else { printf(“\nPhuong trinh co hai nghiem phan biet :”);
printf(“\nx1 = %f”, (-b+sqrt(delta))/(2*a));
printf(“\nx2 = %f”, (-b-sqrt(delta))/(2*a));
}
}
getch();
return 0;
}
Trang 38
Chæång V : Caïc cáu lãûnh âiãöu khiãøn
Maïy seî so saïnh biãøu thæïc våïi caïc hàòng i theo thæï tæû tæì trãn xuäúng. Khi biãøu thæïc coï giaï
trë bàòng hàòng i thç khäúi lãûnh i âæåüc thæûc hiãûn. Nãúu trong khäúi lãûnh âoï khäng coï lãûnh nhaíy thç
seî thæûc hiãûn tiãúp tuûc caïc khäúi lãûnh bãn dæåïi maì khäng cáön so saïnh tiãúp. Nãúu trong khäúi lãûnh
âoï coï lãûnh break thç seî thoaït ra khoíi cáu lãûnh switch. Khi biãøu thæïc coï giaï trë khaïc våïi táút caí
hàòng i thç seî thæûc hiãûn khäúi lãûnh n+1 (nãúu coï).
Khi biãøu thæïc bàòng våïi hàòng i, âãø sau khi thæûc hiãûn xong khäúi lãûnh i chæång trçnh seî
thoaït ra ngoaìi cáu lãûnh switch såïm hån ta coï thãø duìng lãûnh break. Ta cuîng coï thãø sæí duûng lãûnh
goto âãø nhaíy ra khoíi cáu lãûnh switch (ta khäng nãn duìng lãûnh goto).
Vê duû :
#include <stdio.h>
#include <conio.h>
main()
{
char ch;
printf(“\n Nhap 1 ki tu:”);
scanf(“%c”,&ch);
switch (ch)
{
case ‘A’ : printf(“\nChu A”);
break;
case ‘B’ : printf(“\nChu B”);
break;
case ‘C’ : printf(“\nChu C”);
break;
default : printf(“\nKhong phai cac chu A,B,C”);
}
getch();
return 0;
}
• Nhiãöu giaï trë case trong mäüt træåìng håüp :
Maïy seî tiãúp tuûc laìm viãûc khi chæa gàûp lãûnh thoaït, vç váûy ta coï thãø sàõp xãúp âãø coï nhiãöu
giaï trë case trong mäüt træåìng håüp
Vê duû :
#include <stdio.h>
#include <conio.h>
main()
{
int n;
printf(“Nhap diem:”);
scanf(“%d”,&n);
Trang 39
Chæång V : Caïc cáu lãûnh âiãöu khiãøn
switch (n)
{
case 0:
case 1:
case 2:
case 3:
case 4: printf(“loaûi keïm”);break;
case 5:
case 6: printf(“loaûi trung bçnh”);break;
case 7:
case 8: printf(“loaûi gioíi”);break;
default: printf(“loaûi gioíi”);
}
getch();
return 0;
}
Trong C++ ta coï thãø viãút nhæ sau :
#include <stdio.h>
#include <conio.h>
main()
{
int n;
printf(“Nhap diem:”);
scanf(“%d”,&n);
switch (n)
{
case 0,1,2,3,4: printf(“loaûi keïm”);break;
case 5,6: printf(“loaûi trung bçnh”);break;
case 7,8: printf(“loaûi gioíi”);break;
default: printf(“loaûi gioíi”);
}
getch();
return 0;
}
Ta nãn sæí duûng default cho duì khäng bao giåì xaíy ra træåìng håüp âoï: ta duìng default âãø
kiãøm tra xem coï thãø coï läùi hay khäng bàòng caïch âàût mäüt thäng baïo läùi åí âoï, tæì âoï ta dãù gåî räúi.
Trang 40
Chæång V : Caïc cáu lãûnh âiãöu khiãøn
F
Biãøu thæïc
âiãöu kiãûn
Trang 41
Chæång V : Caïc cáu lãûnh âiãöu khiãøn
int i,n,sohang,tong=0;
printf(“\nNhap n:”);
scanf(“%d”,&n);
printf(“\nNhap vao %d so nguyen :”,n);
for(i=1;i<=n;i++)
{
printf(“\nSo thu %d : ”,i);
scanf(“%d”,&sohang);
tong+=sohang;
}
printf(“\nTong = %d”,tong);
getch();
return 0;
}
Caïc biãøu thæïc trong ngoàûc vuäng coï thãø coï, coï thãø khäng nhæng caïc dáúu cháúm pháøy,
ngoàûc âån bàõt buäüc phaíi coï màût. Caïc biãøu thæïc cuìng loaûi âæåüc ngàn caïch nhau båíi dáúy pháøy.
Våïi C++ ta coï thãø khai baïo biãún taûm thåìi åí mäüt khäúi lãûnh {}. Trong voìng làûp for coï
thãø khai baïo biãún trong biãøu thæïc âáöu tiãn cuía biãøu thæïc khåíi taûo.
Khi biãøu thæïc 2 vàõng màût thç noï xem nhæ luän âuïng. Biãøu thæïc 2 coï thãø gäöm nhiãöu
biãøu thæïc nhæng tênh âuïng sai cuía noï laì tênh âuïng sai cuía biãøu thæïc cuäúi cuìng.
Âãø ra khoíi voìng làûp ta duìng caïc lãûnh break, goto hoàûc return trong thán chu trçnh.
Vê duû : voìng làûp for sau âáy khäng coï biãøu thæïc thay âäøi âiãöu kiãûn:
for(count=0;count<10;)
printf(“\n%d”,count++);
Tháûm chê ta coï thãø viãút voìng làûp for khäng coï caí ba biãøu thæïc trãn. Ta cuîng coï thãø taûo
voìng làûp for khäng coï cáu lãûnh naìo trong voìng làûp, moüi cäng viãûc âaî âæåüc thæûc hiãûn trong cáu
lãûnh for. Khi âoï cáu lãûnh räùng seî laì dáúu cháúm pháøy âæïng mäüt mçnh trãn mäüt doìng. Tuy nhiãn
ta khäng nãn laìm nhæ váûy.
Trang 42
Chæång V : Caïc cáu lãûnh âiãöu khiãøn
F
biãøu thæïc
cäng viãûc
Vê duû : Âãø âæa ra maìn hçnh caïc säú tæì 1 âãún 10, mäùi säú trãn mäüt doìng :
#include <stdio.h>
#include <conio.h>
main()
{
int i=1;
while ( i<=10)
{ printf(“\n%d”,i);
i++;
}
getch();
return 0;
}
ÅÍ âáy ta nhåï phaíi tàng giaï trë cuía biãún i vç nãúu khäng thç voìng làûp seî âæåüc thæûc hiãûn
maîi maîi vç luïc naìo âiãöu kiãûn cuîng âæåüc thoía maîn.
Trang 43
Chæång V : Caïc cáu lãûnh âiãöu khiãøn
Vê duû :
#include <stdio.h>
#include <conio.h>
main()
{
int n,tong=0,i=1;
while ( i<=10)
{ printf(“\nNhap so thu %d : ”,i);
scanf(“%d”,&n);
tong+=n;
i++;
}
printf(“\nTong la : %d”,tong);
getch();
return 0;
}
Vê duû :
#include <stdio.h>
#include <conio.h>
main()
{
int n,i=1;
long luythua=1;
printf(“\nNhap n:”);
scanf(“%d”,&n);
while ( i<=10)
{ luythua*=n;
i++;
}
printf(“\n%d luy thua 10 = : %ld”,n,luythua);
getch();
return 0;
}
Vê duû : kiãøm tra säú nguyãn n coï phaíi laì säú nguyãn täú khäng
int k=2;
while (n%k && k*k<=n) k++;
if(k*k>n) printf(“\nDay la so nguyen to”);
Trang 44
Chæång V : Caïc cáu lãûnh âiãöu khiãøn
cäng viãûc
biãøu thæïc
T
Trang 45
Chæång V : Caïc cáu lãûnh âiãöu khiãøn
Vê duû : Âãø âæa ra maìn hçnh caïc säú tæì 1 âãún 10, mäùi säú trãn mäüt doìng :
#include <stdio.h>
#include <conio.h>
main()
{
int i=1;
do
{ printf(“\n%d”,i);
i++;
}
while ( i<=10);
getch();
return 0;
}
Vê duû :
#include <stdio.h>
#include <conio.h>
main()
{
int n;
do
{ printf(“\nNhap mot so duong : ”);
scanf(“%d”,&n);
printf(“\nBan da nhap so : %d ”,n);
}
while ( n<=0) ;
printf(“\nDung so duong roi ! ”);
getch();
return 0;
}
Trang 46
Chæång V : Caïc cáu lãûnh âiãöu khiãøn
VI. Caïc lãûnh reî nhaïnh khäng âiãöu kiãûn : break, continue, goto :
VI.1. Lãûnh break, continue:
Lãûnh break coï taïc duûng kãút thuïc toaïn tæí âiãöu khiãøn âang thæûc hiãûn. Lãûnh break âæåüc sæí
duûng trong caïc voìng làûp, khi gàûp lãûnh naìy maïy seî thoaït ra khoíi voìng làûp. Træåìng håüp caïc
voìng làûp läöng nhau thç khi gàûp lãûnh break, maïy seî thoaït ra khoíi voìng làûp trong cuìng nháút.
Traïi våïi lãûnh break, continue duìng âãø bàõt âáöu mäüt voìng måïi cuía chu trçnh maì khäng
thæûc hiãûn pháön coìn laûi cuía chu trçnh. Khi gàûp lãûnh continue bãn trong thán chu trçnh cuía voìng
làûp for, maïy seî chuyãøn tåïi bæåïc thæûc hiãûn biãøu thæïc thay âäøi âiãöu kiãûn. Khi gàûp lãûnh continue
bãn trong thán chu trçnh cuía voìng làûp while, do...while , maïy seî chuyãøn tåïi bæåïc kiãøm tra biãøu
thæïc âiãöu kiãûn.
Vê duû : Duìng lãûnh break âãø thoaït ra khoíi voìng làûp såïm.
#include <stdio.h>
#include <conio.h>
main()
{
int i;
for(i=1;i<10;i++)
{ printf(“\n%d”,i);
if (i==3) break;
}
getch();
return 0;
}
Biãún i chaûy tæì 1 âãún 9 nhæng khi i bàòng 3 thç gàûp lãûnh break nãn chæång trçnh chè hiãøn
thë ra maìn hçnh 3 säú 1,2,3.
Vê duû : Duìng lãûnh continue.
#include <stdio.h>
#include <conio.h>
main()
{
int i;
for(i=1;i<10;i++)
{ printf(“\n%d”,i);
if (i!=3) continue;
printf(“ Day la so 3”);
}
getch();
return 0;
}
Chæång trçnh seî hiãøn thë caïc säú tæì 1 âãún 9, mäùi säú trãn mäüt doìng. Khi i khaïc 3 thç maïy
seî chuyãøn tåïi kiãøm tra tiãúp, khi i bàòng 3 thç seî hiãøn thë thãm doìng chæî “Day la so 3”.
Trang 47
Chæång V : Caïc cáu lãûnh âiãöu khiãøn
Chuï yï :
• Cáu lãûnh goto vaì nhaîn phaíi nàòm trong cuìng mäüt haìm, khäng thãø nhaíy tæì haìm
naìy sang haìm khaïc.
• Khäng cho pheïp sæí duûng goto âãø nhaíy tæì ngoaìi vaìo trong khäúi lãûnh, thæåìng laì
nhaíy tæì trong khäúi lãûnh ra ngoaìi.
Ta nãn haûn chãú sæí duûng lãûnh naìy âãún mæïc täúi âa, chè duìng trong nhæîng træåìng håüp tháût
cáön thiãút bàòng caïch sæí duûng caïc lãûnh âiãöu khiãøn khaïc vç viãûc âiãöu khiãøn dãù bë räúi.
Trang 48
Chæång V : Caïc cáu lãûnh âiãöu khiãøn
Vê duû : Kiãøm tra xem maíng n pháön tæí coï âäúi xæïng khäng ?
Caïch 1 :
dx=1;
for(i=0,j=n-1;i<j;i++,j--)
{ if (mang[i]==mang[j])
continue;
dx=0;
break;
}
Caïch 2 :
i=0;j=n-1;
while ((i<j)&&(mang[i]==mang[j]))
{ i++;j--;
}
if (i<j) dx1=0;
else dx1=1;
Trang 49
Chæång V : Caïc cáu lãûnh âiãöu khiãøn
11. Nháûp säú nguyãn k, a vaì b. Tênh hoàûc âãúm xem coï bao nhiãu bäüi säú cuía k trong khoaíng
[a,b].
12. Tênh n! sæí duûng caïc voìng làûp for, do...while, while.
1.3.5.....n nãúu n leí
13. Tênh n!! =
2.4.6.....n nãúu n chàôn
14. Tênh âa thæïc báûc n biãút n, maíng caïc hãû säú, biãún x.
15. Sæí duûng caïc voìng làûp âãø tênh caïc haìm sin, cos, tan, exp, lg,... theo khai triãøn Taylor våïi
âäü chênh xaïc ε=1e-6.
∞
(− 1)n +1
16. Nháûp n vaì tênh ∑
n =1 n
våïi âäü chênh xaïc ε=1e-6.
∫e ∫e
− x2 − x2
25. Tênh têch phán dx , dx
0 0
26. Viãút chæång trçnh nháûp säú nguyãn dæång n vaì tênh täøng caïc chæî säú cuía noï.
27. Kiãøm tra säú nguyãn n coï bàòng täøng láûp phæång caïc chæî säú cuía noï khäng .
28. Tçm säú coï 3 chæî säú sao cho säú âoï bàòng täøng caïc æåïc säú thæûc sæû cuía noï.
Vd : 6 = 1 + 2 + 3.
29. Tçm säú låïn nháút, nhoí nháút coï 3 chæî säú sao cho täøng 3 chæî säú bàòng têch cuía chuïng.
Trang 50
Chæång VI : Haìm, maíng vaì con troí
I.2. Haìm :
Haìm laì mäüt âoaûn maî âäüc láûp thæûc hiãûn mäüt cäng viãûc nháút âënh khi âæåüc goüi âãún. Haìm
coï thãø coï hoàûc khäng traí vãö mäüt giaï trë åí tãn cuía noï (giaï trë traí vãö).
Ta coï thãø xem haìm nhæ laì mäüt häüp âen : noï coï thãø nháûn mäüt/nhiãöu giaï trë âáöu vaìo vaì
coï thãø cho ra mäüt giaï trë thuäüc kiãøu naìo âoï. Nãúu haìm khäng nháûn giaï trë âáöu vaìo hoàûc khäng
coï giaï trë âáöu ra thç ta sæí duûng tæì khoïa void. Caïc biãún hoàûc biãøu thæïc cung cáúp giaï trë vaìo cho
haìm goüi laì âäúi säú. Haìm coï thãø thay âäøi caïc âäúi säú cuía noï.
Caïc haìm khäng âæåüc läöng vaìo nhau (khäng khai baïo 1 haìm bãn trong haìm khaïc)
nhæng mäüt haìm coï thãø goüi mäüt haìm khaïc.
Chæång trçnh coï thãø coï nhiãöu haìm. Haìm main âæåüc goüi âáöu tiãn
Vê duû : tênh diãûn têch hçnh chæî nháût biãút chiãöu daìi vaì chiãöu räüng coï sæí duûng haìm :
#include <stdio.h>
#include <conio.h>
Trang 51
Chæång VI : Haìm, maíng vaì con troí
Trang 52
Chæång VI : Haìm, maíng vaì con troí
Tãn haìm âæåüc âàût theo caïc quy tàõc âàût tãn cuía biãún.
Trong pháön khai baïo nguyãn máùu haìm khäng cáön phaíi âàût tãn cho tham säú. Theo vê duû
trãn ta coï thãø viãút : int tich(int, int);
Trang 53
Chæång VI : Haìm, maíng vaì con troí
Trang 54
Chæång VI : Haìm, maíng vaì con troí
{ int x=2;
int y=3;
hoanvi(&x,&y);
printf(“\nx=%d,y=%d”,x,y);
getch();
return 0;
}
void hoanvi(int *px,int *py)
{ int tam;
tam=*px;
*px=*py;
*py=tam;
}
Trang 55
Chæång VI : Haìm, maíng vaì con troí
ham2()
{.......
}
biãún z coï taïc duûng âäúi våïi ham1 vaì ham2, biãún x coï taïc duìng âäúi våïi caí 3 haìm, biãún y
chè coï taïc duûng âäúi våïi haìm main().
Caïc biãún cuûc bäü trong khäúi lãûnh:
Ta coï thãø khai baïo caïc biãún åí ngay âáöu khäúi lãûnh, caïc biãún naìy laì biãún cuûc bäü.
Khi maïy bàõt âáöu laìm viãûc våïi 1 khäúi lãûnh thç caïc biãún vaì caïc maíng khai baïo bãn trong
khäúi lãûnh âoï måïi âæåüc hçnh thaình vaì âæåüc cáúp phaït bäü nhåï. Caïc biãún naìy chè täön taûi trong thåìi
gian maïy laìm viãûc våïi khäúi lãûnh vaì chuïng seî âæåüc giaíi phoïng khi kãút thuïc khäúi lãûnh. Vç váûy :
• Giaï trë cuía biãún hoàûc maíng khai baïo bãn trong khäúi lãûnh khäng thãø âæa ra sæí duûng
bãn ngoaìi khäúi lãûnh âoï.
• ÅÍ ngoaìi khäúi lãûnh khäng thãø can thiãûp caïc biãún vaì maíng khai baïo trong khäúi lãûnh.
• ÅÍ trong khäúi lãûnh coï thãø sæí duûng biãún khai baïo ngoaìi khäúi lãûnh nãúu biãún âoï khäng
truìng tãn våïi caïc biãún khai baïo trong khäúi lãûnh.
Trang 56
Chæång VI : Haìm, maíng vaì con troí
Kãút quaí :
Lan goi thu 0 : x = 0 , y = 0
Lan goi thu 1 : x = 1 , y = 0
Lan goi thu 2 : x = 2 , y = 0
Lan goi thu 3 : x = 3 , y = 0
Cáu lãûnh static int x; chè âæåüc thæûc hiãûn khi biãn dëch, khi ham() âæåüc goüi láön âáöu tiãn
noï cuîng khäng âæåüc thæûc hiãûn. Cáu lãûnh int y=0 luän âæåüc thæûc hiãûn mäùi khi goüi haìm.
Vaì theo vê duû trãn ta tháúy caïc biãún âëa phæång ténh âæåüc khåíi taûo giaï trë âáöu bàòng 0 khi
duìng láön âáöu (nãúu ta khäng khåíi taûo).
Nãúu chæång trçnh âæåüc viãút trãn nhiãöu file vaì biãún a âæåüc khai baïo åí ngoaìi caïc haìm
nhæ sau: static int a; thç biãún a chè âæåüc biãút âãún trong modul hiãûn taûi, khäng âæåüc biãút âãún
trong caïc modul khaïc.
• Biãún âëa phæång thanh ghi : register int x;
Duìng âãø yãu cáöu trçnh biãn dëch nãúu coï thãø thç âàût biãún âoï vaìo thanh ghi thay vç âàût
vaìo mäüt ä nhåï thäng thæåìng. Khi âoï ta coï thãø truy xuáút âãún biãún naìy ráút nhanh choïng. Ta
thæåìng sæí duûng caïch khai baïo naìy våïi caïc biãún âãúm cuía voìng làûp. Nãúu trçnh biãn dëch khäng
thãø cáúp phaït åí register thç biãún âoï laì auto.
Tæì khoïa register khäng âæåüc duìng våïi caïc biãún ténh hay biãún ngoaìi. Ta khäng thãø âënh
nghéa mäüt con troí tåïi biãún thanh ghi.
Trang 57
Chæång VI : Haìm, maíng vaì con troí
I.11. Macro:
Macro laì mäüt táûp håüp lãûnh vaì biãøu thæïc âæåüc âaûi diãûn bàòng mäüt tãn goüi laì tãn_macro.
Bäü tiãön xæí lê khi gàûp caïc tãn_macro seî thay thãú noï bàòng táûp lãûnh tæång æïng. Nãúu gàûp
tãn_macro trong caïc xáu kê tæû thç bäü tiãön xæí lê seî khäng thay thãú.
Máùu : #define tãn_macro daîy_vàn_baín
Vê duû : #define cube(y) ((y)*(y)*(y))
Khäng âæåüc viãút #define cube (y) ((y)*(y)*(y))
Trang 58
Chæång VI : Haìm, maíng vaì con troí
I.12. Mäüt säú haìm vaì macro thäng duûng trong stdlib.h vaì time.h:
Macro random(n) cho mäüt säú nguyãn ngáùu nhiãn trong khoaíng tæì 0 âãún (n-1)
Haìm rand() cho säú nguyãn ngáùu nhiãn trong khoaíng tæì 0 âãún 32767
Macro randomize() khåíi âäüng bäü taûo säú ngáùu nhiãn cáön âæåüc goüi âãún khi muäún sæí
duûng random() vaì rand()
Vê duû :
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
void main()
{
int i;
printf(“\nChon mot so tu 0 den 99: “);
scanf(“%d”,&i);
randomize();
Trang 59
Chæång VI : Haìm, maíng vaì con troí
if(i==random(100))
printf(“\nBan da trung doc dac!!!”);
getch();
}
II. Maíng:
Mäüt maíng dæî liãûu gäöm mäüt säú hæîu haûn caïc pháön tæí cuìng kiãøu. Säú læåüng caïc pháön tæí
cuía maíng âæåüc xaïc âënh khi khai baïo.
Mäùi pháön tæí cuía maíng âæåüc truy cáûp træûc tiãúp qua tãn maíng vaì chè säú vë trê âàût giæîa
càûp ngoàûc vuäng []. Caïc pháön tæí cuía maíng âæåüc âaïnh chè säú vë trê tæì 0 tråí âi. Khi chè säú væåüt
ra ngoaìi kêch thæåïc cuía maíng, C váùn khäng baïo läùi nhæng seî truy cáûp âãún vuìng nhåï bãn ngoaìi
vaì coï thãø laìm hoíng chæång trçnh.
Trang 60
Chæång VI : Haìm, maíng vaì con troí
Caïc pháön tæí cuía maíng âæåüc truy cáûp bçnh thæåìng thäng qua chè säú cuía pháön tæí âoï. Âãø
truy cáûp âãún pháön tæí thæï i cuía maíng M ta duìng cuï phaïp nhæ sau : M[i]
Chæång trçnh khäng kiãøm tra liãûu ta coï truy cáûp ra ngoaìi maíng hay khäng.
Vê duû : Nháûp vaì hiãøn thë caïc giaï trë cuía maíng tæì baìn phêm :
#include <stdio.h>
#define n 5
void main()
{
int i,mang[n];
for(i=0;i<n;i++)
{
printf(“\nx[%d]=”,i);
scanf(“%d”,&mang[i]);
}
printf(“\nMang gom cac phan tu :\n”);
for(i=0;i<n;i++)
printf(“\nx[%d]=%d”,i,mang[i]);
}
Trang 61
Chæång VI : Haìm, maíng vaì con troí
• Sàõp xãúp :
Thay âäøi vë trê cuía caïc pháön tæí trong maíng âãø chuïng tuán theo mäüt tráût tæû naìo âoï.
Phæång phaïp sàõp xãúp näøi boüt:
Sàõp xãúp theo thæï tæû tàng dáön: Âáöu tiãn âem pháön tæí thæï nháút láön læåüt so saïnh våïi caïc
pháön tæí tiãúp theo, nãúu noï låïn hån thç âäøi chäù 2 pháön tæí âæåüc so saïnh. Sau læåüt âáöu, pháön tæí thæï
nháút giæî giaï trë nhoí nháút. Tiãúp tuûc voìng hai, âem pháön tæí thæï 2 so saïnh våïi caïc pháön tæí sau
noï.....
Vê duû : Sàõp xãúp caïc pháön tæí cuía maíng tæì nhoí âãún låïn
#include <stdio.h>
#include <conio.h>
#define n 5
void main()
{
int i,j,mang[n],tam;
for(i=0;i<n;i++)
{
printf(“\nx[%d]=”,i);
scanf(“%d”,&mang[i]);
}
printf(“\nMang chua sap xep:\n”);
for(i=0;i<n;i++)
printf(“ x[%d]=%3d”,i,mang[i]);
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if (mang[i]>mang[j])
{
tam=mang[i];
mang[i]=mang[j];
mang[j]=tam;
}
printf(“\nMang da sap xep:\n”);
for(i=0;i<n;i++)
printf(“ x[%d]=%3d”,i,mang[i]);
getch();
}
Trang 62
Chæång VI : Haìm, maíng vaì con troí
Viãûc gaïn caïc giaï trë vaìo caïc pháön tæí cuía maíng cuîng nhæ maíng mäüt chiãöu:
x[3][4]=6;
Khåíi taûo maíng 2 chiãöu :
int x[5][3]= { { 1,2,3 },
{ 2,3,4 },
......
};
Ta coï thãø taûo ra caïc maíng 3 chiãöu, 4 chiãöu,...... :
int x[5][3][7];
int y[5][6][8][3];
Âãø truy cáûp âãún pháön tæí coï chè säú (i,j) cuía ma tráûn M ta duìng M[i][j].
Vê duû : chæång trçnh nhán hai ma tráûn Am*n vaì Bn*p :
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10
main()
{
int i,j,k,m,n,p;
int a[MAX][MAX],b[MAX][MAX],c[MAX][MAX];
printf("\nNhap vao 3 so m,n,p:");
scanf("%d%d%d",&m,&n,&p);
printf("\n");
randomize();
for (i=0;i<m;i++)
for (j=0;j<n;j++)
a[i][j]=random(100);
for (i=0;i<n;i++)
for (j=0;j<p;j++)
b[i][j]=random(100);
for (i=0;i<m;i++)
for (j=0;j<p;j++)
{ c[i][j]=0;
for (k=0;k<n;k++)
c[i][j]=c[i][j]+a[i][k]*b[k][j];
}
for (i=0;i<m;i++)
{ for (j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
Trang 63
Chæång VI : Haìm, maíng vaì con troí
printf("\n\n");
for (i=0;i<n;i++)
{ for (j=0;j<p;j++)
printf("%4d",b[i][j]);
printf("\n");
}
printf("\n\n");
for (i=0;i<m;i++)
{ for (j=0;j<p;j++)
printf("%6d",c[i][j]);
printf("\n");
}
getch();
return 0;
}
Trong chæång trçnh trãn, ta khäng sæí duûng haìm vç âäúi våïi maíng nhiãöu chiãöu, ta khäng
truyãön nhæ maíng mäüt chiãöu âæåüc. Âãø coï thãø sæí duûng haìm, ta phaíi duìng con troí.
Trang 64
Chæång VI : Haìm, maíng vaì con troí
Trang 65
Chæång VI : Haìm, maíng vaì con troí
Vê duû :
#include <stdio.h>
void hoanvi(int *px,int *py)
{ int tam;
tam=*px;
*px=*py;
*py=tam;
}
void main()
{ int x=2;
int y=3;
hoanvi(&x,&y);
printf(“\nx=%d,y=%d”,x,y);
}
Do ta chè coï thãø truyãön giaï trë cho haìm nãn ta phaíi sæí duûng con troí. Con troí px troí âãún
biãún x, py troí âãún biãún y nãn khi ta hoaïn vë *px vaì *py thç x vaì y seî hoaïn vë giaï trë cho nhau.
Vê duû :
#include <stdio.h>
#include <conio.h>
void ham(int x,int y,int *sum,int *product)
{
*sum=x+y;
*product=x*y;
}
main()
{
int x=2,y=3,tong,tich;
ham(x,y,&tong,&tich);
printf("\n x=%d",x);
printf("\n y=%d",y);
printf("\n tong=%d",tong);
printf("\n tich=%d",tich);
getch();
return 0;
}
Qua vê duû trãn ta tháúy ràòng caïc giaï trë âáöu vaìo thç ta khai baïo biãún bçnh thæåìng, caïc giaï
trë âáöu ra thç ta sæí duûng con troí vç ta cáön phaíi thay âäøi giaï trë cuía chuïng.
Vê duû : haìm printf duìng biãún thæåìng, haìm scanf duìng biãún con troí.
Tæång tæû nhæ trãn ta coï thãø viãút haìm giaíi phæång trçnh báûc 2, giaï trë traí vãö tuìy theo
viãûc phæång trçnh coï nghiãûm hay khäng, giaï trë âáöu ra laì caïc nghiãûm (nãúu coï).
Trang 66
Chæång VI : Haìm, maíng vaì con troí
#include <stdio.h>
#include <math.h>
int ptb2(float, float, float, float *, float *);
void main()
{ float a,b,c,x1,x2;
int tam;
clrscr();
printf("Nhap gia tri a,b,c:");
scanf("%f %f %f", &a, &b, &c);
tam=ptb2(a,b,c,&x1,&x2);
switch(tam)
{ case 0 : printf("\nPhuong trinh vo nghiem");
break;
case 1 : printf("\nPhuong trinh co 1 nghiem : %f",x1);
break;
case 2 : printf("\nPhuong trinh co 2 nghiem : \n x1= %f \n x2= %f",x1,x2);
break;
case 3 : printf("\nPhuong trinh vo so nghiem");
}
}
int ptb2(float a, float b, float c, float *nghiem1, float *nghiem2)
{ float delta;
if(a==0)
if(b==0)
if(c==0) return 3;
else return 0;
else { *nghiem1=-c/b;
return 1;
}
else { delta=b*b-4*a*c;
if (delta<0.0)
return 0;
else if (delta==0.0)
{ *nghiem1=-b/(2*a);
return 1;
}
else { *nghiem1=(-b+sqrt(delta))/(2*a);
*nghiem2=(-b-sqrt(delta))/(2*a);
return 2;
}
}
}
Trang 67
Chæång VI : Haìm, maíng vaì con troí
const int *p; : con troí âãún 1 biãún nguyãn hàòng : khäng thãø thay âäøi giaï trë cuía biãún âoï.
int* const p; : con troí hàòng âãún 1 biãún nguyãn : khäng thãø gaïn con troí âãún biãún khaïc.
const int* const p; : con troí hàòng âãún 1 biãún nguyãn hàòng.
Säú hoüc con troí: pheïp tàng / giaím con troí laìm cho giaï trë cuía noï tàng / giaím mäüt læåüng
bàòng säú byte nhåï maì biãún âæåüc noï troí tåïi chiãúm trong bäü nhåï. Tæì âoï, nãúu ta khai baïo maíng a
coï 10 pháön tæí thç : a=&a[0]; a+1 = &a[1]; ... a+i = &a[i] våïi i tæì 0 âãún 9.
Vê duû : p=a; khi âoï âãø truy cáûp a[i] ta coï thãø duìng *(p+i) hoàûc p[i] hoàûc a[i].
Khi tàng / giaím con troí p thç p seî troí âãún pháön tæí sau / træåïc so våïi pháön tæí ban âáöu.
Nãúu ptr1 vaì ptr2 laì 2 con troí troí âãún 2 pháön tæí cuía cuìng 1 maíng thç hiãûu ptr1 - ptr2 cho
ta biãút khoaíng caïch giæîa 2 pháön tæí âoï trong maíng. Pheïp træì giæîa 2 con troí chè coï yï nghéa khi 2
con troí cuìng troí âãún 2 pháön tæí trong mäüt maíng.
Ngoaìi viãûc truy cáûp pháön tæí maíng bàòng chè säú, viãûc truy cáûp giaïn tiãúp qua con troí thç
chæång trçnh chaûy nhanh hån.
Vê duû sai : Xuáút caïc pháön tæí cuía mäüt biãún maíng
int a[10],i;
for(i=0; i<10; i++)
{ printf(“%d \n”, *a);
a++;
}
Trang 68
Chæång VI : Haìm, maíng vaì con troí
Khi duìng biãún con troí p âãø duyãût caïc pháön tæí cuía maíng, chuïng ta coï thãø tçm chè säú i
thäng qua biãøu thæïc i = p - a ;
Khi ta truyãön maíng cho haìm nhæng khäng muäún thay âäøi giaï trë cuía maíng thç ta khai
baïo âáöu maíng våïi tæì khoaï “const”.
Vê duû : Nháûp mäüt maíng caïc säú nguyãn vaì sàõp xãúp maíng theo thæï tæû tàng dáön.
#include <stdio.h>
#include <conio.h>
#define N 20;
viod nhap(int *), sapxep(int *), xuat(const int *);
void main()
{
int a[N];
nhap(a); xuat(a); sapxep(a); xuat(a);
}
void nhap(int *x)
{
clrscr();
for(char i=0; i<N; i++) {
Trang 69
Chæång VI : Haìm, maíng vaì con troí
printf(“x[%d]=”,i);
scanf(“%d”,&x[i]);
}
}
void sapxep(int *x)
{ char i, j;
int tam;
for(i=0; i<N-1; i++)
for(j=0; j<N; j++)
if (x[i]>x[j]) { tam=x[i];
x[i]=a[j];
x[j]=tam;
}
}
void xuat(const int *x)
{ clrscr();
for(int i=0; i<N; i++)
printf(“\n x[%d]=%d”, i, x[i]);
getch();
}
Trang 70
Chæång VI : Haìm, maíng vaì con troí
Trang 71
Chæång VI : Haìm, maíng vaì con troí
- char *ecvt(double value, int ndig, int *dec, int *sign) : chuyãøn säú thæûc thaình xáu
- char *fcvt(double value, int ndig, int *dec, int *sign) : chuyãøn säú thæûc thaình xáu
Vê duû :
#include <stdio.h>
void main()
{
float a[4][6];
int i,j;
for (i=0;i<4;i++)
for (j=0;j<6;j++)
scanf(“%f”,&a[i][j]);
}
Khi chaûy chæång trçnh trãn maïy seî baïo läùi. Ta coï thãø duìng cáu lãûnh scanf bàòng caïch sæí
duûng biãún trung gian:
#include <stdio.h>
void main()
{
float tam,a[4][6];
int i,j;
for (i=0;i<4;i++)
for (j=0;j<6;j++)
{
scanf(“%f”,&x);
a[i][j]=x;
}
}
Caïc pháön tæí trong maíng 2 chiãöu âæåüc sàõp xãúp nhæ sau : caïc pháön tæí cuía haìng âáöu tiãn,
sau âoï âãún caïc pháön tæí haìng kãú tiãúp,...... Nhæ váûy ta coï:
int *pa,a[4][6];
pa=(int *)a; // pheïp eïp kiãøu
thç pa troí tåïi a[0][0]
pa + 1 troí tåïi a[0][1]
pa + 2 troí tåïi a[0][2]
........
pa + i*6 + j troí tåïi a[i][[j]
Trang 72
Chæång VI : Haìm, maíng vaì con troí
Trang 73
Chæång VI : Haìm, maíng vaì con troí
Trang 74
Chæång VI : Haìm, maíng vaì con troí
Trang 75
Chæång VI : Haìm, maíng vaì con troí
Ta truyãön maíng 3,4 chiãöu cho maíng theo caïch tæång tæû.
Vê duû : maíng 3 chiãöu a[m][n][p] ta duìng 3 tham säú :
float *pa;
int n,p;
pa=(float *)a;
Trong thán haìm, âãø truy cáûp pháön tæí a[i][j][k] ta duìng *(pa+ i*n*p + j*p + k).
Ta thæåìng duìng maíng con troí khi xæí lyï caïc xáu kê tæû.
Trang 76
Chæång VI : Haìm, maíng vaì con troí
Caïc pheïp tàng giaím âëa chè, truy cáûp bäü nhåï vaì so saïnh khäng âæåüc duìng våïi con troí
kiãøu void.
Con troí kiãøu void thæåìng âæåüc duìng laìm tham säú âãø nháûn báút kç âëa chè kiãøu naìo tæì âäúi
säú. Trong thán haìm phaíi sæí duûng pheïp eïp kiãøu.
Vê duû : Nháûp ma tráûn m*n vaì hiãøn thë ma tráûn chuyãøn vë n*m
#include <stdio.h>
void nhap(int *a,int N,int m,int n);
void chuyenvi(void *a,void *b,int N,int m,int n);
void hienthi(int *a,int N,int m,int n);
void main()
{ int m,n; /* ma tran kich thuoc m*n */
int a[10][10],b[10][10];
printf("\nNhap m,n:");
scanf("%d%d",&m,&n);
nhap((int *)a,10,m,n); /* a la ma tran m*n */
printf("\n\n");
hienthi((int *)a,10,m,n);
chuyenvi(a,b,10,m,n); /* b la ma tran n*m */
hienthi((int *)b,10,n,m);
}
void nhap(int *a,int N,int m,int n)
{
int i,j;
clrscr();
printf("\nNhap vao cac phan tu cua mang:");
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{ gotoxy(10*j+3,i+3);
printf("a[%d][%d]=",i,j);
scanf("%d",a+i*N+j);
}
}
void chuyenvi(void *a,void *b,int N,int m,int n)
{
int i,j;
int *pa,*pb;
pa=(int *)a;
pb=(int *)b;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
*(pb+j*N+i)=*(pa+i*N+j);
}
Trang 77
Chæång VI : Haìm, maíng vaì con troí
Cáúp phaït bäü nhåï duìng cho maíng 2 chiãöu m*n pháön tæí :
Trang 78
Chæång VI : Haìm, maíng vaì con troí
#include <stdio.h>
#include <alloc.h>
void main()
{ int **a , m, n, OK, i, j;
printf("\nNhap m = " );scanf("%d",&m);
printf("\nNhap n = " );scanf("%d",&n);
a=(int**)malloc(m*sizeof(int*));
if (a!=NULL ) /*Cap phat thanh cong */
{ OK = 1 ;
for(i=0;i<m;i++) /* gia tri ban dau cho bien con tro*/
a[i] = NULL;//(int*) ;
for(i=0;(i<m)&&OK;i++)
{ a[i]=(int*)malloc(n*sizeof(int));
if(a[i]==NULL)
OK = 0 ;
}
if(OK) //su dung a[0][0] , a[0][1]....., a[i][j] ...., a[m][n]
{ clrscr();
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{ gotoxy(10*j+3,i+3);
printf("a[%d][%d]=",i,j);
scanf("%d",&a[i][j]);
}
printf("\n\n");
for(i=0;i<m;i++)
{ for(j=0;j<n;j++)
printf("a[%d][%d]=%d",i,j,a[i][j]);
printf("\n");
}
}
}
/* giai phong vung nho cap phat */
if(a!=NULL)
{ for(i=0;i<m;i++)
if(a[i]!=NULL)
free(a[i]);
free(a);
}
}
Trang 79
Chæång VI : Haìm, maíng vaì con troí
Khi xem maíng 2 chiãöu laì maíng 1 chiãöu, ta coï thãø khai baïo :
a = (int*) malloc ( m*n * size of ( int ));
vaì a[i][j] = a[ i*N + j]*/
#include <stdio.h>
#include <alloc.h>
#include <conio.h>
void main()
{ int *a , m, n, OK, i, j;
printf("\nNhap m = " );scanf("%d",&m);
printf("\nNhap n = " );scanf("%d",&n);
a=(int*)malloc(m*n*sizeof(int));
if (a!=NULL ) /*Cap phat thanh cong */
{ clrscr();
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{ gotoxy(10*j+3,i+3);
printf("a[%d][%d]=",i,j);
scanf("%d",a+i*n+j);
}
printf("\n\n");
for(i=0;i<m;i++)
{ for(j=0;j<n;j++)
printf("a[%d][%d]=%d",i,j,a[i*n+j]);
printf("\n");
}
free(a);
}
getch();
}
Haìm calloc :
• Máùu : void *calloc(size_t nitems, size_t size);
• Cäng duûng : cáúp phaït mäüt khäúi nhåï kêch thæåïc nitems*size byte vaì xoïa vãö 0. Âãø
cáúp phaït khäúi nhåï låïn hån 64K, duìng farcalloc.
• Giaï trë traí vãö : Nãúu thaình cäng, haìm traí vãö con troí troí âãún khäúi nhåï væìa cáúp phaït.
Nãúu läùi (khäng âuí bäü nhåï) thç traí vãö NULL.
Vê duû :
#include <stdio.h>
#include <alloc.h>
#include <string.h>
int main()
{ char *str = NULL;
Trang 80
Chæång VI : Haìm, maíng vaì con troí
Haìm realloc :
• Máùu : void *realloc(void *block, size_t size);
• Cäng duûng : âiãöu chènh kêch thæåïc cuía khäúi nhåï âaî cáúp phaït block thaình size byte,
copy näüi dung tåïi vë trê måïi nãúu cáön thiãút. Khäúi nhåï block træåïc âáy âaî âæåüc cáúp phaït nhåì caïc
haìm malloc, calloc hoàûc chênh baín thán haìm realloc.
• Giaï trë traí vãö : Nãúu thaình cäng, haìm traí vãö âëa chè cuía khäúi nhåï måïi âæåüc cáúp phaït
laûi, âëa chè naìy coï thãø khaïc våïi âëa chè ban âáöu. Nãúu läùi (khäng âuí bäü nhåï, cáúp phaït laûi khäng
âæåüc) thç traí vãö NULL.
Haìm giæî nguyãn säú liãûu tæì pháön tæí âáöu tiãn âãún pháön tæí coï chè säú laì min(new_size,
old_size) -1. Haìm khäng thiãút láûp giaï trë cho caïc ä nhåï måïi. Khi giaï trë traí vãö laì 0, khäúi nhåï cuî
coï thãø bë máút giaï trë.
realloc(NULL, 5 * sizeof(int)); tæång âæång malloc(5 * sizeof(int));
free(ptr); tæång âæång realloc(ptr,0);
Vê duû:
#include <stdio.h>
#include <alloc.h>
#include <string.h>
void main(void)
{ char *str;
str = (char *) malloc(10);
strcpy(str, "Hello");
printf("String is %s\n Address is %p\n", str, str);
str = (char *) realloc(str, 20);
printf("String is %s\n New address is %p\n", str, str);
free(str);
}
Chuï yï: Ta nãn kiãøm tra giaï trë traí vãö cuía caïc haìm trãn træåïc khi laìm viãûc våïi khäúi nhåï
væìa âæåüc cáúp phaït. Caïc haìm malloc, calloc, realloc cáúp phaït bäü nhåï åí heap.
Trang 81
Chæång VI : Haìm, maíng vaì con troí
Vê duû : chæång trçnh sàõp xãúp caïc âäúi säú doìng lãûnh theo thæï tæû tàng dáön :
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
main(int n,char *ds[])
{
int i,j,tam;
Trang 82
Chæång VI : Haìm, maíng vaì con troí
int a[10];
if(n>1)
{ for(i=1;i<n;i++)
a[i]=atoi(ds[i]);
for(i=1;i<n-1;i++)
for(j=i+1;j<n;j++)
if (a[i]>a[j])
{
tam=a[i];
a[i]=a[j];
a[j]=tam;
}
printf(“\nDanh sach cac tham so da sap xep:\n”);
for(i=1;i<n;i++)
printf(“ a[%d]=%3d”,i,a[i]);
}
getch();
return 0;
}
Ta læu tãn cuía chæång trçnh laì sapxep.c. Sau âoï ta dëch thaình file sapxep.exe
Khi ta chaûy : sapxep.exe 2 5 3 6 8 1 thç seî coï kãút quaí:
Danh sach cac tham so da sap xep:
^^^a[1]= ^^1^^^a[2]=^^2^^^a[3]=^^3^^^a[4]=^^5^^^a[5]=^^6^^^a[6]=^^8
Vê duû :
#include <stdio.h>
#include <conio.h>
main(int n,char *argv[],char *env[])
{
int i,j;
for(i=0;env[i]!=NULL;i++)
printf("\n %s",env[i]);
for(i=1;i<n;i++)
printf("\n argv[%d] : %s",i,argv[i]);
getch();
return 0;
}
Ta læu file vaì chaûy chæång trçnh giäúng nhæ vê duû trãn.
Trang 83
Chæång VI : Haìm, maíng vaì con troí
2. Tênh pháön tæí thæï n theo cäng thæïc truy häöi (duìng âãû qui vaì khäng âãû qui) :
a. pháön tæí Fibonaci F1 = F2 = 1;
Fn = Fn-1 + Fn-2 våïi n > 2.
b. càn báûc hai cuía x våïi âäü chênh xaïc ε=1e-6.
1 a
F1 = 1; Fn = * Fn −1 + ;
2 Fn −1
x = lim Fn .
n → +∞
Trang 84
Chæång VI : Haìm, maíng vaì con troí
- Tênh täøng caïc pháön tæí a[i][[j] maì i+j chia hãút cho 5.
- Tçm min, max trãn tæìng haìng, tæìng cäüt vaì toaìn bäü ma tráûn.
- Ma tráûn âoï sau khi âäøi cäüt 3 vaì cäüt 4
23. Cho hai daîy säú tàng, viãút chæång trçnh xáy dæûng daîy tàng tæì hai daîy âoï.
24. Tçm chäù sai trong âoaûn chæång trçnh sau :
void main()
{ char str[]={‘H’,’e’,’l’,’l’,’o’};
puts(str);
}
25. Tçm läùi :
int i;
void ham1(int a);
void main()
{ int a=4;
for(i=0;i<10;i++)
ham1(a);
}
void ham1(int a)
{ for(i=0;i<5;i++)
printf(“\na=%d”,a);
}
26. Âãúm säú láön xuáút hiãûn cuía caïc kê tæû trong xáu kê tæû.
27. Thay caïc dáúu tab trong xáu kê tæû bàòng caïc khoaíng tràõng.
28. Thay thãú caïc chuäùi khoaíng tràõng bàòng 1 læåüng dáúu tab vaì khoaíng tràõng êt nháút.
29. Taïch tæì âáöu tiãn vaì tæì cuäúi cuìng cuía chuäùi.
30. Âãúm säú tæì trong xáu ( caïc tæì chè chæïa caïc kê tæû alphabet, âæåüc ngàn caïch nhau båíi
khoaíng tràõng, dáúu tab).
31. Xáu goüi laì palindrone nãúu noï khäng thay âäøi khi ta âaío ngæåüc thæï tæû trong noï (vê duû
“madam”). Kiãøm tra xáu coï tênh cháút palindrone khäng.
32. Nháûp vaìo 1 chuäùi, xoaï caïc khoaíng tràõng vaì in ra maìn hçnh.
33. Nháûp vaìo 1 chuäùi, sau âoï thay thãú caïc khoaíng tràõng bàòng 1 khoaíng tràõng vaì in ra maìn
hçnh.
34. Âaío ngæåüc thæï tæû caïc tæì trong chuäùi.
Vê duû : “con choï con càõn con meìo con” thaình “con meìo con càõn con choï con”.
Vê duû : “ngäü aïi në” thaình “në aïi ngäü”
35. Nháûp chuäùi, âäøi kê tæû âáöu mäùi tæì thaình chæî hoa, caïc tæì coìn laûi cuía tæì thaình chæî thæåìng.
36. Duìng haìm âãø tênh :
Z = A + B + C * D ; Z = ABC + ABC + ABC
Trang 85
Chæång VII : Dæî liãûu kiãøu cáúu truïc
Trang 86
Chæång VII : Dæî liãûu kiãøu cáúu truïc
I.2. Truy cáûp âãún caïc pháön tæí cuía mäüt biãún kiãøu cáúu truïc :
Máùu : tãn_biãún.tãn_pháön_tæí
Vê duû : strcpy(khach_thu_1.ten,”Tran Van B”);
khach_thu_1.tuoi=40;
printf(“Tuoi cua %s la %d”, khach_thu_1.ten, khach_thu_1.tuoi);
Ta coï thãø gaïn biãún cáúu truïc naìy cho biãún cáúu truïc khaïc coï cuìng kiãøu :
khach_thu_2= khach_thu_1;
Ta coï thãø khåíi taûo biãún cáúu truïc tæì luïc khai baïo nhæ khåíi taûo maíng:
khach khach_1={“John”,”17 Le Duan, Da Nang”,40,876543};
Våïi caïc cáúu truïc läöng nhau ta cuîng truy cáûp tæång tæû.
Vê duû : nguoi1.ngaysinh.nam
Ta coï thãø sæí duûng pheïp toaïn láúy âëa chè âäúi våïi thaình pháön cáúu truïc
Vê duû : scanf(“%d”,&khach_thu_1.tuoi);
Våïi thaình pháön cáúu truïc khäng nguyãn, ta nháûp thäng qua biãún trung gian.
Trang 87
Chæång VII : Dæî liãûu kiãøu cáúu truïc
Trang 88
Chæång VII : Dæî liãûu kiãøu cáúu truïc
ham1(diem1.x);
ham2(diem1.y);
Ta coï thãø chuyãøn âëa chè cuía tæìng pháön tæí cho haìm.
ham1(&diem1.x);
ham2(&diem1.y);
Vê duû :
struct diem
{ int x;
int y;
};
void ham(struct diem d)
{
printf("\nd.x=%4d\nd.y=%4d",d.x,d.y);
}
void main()
{
struct diem diem1;
diem1.x=2;diem1.y=4;
ham(diem1);
}
Âãø thay âäøi giaï trë cuía cáúu truïc ta truyãön con troí cáúu truïc.
Giaï trë traí vãö cuía haìm coï thãø laì cáúu truïc hoàûc con troí cáúu truïc.
Vê duû:
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
typedef struct
{ char ten[30] ;
int diem ;
char kq[5] ;
} kieuHV;
kieuHV *lop , *p , tam ;
/* Ham nhap danh sach */
void nhapds ( int n , kieuHV lop[ ])
{ int i , diem ;
p = lop ;
for ( i = 0 ; i < n ; i++)
{ printf("\nNhap Ho ten nguoi thu %d : " , i + 1 ) ; gets ( p->ten);
printf ( " diem = " ) ; scanf ( "%d" , &diem ) ; p->diem = diem ;
Trang 89
Chæång VII : Dæî liãûu kiãøu cáúu truïc
Trang 90
Chæång VII : Dæî liãûu kiãøu cáúu truïc
Vê duû :
#include <stdio.h>
#include <conio.h>
typedef union
{ int ax;
int ay;
} test;
void main()
{
test r;
r.ax=4660;
printf("\n r.ax=%d",r.ax);
printf("\n r.ay=%d",r.ay);
getch();
}
Kãút quaí laì : ax=4660
ay=4660
Vê duû:
#include <stdio.h>
#include <conio.h>
union u { char ch[2];
int num;
};
void main(void)
{ union u val;
val.ch[0] = 'A';
val.ch[1] = 'b';
printf("The two character constants held by the union:\n");
printf("%c\n", val.num & 0x00FF); A
printf("%c\n", val.num >> 8); b
}
Vê duû :
#include <stdio.h>
#include <conio.h>
typedef union
{ unsigned int ax;
struct
{ unsigned char al;
unsigned char ah;
} byte;
} thanh_ghi;
void main()
Trang 91
Chæång VII : Dæî liãûu kiãøu cáúu truïc
{
thanh_ghi r;
r.ax=0x1234;
printf("\n r.ax=%x",r.ax);
printf("\n r.ah=%x",r.byte.ah);
printf("\n r.al=%x",r.byte.al);
getch();
}
Kãút quaí :
r.ax=1234
r.ah=12
r.al=34
Thæûc ra trong dos.h ngæåìi ta âaî âënh nghéa kiãøu dæî liãûu union coï tãn REGS âãø phuûc vuû
cho viãûc truy cáûp caïc thanh ghi cuía CPU trong viãûc goüi ngàõt trong C.
struct BYTEREGS {
unsigned char al, ah, bl, bh;
unsigned char cl, ch, dl, dh;
};
struct WORDREGS {
unsigned int ax, bx, cx, dx;
unsigned int si, di, cflag, flags;
};
union REGS {
struct WORDREGS x;
struct BYTEREGS h;
};
Trang 92
Chæång VII : Dæî liãûu kiãøu cáúu truïc
Trang 93
Chæång VIII : Dæî liãûu kiãøu táûp tin (File)
- Táûp tin dæî liãûu nhë phán : Dæî liãûu trãn file nhë phán giäúng nhæ åí trong bäü nhåï
- Táûp tin dæî liãûu vàn baín : Khaïc våïi file nhë phán khi xæí lê maî chuyãøn doìng :
+ Khi ghi giaï trë LF thç chuyãøn thaình 2 giaï trë laì CR vaì LF.
+ Khi âoüc 2 giaï trë CR vaì LF thç chuyãøn thaình LF.
Trong âoï CR (maî 13) : vãö âáöu doìng; LF (maî 10) : xuäúng doìng.
Trang 94
Chæång VIII : Dæî liãûu kiãøu táûp tin (File)
Cäng duûng: duìng âãø måí táûp tin, nãúu thaình cäng seî traí vãö con troí kiãøu FILE æïng våïi táûp
tin væìa måí, nãúu coï läùi traí vãö NULL.
Chuï yï : Trong caïc kiãøu âoüc ghi, cáön laìm saûch vuìng âãûm træåïc khi chuyãøn tæì âoüc sang
ghi hoàûc ghi sang âoüc nhåì haìm fflush hoàûc haìm dëch chuyãøn vë trê con troí.
• Haìm fclose:
Máùu : int fclose(FILE *tãn_troí_file);
Trong âoï : tãn_troí_file laì con troí tæång æïng våïi táûp tin cáön âoïng.
Cäng duûng : duìng âãø âoïng táûp tin, bao gäöm caïc cäng viãûc :
- Âáøy dæî liãûu coìn trong vuìng âãûm lãn âéa (khi ghi)
- Xoïa vuìng âãûm (khi âoüc)
- Giaíi phoïng biãún tãn_troí_file, nãúu thaình cäng traí vãö giaï trë 0, nãúu khäng : EOF
• Haìm fcloseall:
Máùu : int fcloseall(void);
Cäng duûng : âoïng táút caí caïc táûp tin âang måí, nãúu thaình cäng traí vãö giaï trë bàòng säú táûp
tin âoïng âæåüc, nãúu khäng traí vãö giaï trë EOF.
• Haìm fflush:
Máùu : int fflush(FILE * tãn_troí_file);
Trong âoï : tãn_troí_file laì con troí tæång æïng våïi táûp tin âang xæí lê.
Cäng duûng : laìm saûch vuìng âãûm cuía táûp tin, nãúu thaình cäng traí vãö giaï trë 0, nãúu khäng
traí vãö EOF
• Haìm fflushall:
Máùu : int fflushall(void);
Cäng duûng : laìm saûch táút caí vuìng âãûm cuía caïc táûp tin âang måí, nãúu thaình cäng traí vãö
giaï trë bàòng säú táûp tin âæåüc laìm saûch, nãúu khäng traí vãö giaï trë EOF.
• Haìm ferror
Máùu : int ferror(FILE * tãn_troí_file);
Trong âoï : tãn_troí_file laì con troí tæång æïng våïi táûp tin âang xæí lê.
Cäng duûng : kiãøm tra läùi thao taïc trãn táûp tin, nãúu khäng coï läùi traí vãö giaï trë 0, nãúu coï
läùi traí vãö giaï trë khaïc 0.
• Haìm perror:
Máùu : void perror(const char *s);
Trong âoï s laì con troí troí tåïi chuäùi kê tæû
Cäng duûng : in chuäùi s vaì thäng baïo läùi.
• Haìm feof:
Máùu : int feof(FILE * tãn_troí_file);
Trong âoï : tãn_troí_file laì con troí tæång æïng våïi táûp tin âang xæí lê.
Cäng duûng : kiãøm tra kãút thuïc táûp tin, traí vãö giaï trë khaïc 0 nãúu gàûp cuäúi táûp tin khi âoüc,
nãúu khäng traí vãö giaï trë 0.
• Haìm unlink:
Máùu : int unlink(FILE * tãn_troí_file);
Trong âoï : tãn_troí_file laì con troí tæång æïng våïi táûp tin cáön xoïa.
Cäng duûng : xoïa táûp tin trãn âéa, nãúu thaình cäng traí vãö giaï trë 0, nãúu khäng : EOF
Trang 95
Chæång VIII : Dæî liãûu kiãøu táûp tin (File)
• Haìm remove:
Máùu : remove(const char * tãn_troí_file);
Trong âoï : tãn_troí_file laì con troí tæång æïng våïi táûp tin cáön xoïa.
Cäng duûng : xoïa táûp tin trãn âéa, haìm naìy laì mäüt macro goüi tåïi haìm unlink.
Caïc haìm naìy duìng cho caí 2 kiãøu nhë phán vaì vàn baín nhæng coï vaìi âiãøm khaïc nhau.
• Haìm rename:
Máùu : rename(const char *f1,const char *f2);
Cäng duûng : Âäøi tãn tãûp f1 thaình tãûp f2
• Haìm putc vaì fputc:
Máùu : int putc(int ch, FILE *con_troí_file);
int fputc(int ch, FILE *con_troí_file);
trong âoï ch laì mäüt säú nguyãn, con_troí_file laì con troí tæång æïng våïi táûp tin âang xæí lê.
Cäng duûng : ghi lãn táûp tin kê tæû coï maî bàòng m=ch%256 (ch âæåüc xem nhæ khäng
dáúu). Nãúu thaình cäng traí vãö giaï trë maî kê tæû âæåüc ghi, nãúu khäng traí vãö giaï trë EOF.
• Haìm getc vaì fgetc:
Máùu : int getc(FILE *con_troí_file);
int fgetc(FILE *con_troí_file);
trong âoï con_troí_táûp tin laì con troí tæång æïng våïi táûp tin âang xæí lê.
Cäng duûng : âoüc kê tæû tæì táûp tin, nãúu hãút táûp tin thç traí vãö EOF.
Trang 96
Chæång VIII : Dæî liãûu kiãøu táûp tin (File)
• Haìm fscanf:
int fscanf(FILE *f, const char *âk, dsâs);
Cäng duûng : Âoüc dæî liãûu tæì tãûp f theo khuän daûng âæåüc xaïc âënh trong chuäùi âiãöu
khiãøn âk vaì kãút quaí âæåüc læu vaìo trong danh saïch caïc âäúi säú (dsâs).
• Haìm fputs:
int fputs(const char *s, FILE *f);
Trong âoï : s laì con troí troí âãún âëa chè âáöu cuía mäüt chuäùi kyï tæû
f laì con troí tãûp.
Cäng duûng : Ghi chuäùi s lãn tãûp f (dáúu ‘\0’ khäng ghi lãn tãûp). Khi thaình cäng haìm traí
vãö kyï tæû cuäúi cuìng âæåüc ghi lãn tãûp. Khi coï läùi haìm cho EOF.
• Haìm fgets:
char *fgets(char *s, int n, FILE *f);
Trong âoï : s laì con troí troí âãún vuìng nhåï âuí låïn âãø chæïa chuäùi kyï tæû âoüc tæì tãûp
n laì âäü daìi cæûc âaûi cuía daîy cáön âoüc
f laì con troí tãûp.
Cäng duûng : Âoüc daîy kyï tæû tæì tãûp f vaì chæïa vaìo vuìng nhåï s. Khi thaình cäng, haìm traí
laûi âëa chè vuìng nháûn kãút quaí. Khi coï läùi hoàûc gàûp cuäúi tãûp, haìm cho giaï trë NULL.
Vê duû : #include <stdio.h>
#include <ctype.h>
void main()
{ FILE *f;
char ch;
f=fopen("a.txt","w");
do
putc(toupper(ch=getchar()),f);
while(ch!='\n');
fclose(f);
}
Trang 97
Chæång VIII : Dæî liãûu kiãøu táûp tin (File)
Vê duû 3: Måí mäüt tãûp vàn baín vaì in ra táön suáút xuáút hiãûn cuía baíng chæî caïi
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#include <string.h>
#define N 256
void main()
Trang 98
Chæång VIII : Dæî liãûu kiãøu táûp tin (File)
{ int i;
FILE *f;
static unsigned tso[26];
char *s;
clrscr();
f=fopen("a.txt","rt");
s=(char *)malloc(N);
while (!feof(f))
{ fgets(s,N,f);
strupr(s);
for(i=0;i<strlen(s);i++)
if ((s[i]>'A') && (s[i]<='Z'))
tso[s[i]-'A']++;
}
free(s);
printf("\n Cac chu cai trong tap tin :");
for(i=0;i<26;i++)
if (tso[i])
printf("\n %d chu %c",tso[i],i+'A');
getch();
}
Trang 99
Chæång VIII : Dæî liãûu kiãøu táûp tin (File)
Trang 100
Chæång VIII : Dæî liãûu kiãøu táûp tin (File)
}
do
{ fflush(stdin);
printf("Nhap ho ten :");gets(sv.ten);
printf("Ma so :");scanf("%d",&sv.maso);
printf("Diem :");scanf("%d",&sv.diem);
fwrite(&sv,sizeof(sv),1,f);
printf("Tiep tuc khong (C/K)?");
}
while(toupper(getch())=='C');
fclose(f);
}
Trang 101
Chæång VIII : Dæî liãûu kiãøu táûp tin (File)
Vê duû : Âoüc säú liãûu vaìo 2 ma tráûn(n*n) tæì hai tãûp “a.txt” vaì “b.txt”. Tênh C=A*B vaì
ghi vaìo tãûp “c.txt”
#include <stdio.h>
FILE *f;
int n, a[10][10], b[10][10], c[10][10];
void main()
{ int i, j, k;
printf("Nhap n"); scanf("%d",&n);
f=fopen("a.txt","rb");
for(i=0; i<n;i++)
for(j=0;j<n;j++)
fscanf(f,"%d",&a[i][j]);
fclose(f);
f=fopen("b.txt","rb");
for(i=0; i<n;i++)
for(j=0;j<n;j++)
fscanf(f,"%d",&b[i][j]);
fclose(f);
for(i=0; i<n;i++)
for(j=0;j<n;j++)
{ c[i][j]=0;
for(k=0;k<n;k++)
c[i][j]+=a[i][k]*b[k][j];
}
f=fopen("c.txt", "wb");
for(i=0; i<n;i++)
for(j=0;j<n;j++)
fprintf(f," %d",c[i][j]);
fclose(f);
}
Trang 102