Download as pdf or txt
Download as pdf or txt
You are on page 1of 53

Nhp mn lp trnh

ThS. ng Bnh Phng (dbphuong@fit.hcmus.edu.vn)


Cu trc mt chng trnh my tnh
Chng trnh n gin
Cc kiu d liu c s v php ton
Cc hm thng dng c sn trong
th vin
Cc vn tm hiu m rng kin thc
ngh nghip
Thut ng v bi c thm ting Anh
10/7/2013 Khoa CNTT - H Khoa hc t nhin 2
V d
Chng trnh C Chng trnh C++
1 /* Hello.c */ // Hello.cpp
2 #include <stdio.h> #include <iostream>
3 using namespace std;
4 void main() void main()
5 { {
6 pritnf(Hello everybody!); cout << Hello everybody!;
7 } }
Khai bo s dng cc hm hay i tng c sn ca NNLT (dng 2)
u vo (entry point) ca chng trnh chnh bt u bng mt hm
c bit c tn l main, chng trnh s bt u chy ti ch ny.
Chng trnh bt u bng du { (dng 5) v kt thc bng du }
(dng 7)

10/7/2013 Khoa CNTT - H Khoa hc t nhin 4


V d (chng trnh C)
#include <stdio.h>

void main()
{
#define Pi 3.14159 /* hng s Pi, kiu d liu float */
float R = 1.25; /* bin R, kiu d liu float */
float Dientich; /* bin Dientich, kiu d liu float */

Dientich = Pi * R * R;
printf(Hinh tron, ban kinh = %f\n, R);
printf(Dien tich = %f, Dientich);
}

10/7/2013 Khoa CNTT - H Khoa hc t nhin 5


V d (chng trnh C++)
#include <iostream>
using namespace std;
void main()
{
const float Pi 3.14159; // hng s Pi, kiu d liu float
float R = 1.25; // bin R, kiu d liu float
float Dientich; // bin Dientich, kiu d liu float

Dientich = Pi * R * R;
cout << Hinh tron, ban kinh = << R << endl;
cout << Dien tich = << Dientich;
}

10/7/2013 Khoa CNTT - H Khoa hc t nhin 6


S dng kt hp cc ch ci t A n Z,
cc s t 0 n 9, du _, bt u bng
ch ci.
Tn phi gi nh v c lin quan v mt
ng ngha vi i tng c t tn.
Tn c th c t theo qui c ring
ca mt s t chc, cng ty sn xut phn
mm theo nhng tha thun c th.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 7


Khi chng trnh chy, mi bin hay hng
ca chng trnh s c kt buc vi mt
nh bn trong b nh ca my tnh.
Ty theo kiu d liu, kch thc (hay
di) ca nh ny (cng c gi l kch
thc ca bin hay hng tng ng) s
chim mt s byte nht nh trong b nh.
Ton t sizeof dng xc nh kch thc
ca kiu d liu, bin hay hng trong C/C++
10/7/2013 Khoa CNTT - H Khoa hc t nhin 8
V d (chng trnh C)
#include <stdio.h>

void main()
{
short Delta=9;
printf(Kich thuoc bien Delta = %d\n, sizeof(Delta));
printf(Kich thuoc kieu int = %d\n, sizeof(int));
printf(Kich thuoc kieu long = %d\n, sizeof(long));
printf(Kich thuoc kieu float = %d\n, sizeof(float));
printf(Kich thuoc kieu double = %d\n, sizeof(double));
printf(Kich thuoc kieu char = %d\n, sizeof(char));
}

10/7/2013 Khoa CNTT - H Khoa hc t nhin 9


V d (chng trnh C++)
#include <iostream>
using namespace std;
void main()
{
short Delta=9;
cout << Kich thuoc bien Delta = << sizeof(Delta) << endl;
cout << Kich thuoc kieu int = << sizeof(int) << endl;
cout << Kich thuoc kieu long = << sizeof(long) << endl;
cout << Kich thuoc kieu float = << sizeof(float) << endl;
cout << Kich thuoc kieu double = << sizeof(double) << endl;
cout << Kich thuoc kieu char = << sizeof(char) << endl;
}

10/7/2013 Khoa CNTT - H Khoa hc t nhin 10


