Professional Documents
Culture Documents
{
[ caïc khai baïo ]
<Caïc cáu lãûnh>
}
[ Âënh nghéa haìm ]
Âäúi våïi háöu hãút caïc ngän ngæî láûp trçnh, luän luän phán biãût giæîa dæî
liãûu kiãøu säú vaì kiãøu kyï tæû, 5 laì mäüt säú vaì A laì mäüt kyï tæû. Tháût
ra, cho duì kyï tæû hay säú âãöu âæåüc læu træî trong bäü nhåï maïy tênh âãöu
laì säú båíi vç mäùi mäüt kyï tæû âãöu coï mäüt maî duy nháút.
Trong C, viãûc phán biãût kyï tæû vaì säú chè laì mäüt caïch tæång âäúi, thæûc
ra khi C xem xeït kyï tæû laì xem xeït âãún maî ASCII cuía noï. char laì mäüt
kiãøu säú nguyãn mäüt byte, noï âæåüc duìng âãø læu træî væìa kyï tæû, væìa
säú nguyãn. Vê duû, sau khi ta khai baïo nhæ sau :
char c;
baûn coï thãø thæûc hiãûn caïc pheïp gaïn sau :
c = 'A';
c = 65;
Trong caïc chæång trçnh, âãø âoüc mäüt kyï tæû vaìo tæì thiãút bë thç trong
chuäùi âënh daûng cuía haìm scanf() ta duìng %c, cuîng tæång tæû váûy âäúi
våïi haìm printf(), nãúu duìng %d trong haìm printf() thç seî in ra maî ASCII
cuía kyï tæû âoï.
Vê duû:
1. #include <stdio.h>
main()
{
char c;
printf("Nháûp vaìo kyï tæû: ");
scanf("%c",&c);
printf("Maî ASCII cuía %c laì %d\n",c,c);
Giaïo Trçnh Ngän Ngæî Láûp Trçnh C 9
Chæång 1, Nhæîng thaình pháön cå baín cuía C
getch();
return 0;
}
2. #include <stdio.h>
main()
{
char c1, c2;
printf("Nháûp hai säú: ");
scanf("%d %c",&c1,&c2);
printf("Giaï trë säú cuía c1 laì %d\n",c1);
printf("Giaï trë säú cuía c2 laì %d\n",c2);
getch();
return 0;
}
Kiãøu float coï âäü chênh xaïc laì 6 chæî säú sau dáúu cháúm tháûp phán
Kiãøu double coï âäü chênh xaïc laì 15 chæî säú sau dáúu cháúm tháûp phán.
Kiãøu dæî liãûu void khäng coï trong tiãu chuáøn K&R, nhæng trong nhæîng
nàm gáön âáy noï âaî âæåüc cháúp nháûn trong ngän ngæî C.
Kiãøu void coï hai tênh cháút quan troüng, thæú nháút noï chè ra ràòng mäüt
haìm khäng traí vãö giaï trë. Vê duû, ta coï thãø âënh nghéa mäüt haìm nhæ sau
:
void func( int a, int b )
{
....
}
Khi sæí duûng ta chè viãûc thæûc hiãûn nhæ sau:
func( x, y )
Tênh cháút thæï hai cuía void laì âãø khai baïo cho mäüt con troí khäng kiãøu
maì ta seî xeït sau.
1.8 BIÃÚN
Biãún laì mäüt âaûi læåüng coï thãø biãøu diãùn nhiãöu giaï trë khaïc nhau
trong mäüt chæång trçnh. Chuïng âæåüc læu træî trong bäü nhåï åí mäüt âëa
chè naìo âoï.
1.8.1 TÃN BIÃÚN
Mäùi biãún khi sæí duûng trong chæång trçnh âãöu phaíi âæåüc âàût tãn theo
quy âënh nhæ sau:
Tãn biãún laì mäüt daîy kyï tæû coï thãø gäöm: chæî caïi, chæî säú vaì
dáúu gaûch ngang dæåïi ( _ )
Kyï tæû âáöu tiãn phaíi laì chæî caïi hoàûc kyï tæû _
Chuï yï:
- Khi âàût tãn biãún khäng âæåüc âàût truìng tãn våïi caïc tæì khoïa cuía C.
- Tãn biãún trong C coï sæû phán biãût giæîa chæî hoa vaì chæî thæåìng
Vê duû: aBc, abc hay ABC laì khaïc nhau
Âãø thuáûn tiãûn trong viãûc láûp trçnh, caïc tãn biãún chuïng ta nãn âàût
in thæåìng (lower_case), caïc tãn hàòng nãn âàût in hoa (UPPER_CASE), caïc
tãn kiãøu, tãn haìm nãn âàût theo daûng in hoa kyï tæû âáöu (Title_Case).
chè cuía biãún (tæïc laì âëa chè vuìng nhåï chæïa giaï trë cuía biãún) ta duìng
pheïp toaïn & , cuï phaïp nhæ sau :
&<tãn_biãún>
Pheïp toaïn láúy âëa chè thæåìng duìng âãø chuyãøn âëa chè cuía biãún cho
haìm scanf() âãø nháûp dæî liãûu tæì baìn phêm.
1.9 HÀÒNG
Hàòng laì mäüt âaûi læåüng maì giaï trë cuía noï khäng thay âäøi trong khi
thæûc hiãûn chæång trçnh.
Chuï yï træåìng håüp sau âáy khi khai baïo hàòng dáúu pháøy âäüng
3.5 /* Hàòng double */
3.5f /* Hàòng float */
3.5e3L /* Hàòng long double */
null (‘\0’) vaìo cuäúi mäùi chuäùi (kyï tæû ‘\0’ âæåüc xem laì dáúu hiãûu kãút
thuïc chuäùi).
Chuï yï: Cáön phán biãût 'a' vaì "a"
‘a’ laì hàòng kyï tæû læu træî trong mäüt byte coìn “a” laì mäüt hàòng chuäùi
læu træî trong mäüt baíng gäöm 2 pháön tæí : pháön tæí thæï nháút chæïa ‘a’
vaì pháön tæí thæï hai laì ‘\0’.
- Træì a–b
* Nhán a*b
/ Chia a/b
% Láúy pháön dæ a%b
Chuï yï: int / int int (2/3 0; nhæng (float) 2/3 0.6666667 )
Pheïp toaïn mäüt ngäi: Pheïp toaïn - (ám) âæïng træåïc mäüt toaïn haûng,
chè roî laì traí vãö giaï trë traïi dáúu våïi toaïn haûng.
Vê duû: -10
1.10.2.2 Pheïp Toaïn Quan hãû
Pheïp toaïn YÏ nghéa Daûng thæïc
> Låïn hån a> b
>= Låïn hån hay bàòng a >= b
< Beï hån a< b
<= Beï hån hay bàòng a <= b
== Bàòng nhau a == b
!= Khaïc nhau a != b
Chuï yï:
- Kãút quaí cuía pheïp toaïn quan hãû luän luän laì mäüt säú nguyãn: 1 nãúu
âuïng vaì 0 nãúu sai.
- Caïc pheïp toaïn >, >=, <, <= laì cuìng thæï tæû æu tiãn, hai pheïp toaïn
==, != cuìng thæï tæû æu tiãn nhæng tháúp hån thæï tæû æu tiãn cuía bäún
pheïp toaïn âáöu.
Kãút quaí cuía pheïp toaïn logic traí vãö mäüt trong hai giaï trë: 1 nãúu âuïng
vaì 0 nãúu sai. YÏ nghéa cuía caïc pheïp toaïn âæåüc cho båíi caïc baíng sau:
a !a
bàòng 0 1
khaïc 0 0
a b a && b a b
khaïc 0 khaïc 0 1 1
khaïc 0 bàòng 0 0 1
bàòng 0 khaïc 0 0 1
bàòng 0 bàòng 0 0 0
Caïc pheïp toaïn naìy chè thæûc hiãûn trãn caïc toaïn haûng coï kiãøu dæî liãûu
laì säú nguyãn nhæ: char, int, long (kãø caí signed hoàûc unsigned).
Baíng sau âáy cho kãút quaí cuía caïc pheïp toaïn
a b ~a a&b a b a^b
0 0 1 0 0 0
0 1 1 0 1 1
1 0 0 0 1 1
1 1 0 1 1 0
Vê duû 1: a = b;
c = d = e = 1;
x = (y = 2)*(z = 3);
Vê duû 2: a += b; tæång âæång a = a + b;
a -= b; tæång âæång a = a - b;
a *= b; tæång âæång a = a * b;
a /= b; tæång âæång a = a / b;
a %= b; tæång âæång a = a % b;
Chuï yï: Trong pheïp gaïn âån giaín thç giaï trë cuía toaïn haûng bãn phaíi
âæåüc gaïn nguyãn veûn cho biãún bãn traïi nãúu chuïng cuìng kiãøu. Nãúu
chuïng khaïc kiãøu thç C seî thæûc hiãûn viãûc chuyãøn kiãøu tæû âäüng.
24
Giaïo4Trçnh
9 Ngän Ngæî Láûp Trçnh C 19
Chæång 1, Nhæîng thaình pháön cå baín cuía C
Giaí sæí trçnh biãn dëch thæûc hiãûn bæåïc 2 træåïc, ta coï hçnh veî minh hoüa
nhæ sau:
if ( biãøu_thæïc_1 )
z = biãøu_thæïc_2;
else
z = biãøu_thæïc_1;
Khi hai toaïn haûng trong mäüt pheïp toaïn coï kiãøu khaïc nhau thç
toaïn haûng coï kiãøu beï hån seî tæû âäüng chuyãøn thaình kiãøu låïn
hån cuía toaïn haûng kia træåïc khi thæûc hiãûn pheïp toaïn.
Âäúi våïi lãûnh gaïn thç sæû chuyãøn kiãøu càn cæï vaìo kiãøu dæî liãûu
cuía biãún åí vãú traïi.
Vê duû 1: 1.2*(10/3) cho kãút quaí laì 3.6
Vê duû 2: Giaí sæí n laì biãún nguyãn thç sau lãûnh gaïn n = 2.5 seî cho
kãút quaí laì n = 2.
2. Chuyãøn kiãøu bàõt buäüc: Thæûc hiãûn theo cuï phaïp sau
( Kiãøu ) Biãøu_thæïc
Kiãøu cuía giaï trë biãøu thæïc seî âæåüc chuyãøn thaình Kiãøu.
Vê duû 1: (int)(1.4)*10 cho kãút quaí laì 10
Vê duû 2: int a=10, b=3;
float x;
x = (float)a/(float)b;
Vê duû 3: Sau âáy laì mäüt chæång trçnh minh hoüa
#include <stdio.h>
main()
{
float a = 66.7;
printf( "%d %c\n", (int)a, (char)a );
return 0;
}
Chuï 66 B
yï:
- Âäúi våïi caïc haìm toaïn hoüc cuía thæ viãûn chuáøn thç giaï trë cuía âäúi
vaì giaï trë cuía haìm âãöu coï kiãøu double, vç váûy âãø tênh toaïn âæåüc
chênh xaïc ta cáön phaíi chuyãøn âäøi kiãøu cho âäúi säú.
Vê duû: Âãø tênh càn báûc hai cuía mäüt biãún nguyãn n, ta nãn viãút :
sqrt((double)n)
- Pheïp chuyãøn âäøi kiãøu coï cuìng âäü æu tiãn nhæ caïc toaïn tæí mäüt
ngäi.
1.11 HAÌM
Haìm laì mäüt khaïi niãûm quan troüng báûc nháút áøn dæåïi caïc ngän ngæî
báûc cao. Mäüt haìm cuía C laì táûp håüp cuía caïc toaïn haûng cuía C. Trong C
khäng coï khuynh hæåïng phán chia raình maûch thaình thuí tuûc hoàûc haìm
nhæ caïc ngän ngæî khaïc, táút caí moüi thuí tuûc vaì haìm âæåüc goüi mäüt tãn
duy nháút laì haìm.
Mäüt caïch chuáøn tàõc, caïc chæång trçnh âæåüc phaït triãøn tæì viãûc caìi
âàût caïc haìm. Caïc haìm åí mæïc tháúp biãøu diãùn caïc pheïp toaïn âån giaín
nháút, caïc haìm åí mæïc cao âæåüc taûo ra tæì nhæîng haìm mæïc tháúp.
Vê duû: Sau âáy laì mäüt haìm (mæïc tháúp) âån giaín âãø tênh bçnh phæång
cuía mäüt säú, noï biãøu diãùn mäüt pheïp toaïn khäng âæåüc xáy dæûng trong
C.
int sqr( int so )
{
int k_qua;
k_qua = so * so;
return k_qua;
}
Mäüt haìm giäúng nhæ mäüt cäù maïy âæåüc chuyãn män hoaï, noï nháûn dæî
liãûu vaìo, xæí lyï chuïng trong nhæîng bäü pháûn âaî âæåüc xaïc âënh, vaì traí
vãö kãút quaí. Vê duû nhæ haìm sqr() nháûn mäüt säú nguyãn nhæ dæî liãûu
vaìo vaì traí vãö bçnh phæång cuía säú âoï nhæ laì kãút quaí (dæî liãûu ra).
[l.L]: hai âäúi säú âãø âäøi dæî liãûu thaình long, L duìng cho kiãøu double.
type:
Kiãøu Âäúi säú Daûng xuáút
d säú nguyãn int (decimal)
i “ “
u “ unsigned int (decimal)
o “ int (octal)
x “ hexadecimal (a, b, c, d, e, f)
X “ Hexadecimal (A, B, C, D, E, F)
Tråü giuïp cho baûn: Chæång trçnh sau âáy laì mäüt vê duû nhàòm in ra táút
caí caïc âënh daûng cuía printf()
#include <stdio.h>
#include <string.h>
#define I 555
#define R 5.5
int main(void)
{
int i,j,k,l;
char buf[7];
char *prefix = buf;
char tp[20];
printf("prefix 6d 6o 8x 10.2e "
"10.2f\n");
strcpy(prefix,"%");
for (i = 0; i < 2; i++)
{
for (j = 0; j < 2; j++)
for (k = 0; k < 2; k++)
for (l = 0; l < 2; l++)
{
if (i==0) strcat(prefix,"-");
if (j==0) strcat(prefix,"+");
Giaïo Trçnh Ngän Ngæî Láûp Trçnh C 25
Chæång 1, Nhæîng thaình pháön cå baín cuía C
if (k==0) strcat(prefix,"#");
if (l==0) strcat(prefix,"0");
printf("%5s |",prefix);
strcpy(tp,prefix);
strcat(tp,"6d |");
printf(tp,I);
strcpy(tp,prefix);
strcat(tp,"6o |");
printf(tp,I);
strcpy(tp,prefix);
strcat(tp,"8x |");
printf(tp,I);
strcpy(tp,prefix);
strcat(tp,"10.2e |");
printf(tp,R);
strcpy(tp,prefix);
strcat(tp,"10.2f |");
printf(tp,R);
printf(" \n");
strcpy(prefix,"%");
}
}
return 0;
}
1.13.2 NHÁÛP DÆÎ LIÃÛU VÅÏI HAÌM scanf()
Cuï phaïp cuía haìm scanf() nhæ sau:
int scanf( const char *format [,adds,...]);
Chuäùi format coï daûng: %[width][l,L]<type>
adds coï daûng nhæ sau &<biãún>. Caïc âäúi säú naìy laì âëa chè caïc biãún
tæång æïng våïi chuäùi âënh daûng.
Toaïn tæí âëa chè: & âãø láúy âëa chè cuía mäüt biãún. Giaí sæí x laì biãún
thç &x âëa chè cuía biãún x âoï.
Khi duìng haìm scanf() ta cáön chuï yï mäüt âiãöu âoï laì viãûc laìm saûch bäü
âãûm, âãø thæûc hiãûn cäng viãûc naìy, ta coï thãø duìng haìm fflush(stdin)
hoàûc duìng kyï phaïp * trong chuäùi âënh daûng.
Mäüt âiãøm cáön læu yï næîa laì khäng nãn sæí duûng haìm scanf() âãø nháûp
chuäùi kyï tæû. Sau âáy laì mäüt vê duû minh hoüa cho caïc váún âãö trãn
#include <stdio.h>
#include <string.h>
void main()
{
char st [50];
gets(st); /* nháûp vaìo doìng TURBO C */
puts(st);
scanf("%s",st); /* nháûp vaìo doìng TURBO C */
puts(st);
scanf("%s",st); /* khäng dæìng laûi âãø nháûp */
puts(st);
}
TURBO C
TURBO C
TURBO C
TURBO
C
Chuï yï: Khi sæí duûng haìm printf() vaì scanf() thç phaíi duìng thãm cáu lãûnh
#include <stdio.h> åí âáöu chæång trçnh våïi C++.
Chuï yï: Âãø traïnh laìm viãûc sai soït våïi gets() vaì getchar() chuïng ta nãn
laìm saûch bäü âãûm baìn phêm bàòng caïch duìng haìm fflush() nhæ sau:
fflush( stdin );
Vê duû:
#include <string.h>
void main()
{
int ht[30];
int tuoi;
Haìm getch()
Haìm getch() hoaût âäüng hoaìn toaìn giäúng nhæ getchar() chè khaïc åí hai
âiãøm: thæï nháút kyï tæû seî âæåüc nháûn ngay khäng chåì nháún ENTER.
Thæï hai, kyï tæû nháûp vaìo seî khäng âæåüc in ra maìn hçnh.
1.14 CÁU LÃÛNH TIÃÖN XÆÍ LYÏ
Caïc lãûnh tiãön xæí lyï cuía C âæåüc xem nhæ caïc chæång trçnh taïch biãût,
chuïng âæåüc thæûc hiãûn træåïc khi chæång trçnh âæåüc biãn dëch. Cáu lãûnh
tiãön xæí lyï coï ngæî phaïp vaì cuï phaïp hãút sæïc âån giaín. Táút caí caïc chè
thë tiãön xæí lyï âãöu bàõt âáöu bàòng dáúu #, vaì tiãúp theo sau laì caïc chè
thë (khäng coï dáúu tràõng). Khäng giäúng nhæ caïc cáu lãûnh cuía C, caïc chè
thë tiãön xæí lyï kãút thuïc bàòng dáúu xuäúng doìng chæï khäng phaíi laì dáúu
cháúm pháøy.
Chè thë #include baïo cho trçnh biãn dëch âoüc mäüt source tæì mäüt file text
khaïc ngay khi file hiãûn thåìi âang biãn dëch. Lãûnh #include coï hai daûng:
#include <tãn_file> hoàûc #include “tãn_file”
caïc file sau #include goüi laì caïc file dáùn hæåïng (header file) vaì âãø thuáûn
tiãûn, pháön måí räüng cuía caïc file naìy luän laì .h. Muûc âêch duìng lãûnh
#include laì âãø C biãút caïc haìm sæí duûng trong chæång trçnh thuäüc vaìo
nhoïm naìo. Chàóng haûn caïc haìm printf() vaì scanf() thuäüc vaìo nhoïm
âæåüc dáùn båíi file coï tãn laì stdio.h (Standard I/O).
Cáön phán biãût giæîa hai daûng trãn cuía #include, våïi daûng 1, thç C hiãøu
âoï laì caïc file dáùn hæåïng cuía C vaì noï seî tçm trong thæ viãûn riãng cuía
noï. Våïi daûng 2, C hiãøu âoï laì file dáùn hæåïng cuía ngæåìi sæí duûng, C seî
tçm chuïng trong thæ muûc chæïa file nguäön, nãúu khäng coï thç måïi tçm
trong thæ muûc riãng cuía noï.
1.15. MÄÜT VAÌI VÊ DUÛ :
Vê duû 1 :
#include "stdio.h"
#include "conio.h"
main()
{
int a,b;
float c,d;
char st;
clrscr();
a=-10;
b=15;
c=1.2345;
d=6.789;
printf("\nNhap vao mot ky tu : ");
scanf("%c",&st);
printf("\nTong cua %d va %d la %d ",a,b,a+b);
printf("\nTong cua %f va %f la %f ",c,d,c+d);
printf("\nTong cua %5.2f va %5.2f la %5.2f ",c,d,c+d);
printf("\n Ky tu st la %c",st);
getch();
}
Vê duû 2 : Nháûp vaìo mäüt säú nguyãn hãû 10 vaì chuyãøn thaình säú hãû 8
vaì säú hãû 16
#include <stdio.h>
#include <conio.h>
main()
{
int i;
clrscr();
printf("\nNhap so nguyen he 10 ");
scanf("%d",&i);
printf("\n Chuyen sang he 8 la %o",i);
printf("\n Chuyen sang he 16 la %X",i);
getch();
}
Vê duû 3 : Tçm säú låïn nháút vaì nhoí nháút cuía 3 säú nguyãn.
#include <stdio.h>
#include <conio.h>
main()
{
float x,y,z,max,min;
clrscr();
printf("\nNhap vao 3 so ");
scanf("%f%f%f",&x,&y,&z);
max=(x>y)?x:y;
max=(max>z)?max:z;
min=(x>y)?y:x;
min=(min>z)?z:min;
printf("\nSo lon nhat la %f",max);
printf("\nSo nho nhat la %f",min);
printf("\nDay la 5 tieng chuong !\a\a\a\a\a");
getch();
}
Vê duû 4 :
#include <stdio.h>
#include <conio.h>
main()
{
long i,j,n;
clrscr();
printf("\nNhap vao mot so nguyen ");
scanf("%d",&i);
printf("\ncan dich may bit ");
scanf("%d",&n);
j=i>>n;
BAÌI TÁÛP
1. Khi in mäüt säú float hoàûc double våïi âënh daûng %f, coï bao nhiãu
chæî säú tháûp phán âæåüc printf() in ra. Haìm printf() laìm troìn hay càõt
giaï trë âi?
2. Viãút chæång trçnh våïi caïc khai baïo sau:
char c;
int j;
float x;
In ra âëa chè cuía mäùi biãún. Thäng qua caïc âëa chè âoï baûn coï nháûn
xeït gç vãö caïch maì trçnh biãn dëch cáúp phaït bäü nhåï cho biãún.
3. Viãút biãøu diãùn sang daûng baït phán, tháûp phán vaì tháûp luûc phán
cuía caïc säú nhë phán sau
a) 00010010
b) 01100101
c) 01101011
d) 10111011 (giaí sæí âáy laì kyï phaïp buì hai)
e) 00111111
f) 00000100 01100100
4. Viãút caïc khai baïo theo caïc låìi chè dáùn sau:
a) Mäüt säú nguyãn daìi, khäng dáúu.
b) Mäüt biãún dáúu pháøy âäüng âäü chênh xaïc keïp.
c) Mäüt con troí troí âãún mäüt char.
d) Mäüt char khåíi âäüng bàòng giaï trë ‘x’.
e) Mäüt haìm ngoaìi traí vãö mäüt säú nguyãn int khäng dáúu.
5. Cho daûng biãøu diãùn buì hai cuía caïc säú nguyãn sau âáy:
a) 1 b) -1
c) 255 d) 256
e) 511 f) 512
g) 513 h) 127
i) 128 j) -128
k) 0xFF l) 0x7F
6. Âàût caïc dáúu ngoàûc vaìo caïc biãøu thæïc sau âãø noï laì âuïng laì caïc
biãøu thæïc theo caïch maì trçnh biãn dëch C âaïnh giaï:
a) a = b * c == 2;
b) a = f(x) && a > 100;
c) a == b && x != y;
d) a = b += 2 + f(2)
e) a = s . f + x . y;
f) a = b >> 2 + 4;
g) a = b && a > z ? x = y : z;
h) a = * ++ * p;
i) a = b ^ c & d;
7. Chæång trçnh sau âáy seî cho kãút quaí nhæ thãú naìo trãn maìn hçnh
main()
{
short i = 0;
printf("%d\n", (i + 1) * (i = 1));
exit( 0 );
}
8. Chæång trçnh sau âáy seî cho kãút quaí nhæ thãú naìo trãn maìn hçnh.
Giaíi thêch.
main()
{
int j = 2;
printf("%d %d\n", j, j++);
printf("%d %d %d\n", j++, j, j++);
printf("%d %d\n", j++, j++*j++);
}
9. Chæång trçnh sau coï mäüt säú läùi. Haîy tçm vaì chæîa laûi
main( x )
{
scanf( "Coï bao nhiãu läùi trong chæång trçnh
naìy?, prob_count)
printf( Chæång trçnh naìy coï %d váún âãö\n,
prob_count);
10.Viãút chæång trçnh giaíi báút phæång trçnh báûc nháút ax + b 0
11. Viãút chæång trçnh giaíi báút phæång trçnh báûc hai ax2 + bx + c 0.
12. Viãút chæång trçnh giaíi tam giaïc ABC nãúu biãút goïc B, caûnh a vaì
goïc C (caïc goïc cho bàòng âäü). Sau âoï tênh diãûn têch vaì âæåìng cao
cuía tam giaïc ABC.