a s cc chng trnh my tnh u thc
hin ba nhm thao tc chnh nh sau:
Nhp d liu: nhn d liu t ngi s dng
thng qua thit b nhp (bn phm, chut, )
hay t chng trnh khc.
Tnh ton hay x l d liu nhp mt cch
thch hp ra c kt qu cn thit ty
theo bi ton c th.
Xut d liu: gi kt qu tnh ton ra thit b
xut (my in, mn hnh, )

10/7/2013 Khoa CNTT - H Khoa hc t nhin 12


V d (chng trnh C)
#include <stdio.h>

void main()
{
int A, B; /* khai bo bin */
int sum; /* khai bo bin */
printf(Gia tri cua A =); /* xut d liu */
scanf(%d, &A); /* nhp d liu */
printf(Gia tri cua B =); /* xut d liu */
scanf(%d, &B); /* khai bo bin */
sum = A + B; /* tnh ton, x l */
printf(Tong so = %d\n, sum); /* xut d liu */
}

10/7/2013 Khoa CNTT - H Khoa hc t nhin 13


V d (chng trnh C)
#include <iostream>
using namespace std;
void main()
{
int A, B; // khai bo bin
int sum; // khai bo bin
cout << Gia tri cua A =; // xut d liu
cin >> A; // nhp d liu
cout << Gia tri cua B =; // xut d liu
cin >> B; // nhp d liu
sum = A + B; // tnh ton, x l
cout << Tong so = << sum << endl; // xut d liu
}

10/7/2013 Khoa CNTT - H Khoa hc t nhin 14


Cc NNLT u c mt h thng cc kiu
d liu c s cng vi cc php ton
ngi lp trnh c th thc hin cc tnh
ton v da vo kiu c s xy dng
nhng kiu d liu phc tp hn trong
qu trnh vit chng trnh.
Cc kiu d liu bao gm kiu s nguyn
(c du v khng du), kiu s thc, kiu
lun l v kiu k t.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 16


Min gi tr (s n-bit): -2n-1 .. +2n-1 1
Kiu ln Min gi tr
(Type) (Byte) (Range)
char 1 128 +127
2 32.768 +32.767
int
4 2.147.483.648 +2.147.483.647
short 2 32.768 +32.767
long 4 2.147.483.648 +2.147.483.647
9,223,372,036,854,775,808
long long 8
9,223,372,036,854,775,807
Mt s mi trng lp trnh ng nht kiu long long vi kiu long
cho nn kiu ny t c s dng trong lp trnh ng dng.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 17


Min gi tr (s n-bit): 0 .. 2n 1
Kiu ln Min gi tr
(Type) (Byte) (Range)
unsigned char 1 0 255
2 0 65535
unsigned int
4 0 4.294.967.295
unsigned short 2 0 65535
unsigned long 4 0 4.294.967.295
0
unsigned long long 8
18,446,744,073,709,551,615
Mt s mi trng lp trnh ng nht kiu unsigned long long vi kiu
unsigned long cho nn kiu ny t c s dng trong lp trnh ng dng.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 18


Hng s nguyn c th biu din 3 dng
Bt phn: vit bt u bng s 0
Thp phn: vit bt u bng s t 1 n 9
Thp lc phn: vit u bng 0x
Cc php ton s hc
Php cng: +, php tr: , php nhn: *
Php chia ly phn nguyn: /
Php chia ly phn d: %

10/7/2013 Khoa CNTT - H Khoa hc t nhin 19


Cc php ton trn bit cho s nguyn
khng du (c p dng khi mun lp
trnh thao tc trn cc bit ca d liu hay
mun tng tc x l ca chng trnh
trong mt vi tnh hung nht nh)
Php and bit: &
Php or bit: |
Php xor bit: ^
Php not bit: ~

10/7/2013 Khoa CNTT - H Khoa hc t nhin 20


#include <stdio.h>

void main()
{
unsigned char a = 45; // 00101101
unsigned char b = 58; // 00111010

int c1, c2, c3, c4, c5, c6;


c1 = a & b; // 00101000
c2 = a | b; // 00111111
c3 = a ^ b; // 00010111
c4 = ~a; // 11010010
c5 = a >> 4; // 11010000
c6 = a << 4; // 00000010
}

10/7/2013 Khoa CNTT - H Khoa hc t nhin 21


Cu trc lu tr bn trong ca s thc
c thit k theo chun s chm ng
(floating-point) ca IEEE.
Kiu ln Min gi tr
(Type) (Byte) (Range)
float 4 1,4x10-45 3,4x1038
float c chnh xc n (single-precision), chnh xc n 7 ch s.

double 8 4,94x10-324 1,79x10308


double c chnh xc kp (double-precision), chnh xc n 15 ch s.
long double 10 3,4x104932
Mt s mi trng lp trnh ng nht kiu long double vi kiu double cho nn
kiu ny t c s dng trong lp trnh ng dng.
10/7/2013 Khoa CNTT - H Khoa hc t nhin 22
Cc php ton s hc
Php cng: +
Php tr:
Php nhn: *
Php chia: /
Cc hm ton hc nh cn s, ly tha,
logarit, s c trnh by phn sau.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 23


Khai bo kiu bool i vi C++ chun
hoc kiu s nguyn bt k (char, int, )
Gi tr khc 0 ngha l ng (true).
Gi tr bng 0 ngha l sai (false).
Lu : Kt qu lng gi mt biu thc lun l bt k thc hin bi
C++ lun cho kt qu l 0 (false) hay 1 (true).

Cc php ton
Kt hp: && (and), || (or), ! (not)
So snh: >, >=, <, <=, ==, !=

10/7/2013 Khoa CNTT - H Khoa hc t nhin 24


#include <stdio.h> #include <iostream>
using namespace std;
void main() void main()
{ {
bool bVal; bool bVal;
double x=46.7, y=93, z; double x=46.7, y=93, z;
bVal = (x==y); bVal = (x==y);
printf(%d\n, bVal); cout << bVal << endl;
bVal = (x<y); bVal = (x<y);
printf(%d\n, bVal); cout << bVal << endl;
bVal = (2*x>y); bVal = (2*x>y);
printf(%d\n, bVal); cout << bVal << endl;
z = (x>y)*x + (x<=y)*y; z = (x>y)*x + (x<=y)*y;
printf(%f\n, z); cout << z << endl;
} }

10/7/2013 Khoa CNTT - H Khoa hc t nhin 25


Kiu k t 8-bit
Kiu char hoc unsigned char.
Lu m ASCII ca k t, gi tr t 0 n 255.
Mt s k t nn nh
K t M
(khong trng) 32
0 .. 9 48 .. 57
A .. Z 65 .. 90
a .. z 97 .. 122

10/7/2013 Khoa CNTT - H Khoa hc t nhin 26


i k t t k t thng sang k t hoa:
Nu a ch z th ch (mi) = ch (a A)
Ngc li ch (mi) = ch
Trong mi trng hp ta c cng thc:
ch (a A) * (ch >= a && ch <= z)
Tng t ta cng c cng thc chuyn k
t thnh k t thng:
ch (a A) * (ch >= A && ch <= Z)

10/7/2013 Khoa CNTT - H Khoa hc t nhin 27


#include <stdio.h> #include <iostream>
using namespace std;
void main() void main()
{ {
char ch; char ch;
ch=65; ch=65;
printf(ch = %c\n, ch); cout << ch = << ch << endl;
ch = A; ch = A;
printf(ch = %c\n, ch); cout << ch = << ch << endl;
printf(ch = ); cout << ch = ;
scanf(%c, &ch); cin >> ch;
printf(ASCII code = %d\n, ch); cout <<ASCII code = << ch << endl;
ch -= (a A)*(ch>=a && ch<=z); ch -= (a A)*(ch>=a && ch<=z);
printf(Upper case: %c\n, ch); cout << Upper case: << ch << endl;
} }

10/7/2013 Khoa CNTT - H Khoa hc t nhin 28


Kiu k t 16-bit
Kiu wchar_t (#include <wchar>)
Lu tr da trn bng m quc t UTF-16 (mt
dng m Unicode)
M UTF-16 ca k t thng thng (0 n 9, A n
Z, a n z, ) trng m ASCII.
Hng k t kiu wchar_t c t trc bng
ch L
Lu , B v LB nh nhau (cng gi tr 66) nhng kch
thc trong b nh khc nhau
(sizeof(B) = 1, sizeof(LB) = 2)

10/7/2013 Khoa CNTT - H Khoa hc t nhin 29


Vic tnh ton trong chng trnh c
thc hin bng cch tnh ton v chp kt
qu tnh ton vo mt bin nm bn tri
ca php gn.
V d:
sum = A + B; // chp tng A + B vo bin sum
sum = A + 2; // chp tng A + 2 vo bin sum
sum = A + n; // chp tng A + n vo bin sum

10/7/2013 Khoa CNTT - H Khoa hc t nhin 30


V d:
Vit sum++ (hay ++sum) thay cho sum = sum + 1;
Vit sum += 2 thay cho sum = sum + 2;
Vit sum += n thay cho sum = sum + n;
Vit n <<= 2 thay cho n = n << 2;
Vit n = m++ tng ng vi n = m; ri m++;
Vit n = ++m tng ng vi ++m ri n = m;
Vic vit cc lnh c ng c th lm cho
chng trnh kh c, kh bt li v vy
khng nn lm dng!
10/7/2013 Khoa CNTT - H Khoa hc t nhin 31
i vi NNLT C
Nhp xut s nguyn (kiu char, int)
C du dng thp phn: %d hay %i
Khng du:
Dng thp phn: %u
Dng thp lc phn: %x hay %X
Dng bt phn: %o
Trng hp nhp xut s nguyn kiu khc:
short (16-bit): %hd, %hi, %ho, %hu, %hx, %hX
long: %ld, %li, %lo, %lu, %lx, %lX

10/7/2013 Khoa CNTT - H Khoa hc t nhin 32


i vi NNLT C
Nhp xut s thc chm ng (kiu float)
Dng vit thp phn: %f
Dng vit s m (ch e hay E thay cho c s 10, v
d 1.2E-8): %e hay %E
Trng hp nhp xut thc kiu khc:
double: %lf, %le, %lE
long double: %Lf, %Le, %LE

10/7/2013 Khoa CNTT - H Khoa hc t nhin 33


i vi NNLT C
K t c bit: \\ (du \) v %% (du %)
K t tab v k t xung dng: \t, \n, \r
Nhp xut k t: %c
Nhp xut chui k t: %s
V vic quy nh ng rng v chnh xc (nu
l s thc) cho d liu xut c ghi ngay sau
du % vi dng wid.pre, v d %9.2f ngha l
rng t nht 9 k t (thm khong trng vo nu
thiu) v nhiu nht l 2 k t cho phn l sau
du chm thp phn.
10/7/2013 Khoa CNTT - H Khoa hc t nhin 34
i vi NNLT C++
Vic nhp xut c thc hin bi cc i tng
c nh ngha sn trong <iostream>:
cin km vi ton t >> (c gi l extraction operator)
nhp d liu.
cout km vi ton t << (c gi l insertion operator)
xut d liu.
c cung cp h thng nh dng d liu nhp
xut cho thit b nhp chun v m rng cho cc
thit b nhp xut khc nh tp tin.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 35


i vi NNLT C++
Thm ch th sau vo u chng trnh:
#include <iomanip>
Vic nh dng d liu c thc hin bng cc
ton t nh dng (manipulator).
endl: xung dng mi.
setw(n): nh rng ca d liu xut.
left v right: dng chung vi setw(n) canh l tri hay l phi.
setfill(ch): dng chung vi setw(n) qui nh k t ch c thm
vo thay v dng khong trng.
dec, oct, hex: c dng qui nh s nguyn (khi nhp xut) c
ghi theo dng thp phn, bt phn, thp lc phn.
setprecision(n): dng qui nh chnh xc khi in s thc.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 36


#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
int Area=970, Height=10, Volume=9700;
cout << setw(8) << Area << setw(10) << Area << endl;
cout << setw(8) << H << setw(10) << Height << endl;
cout << setw(8) << Volume << setw(10) << Volume << endl;
}
Kt qu chy chng trnh
Area 970
H 10
Volume 9700

10/7/2013 Khoa CNTT - H Khoa hc t nhin 37


#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
long n;
cout << n (hexadecimal) = ;
cin >> hex >> n;
cout << Octal representation: << oct << n << endl;
cin >> n;
}

10/7/2013 Khoa CNTT - H Khoa hc t nhin 38


c thm trong gio trnh Nhp mn lp
trnh, Chng 2 Phn III.6, trang 49-56.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 39


Khi nim
tit kim cng sc, ngi lp trnh c th s
dng li cc hm (on chng trnh) c sn
trong qu trnh vit chng trnh v d nh tnh
cn s, ly tha, tr tuyt i, logarit,
Tp hp cc hm c xy dng sn ca NNLT
thng c gi l th vin hm.
H thng th vin hm rt a dng nn ngi lp
trnh cn phi tra cu thm ti liu tham kho
hoc h thng gip ca phn mm h tr
lp trnh.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 41


#include <math.h> #include <cmath>
#include <stdio.h> #include <iostream>
using namespace std;
void main() void main()
{ {
double x, y, Fxy; double x, y, Fxy;
printf(x = ); cout << x = ;
scanf(%lf, &x); cin >> x;
printf(y = ); cout << y = ;
scanf(%lf, &y); cin >> y;
Fxy = x + sqrt(1 + y*y); Fxy = x + sqrt(1 + y*y);
printf(F(x, y) = %lf, Fxy); cout << F(x, y) = , Fxy);
} }

10/7/2013 Khoa CNTT - H Khoa hc t nhin 42


Cc hm ton hc a s c tham s kiu
double, gi tr nhp vo v kt qu tnh
ton u c kiu double.
s dng cc hm ton hc, ngi lp
trnh cn ghi thm vo u chng trnh
ch th:
#include <math.h> i vi NNLT C
#include <cmath> i vi NNLT C++ chun

10/7/2013 Khoa CNTT - H Khoa hc t nhin 43


Mt s hm ton hc thng thng
Nguyn mu hm Cng dng
double sqrt(double x); Tnh
double pow(double x, double y); Tnh ( > 0)
double exp(double x); Tnh ( 2,71828)
double log(double x); Tnh ln
double log10(double x); Tnh log10
int abs(int x); Tnh (x kiu int)
long labs(long x); Tnh (x kiu long)
double fabs(double x); Tnh (x kiu double)

10/7/2013 Khoa CNTT - H Khoa hc t nhin 44


Mt s hm ton hc thng thng
Nguyn mu hm Cng dng
double cos(double x); Tnh cos , sin , tan (x
double sin(double x); tnh theo radian,
double tan(double x); 1 radian bng 180/ )
double acos(double x); Tnh cos 1
double asin(double x); Tnh sin1
double atan(double x); Tnh tan1
double floor(double x); Tnh
double ceil(double x); Tnh

10/7/2013 Khoa CNTT - H Khoa hc t nhin 45


s dng cc hm k t lit k trong
danh sch sau bng cch dng th vin
nh ch th #include <ctype.h>
Nguyn mu hm Cng dng
bool isupper(char ch); Kim tra ch c phi l k t hoa?
bool iswupper(wchar_t ch);
char toupper(char ch); Tr v k t hoa tng ng
wchar_t towupper(wchar_t ch); vi ch
bool islower(char ch); Kim tra ch c phi l k t
bool iswlower(wchar_t ch); thng?
char tolower(char ch); Tr v k t thng tng ng
wchar_t towlower(wchar_t ch); vi ch

10/7/2013 Khoa CNTT - H Khoa hc t nhin 46


Lch s pht trin d liu c s theo NNLT
Chun lu tr vt l ca cc loi d liu
c s
L hng bo mt trong m ngun
S khc bit, tng ng gia cc NNLT

10/7/2013 Khoa CNTT - H Khoa hc t nhin 48


ASCII code: m k t theo chun 1 byte. Bng m ASCII (American
Standard Code for Information Interchange) c 256 k t (gm c k t
thng thng v k t c bit)
character: k t ni chung
wide character: k t 16 bit
wide string: chui k t gm cc k t 16 bit
constant: hng s
data type: kiu d liu
floating-point, real data type: s thc du chm ng, kiu d liu s
thc
functtion library: th vin hm
fundamental data type: kiu d liu c bn, c s
input: nhp
input data: d liu nhp

10/7/2013 Khoa CNTT - H Khoa hc t nhin 50


integral data type, integer: kiu d liu nguyn
long integer: kiu nguyn di (32 bit)
operator: ton t, php ton
bit mask: mt n bit
bit operator: php ton trn bit
logical operator, boolean operator: php ton lun l
ouput: xut
ouput data: d liu xut
overflow: trn s
unicode: ni chung v k t unicode
variable: bin (dng trong lp trnh)
variable declaration: khai bo bin

10/7/2013 Khoa CNTT - H Khoa hc t nhin 51


Thinking in C, Bruce Eckel, E-book, 2006.
Theory and Problems of Fundamentals of
Computing with C++, John R.Hubbard,
Schaums Outlines Series, McGraw-Hill, 1998.

10/7/2013 Khoa CNTT - H Khoa hc t nhin 52

You might also like