You are on page 1of 70

Phn 3: Lp trnh C

Ni dung chnh
Chng 1: Tng quan v ngn ng C
Chng 2: Kiu d liu v biu thc trong C

TIN HC I CNG

Chng 3: Vo ra d liu

Phn 3: LP TRNH C

Chng 4: Cu trc iu khin


Chng 5: Mng, con tr v xu k t

Phm ng Hi
haipd@soict.hut.edu.vn

Chng 6: Cu trc
Chng 7: Hm
Chng 8: Tp d liu
1/27/2012

Chng 1: Tng quan v ngn ng C

Chng 1: Tng quan v ngn ng lp trnh C

1.1 Lch s pht trin ca ngn ng C

Ni dung chnh

S ra i ca C
Nhu cu vit li HH Unix cho cc h my
tnh khc nhau

1. Lch s pht trin ca ngn ng C

Dng Assembly
Cng vic nng n, phc tp
Kh chuyn i chng trnh gia cc h my tnh
khc nhau

2. Cc phn t c bn ca ngn ng C

Cn ngn ng mi

3. Cu trc c bn ca chng trnh C

n gin vic lp trnh


Tnh kh chuyn cao

4. Bin dch chng trnh C

1/27/2012

C ra i ti Bell Lab thuc tp on AT&T

Chng 1: Tng quan v ngn ng lp trnh C

Tc gi Brian W. Kernighan & Dennis Ritchie


Da trn nn BCPL& B
Pht trin nm 1970, hon thnh 1972
1/27/2012

Chng 1: Tng quan v ngn ng lp trnh C

1.1 Lch s pht trin ca ngn ng C

1.1 Lch s pht trin ca ngn ng C

Ngn ng lp trnh C

Ngn ng lp trnh C

c im

Cc phin bn

Ngn ng lp trnh h thng


Tnh kh chuyn, linh hot cao
C th mnh trong x l d liu s, vn bn, c
s d liu,..

ANSI C: C chun (1989)


Cc phin bn khc xy dng da trn ANSI C
a thm th vin; B sung cho th vin chn
ca ANSI C

Phm vi s dng

Cc trnh bin dch ph bin

Vit cc chng trnh h thng

Turbo C++ v Borland C++ ca hng Borland


Inc

H iuh hnh Unix c 90% m C, 10% m hp ng

Cc trnh iu khin thit b (device driver)


X l nh
1/27/2012

VC v MSC ca Microsoft Corp


GCC ca GNU project
5

1/27/2012

Chng 1: Tng quan v ngn ng C

Chng 1: Tng quan v ngn ng lp trnh C

1.2 Cc phn t c bn ca ngn ng C

Ni dung chnh

Cc phn t c bn
1. Tp k t
2. T kha
3. nh danh
4. Cc kiu d liu
5. Hng
6. Bin
7. Hm
8. Biu thc
9. Cu lnh
10. Ch thch

1. Lch s pht trin


2. Cc phn t c bn ca ngn ng C
3. Cu trc c bn ca chng trnh C
4. Bin dch chng trnh C

1/27/2012

Chng 1: Tng quan v ngn ng lp trnh C

1/27/2012

Chng 1: Tng quan v ngn ng lp trnh C

1.2 Cc phn t c bn ca ngn ng C

1.2 Cc phn t c bn ca ngn ng C

1. Tp k t

1. Tp k t Tp k t trong C

K t l cc phn t c bn to nn chng
trnh
Chng trnh: Tp cc cu lnh nhm
gii quyt nhim v t ra
Cu lnh: l cc t (t vng) lin kt vi
nhau theo c php ca ngn ng lp trnh

26 ch ci hoa:A B C ... X Y Z
26 ch ci thng:a b c x y z.
10 ch s: 0 1 2 3 4 5 6 7 8 9.
Cc k hiu ton hc:+ - * / = < >
Cc du ngn cch: . ; , : space tab
Cc du ngoc:( ) [ ] { }

V d: while (i < N ) do

Cc t: T hp cc k t theo nguyn tc
xy dng t vng

Cc k hiu c bit:_ ? $ & # ^ \ !


~ ...

V d: TenFile, BaiTap2
1/27/2012

Chng 1: Tng quan v ngn ng lp trnh C

1/27/2012

10

Chng 1: Tng quan v ngn ng lp trnh C

1.2 Cc phn t c bn ca ngn ng C

1.2 Cc phn t c bn ca ngn ng C

2. T kha (keyword)

2. T khaT kha hay dng trong Turbo C

c nh ngha sn trong mi NNLT


Dnh ring cho cc mc ch xc nh
t tn cho kiu d liu:
int, float, double

break

case

char

const

continue default

do

double else

enum

float

goto

if

int

interrupt long

return

short

signed

sizeof

static

switch

typedef union

unsigned void

struct

for

while

M t cc lnh, cc cu trc lp trnh

Lu :Tt c t kha trong C u vit bng


ch ci thng

if, else, while, case, for

1/27/2012

11

1/27/2012

12

Chng 1: Tng quan v ngn ng lp trnh C

Chng 1: Tng quan v ngn ng lp trnh C

1.2 Cc phn t c bn ca ngn ng C

1.2 Cc phn t c bn ca ngn ng C

3. nh danh (Identifier)

3. nh danh Quy tc t tn nh danh trong C


nh danh c bt u bi ch ci hoc
du gch di _ (underscore)
Cc k t tip theo ch c th l: ch ci,
ch s hoc du gch di _
nh danh do ngi lp trnh t khng
c trng vi cc t kha ca C
di nh danh ty thuc phin bn C

nh danh (Tn) l mt dy cc k t dng


gi tn cc i tng trong chng
trnh.
Cc i tng trong chng trnh

Bin
Hng s
Hm
Kiu d liu

Turbo C++, khng gii hn di tn, nhng


trnh bin dch ch s dng 32 k t u

nh danh c th c t bi
Ngn ng lp trnh cc t kha
Ngi lp trnh
1/27/2012

13

Chng 1: Tng quan v ngn ng lp trnh C

Ch : C l ngn ng c phn bit ch hoa v


ch thng
1/27/2012
14

Chng 1: Tng quan v ngn ng lp trnh C

1.2 Cc phn t c bn ca ngn ng C

1.2 Cc phn t c bn ca ngn ng C

3. nh danhV d

3. nh danh Mt s quy c (code convention)

nh danh hp l:

nh danh nn c tnh gi nh
Nn s dng du gch di phn tch
cc nh danh gm nhiu t

i, x, y, a, b, _function,
_MY_CONSTANT, PI, gia_tri_1

C th dng cch vit hoa ch ci u mi t

nh danh khng hp l
1_a, 3d, 55x

(bt u bng ch s)

so luong, sin()

(c k t khng hp l, du
cch, du ngoc..)

int, char

-V d: sinh_vien, sinhVien, SinhVien

Quy c thng c s dng:


Hng s dng ch ci hoa
V d: PI, EPSILON,

Cc bin, hm, cu trc dng ch ci thng

(trng vi t kha ca C)

1/27/2012

Bin iu khin vng lp: i, j, k


Hm: NhapDuLieu, TimKiem,
Cu trc: SinhVien, MatHang,
15

Chng 1: Tng quan v ngn ng lp trnh C

16

Chng 1: Tng quan v ngn ng lp trnh C

1.2 Cc phn t c bn ca ngn ng C

1.2 Cc phn t c bn ca ngn ng C

4. Cc kiu d liu

4. Cc kiu d liuV d kiu int


Mt s php ton c nh ngha trn kiu
d liu int ca C

Mt kiu d liu l mt tp hp cc gi tr
m mt d liu thuc kiu d liu c th
nhn c.
V d: Mt i tng kiu int ca C s l
Mt s nguyn (S nguyn c du, 2 byte)
Gi tr thuc khong: [-32,768 (-215) 32,767 (215-1)]

Trn mt kiu d liu, xc nh mt s php


ton i vi cc d liu thuc kiu d liu
tng ng.
1/27/2012

1/27/2012

17

V d

Tn php ton
o du
Cng;Tr;Nhn
Chia ly nguyn

K hiu
+;-;*
/

Chia ly phn d
So snh
Logic bit: AND; OR;
XOR;NOT, Shift,

%
17%32
>, <, >=, <=, ==, !=
&;|;
3^17 18
^ ; ~ ; <<; >>
~3 -4

1/27/2012

17/35

18

Chng 1: Tng quan v ngn ng lp trnh C

Chng 1: Tng quan v ngn ng lp trnh C

1.2 Cc phn t c bn ca ngn ng C

1.2 Cc phn t c bn ca ngn ng C

5. Hng

5. Hng Hng s nguyn

Hng (constant) l i lng c gi tr


khng i trong chng trnh.

Trong C, hng s nguyn c th biu din


di cc dng
Dng thp phn
Dng thp lc phn
Dng bt phn

Gi tr hng do ngi lp trnh xc nh


Cc loi hng
Hng s nguyn
Hng k t

Gi tr
thp phn
2011

Gi tr
Gi tr
thp lc phn
bt phn
0x7DB
03733

Hng chui/xu k t

396

0x18C

Hng s thc

1/27/2012

19

Chng 1: Tng quan v ngn ng lp trnh C

0614

1/27/2012

20

Chng 1: Tng quan v ngn ng lp trnh C

1.2 Cc phn t c bn ca ngn ng C

1.2 Cc phn t c bn ca ngn ng C

5. Hng Hng s thc

5. Hng Hng k t

Trong C, hng s thc c th biu din di


cc dng
Dng s thc du phy tnh
Dng s thc du phy ng
S thc du phy tnh

Hng k t c th biu din theo hai cch


t k hiu ca k t gia hai du nhy n
Dng m ASCII ca k t:
S th t ca k t trong bng m ASCII
L s nguyntun th quy tc biu din s nguyn

S thc du phy ng

K t

Dng nhy n

Dng m ASCII

3.14159

31.4159 E-1

Ch ci A

65, 0x41, 0101

123.456

12.3456 E+1 hoc


1.23456 E+2

Du nhy n

39, 0x27, 047

K t tab

\t

0, 0x09, 011

1/27/2012

21

Chng 1: Tng quan v ngn ng lp trnh C

22

Chng 1: Tng quan v ngn ng lp trnh C

1.2 Cc phn t c bn ca ngn ng C

1.2 Cc phn t c bn ca ngn ng C

5. Hng Hng chui/xu k t

6. Bin (variable)
Bin l i lng m gi tr c th thay i
trong chng trnh.
Tn bin phi c t theo quy tc t tn

Hng chui/xu k t c biu din bi t


dy cc k t trong xu trong cp du nhy
kp.

V thc cht, bin l cc nh trong b nh


my tnh dnh cho 1 kiu d liu no v
c t tn tin tham kho

V d:
ngon ngu lap trinh C

V d: Bin kiu int chim 2 nh

Tin hoc dai cuong

Lu :

Dai hoc Bach Khoa Ha Noi

1/27/2012

1/27/2012

Hng s v bin c s dng lu tr d


liu trong chng trnh v phi thuc mt kiu
d liu no
23

1/27/2012

24

Chng 1: Tng quan v ngn ng lp trnh C

Chng 1: Tng quan v ngn ng lp trnh C

1.2 Cc phn t c bn ca ngn ng C

1.2 Cc phn t c bn ca ngn ng C

7. Hm Mt s hm ton hc

7. Hm (function)

Hm l chng trnh con c chc nng


Nhn d liu u vo (cc tham s vo)
Thc hin mt cng vic no
Tr v kt qu ng vi tham s truyn vo
V d: hm sin(x)
sin(3.14/2) 1.000
Sin(3.14/6) 0.499770

Hm
sqrt(x)

ngha
Cn bc 2 ca x

sqrt(16.0) 4.0

pow(x,y)

X m y ( xy )

pow(2,3) 8

fabs(x)
exp(x)
log(x)
log10(x)
sin(x)

Tr tuyt i ca x ( |x| )
E m x ( ex )
Logarithm t nhin ca x (ln x)
Logarithm c s 10 ca x (logx)
Cc hm lng gic

fabs(-5.0) 5.0
exp(1.0)2.71828
Log(2.718)0.999
Log10(100) 2.00

S nguyn nh nht khng nh


hn x (x)
S nguyn ln nht khng ln
hn x ( x)

ceil(2.5)=3
ceil(-2.5)=-2
floor(2.5)=2
floor(-2.5)=-3

V d

cos(x)/ tan(x)

Hm khng tr li mt gi tr: Th tc

ceil(x)

V d: clrscr()

floor(x)

1/27/2012

25

Chng 1: Tng quan v ngn ng lp trnh C

1/27/2012

Chng 1: Tng quan v ngn ng lp trnh C

1.2 Cc phn t c bn ca ngn ng C

1.2 Cc phn t c bn ca ngn ng C

8. Biu thc

9. Cu lnh (statement)

Biu thc l s kt hp cc cc ton hng


(operand) bi cc ton t (operator) theo
mt quy tc xc nh.
Cc ton hng c th l bin, hng, hm
Cc ton t rt a dng: cng, tr, nhn,
chia
V d

Cu lnh din t mt hoc mt nhm cc


thao tc trong gii thut.
Chng trnh c to thnh t dy cc cu
lnh.

Cc cu lnh trong C, c kt thc bi


du chm phy (;)

Th tch hnh hp: V=Rng*Cao*Dy

Du chm phy (;) dng phn cch cc lnh

Rng
1/27/2012

D
y

Cao

Php nhn (*) l ton t


Cc ton hng Rng, Cao, Dy

27

Chng 1: Tng quan v ngn ng lp trnh C

1/27/2012

28

Chng 1: Tng quan v ngn ng lp trnh C

1.2 Cc phn t c bn ca ngn ng C

1.2 Cc phn t c bn ca ngn ng C

9. Cu lnh Phn loi

10. Ch thch (comment)


Li m t, gii thch vn tt cho mt cu
lnh, mt on chng trnh hoc c
chng trnh

Cu lnh n:
Nhng cu lnh khng cha cu lnh khc.
V d: Php gn, gi hm, vo/ra d liu

Gip vic c hiu chng trnh d dng hn

Cc cu lnh phc:
Nhng cu lnh cha cu lnh khc.
V d: Lnh khi (Tp cc lnh n nhm li vi
nhau v t trong cp ngoc nhn { } )

Ch thch khng phi l cu lnh khng nh


hng ti chng trnh
Khi gp ch thch, trnh bin dch s b qua

Cch vit ch thch

Cc lnh iu khin cu trc chng trnh

Ch thch mt dng: s dng //


Ch thch nhiu dng: s dng /* v */

V d: Lnh r nhnh, lnh lp..

1/27/2012

26

29

1/27/2012

30

Chng 1: Tng quan v ngn ng C

Chng 1: Tng quan v ngn ng lp trnh C

1.3 Cu trc c bn ca chng trnh C

Ni dung chnh

Cc phn c bn
Khai bo cc tp tiu
#include

1. Lch s pht trin

Khai bo cc i tng ton cc


nh ngha kiu d liu mi
Cc bin, hng
Cc hm nguyn mu (prototype)

2. Cc phn t c bn ca ngn ng C
3. Cu trc c bn ca chng trnh C

nh ngha hm main()
{

4. Bin dch chng trnh C

}
nh ngha cc hm khai bo nguyn mu
1/27/2012

31

Chng 1: Tng quan v ngn ng lp trnh C

1/27/2012

32

Chng 1: Tng quan v ngn ng lp trnh C

1.3 Cu trc c bn ca chng trnh C

1.3 Cu trc c bn ca chng trnh C

1. Khai bo cc tp tiu
Lit k danh sch th vin s c s dng
trong chng trnh

2. Khai bo cc i tng ton cc


Cc i tng ton cc c phm vi s dng
trong ton b chng trnh

Cc hm ca C u thuc mt th vin no
Khng khai bo th vin, trnh bin dch khng
hiu c hm (c th bo li)

Cc kiu d liu mi
Cc hng, bin

Cch thc (c php) khai bo


1. #include<ThuVien.h>

Cc nguyn hm

Th vin phi nm trong th mc cha cc header file


Thng c s dng
V d: #include<stdio.h>

Tun theo nguyn tc khai bo i tng

2. #include ThuVien.h
Tm kim th vin ti th mc hin ti
1/27/2012

33

Chng 1: Tng quan v ngn ng lp trnh C

1.3 Cu trc c bn ca chng trnh C

2. Khai bo cc i tng ton cc

2. Khai bo cc i tng ton cc (tip)


Khai bo cc hm nguyn mu
Khai bo thng tin v cc hm ca ngi
dng s c s dng trong chng trnh

nh ngha kiu d liu


C php: typedef <nhNghaKiu> <Tn kiu
typedef unsigned char byte;
typedef struct {float re, im;} complex;

Tn hm
Danh sch cc kiu tham s s truyn vo
Kiu d liu tr v

Khai bo hng
const float PI = 3.1415;
#define Max 50

V d
float DienTichTamGiac(float a, float b, float c);
int getMax(int Arr []);
C th b tn tham s
void swap(int * a, int * b);

Khai bo bin
int N;
float Delta, x1, x2;
1/27/2012

34

Chng 1: Tng quan v ngn ng lp trnh C

1.3 Cu trc c bn ca chng trnh C

V d:

1/27/2012

void swap(int *, int *);


35

1/27/2012

36

Chng 1: Tng quan v ngn ng lp trnh C

Chng 1: Tng quan v ngn ng lp trnh C

1.3 Cu trc c bn ca chng trnh C

1.3 Cu trc c bn ca chng trnh C

3. nh ngha hm main()

4. nh ngha cc hm khai bo

Bt buc phi c
L hm c bit trong C, nh du im bt
u ca mi chng trnh C

nh ngha cc hm khai bo phn 3


(Phn khai bo nguyn mu - prototype)
Phn khai bo nguyn mu mi ch khai bo cc
thng tin c bn v hm, cha xc nh r hm
hot ng nh th no

Khi thc hin mt chng trnh C, h thng s


gi ti hm main u tin, sau s thc hin
ln lt cc cu lnh (bao gm c li gi ti cc
hm khc) nm trong hm main()

V d
float DienTichTamGiac(float a, float b, float c){
float p = (a+b+c)/2;
return sqrt(p*(p-a)*(p-b)*(p-c));
}

C php
void main(){.}
void main(int argc, char * argv[ ]){.}
int main(){.; return 0;}
int main(int argc, char * argv[ ]){.; return 0;}
1/27/2012

37

Chng 1: Tng quan v ngn ng lp trnh C

38

Chng 1: Tng quan v ngn ng lp trnh C

1.3 Cu trc c bn ca chng trnh C

1.3 Cu trc c bn ca chng trnh C

Ch

Chng trnh u tin: Hello world!

Cc phn khng bt buc phi theo ng th t


Khi nh ngha hm c t trc hm
main(), khng cn khai bo nguyn hm
Nguyn tc:
Mi i tng cn phi c khai bo trc khi
s dng

1/27/2012

1/27/2012

39

Chng 1: Tng quan v ngn ng C

1. #include <stdio.h>
2. int main(){
//Khng cn tham s dng lnh
3.
printf("Hello world! \n");
4.
return 0; //Tr v gi tr 0
5. }
1. Np th vin stdio.h vo, y l th vin vo ra chun
(standard input output) cha khai bo nguyn hm cho
hm printf
2. im bt u thc hin ca chng trnh. My tnh thc
hin cc cu lnh nm trong cp ngoc {} ca main()
3. Hm printf in ra mt hng chui, c kt thuc bi du
xung dng (\n)
4. Tr v h iu hnh mt gi tr. Gi tr 0 thng dng
th hin chng trnh khng c li

1/27/2012

40

Chng 1: Tng quan v ngn ng lp trnh C

1.4 Bin dch chng trnh C

Ni dung chnh

Bin dch chng trnh


Chng trnh c vit bng ngn ng bc
cao phi c dch ra m my thc thi

1. Lch s pht trin

Cng vic dch c thc hin bi trnh bin


dch (compiler)

2. Cc phn t c bn ca ngn ng C

Cc giai on dch chng trnh


Vn bn ngun Tin x l
Source code Preprocessor

3. Cu trc c bn ca chng trnh C


4. Bin dch chng trnh C

M thc thi
Executable code

Lin kt
Link

Dch
Compiler

M hp ng
Assembly code

M i tng
Object code

Hp dch
Asembler

Th vin
Libraries
1/27/2012

41

1/27/2012

42

Chng 1: Tng quan v ngn ng lp trnh C

Chng 1: Tng quan v ngn ng lp trnh C

1.4 Bin dch chng trnh C

1.4 Bin dch chng trnh C

Trnh bin dch Turbo C++

Ci t Turbo C++ 3.0

Tn ti nhiu trnh bin dch cho ngn ng C

B1: Chun b b ci ca Turbo C++ 3.0

Turbo C++ ca Borland Inc


Cho php bin dch c C v C++

B ci ti trn mng, kch thc khong 4M


Copy b ci ny vo my (gi s C:\TC_Setup)

B2: Ci t Turbo C

MSC ca Microsoft, GCC ca GNU


Dev-C, C-free,

Tm n th mc cha b ci (C:\TC_Setup)
Kch hot file INSTALL.EXE

Enter the SOURCE drive to use

Enter the SOURCE Path: Nhp ng dn ti th mc


cha cc file ca b ci TC

Turbo C++ c nhiu phin bn khc nhau


S dng Turbo C++3.0 (TC)

Gn nh, tnh nng v d s dng

1/27/2012

43

Chng trnh s yu cu ch ra a cha b ci TC


Nhp tn a ( C nu t b ci ti C:\TC_Setup).

Thng thng chng trnh s t ng tm ra ch cn n


Enter chuyn sang bc tip theo.

1/27/2012

Chng 1: Tng quan v ngn ng lp trnh C

Chng 1: Tng quan v ngn ng lp trnh C

1.4 Bin dch chng trnh C

1.4 Bin dch chng trnh C

Ci t Turbo C++ 3.0

44

Mn hnh giao din Turbo C++ 3.0

B3: Xc nh th mc ci t. Th mc ny s cha
cc file ca TC c s dng v sau.

Dng cc phm v di chuyn hp sng n phn


Start Installation v n Enter. Chng trnh s t ng
thc hin v hon tt qu trnh ci t
Th mc ci t mc nh s l \TC nm trn th mc
gc ca a cha b ci.
Nu mun thay i th mc ci t, dng cc phm v
di chuyn hp sng n Directories, g Enter v
nhp ng dn mi, sau n phm Esc tr v

Lu : C th copy ton b th mc TC s dng 45

1/27/2012

1/27/2012

Chng 1: Tng quan v ngn ng lp trnh C

Chng 1: Tng quan v ngn ng lp trnh C

1.4 Bin dch chng trnh C

1.4 Bin dch chng trnh C

S dng Turbo C++ 3.0

46

Chng trnh Hello world!

Khi ng chng trnh:


Tm n th mc BIN trong th mc ci t
Chy file TC.EXE

To ca s son tho mi
Chn menu File (hoc n Alt+F) chn New

Son tho chng trnh


G chng trnh ngun vo ca s son tho

M chng trnh c: Alt+F Open (F3)


Lu chng trnh: Alt+F Save (F2)
Nu cha c tn, s c nhc nhp tn file

Bin dch chng trnh: Bm phm F9


Chy chng trnh: Ctrl + F9
1/27/2012
Xem li kt qu thc hin: Alt+F5

47

1/27/2012

48

Chng 1: Tng quan v ngn ng C

Phn 3: Lp trnh C

Tm tt

Ni dung chnh
Chng 1: Tng quan v ngn ng C

1. Lch s pht trin ca ngn ng C

Chng 2: Kiu d liu v biu thc trong C

2. Cc phn t c bn ca ngn ng C

Chng 3: Vo ra d liu

10 phn t c bn

Chng 4: Cu trc iu khin

3. Cu trc c bn ca chng trnh C

Chng 5: Mng, con tr v xu k t

4 phn

Chng 6: Cu trc

4. Thc hin chng trnh C vi Turbo C

Chng 7: Hm
Chng 8: Tp d liu
1/27/2012

49

Chng 2: Kiu d liu v biu thc trong C

1/27/2012

50

Chng 2: Kiu d liu v biu thc trong C

2.1 Cc kiu d liu chun trong C

Ni dung chnh

Cc kiu n
Kiu d liu ngha

Kch thc

Min d liu

char

K t;
S nguyn c du

1 byte

-128 127

2. Biu thc trong C

int
short int

S nguyn
c du

2 byte

-32.76832.767

3. Cc ton t trong C

long

S nguyn c du

4 byte

-2,147,483,648
2,147,483,647

float

S thc du phy
ng,
chnh xc n

4 byte

3.4E-38
3.4E+38

double

S thc du phy
ng,
chnh xc kp

8 byte

1.7E-308
1.7E+308

1. Cc kiu d liu chun trong C

long int

4. Mt s ton t c trng

1/27/2012

51

Chng 2: Kiu d liu v biu thc trong C

2.1 Cc kiu d liu chun trong C

Cc kiu kt hp

Biu din hng s

Vi s nguyn, thm t kha unsigned ch ra s khng du


Kiu d liu

ngha

Kch thc Min d liu

unsigned char

S nguyn
khng du

1 byte

0 255

unsigned short
unsigned
unsigned int
unsigned long
unsigned long int
long double

S nguyn
khng du

2 byte

065.535

S nguyn
khng du

4 byte

0 4,294,967,295

S thc du
phy ng,

10 byte

3.4E-4932
1.1E+4932

void

52

Chng 2: Kiu d liu v biu thc trong C

2.1 Cc kiu d liu chun trong C

1/27/2012

1/27/2012

Kiu d liu

V d

ngha

S nguyn

123, -12

S thp phn

012, 03777

S bt phn

0x7F, 0x3fe15
39u 0267u, 0xFFu
12L, 07723L
0xFFL, -10L
0xFFUL,0xFFLU
3.1415 -12.3, .327
10e-12, -15.3E12
3.1415F, -12.F

S h 16
S khng du

S nguyn ln

S thc

L kiu rng, kch thc khng


53

1/27/2012

54

Chng 2: Kiu d liu v biu thc trong C

Chng 2: Kiu d liu v biu thc trong C

2.1 Cc kiu d liu chun trong C

2.1 Cc kiu d liu chun trong C

Khai bo bin

Khai bo bin
Sau khi khai bo, bin cha c gi tr xc nh.

Mt bin phi c khai bo trc khi s dng


C php khai bo:

int n; m = 2 * n; m=?
Bin cn c gn gi tr trc khi s dng

KieuDuLieu TenBien;

C cho php kt hp khai bo v khi to bin


KieuDuLieu TenBien = GiaTriBanDau;

KieuDuLieu TenBien1, , TenBien_N;

V d:

KieuDuLieu Bien1=GiaTri1, BienN=Gia_TriN;


V d:

//Khai bo bin x l mt s nguyn 2 byte c du

int x;

//Khai bo bin nguyn a v khi to gia tri bng 3

//Khai bo cc bin y, z l cc s thc 4 byte

float

int a = 3;

y,z;

//Khai bo bin thc x,y v khi to gi tri bng 5.0 v 7.6

//Sau khi khai bo, c th s dng


1/27/2012

x = 3;

float x = 5.0, y = 7.6;

y = x + 1;

55

Chng 2: Kiu d liu v biu thc trong C

1/27/2012

56

Chng 2: Kiu d liu v biu thc trong C

2.1 Cc kiu d liu chun trong C

2.1 Cc kiu d liu chun trong C

Khai bo hng

Khai bo hng

Dng ch th

#define

C php:

Dng t kha const

Khng c du
chm phy (;)

C php:

# define Tn_hng Gi_tr

const Kiu Tn_hng = gi_tr;

V d:

V d:

#define MAX_SINH_VIEN 50

const int MAX_SINH_VIEN = 50;

#define CNTT Cong nghe thong tin

const char CNTT[20] = Cong nghe thong tin;

#define DIEM_CHUAN 23.5

const float DIEM_CHUAN = 23.5;

1/27/2012

57

58

Chng 2: Kiu d liu v biu thc trong C

Chng 2: Kiu d liu v biu thc trong C

2.1 Cc kiu d liu chun trong C

Ni dung chnh

Khai bo hng

Ch :
Gi tr ca cc hng phi c xc nh ngay
khi khai bo.
Trong chng trnh, KHNG th thay i
c gi tr ca hng.

#define l ch th tin x l
D c, d thay i
D chuyn i gia cc nn tng phn cng hn
Tc nhanh hn
1/27/2012

1/27/2012

59

1. Cc kiu d liu chun trong C


2. Biu thc trong C
3. Cc ton t trong C
4. Mt s ton t c trng

1/27/2012

60

10

Chng 2: Kiu d liu v biu thc trong C

Chng 2: Kiu d liu v biu thc trong C

2.2 Biu thc trong C

2.2 Biu thc trong C

Mc ch s dng

Tnh ton gi tr biu thc


Cc ton hng c thay th bi gi tr tng ng

Lm v phi ca lnh gn.

Cc php tnh c thc hin

Lm ton hng trong cc biu thc khc.

V d (alpha = 10, beta = 81)

Lm tham s thc s trong li gi hm.

Biu thc: alpha + sqrt(beta)

Lm biu thc kim tra trong cc cu trc


iu khin

: alpha + sqrt(81)
: alpha + 9.0

Cu trc lp: for, while, do while.

: 10 + 9.0

Cu trc r nhnh: if, switch.


1/27/2012

: 19.0
61

Chng 2: Kiu d liu v biu thc trong C

1/27/2012

62

Chng 2: Kiu d liu v biu thc trong C

2.2 Biu thc trong C

2.2 Biu thc trong C

Cc loi biu thc

Biu thc s hc

L biu thc m gi tr ca n l cc i
lng s hc (s nguyn, s thc).

Biu th s hc

S dng cc ton t l cc php ton s hc


(cng, tr, nhn, chia),

Biu thc quan h

Cc ton hng l cc i lng s hc (hng s,


bin, biu thc khc).

V d: a, b, c l cc bin thuc kiu s thc.

Biu thc logic

3 * 3.7
8 + 6/3
a + b c

1/27/2012

63

Chng 2: Kiu d liu v biu thc trong C

1/27/2012

64

Chng 2: Kiu d liu v biu thc trong C

2.2 Biu thc trong C

2.2 Biu thc trong C

Biu thc quan h

Biu thc logic

L nhng biu thc c s dng cc ton t


quan h nh ln hn, nh hn, khc nhau
Ch c th tr v mt trong 2 gi tr logic
ng (TRUE) hoc Sai (FALSE)
V d

L biu thc tr v cc gi tr logic ng/Sai


Cc php ton logic gm c
AND

V logic,

s dng ton t

&&

OR

HOC logic, s dng ton t

||

NOT PH NH, s dng ton t

Biu thc quan h l trng hp ring ca biu


thc logic.

Ngn ng C coi cc gi tr nguyn khc 0 (2,


8, -5,..) l gi tr logic ng (TRUE), gi tr 0
l gi tr logic sai (FALSE)
1/27/2012

65

Biu thc logic cng tr v mt gi tr s hc 0/1 66

1/27/2012

11

Chng 2: Kiu d liu v biu thc trong C

Chng 2: Kiu d liu v biu thc trong C

2.2 Biu thc trong C

Biu thc logic V d

Ni dung chnh

1. Cc kiu d liu chun trong C


2. Biu thc trong C
3. Cc ton t trong C
4. Mt s ton t c trng
5 * (12 > 6) ?
1/27/2012

67

Chng 2: Kiu d liu v biu thc trong C

1/27/2012

Chng 2: Kiu d liu v biu thc trong C

2.3 Cc ton t trong C

2.3 Cc php t trong C

Cc ton t chnh

Cc ton t s hc
Ton
t

Cc ton t cho php to nn cc biu


thc t cc hng v bin
Ton t s hc
Ton t quan h
Ton t logic
Ton t logic bit
Ton t gn
1/27/2012

69

Chng 2: Kiu d liu v biu thc trong C

ngha

Kiu d liu ca
ton hng

V d
(int a = 12; float x=3.0)

o du

float, double, int, long,..


(S nguyn hoc thc)

-12, -12.34, - a, - x
- -a 12, --a ?

+
*

Cng

float, double, int, long,..

12 + -x 9.0

Tr

float, double, int, long,..

12.0 - -3 15.0

Nhn

float, double, int, long,..


(S nguyn hoc thc)

12 * 3.0 36.0
12 * 3 36

Chia

Nu c t nht 1 ton
hng l s thc

17.0/3.0 5.666667
17/3.0 5.666667
17.0/3 5.666667

/
%

Chia ly nguyn S nguyn int, long,..

17/35

Chia ly d

17%3 2

S nguyn: int, long,..

1/27/2012

70

Chng 2: Kiu d liu v biu thc trong C

2.3 Cc ton t trong C

2.3 Cc ton t trong C

Cc ton t quan h

Cc ton t logic

S dng xy dng cc biu thc logic


Biu thc logic c kt qu logic ng
Tr v gi tr 1
Biu thc logic c kt qu logic sai
Tr v gi tr 0

<, >, <=, >=, ==, !=


Dng cho php so snh gi tr 2 ton hng
Kt qu php so snh l mt s nguyn
1 nu quan h c kt qu l ng,
0 nu quan h c kt qu sai
V d:

Cc ton t

6 > 4 Tr v gi tr 1
6 < 4 Tr v gi tr 0
int b =(x !=y);
Nu x v y khc nhau, biu thc ng v b mang gi tr 1.
Ngc li biu thc sai v b mang gi tr 0
1/27/2012

68

5 * (12 > 6) 5

V logic:

Op1 && Op2

Hoc logic:

Op1 || Op2

Ph nh logic:
71

1/27/2012

! Op

Oprand: Ton hng

72

12

Chng 2: Kiu d liu v biu thc trong C

Chng 2: Kiu d liu v biu thc trong C

2.3 Cc ton t trong C

2.3 Cc ton t trong C

Cc ton t logic (tip)

Ton t logic bit

Ton t bit c s dng vi kiu s nguyn

V logic ( && ) :
Cho kt qu ng (tr v gi tr 1) khi c 2 ton
hng u ng (khc 0)
V d: 3 < 5 && 4 < 6 1; 3 < 5 && 5 > 6 0

Hoc logic ( || ):

Op1 & Op2

Hoc nh phn :

Op1 | Op2

Hoc c loi tr nh phn: Op1 ^ Op2

Cho kt qu sai (tr v gi tr 0) ch khi c 2 ton


hng u sai (bng 0)
V d:
4 || 5 < 3 1; 5 < 5 || 2 > 6 0

o bt nh phn :
Dch tri:

Cho kt qu ng (1) hoc sai (0) khi ton hng


l sai (0) hoc ng (khc 0)
V d:
! 3 0; !(2 > 3) 1;

1/27/2012

~ Op
Oprand: Ton hng

Ph nh logic ( ! ):

Op << n (nhn vi 2n)

Dch phi: Op >> n (Chia vi 2n)


Op l gi tr c dch, n l s bit dch
73

Chng 2: Kiu d liu v biu thc trong C

1/27/2012

74

Chng 2: Kiu d liu v biu thc trong C

2.3 Cc ton t trong C

2.3 Cc ton t trong C

Ton t logic bit (tip)


char Op1 = 83, Op2 = -38,
char r = Op1 & Op2;
01010011
11011010
r = 0 1 0 1 0 0 1 0 (82)

Op

Ton t logic bit (tip)


char Op1 = 83, Op2 = -38,

3;

char r = Op1 | Op2;


01010011
11011010
r = 1 1 0 1 1 0 1 1 (-37)

char r = Op1 ^ Op2;


char r = ~ Op2;
01010011
11011010
11011010
r = 0 0 1 0 0 1 0 1 (37)
r = 1 0 0 0 1 0 0 1 (-119)
unsigned char r = Op1 | Op2; r = 1 1 0 1 1 0 1 1 219
1/27/2012

75

Chng 2: Kiu d liu v biu thc trong C

Op

3;

char r = Op1 >> Op;


01010011
r = 0 0 0 0 1 0 1 0 (10)
char r = Op2 >> Op;
11011010
r =1 1 1 1 1 0 1 1 (-5)

unsigned char Op =218;


unsigned char r =Op >> 3;
11011010
r =0 0 0 1 1 0 1 1 (27)

char r = Op2 << 2;


r = 0 1 1 0 1 0 0 0 (104)
int r = Op2<<2 ?
1/27/2012

76

Chng 2: Kiu d liu v biu thc trong C

2.3 Cc ton t trong C

2.3 Cc ton t trong C

Ton t gn

Ton t gn

Bin = Biu_thc;

Biu thc gn l biu thc nn cng c gi tr.


Gi tr ca biu thc gn bng gi tr ca
biu_thc bn phi ton t

K t = l ton t gn
Biu thc bn phi du bng tc tnh ton
Gi tr ca biu_thc c gn cho bin

C th gn gi tr ca biu thc gn cho mt


bin khc

V d:
int
a =
b =
c =

V nh phn:

C th s dng nh mt biu thc bnh thng

a, b, c;
3;
a + 5;
a * b;

V d:
int a, b, c;
a = b = 2007;
c = (a = 20) * (b = 30);// c600

1/27/2012

77

1/27/2012

78

13

Chng 2: Kiu d liu v biu thc trong C

Chng 2: Kiu d liu v biu thc trong C

2.3 Cc ton t trong C

Ton t gn Dng kt hp

Ni dung chnh

Var <op>= Exp Var = Var <op> Exp

1. Cc kiu d liu chun trong C

Ton t s hc:

+=
V d:

-=

*=

/=

a *= b

%=

2. Biu thc trong C

// a= a * b

Ton t logic bit:


&=
|=
x &= 0x3F
V d:

^=
// x = x & 0x3F

Ton t dch:
<<= >>=
s <<= 4
V d:

// s = s << 4

1/27/2012

3. Cc ton t trong C
4. Mt s ton t c trng

79

Chng 2: Kiu d liu v biu thc trong C

1/27/2012

80

Chng 2: Kiu d liu v biu thc trong C

2.4 Mt s ton t c trng

2.4 Mt s ton t c trng

Cc ton t

Tng gim t ng mt n v

Tng/gim t ng mt n v

Tng t ng

--

Gim t ng

++Var, Var++
--Var, Var-Variable: Bin

Tin t (hu t): bin c tng/gim trc


(sau) khi s dng tnh ton biu thc
V d:

Ly a ch
Biu thc iu kin

int

Ton t phy
1/27/2012

++

81

Chng 2: Kiu d liu v biu thc trong C

1/27/2012

a = 5, b, c, d, e;
b = a++;
c = ++a;
d = a--;
e = --a;

// b = 5 sau a = 6
// a = 7 ri ti c = 7
// d = 7 ri ti a = 6
// a = 5 sau e= 5

82

Chng 2: Kiu d liu v biu thc trong C

2.4 Mt s ton t c trng

2.4 Mt s ton t c trng

Ton t ly a ch

Ton t phng iu kin (biu thc iu kin)

& Tn_bin
K t & l ton t ly a ch bin
Bin thc cht l mt vng
nh ca my tnh c t tn
tn ca bin
Mi nh trn b nh my
tnh u c nh a ch.
Mi bin u c a ch
V d:
int a = 2006;
&a a ch ca nh dng
Kiu a ch?
cha gi tr bin a
1/27/2012

exp1 ? exp 2 : exp3


expression: Biu thc

Nu exp1 0 (gi tr ng), biu thc iu


kin tr v gi tr ca exp2
Nu exp1 = 0 (gi tr sai) biu thc iu kin
tr v gi tr ca exp3
V d:
float x= 5.2, y = 3.8, z;
z = (x < y) ? x : y;
z = 3.8
// z min{x, y}
if (x < y) z = x; else z = y;
83

1/27/2012

84

14

Chng 2: Kiu d liu v biu thc trong C

Chng 2: Kiu d liu v biu thc trong C

2.4 Mt s ton t c trng

2.4 Mt s ton t c trng

Ton t phy

Chuyn kiu
(Kiu) biu thc
Chuyn kiu t ng

biu_thc_1, biu thc_2,..


Ton t phy ( , ) cho php s dng nhiu biu
thc ti ni ch cho php vit mt biu thc
Cc biu thc c tnh ton t tri qua phi
Gi tr v kiu ca biu thc l gi tr v kiu ca
biu thc cui cng, bn phi
V d:
if (i = 0, a !=b)
for(i = 0, j = 0; i < 100; i++, j++).
1/27/2012

Chng trnh dch t ng chuyn i t kiu c


phm vi biu din thp ti kiu c phm vi biu
din cao
char int long int float
double long double

p kiu
Bng cu lnh tng minh trong chng trnh
c s dng khi mun chuyn sang kiu c
phm vi biu din thp hn
85

Chng 2: Kiu d liu v biu thc trong C

2.4 Mt s ton t c trng

Th t u tin cc ton t

Chuyn kiuV d
#include <stdio.h>
#include <conio.h>

87

Mc
1

Ton t
-> . [ ] () ++ hu t --hu t

Chc nng
La chn, ch s

++ -- ~ ! + - * & () sizeof

Ton t 1 ngi, p kiu,

3
4
5
6
7
8
9
10
11
12
13
14

* / %
+ >> <<
< <= > >=
== !=
&
^
|
&&
||
?:
= *= += <<= &= ...

Ton t s hc lp nhn
Ton t s hc lp cng
Dch bit
Ton t quan h
Bng, khc
AND nh phn
XOR nh phn
OR nh phn
AND logic
OR logic
Ton t phng iu kin
Ton t gn

1/27/2012

2.4 Mt s ton t c trng

Th t u tin cc ton t

V d

Nguyn tc
Biu thc con trong ngoc c tnh ton trc
Php ton mt ngi ng bn tri ton hng c
kt hp vi ton hng i lin n.
Ton hng ng cnh hai ton t

const int N=10;


float S= 0.0;
int b;
S = N/3 +1;
b=(S>4);

Nu hai ton t c u tin khc nhau th ton t no


c u tin cao hn s kt hp vi ton hng
Nu hai ton t cng u tin th da vo trt t kt
hp ca cc ton t xc nh ton t c kt hp
vi ton hng.

int a= 3, b=4, c;
c = a++ * ++b;
a=.. b= c=

S=. b =..

V d
a < 10 && 2 * b < c ( a < 10 ) && ( ( 2 * b ) < c )
Ch : int x = 5, a = 5 * x++; a = 25, x = 6

88

Chng 2: Kiu d liu v biu thc trong C

Chng 2: Kiu d liu v biu thc trong C

1/27/2012

Chiu

Chiu kt hp vi cc ton hng

1/27/2012

86

Chng 2: Kiu d liu v biu thc trong C

2.4 Mt s ton t c trng

void main(){
long L = 0xABCDEF; float f = 123.456;
int i;
L = 11259375; i = -12817(CDEF)
clrscr();
f = 123.456001; L = 123; i = 123
i = (int) L;
printf(\n L = %ld; i = %d(%X), L, i, i);
i = (int) f; L = (long) f;
printf(\n f = %f; L = %ld; i = %d, f, L, i);
}

1/27/2012

89

int k ,num=30;
k =num>5 ? (num <=10 ? 100 : 200): 500;
k=?

1/27/2012

90

15

Chng 2: Kiu d liu v biu thc trong C

Phn 3: Lp trnh C

Tm tt
Kiu d liu
Nguyn

Ni dung chnh
Chng 1: Tng quan v ngn ng C

: char, unsigned char, int, long,


unsigned int, unsigned long
: float, double, long double

Thc

Chng 2: Kiu d liu v biu thc trong C


Chng 3: Vo ra d liu

Gi tr logic

Chng 4: Cu trc iu khin

ng/TRUE : 1 (Khc 0)
Sai/FALSE : 0

Chng 5: Mng, con tr v xu k t

Ton t
Mt ngi
Hai ngi
3 ngi

1/27/2012

: + -; ++ --; ~ !; &; (); &, ^, |


: + - * / %; == != < <= > >=; << >>;
&& ||; = *= +=
:?:

Chng 6: Cu trc
Chng 7: Hm
Chng 8: Tp d liu
91

Chng 3: Vo ra d liu

92

Chng 3: Vo/Ra d liu

3.1 Cc hm vo ra c bn

Ni dung chnh

Cc hm vo ra c bn

a ra d liu:

1. Cc hm vo ra c bn:

printf()

printf()
scanf()

Nhp d liu

scanf()

2. Cc hm vo ra khc

Cn np th vin stdio.h

gets()
puts()
getch()
1/27/2012

1/27/2012

khai bo tp tiu :

#include <stdio.h>
93

Chng 3: Vo/Ra d liu

1/27/2012

94

Chng 3: Vo/Ra d liu

3.1 Cc hm vo ra c bn printf()

3.1 Cc hm vo ra c bn

Hm a ra d liu

Mc ch
Hin th ra mn hnh cc loi d liu c bn
S nguyn, s thc, k t, xu k t

printf()

To mt s hiu ng hin th c bit


Xung dng, sang trang,

C php

printf(xau_dinh_dang [, DS_tham_so]);

1/27/2012

95

1/27/2012

96

16

Chng 3: Vo/Ra d liu

Chng 3: Vo/Ra d liu

3.1 Cc hm vo ra c bn printf()

3.1 Cc hm vo ra c bn printf()

C php

V d

printf(xau_dinh_dang [, DS_tham_so]);

#include <stdio.h>
void main()
{ int a = 5;
float x = 1.234;
printf( Hien thi mot bieu thuc nguyen %d v
mot so thuc %f ,2 * a, x);
}

Xau_dinh_dang: L mt xu qui nh cch thc


hin th d liu ra mn hnh my tnh.
Bao gm cc nhm k t nh dng
Nhm k t nh dng th k xc nh quy cch
hin th tham s th k trong DS_tham_s
S lng tham s trong DS_tham_s bng s lng
nhm cc k t nh dng trong xu_nh_dng.

DS_tham_so: Danh sch cc bin/biu thc s

Kt qu:

c hin th gi tr ln mn hnh theo cch thc


c qui nh trong xau_dinh_dang.

Hien thi mot bieu thuc nguyen 10 va mot so thuc 1.234000

1/27/2012

97

Chng 3: Vo/Ra d liu

1/27/2012

98

Chng 3: Vo/Ra d liu

3.1 Cc hm vo ra c bn printf()

3.1 Cc hm vo ra c bn printf()

Xu nh dng

Nhm k t nh dng
Mi nhm k t nh dng ch dng cho mt
kiu d liu
V d: %d dng cho kiu nguyn
%f dng cho kiu thc
DS_tham_so phi ph hp vi cc nhm k
t nh dng trong xau_dinh_dang v:

Cc k t thng thng:
c hin th ra mn hnh.

Cc k t iu khin:
Dng to cc hiu ng hin th c bit nh
xung dng (\n)..

Cc nhm k t nh dng:

S lng;
Th t
Kiu d liu;

Xc nh quy cch hin th cc tham s trong


phn danh_sach_tham_so.
1/27/2012

99

Chng 3: Vo/Ra d liu

Nu khng ph hp s hin
th ra kt qu khng nh
printf( %d ,3.14); -31457
C-Free 1374389535 !?

1/27/2012

100

Chng 3: Vo/Ra d liu

3.1 Cc hm vo ra c bn printf()

3.1 Cc hm vo ra c bn printf()

Cc k t nh dng

Cc k t nh dng

K t
K t
%i, %d

Kiu d liu
int, char

Kt qu
S thp phn

%o

int, char

S bt phn
(khng c 0 ng trc)

%x %X

int, char

S hexa

%u

unsigned int/char S thp phn

Kiu d liu

Kt qu

%ld, %li

long

S thp phn

%lo

long

S bt phn
(khng c 0 ng trc)

%lx, %LX

long

S hexa
(ch thng/ch hoa)

(ch thng/ch hoa)

%lu

unsigned long S thp phn

Nhn xt:
Vi kiu long, thm k t l ngay sau du %
1/27/2012

101

1/27/2012

102

17

Chng 3: Vo/Ra d liu

Chng 3: Vo/Ra d liu

3.1 Cc hm vo ra c bn printf()

3.1 Cc hm vo ra c bn printf()

rng hin th S nguyn, K t, Xu k t

Cc k t nh dng
K t
%f

Kiu d liu
Kt qu
float/double S thc du phy tnh

%e, %E float/double

S thc du phy ng

%c

int, char

K t n l

%s

char []

Hin th xu k t kt
thc bi \0
Hin th k t %

%%

C dng %m,
m l mt gi tr nguyn, khng m.
m cho bit s ch trng dnh cho hin th
biu thc tng ng
V d:
int a = 1234;
printf(%5d,a) 1234
printf(%5d,34)
34
k hiu cho du trng (space)

1/27/2012

103

Chng 3: Vo/Ra d liu

1/27/2012

104

Chng 3: Vo/Ra d liu

3.1 Cc hm vo ra c bn printf()

3.1 Cc hm vo ra c bn printf()

rng hin th S thc

rng hin thV d

C dng %m.n,
printf("\n%3d %15s %3c", 1, "nguyen van a", 'g');
printf("\n%3d %15s %3c", 2, "tran van b", 'k');

nguyen van a

tran van b

1/27/2012

105

Chng 3: Vo/Ra d liu

3.1 Cc hm vo ra c bn printf()

rng hin th Ch
Nu s ch cn hin th d liu ln hn
c cung cp trong nh dng T ng
cung cp thm ch mi hin th y ,
khng ct bt ni dung ca d liu.
V d:
printf(%2d, 1234); 1234
printf(%6.3f, 123.456); 123.456
printf(%12.6e, 123.456); 1.234560e+02
printf(%12.3e, 123.456);
1.235e+02
C-Free

1.235e+002
1/27/2012
107

m, n l 2 gi tr nguyn, khng m.
m cho bit kch thc hin th s thc
n cho bit kch thc dnh cho phn
thp phn, nu khng C s lm trn
khi hin th
V d:
printf("\n%f",17.345);
17.345000
printf("\n%.2f",17.345);
17.35
printf("\n%8.2f",17.345);

17.35

1/27/2012

106

Chng 3: Vo/Ra d liu

3.1 Cc hm vo ra c bn printf()

Cn l tri - cn l phi

% Khi hin th d liu c s dng tham s


rng, cn l tri cn thm du tr - vo
ngay sau du %:
Ngm nh, cn l phi

V d:
printf("%-3d%-10s%-5.2f%-3c",5,"Hello",7.5, 'g')

5
1/27/2012

Hello

7.50 g
108

18

Chng 3: Vo/Ra d liu

Chng 3: Vo/Ra d liu

3.1 Cc hm vo ra c bn scanf()

3.1 Cc hm vo ra c bn

Hm nhp d liu

Mc ch
Dng nhp d liu t bn phm
K t n l
Chui k t
S nguyn

scanf()

Thp phn, Bt phn, Hexa

S thc
Du phy tnh; Du phy ng

C php

scanf(xau_dinh_dang[,DS_dia_chi]);
1/27/2012

109

Chng 3: Vo/Ra d liu

110

Chng 3: Vo/Ra d liu

3.1 Cc hm vo ra c bn scanf()

3.1 Cc hm vo ra c bn scanf()

C php

Ha ng

scanf(xau_dinh_dang [, DS_dia_chi]);
Xau_dinh_dang:
Gm cc k t c qui nh cho tng loi
d liu c nhp vo.

c cc k t c g vo t bn phm
Cn c vo xu nh dng, chuyn thng
tin nhp sang kiu d liu ph hp

V d: d liu nh nhp kiu nguyn th xu


nh dng l : %d

DS_dia_chi:
Bao gm a ch ca cc bin (ton t &),
phn tch nhau bi du phy (,)
Phi ph hp vi cc k t nh dng trong
xau_dinh_dang v s lng, kiu, th t 111
1/27/2012

Chng 3: Vo/Ra d liu

Gn nhng gi tr va nhp vo cc bin


tng ng trong DS_dia_chi
V d:
int a;
scanf(%d,&a); 1234_ a = 1234
1/27/2012

112

Chng 3: Vo/Ra d liu

3.1 Cc hm vo ra c bn scanf()

3.1 Cc hm vo ra c bn scanf()

Ghi ch
Thng tin c g vo t bn phm, c lu
vng m trc khi c x l bi hm
scanf()Hm scanf() c t vng m
#include <stdio.h>
int main(){
int a, b;
scanf("%d",&a);
scanf("%d",&b);
printf ("%d %d", a, b);
return 0;
}
1/27/2012

1/27/2012

113

Cc k t nh dng
K t

Khun dng d liu nhp

%c

c k t n l

%d

c s thp phn

%o

c s bt phn

%x

c s hexa

%u

c s thp phn khng du

1/27/2012

114

19

Chng 3: Vo/Ra d liu

Chng 3: Vo/Ra d liu

3.1 Cc hm vo ra c bn scanf()

3.1 Cc hm vo ra c bn scanf()

Cc k t nh dng
K t

V d
Ch thch

%s

c xu k t ti khi gp du phn cch

%f

c s thc du phy tnh (float)

%ld
%lf

c s nguyn kiu long


c s thc du phy tnh (double)

%e

c s thc du phy ng

%%

c k t %

1/27/2012

115

Chng 3: Vo/Ra d liu

#include <conio.h>
#include <stdio.h>
void main(){
// khai bao bien
int a; float x;
char ch; char str[30];
// Nhap du lieu
printf(Nhap vao mot so nguyen:); scanf(%d,&a);
printf(\nNhap vao mot so thuc:); scanf(%f,&x);
printf(\n Nhap vao mot ki tu:);
fflush(stdin); scanf(%c,&ch);
1/27/2012

116

Chng 3: Vo/Ra d liu

3.1 Cc hm vo ra c bn scanf()

3.1 Cc hm vo ra c bn scanf()

V d

V dKt qu thc hin

printf(\nNhap vao mot xau ki tu:);


fflush(stdin); scanf(%s,str);
// Hien thi du lieu vua nhap vao
printf(\nNhung du lieu vua nhap vao);
printf(\nSo nguyen : %d,a);
printf(\nSo thuc : %5.2f,x);
printf(\nKy tu : %c,ch);
printf(\nXau ky tu : %s,str);
getch();
}
1/27/2012

117

Chng 3: Vo/Ra d liu

118

Chng 3: Vo/Ra d liu

3.1 Cc hm vo ra c bn scanf()

3.1 Cc hm vo ra c bn scanf()

Cc quy tc cn lu

Cc quy tc cn lu

Khi c s

Khi c k t
Hm scanf() cho rng mi k t c trong b m
ca thit b vo chun u l hp l, k c cc k
t tab, xung dng hay du cch

Hm scanf() quan nim rng mi k t s,


du chm (.) u l k t hp l.
S thc du phy ng, chp nhn k t e/E

Khi c xu k t:

Khi gp cc du phn cch nh tab, xung


dng hay du cch (space bar), scanf() s
hiu l kt thc nhp d liu cho mt s

1/27/2012

1/27/2012

Hm scanf() nu gp cc k t du trng, du tab


hay du xung dng th n s hiu l kt thc
nhp d liu cho mt xu k t.
Ghi ch:
Trc khi nhp d liu k t hay xu k t nn
dng lnh fflush(stdin) xa b m.
119

1/27/2012

120

20

Chng 3: Vo/Ra d liu

Chng 3: Vo/Ra d liu

3.1 Cc hm vo ra c bn scanf()

3.1 Cc hm vo ra c bn scanf()

V d: c 2 s nguyn, a ra tng, hiu, tch

V d: c 2 s nguyn, a ra tng, hiu, tch

#include <stdio.h>
int main(){
int A, B;
printf("Nhap vao 2 so nguyen : "); scanf("%d %d",&A,&B);
printf("\n");
printf("Tong %d + %d = %d \n", A, B, A + B);
printf("Hieu %d - %d = %d\n", A, B, A - B);
printf("Tich %d x %d = %d\n", A, B, A * B);
printf("Thuong %d / %d = %.3f\n", A, B, (float)A / B);
printf("Chia nguyen %d / %d = %d\n", A, B, A / B);
printf("Chia du %d %% %d = %d\n", A, B, A % B);
printf("\n");
return 0;
}
1/27/2012
121

Chng 3: Vo/Ra d liu

1/27/2012

122

Chng 3: Vo/Ra d liu

3.1 Cc hm vo ra c bn scanf()

3.1 Cc hm vo ra c bn scanf()

V d: c ta 3 im A,B,C v a ra d/tch ABC

Bi tp
1. Vit chng trnh nhp vo t bn phm chiu
di 3 cnh ca mt tam gic, ri a ra din
tch v cc ng cao ca tam gic
2. Nhp vo t bn phm ta 3 im A,B,C ri
a ra di cc cnh ca tam gic ABC v
ca ng trung tuyn AM
3. Cho hm s: f ( x) = x 7 + 53 x 5 + 3 x 3 + 2 + 12
Vit chng trnh nhp vo 3 s thc a,b,c v a ra
trung bnh cng ca f(a),f(b),f(c)

4. Nhp x vo t bn phm v tnh gi tr ca biu


thc A = cos 3a + 5 2 x 3 + x + 1 trong a = 2 x + v b = ln(e x+1.23 + 1)
2

log 7 (3 x + 2.14b)

1/27/2012

123

#include <stdio.h>
#include <math.h>
int main(){
float Ax,Ay, Bx, By, Cx, Cy, AB, BC, CA,p;
printf("Nhap vao toa do diem A : "); scanf("%f %f",&Ax,&Ay);
printf("Nhap vao toa do diem B : "); scanf("%f %f",&Bx,&By);
printf("Nhap vao toa do diem C : "); scanf("%f %f",&Cx,&Cy);
//Tinh do dai cac canh cua tam giac
AB = sqrt((Ax-Bx)*(Ax-Bx)+(Ay-By)*(Ay-By));
BC = sqrt((Bx-Cx)*(Bx-Cx)+(By-Cy)*(By-Cy));
CA = sqrt((Cx-Ax)*(Cx-Ax)+(Cy-Ay)*(Cy-Ay));
p = (AB +BC +CA)/2;
printf("Dien tich tam giac ABC la: %f",sqrt(p*(p-AB)*(p-BC)*(p-CA)));
printf("\n");
return 0;
}
1/27/2012

124

Chng 3: Vo ra d liu

Chng 3: Vo/Ra d liu

3.1 Cc hm vo ra c bn scanf()

V d: c ta 3 im A,B,C v a ra d/tch ABC

Ni dung chnh

1. Cc hm vo ra c bn:

printf()
scanf()
2. Cc hm vo ra khc
Cn np th vin
gets()
conio.h
puts()
#include <conio.h>

getch()

1/27/2012

125

1/27/2012

126

21

Chng 3: Vo/Ra d liu

Chng 3: Vo/Ra d liu

3.2 Cc hm vo ra khc

3.2 Cc hm vo ra khc

gets()

puts()
Mc ch:

Mc ch:
Dng nhp vo t bn phm mt xu
k t bao gm c du cch, iu m
hm scanf() khng lm c.
C php :
gets (xu_k_t);
V d:

1/27/2012

char str [40];


printf(Nhap vao mot xau ki tu:);
fflush(stdin);
gets(str);

Hin th ra mn hnh ni dung xu_k_t


v sau a con tr xung dng mi

C php:
puts(xu_k_t);

V d:
puts(Nhap vao xau ki tu:);
Tng ng vi lnh:
printf(%s\n,Nhap vao xau ki tu:).
127

Chng 3: Vo/Ra d liu

1/27/2012

128

Chng 3: Vo/Ra d liu

3.2 Cc hm vo ra khc

3.2 Cc hm vo ra khc

getch()

V d

Mc ch

#include <conio.h>
#include <stdio.h>
void main(){
char ten[30], lop[10]; //Kieu chuoi, mang ky tu
puts("Hay cho biet ten ban : ");
fflush(stdin); gets(ten);
puts("Hay cho biet lop ban hoc : ");
fflush(stdin); gets(lop);

i c mt k t bn phm
Thng dng ch ngi s dng
n mt phm bt k trc khi kt thc
chng trnh.
C php

getch();
1/27/2012

printf("\nChao ban %s, sinh vin lop %s\n",ten,lop);


puts("Chuc ban thi qua mon Tin Hoc Dai Cuong");
getch();
129

}1/27/2012

130

Chng 3: Vo ra d liu

Chng 3: Vo/Ra d liu

3.2 Cc hm vo ra khc

V d Kt qu thc hin

Tm tt
Cc hm c bn (stdio.h)
printf()/ scanf ()
Xu nh dng:

%[flags][width][.precision][l][t]
flags (+/-,#): Xc nh s cn l
l (l/L): Bin dng long
t (d/i/o/u/x/X/f/e/E/g/G/c/s/%): kiu hin th

Cc hm khc (conio.h)
puts() / gets() / getch()

Tm hiu thm
1/27/2012

131

fprintf() / fscanf() Vo/ra t file


sprintf(f) / sscanf() Vo ra t xu k t
1/27/2012

132

22

Phn 3: Lp trnh C

Chng 4: Cu trc iu khin

Ni dung chnh

Ni dung chnh

Chng 1: Tng quan v ngn ng C


Chng 2: Kiu d liu v biu thc trong C
Chng 3: Vo ra d liu

Cu trc if, if else


Cu trc la chn switch

3. Cu trc lp

Chng 4: Cu trc iu khin

Vng lp for
Vng lp while v do while

Chng 5: Mng, con tr v xu k t


Chng 6: Cu trc

4. Cc lnh thay i cu trc lp trnh

Chng 7: Hm

Cu lnh continue
Cu lnh break

Chng 8: Tp d liu
1/27/2012

1. Cu trc lnh khi


2. Cu trc r nhnh

133

Chng 4: Cu trc iu khin

1/27/2012

Chng 4: Cu trc iu khin

4.1 Cu trc lnh khi

4.1 Cu trc lnh khi

Lnh n >< Lnh ghp


Lnh n:

Cu trc lng nhau


Trong lnh ghp cha lnh ghp khc

L biu thc theo sau bi du ;


V du: x= 0; i++; printf(Hello);

S lng nhau khng hn ch

Lnh ghp (khi lnh)


L tp hp cc cu lnh (n v ghp) c
t trong cp ngoc nhn { }
C cho php khai bo bin trong mt khi lnh
Phn khai bo phi nm trc cc cu lnh

Ch :

1/27/2012

Lnh ghp c th t ti bt c ch no m c php


cho php t 1 cu lnh n
Khng t du ; sau mt lnh khi
135

Chng 4: Cu trc iu khin

{//Khai bo i tng cc b trong khi


lenh;
{//Khai bo i tng cc b trong khi
lenh;
...
}
Nu cc i tng c

khai bo trng tn nhau ?


}
1/27/2012

136

Chng 4: Cu trc iu khin

4.1 Cu trc lnh khi

4.1 Cu trc lnh khi

V d
#include <conio.h>
#include <stdio.h>
void main(){ // ham main() cung la mot khoi lenh
int c = 10, d= 20;
printf( Bien ngoai khoi c = %d; d=%d ,c,d);
{
int c = 10;
printf(\n Bien trong khoi c = %d; d=%d,c,d);
printf(\n Gia tri cua cac bien duoc them 10 don vi);
c = c + 10; d= d + 10;
printf(\n Bien trong khoi c = %d; d=%d,c,d);
}
printf(\n Bien ra ngoai khoi c = %d; d=%d,c,d);
getch();
} // ket thuc khoi lenh cua ham main()
1/27/2012

134

V dKt qu thc hin

Bin a phng / Bin ton cc


137

1/27/2012

138

23

Chng 4: Cu trc iu khin

Chng 4: Cu trc iu khin

4.2 Cu trc r nhnh

Ni dung chnh

Cu trc if

1. Cu trc lnh khi


2. Cu trc r nhnh

ng

Cu trc if, if else


Cu trc la chn switch

Cu lnh tip

Vng lp for
Vng lp while v do while

if (Biu thc iu kin)


Cu lnh;
Cu lnh k tip;

4. Cc lnh thay i cu trc lp trnh


Cu lnh continue
Cu lnh break
1/27/2012

139

Chng 4: Cu trc iu khin

if (n % 2 == 0)
printf(so chan);

1/27/2012

140

Chng 4: Cu trc iu khin

4.2 Cu trc r nhnh

4.2 Cu trc r nhnh

Cu trc if.else.

Lu
Biu thc iu kin:

Sai

Biu thc iu kin

L biu thc tr v gi tr logic ng/sai


Gi tr logic ng/True : khc 0

Cu lnh 2

Cu lnh 1

Gi tr logic sai/False: bng 0

Cu lnh tip
if (Biu thc iu kin)
Cu lnh 1;

if (x > y)
z = x;

else

else

Cu lnh 2;

Cu lnh k tip;

V d
if (2+5) printf(Hello world! );Chp nhn

Cu lnh:
C th l mt lnh khi ( t trong cp { } )

z = y;
printf(max: %d, z);

1/27/2012

141

Chng 4: Cu trc iu khin

1/27/2012

142

Chng 4: Cu trc iu khin

4.2 Cu trc r nhnh

4.2 Cu trc r nhnh

V d: So snh 2 s thc c nhp vo

V d: So snh 2 s thc c nhp vo

#include <conio.h>
#include <stdio.h>
void main()
{
float a, b; float max; // khai bao bien
printf( Nhap gia tri a va b: );
scanf(%f %f,&a,&b);
if(a < b)
max = b;
else
max = a;
printf(\nSo lon nhat trong 2 so %.4f va %.4f la %.4f ,a,b,max);
getch();
} //ket thuc ham main()
1/27/2012

Sai

Cu lnh

3. Cu trc lp

ng

Biu thc iu kin

if(a < b)
max = b;
else
max = a;
143

1/27/2012

max = a > b ? a : b;
144

24

Chng 4: Cu trc iu khin

Chng 4: Cu trc iu khin

4.2 Cu trc r nhnh

4.2 Cu trc r nhnh

Gii phng trnh ax + b = 0 Thc hin

V d: Gii phng trnh ax + b = 0


#include <stdio.h>
#include <conio.h>
void main()
{ float a, b;
printf("\nGiai phuong trinh bac nhat ax + b = 0");
printf("\nCho biet he so a b : "); scanf("%f%f", &a, &b);
if (a==0)
if (b!=0)
printf("Phuong trinh vo nghiem");
else
printf("Phuong trinh vo so nghiem");
else
printf("Dap so cua phuong trinh tren = %f", -b/a);
getch();
} //ket thuc ham main()

1/27/2012

145

Chng 4: Cu trc iu khin

146

Chng 4: Cu trc iu khin

4.2 Cu trc r nhnh

4.2 Cu trc r nhnh

V d: Nhp x v tnh hm

Cu trc if / if else lng nhau

#include <stdio.h>
x 2 + sin 4 2x + 1
khi x < 3

#include <math.h>
khi x = 3
f ( x) = 5
void main()

2
{
x 3 + log10 ( x 3) khi x > 3
float x, fx;
printf(\nNhap x: ); scanf(%f,&x);
if(x < 3)
fx = x*x+pow(sin(2*M_PI*x),4)+1;
else
if (x==3)
fx = 5;
else
fx = sqrt(x-3) +log10(x*x-3);
printf(\n Ket qu: %.4f,fx);
}
1/27/2012
147

Chng 4: Cu trc iu khin

Nu cu trc if.. v if else c th lng


nhau. Khi else s tng ng vi if
(pha trn, cha c else) gn nht
if (/k_1)
if (/k_2)

if (/k_1)
{ if (/k_2)
lnh_1;

lnh_1;
else
lnh_2;

}
else
lnh_2;

1/27/2012

148

Chng 4: Cu trc iu khin

4.2 Cu trc r nhnh

4.2 Cu trc r nhnh

Cu trc if / if else lng nhau V d

Cu trc la chn switch

int a, b, c = 10;

switch (bieu_thuc)

if (a==0)
if (b == 0)
c = 20;
else
c = 30;

a 0, b=? c = 10

if (a==0){
if (b == 0)
c = 20;
}else
c = 30;

a 0, b=? c = 30

1/27/2012

1/27/2012

c = 20

case gia_tri_1: lenh_1; [break];

a=0, b 0 c = 30

case gia_tri_2: lenh_2; [break];

a=0, b=0

a=0, b=0

[default: lenh_n+1; [break];]


}

c = 20

Cu_lnh_tip

a=0, b 0 c = 10
149

1/27/2012

150

25

Chng 4: Cu trc iu khin

Chng 4: Cu trc iu khin

4.2 Cu trc r nhnh

4.2 Cu trc r nhnh

Cu trc la chn switch

Cu trc la chn switch

Tnh g/tr
Biu thc
g/tr b/t=G/tr 1

C ch hot ng
Sai

g/tr b/t=G/tr 2

Sai

ng

ng

Lnh_1
break ?

ng

break ?

Lnh_n+1
Sai

ng

break ?

Tnh gi tr ca biu_thc,
So snh gi tr ca biu_thc vi cc
gi_tr_k (vi k = 1, 2, n) nm sau cc
t kha case

ng

Lnh_2
Sai

Sai

default ?

Xy ra 2 kh nng

Sai

ng

Cu_lnh_tip

1/27/2012

151

Chng 4: Cu trc iu khin

1/27/2012

Chng 4: Cu trc iu khin

4.2 Cu trc r nhnh

4.2 Cu trc r nhnh

Cu trc la chn switchc ch hot ng


Tn ti gi_tr_i bng gi tr biu thc.

Cu trc la chn switchc ch hot ng


Khng tn ti gi_tr_i (i = 1, 2, n) no
bng gi tr biu thc

Thc hin lnh_i


Nu tn ti lnh break,

Nu c nhn default:

Nhy ti tip tc thc hin Cu_lnh_tip nm


sau cu trc switch

Chng trnh s thc hin lnh_n+1


Thc hin Cu_lnh_tip nm ngay sau cu trc
switch.

Nu khng tn ti lnh break


Thc hin cc lnh sau lnh_i cho ti khi gp
break hoc ti khi thot khi cu trc switch

Nu khng c nhn default:


Chng trnh chuyn sang thc hin lnh tip theo
nm ngay sau cu trc switch: Cu_Lnh_tip

Thc hin Cu_lnh_tip

1/27/2012

153

Chng 4: Cu trc iu khin

1/27/2012

154

Chng 4: Cu trc iu khin

4.2 Cu trc r nhnh

4.2 Cu trc r nhnh

Cu trc la chn switchV d 1

Cu trc la chn switchV d 1

Lp trnh c t bn phm mt s
nguyn 1N 10 v a ra t ting
Anh tng ng

1/27/2012

152

155

#include <stdio.h>
void main(){
int N;
printf(\nNhap mot gia tri so nguyen khong am: ); scanf(%d,&N);
switch(N) {
case 1: printf( %d -> One \n,N); break;
case 2: printf(%d -> Two \n,N); break;
case 3: printf(%d -> Three \n,N); break;
case 4: printf(%d -> Four \n,N); break;
case 5: printf(%d -> Five \n,N); break;
case 6: printf(%d -> Six \n,N); break;
case 7: printf(%d -> Seven \n,N); break;
case 8: printf(%d -> Eight \n,N); break;
case 9: printf(%d -> Nine \n,N); break;
case 10: printf(%d -> Ten \n,N); break;
default : printf(Khong thoa man dieu kien [1..10] \n);
}
}
1/27/2012

156

26

Chng 4: Cu trc iu khin

Chng 4: Cu trc iu khin

4.2 Cu trc r nhnh

4.2 Cu trc r nhnh

Cu trc la chn switch Thc hin

Cu trc la chn switchV d 2

Nhp vo s nguyn khng m, a


ra ngy trong tun tng ng (theo
s d khi chia cho 7).

1/27/2012

157

Chng 4: Cu trc iu khin

4.2 Cu trc r nhnh

Cu trc la chn switch Thc hin

Cu trc la chn switchV d 2

1/27/2012

159

Chng 4: Cu trc iu khin

1/27/2012

160

Chng 4: Cu trc iu khin

4.2 Cu trc r nhnh

4.2 Cu trc r nhnh

Cu trc la chn switch

Cu trc la chn switch V d

C th s dng c im Khng c lnh


break chng trnh s t ng chuyn
xung thc hin cc cu lnh tip sau
vit chung m lnh cho cc trng hp
khc nhau nhng c x l nh nhau
V d:Trong mt nm cc thng c 30 ngy l 4, 6,
9, 11 cn cc thng c 31 ngy l 1, 3, 5, 7, 8, 10,
12. Ring thng hai c th c 28 hoc 29 ngy.
Hy vit chng trnh nhp vo 1 thng, sau
a ra kt lun thng c bao nhiu ngy
1/27/2012

158

Chng 4: Cu trc iu khin

4.2 Cu trc r nhnh

#include <conio.h>
#include <stdio.h>
void main(){
int a;
printf(\nNhap mot gia tri so nguyen khong am: ); scanf(%d,&a);
switch(a % 7) {
case 0: printf( Chu nhat); break;
case 1: printf( Thu Hai); break;
case 2: printf( Thu Ba); break;
case 3: printf( Thu Tu); break;
case 4: printf( Thu Nam); break;
case 5: printf( Thu Sau); break;
case 6: printf( Thu Bay); break;
}
getch();
}

1/27/2012

161

#include <conio.h>
#include <stdio.h>
void main () {
int thang; clrscr();
printf("\nNhap vao thang trong nam "); sanf("%d",&thang);
switch(thang) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: printf("\n Thang %d co 31 ngay ",thang);
break;
1/27/2012

162

27

Chng 4: Cu trc iu khin

Chng 4: Cu trc iu khin

4.2 Cu trc r nhnh

4.2 Cu trc r nhnh

Cu trc la chn switch

Cu trc la chn switchLu

case 4:
case 6:
case 9:
case 11: printf("\n Thang %d co 30 ngay ",thang);
break;
case 2: printf ("\ Thang 2 co 28 hoac 29 ngay");
break;
default : printf("\n Khong co thang %d", thang);
break;

Gi tr ca biu thc trong cu trc


switch phi l s nguyn (kiu m c)
Phi c kiu d liu l char, int, long
Cc gi tr sau t kha case (gia_tri_1,
gia_tri_2,.. ) cng phi l s nguyn
iu kin trong cu trc if / if..else cho php
lm vic vi cc kiu d liu khc s
nguyn

}
getch();
}
1/27/2012

163

Chng 4: Cu trc iu khin

164

Chng 4: Cu trc iu khin

4.2 Cu trc r nhnh

4.2 Cu trc r nhnh

Cc v d

V d 1: Tnh cc taxi

1. Vit chng trnh tnh cc Taxi theo cng


thc:
1 km u tin c cc l 10000,
30 km tip theo c gi l 8000/1km
Cc km sau c gi l 6000/1km.

2. Vit chng trnh gii phng trnh bc hai


ax2 + bx + c = 0
3. Vit chng trnh gii h phng trnh bc
nht
a1 x + b1 y = c1

a2 x + b2 y = c2

1/27/2012

165

Chng 4: Cu trc iu khin

#include <stdio.h>
#include <math.h>
void main() {
unsigned long sotien;
float sokm;
printf("\nBan hay cho biet so km da di duoc : ");
scanf("%f", &sokm);
if (sokm <= 1.0)
sotien = 10000;
else
if (sokm <= 31.0)
sotien = 10000 + (ceil(sokm) - 1.0 ) * 8000;
else
sotien = 250000 + (ceil(sokm) - 31) * 6000;
printf("\nSo tien can tra = %lud", sotien);
}
1/27/2012

166

Chng 4: Cu trc iu khin

4.2 Cu trc r nhnh

4.2 Cu trc r nhnh

V d 1 Thc hin chng trnh

V d 2: Gii phng trnh bc 2


#include <stdio.h>
#include <math.h> // s dng hm ton hc sqrt
void main(){
float a, b, c, delta;
printf(\n\nNhap he so a b c : "); scanf("%f%f%f", &a, &b, &c);
delta = b * b - 4 * a * c;
if( a==0) printf(P/trinh suy bien thanh p/trinh bac 1 %fx+%f=0,b,c);
else if (delta < 0) printf("Phuong trinh vo nghiem");
else if (delta == 0)
printf("Phuong trinh co nghiem kep x1 = x2 = %f", -b/(2*a));
else
printf(Phuong trinh co hai nghiem phan biet\n x1=%f \n x2=%f",
(-b + sqrt(delta))/(2*a), (-b - sqrt(delta))/(2*a) );
}

sotien= sokm <=1.0 ? 10000 : sokm <= 31 ? 10000 +


(ceil(sokm) - 1.0 ) * 8000 : 250000+(ceil(sokm) - 31) * 6000;
1/27/2012

1/27/2012

167

1/27/2012

168

28

Chng 4: Cu trc iu khin

Chng 4: Cu trc iu khin

4.2 Cu trc r nhnh

4.2 Cu trc r nhnh

V d 3: Gii h phng trnh

V d 2 Thc hin chng trnh

1/27/2012

169

Chng 4: Cu trc iu khin

#include <stdio.h>
void main() {
float a1,b1,c1,a2,b2,c2,x,y,dx,dy,d;
printf(\n\nNhap cac so:\n");
printf("a1,b1,c1=");scanf("%f%f%f",&a1,&b1,&c1);
printf("a2,b2,c2=");scanf("%f%f%f",&a2,&b2,&c2);
d = a1 * b2 - a2 * b1;
dx = c1 * b2 - c2 * b1;
dy = a1 * c2 - a2 * c1;
if (d != 0) {
x = dx/d; y = dy/d;
printf("He PT co nghiem x=%f, y=%f\n",x,y);
}else
if (dx==0) printf("He PT co vo so nghiem!\n");
else printf("He phuong trinh vo nghiem!");
}1/27/2012

170

Chng 4: Cu trc iu khin

4.2 Cu trc r nhnh

4.2 Cu trc r nhnh

V d 3 Thc hin chng trnh

Bi tp
1. Vit chng trnh nhp vo mt k t h hexa v
a ra gi tr h 10 tng ng
2. Lp trnh c ta 4 im A,B,C,M ri kim tra
xem im M nm trong, nm trn cnh hay nm
ngoi tam gic ABC.
3. Lp trnh c vo t bn phm 2 gi tr a, b ri
tnh y = 15 x2+x+7.2 trong

1/27/2012

171

Chng 4: Cu trc iu khin

1/27/2012

a + b
n' u a < b
3

x = 1.5172 n' u a = b
a b
2
n' u a > b
2
a + b

172

Chng 4: Cu trc iu khin

4.3 Cu trc lp

Ni dung chnh

Cc cu trc lp

1. Cu trc lnh khi


2. Cu trc r nhnh

Vng lp for

Cu trc if, if else


Cu trc la chn switch

Vng lp while

3. Cu trc lp
Vng lp for
Vng lp while v do while

Vng lp do while

4. Cc lnh thay i cu trc lp trnh


Cu lnh continue
Cu lnh break
1/27/2012

173

1/27/2012

174

29

Chng 4: Cu trc iu khin

Chng 4: Cu trc iu khin

4.3 Cu trc lp

4.3 Cu trc lp

Mc ch v c php
Dng lp cng vic mt s chnh xc ln
nh trc da vo s bin thin ca
bin iu khin

for

for([b.thuc_1];[b.thuc_2];[b.thuc_3]) Lnh;

1/27/2012

175

b.thuc_1: Khi to gi tr ban u cho vng lp


b.thuc_2: iu kin tip tc vng lp
b.thuc_3: Thay i bin iu khin ca vng lp
Lnh: C th l lnh n lnh kp hoc lnh rng

1/27/2012

Chng 4: Cu trc iu khin

Chng 4: Cu trc iu khin

4.3 Cu trc lp

4.3 Cu trc lp

S c php

176

S dng
int i;
for(i = 0; i < 100; i++) Cu_lnh;
int i;
for(i = 0; i < 100; i+=2)Cu_lnh;
int i;
for(i = 100; i > 0; i--) Cu_lnh;
for(int i = 0; i < 100; i++) Lnh;
for(int i = 100; i > 0; i--) Lnh;

1/27/2012

177

1/27/2012

Chng 4: Cu trc iu khin

Chng 4: Cu trc iu khin

4.3 Cu trc lp

4.3 Cu trc lp

Turbo C++ 3.0, vn bn ngun .cpp (c++)

178

V d 1 : a ra cc s nguyn l nh hn 100

V d 2 : a ra cc s nguyn l nh hn 100

#include <stdio.h>

#include <stdio.h>

#include <conio.h>
void main(){
int i;
for(i = 1;i<100;i++) {
if(i%2 == 1) printf(%5d,i);
if((i+1)%20 ==0) printf(\n);
}
getch();
}

#include <conio.h>
void main(){
int i;
for(i = 99;i > 0;i-=2) {
printf(%5d,i);
if( (i-1) % 20 == 0) printf(\n);
}
getch();
}

1/27/2012

179

1/27/2012

180

30

Chng 4: Cu trc iu khin

Chng 4: Cu trc iu khin

4.3 Cu trc lp

4.3 Cu trc lp

V d 4 Nhp n v tnh tng 1 +1/2+..+1/n

V d 3 Nhp n v a ra n!

#include <stdio.h>
#include <conio.h>
void main()
{
float S = 0.0;
int n, i;
printf(Nhap n : );scanf(%d,&n);
for(i = 1;i <= n;i++)
S = S + (float)1/i;
printf(Ket qua l %7.4f ,S);
getch();
Nhap n : 10
}
Ket qua l
l 2.9290

#include <stdio.h>
#include <conio.h>
void main()
{
long P = 1;
int n, i;
printf(Nhap n : );scanf(%d,&n);
for(i = 1;i<=n;i++)
P = P * i;
printf(Ket qua l %ld ,P);
getch();
Nhap n : 6
}
Ket qua l
l 720
1/27/2012

181

Chng 4: Cu trc iu khin

4.3 Cu trc lp

abc=a3+b3+c3

#include <stdio.h>
#include <conio.h>
void main()
{ int a, b, c;
for(a = 1;a<=9;a++)
for(b = 0;b<=9;b++)
for(c = 0;c<=9;c++)
if(a*a*a+b*b*b+c*c*c==100*a+10*b+c)
printf(%d \n,100*a+10*b+c);
getch();
}
1/27/2012

183

V d 5 Tm s 3 ch s tha mn abc=a3+b3+c3
#include <stdio.h>
#include <conio.h>
void main()
{int i, a, b, c;
for(i = 100;i<1000;i++){
a = i / 100;
b = i % 100 / 10;
c = i % 100 % 10;
if(a*a*a+b*b*b+c*c*c == i)
printf(%d \n,i);
}//for
getch();
}

Chng 4: Cu trc iu khin

4.3 Cu trc lp

4.3 Cu trc lp

Ch

153
370
371
407

1/27/2012

Chng 4: Cu trc iu khin

184

Ch

Khng nht thit phi c y cc


thnh phn trong vng lp for

1. Biu thc khi to

int getchar(): c k t t vng m bn


phm. Nu vng m rng, i ngi dng
g dy k t (cho ti khi n phm Enter), s
tr v k t u

2. Biu thc iu khin


for(i=0 ; ; c=getchar(), i++)
if(c==\n) break;
printf(\nSo ky tu: %d,i);
3. Thn vng lp
for(i=0 ; getchar() != \n, i++);
printf(\nSo ky tu: %d,i);
1/27/2012

char c; int i=0;


for( ; (c=getchar())! = '\n ; i++)
putchar(c);
printf(\nSo ky tu: %d,i);

putchar(int c): a k t ra mn hnh


1/27/2012

182

Chng 4: Cu trc iu khin

4.3 Cu trc lp

V d 5 Tm s 3 ch s tha mn

1/27/2012

185

Hello world
Hello world
So ky tu: 11

Hello world
So ky tu: 12

Hello world
So ky tu: 11

186

31

Chng 4: Cu trc iu khin

Chng 4: Cu trc iu khin

4.3 Cu trc lp

4.3 Cu trc lp

Mc ch & C php
Dng thc hin lp i lp li mt cng vic
no vi s ln lp khng xc nh.

while

C php:

while(bieu_thuc_dieu_kien)
lenh;
Chng trnh kim tra iu kin trc khi lp
Gi tr ca biu thc iu kin l ng thc hin lnh

1/27/2012

187

Cc lenh ca vng lp c th khng c thc hin


ln no Biu_thc_iu_kin sai ngay t u
1/27/2012
Biu_thc_iu_kin lun ng lp v hn ln 188

Chng 4: Cu trc iu khin

Chng 4: Cu trc iu khin

4.3 Cu trc lp

4.3 Cu trc lp

S c php

Nhp n v a tng ca n s nguyn u tin


#include <stdio.h>
#include <conio.h>
void main(){
long S = 0;
int n;
printf(Nhap n : );scanf(%d,&n);
while (n > 0){
while (n> 0)
S = S + n;
n = n 1;
S += n--;
}
printf(Ket qua l %ld ,S);
getch();
}

Tnh ton gi tr ca
Biu thc iu kin
Lnh
Biu thc != 0

ng

Sai

1/27/2012

189

Chng 4: Cu trc iu khin

4.3 Cu trc lp

3n5-317n

Cho bit kt qu thc hin chng trnh

<5

#include <stdio.h>
#include <conio.h>
void main()
{
clrscr();
int i=3;
while (i > 1){
if(i % 2==0) i = i / 2;
else i = i * 3 + 1;
printf("%4d",i);
}
getch();
10 5 16 8 4 2 1
}

#include <stdio.h>
#include <conio.h>
#include <math.h>
void main()
n = 10
{
while (3*pow(n,5)-317*n >= 5)
clrscr();
n--;
int n=0;
while (3* pow(n,5) - 317*n < 5) n++;
printf("%4d",n-1);
getch();
}
n= 3
1/27/2012

190

Chng 4: Cu trc iu khin

4.3 Cu trc lp

Tm s nguyn ln nht tha mn

1/27/2012

191

1/27/2012

192

32

Chng 4: Cu trc iu khin

Chng 4: Cu trc iu khin

4.3 Cu trc lp

4.3 Cu trc lp

Nhp chui v m s nguyn m, ph m, khong trng


#include <stdio.h>
#include <conio.h>
void main()
{ int na, pa, kt;
char c;
na = pa = kt = 0;
clrscr(); printf(>);
while( (c=getchar()) !='\n'){
switch(c){
case 'a': case e': case i': case o': case u :
case A': caseE': case I': case0': case U : na++; break;
case ' ': kt++; break;
default : pa++;
}
}
printf("Chuoi co :%d nguyen am :%d phu am va %d khoang trang",na,pa,kt);
} 1/27/2012

do..while
193

1/27/2012

Chng 4: Cu trc iu khin

Chng 4: Cu trc iu khin

4.3 Cu trc lp

4.3 Cu trc lp

Mc ch & C php

194

S c php

Dng thc hin lp i lp li mt cng


vic no vi s ln lp khng xc nh.

Lnh

C php:

do{

Tnh ton gi tr ca

lenh;
}while(bieu_thuc_dieu_kien);

Biu thc iu kin

Chng trnh kim tra iu kin sau khi lp


Cc lenh c thc hin t nht mt ln
Biu thc lun ng, lp v hn ln
1/27/2012

195

Biu thc != 0

ng

Sai
1/27/2012

Chng 4: Cu trc iu khin

Chng 4: Cu trc iu khin

4.3 Cu trc lp

4.3 Cu trc lp

Nhp n v a tng ca n s nguyn u tin

V d

#include <stdio.h>
#include <conio.h>
void main(){
long S = 0;
int n;
printf(Nhap n : );scanf(%d,&n);
do {
do
S = S + n;
S += n-n--;;
n = n 1;
while (n> 0);
}while (n > 0);
printf(Ket qua l %ld ,S);
getch();
Nhap n : 96
}
Ket qua l
l 4656

Nhp vo im ca mt sinh vin, nu


im khng [0, 10] th thng bo cho
ngi dng nhp li.
Cch lm:

1/27/2012

196

Nu dng lnh if Ch kim tra c 1 ln


Khng dng for c v cha bit trc s
ln lp.
S dng vng lp while/ do while

197

1/27/2012

198

33

Chng 4: Cu trc iu khin

Chng 4: Cu trc iu khin

4.3 Cu trc lp

4.3 Cu trc lp

Dng vng lp while Kt qu

Dng vng lp while


#include <stdio.h>
void main(){
float diem; clrscr();
printf(Chuong trinh nhap diem sinh vien\n");
printf("Nhap diem (0<=diem<=10):");
scanf("%f",&diem);
while (diem < 0 || diem > 10) {
printf("\nBan nhap khong dung!\n");
printf("Ban hay nhap lai (0<=diem<=10):");
scanf("%f",&diem);
}
printf("\nDiem ban vua nhap la: %.2f, diem);
}
1/27/2012

199

1/27/2012

200

Chng 4: Cu trc iu khin

Chng 4: Cu trc iu khin

4.3 Cu trc lp

4.3 Cu trc lp

Dng vng lp dowhile


#include <stdio.h>
void main() {
float diem; clrscr();
printf(Chuong trinh nhap diem sinh vien\n");
do {
printf("Nhap diem (0<=diem<=10):");
scanf("%f",&diem);
if (diem < 0 || diem > 10)
printf("\nBan nhap khong dung!\n");
} while (diem < 0 || diem > 10);
printf("\nDiem ban vua nhap la: %.2f, diem);
}

1/27/2012

Nhp s v kim tra s hon thin


1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
201

#include <stdio.h>
fflush(): xa vng m bn phm
#include <ctype.h>
#include <conio.h>
toupper(): chuyn sang ch hoa
void main(){
long int n, tong, i;
getche():
c k t t vng m & hin
char ch;
do
{
th ln mn hnh (getch() th khng)
tong = 0;
printf("\n\nNhap vao mot so nguyen: "); scanf("%ld",&n);
printf("Cac uoc so cua %ld la: ",n);
for(i = 1;i<n;i++)
if(n % i == 0){
printf("%5d",i);
tong = tong + i;
}//if & for
printf("\nTong cac uoc so cua %ld bang %ld",n,tong);
if(tong == n) printf("\n
%5ld LA so hoan thien,n);
else
printf("\n
%5ld KHONG LA so hoan thien,n);
printf("\nBan co muon thuc hien lai(c/k)? ");
fflush(stdin);
}while(toupper(getche()) !='K');
printf("\n\nAn phim bat ki de ket thuc ...");
getch();
}

1/27/2012

202

Chng 4: Cu trc iu khin

4.3 Cu trc lp

V d
Vit chng trnh thc hin cng vic
- Nhp vo t bn phm 2 s nguyn
- Nhp vo t bn phm mt k t bt k;

Nu y l mt ton t s hc th a ra
gi tr tng ng vi ton t.

Nu khng phi th a ra thng bo sai

- Chng trnh thc hin cho ti khi k t


nhp vo l q hoc Q
1/27/2012

203

1/27/2012

204

34

case '%':

#include <stdio.h>
#include <conio.h>
void main() {

case '/':

int a, b;
char ch;

break;
if (b==0) printf(" Chia cho 0\n");
else printf(" Co ket qua: %d\n",a/b);
break;

int Fin = 0;
clrscr();

case 'q':
case 'Q':
Fin=1;
break;
default: printf(" khong co toan tu nay\n");

printf("Nhap cac so a, b "); scanf("%d%d",&a,&b);


do{
printf("\nToan tu (+ ; - ; * ; / ; %) "); ch=getche();

}
}while(Fin==0);
printf("\nKet thuc, an mot phim...");

switch(ch){
case '+': printf(" Co ket qua: %d\n",a+b); break;

getch();

case '-': printf(" Co ket qua: %d\n",a-b); break;


case '*': printf(" Co ket qua: %d\n",a*b); break;
1/27/2012

if (b==0) printf(" Chia cho 0\n");


else printf(" Co ket qua: %d\n",a%b);

}
205

1/27/2012

206

Chng 4: Cu trc iu khin

4.3 Cu trc lp

V d: Nhp xu, m s k t ca xu
Khai bo: int n=0; char c;
Dng vng for
for(n=0;;c=getchar(),n++) if(c==\n) break;
for(n=0 ; getchar() != '\n' ; n++);

Dng vng lp while


c = getchar();
while (c !=\n){
c= getchar();
n++;
}

Dng vng lp do while


do{
c = getchar();
n++;
}while(c!=\n);

a kt qu ra: printf(Chuoi chua %d ky tu ,n);


1/27/2012

207

1/27/2012

Chng 4: Cu trc iu khin

Chng 4: Cu trc iu khin

4.3 Cu trc lp

4.3 Cu trc lp

Bi tp 1

Bi tp 2

1. Nhp vo 2 s a, b tha mn 1 < a < a+100< b.


Lit k cc s nguyn t trong khong a,b
2. Vit chng trnh nhp vo 3 s nguyn a,b,n tha
mn 0<a<b+n v sinh ra n s ngu nhin trong
khong a, b
3. Vit chng trnh nhp mt s nguyn dng N v
phn tch N thnh cc tha s nguyn t
4. Nhp vo dy cho ti khi gp s 0. Tnh tng ca
dy v trung bnh cng cc s l
5. Nhp vo mt dy k t cho ti khi gp du xung
dng. m s t ca dy bit rng cc t c
phn cch ch bi cc k t trng (1 hoc nhiu)
1/27/2012

208

209

1. Nhp vo mt dy k t cho ti khi gp k t * a ra


tn sut xut hin ca cc nguyn m
5
2. Cho hm s f ( x) .= x + 5 x Lp trnh tnh v a ra
mn hnh cc cp gi tr x,f(x) vi x ly dy gi tr -10;9.9;-9.8; ..; 4.9;5.0.
3. c vo dy s cho ti khi gp s 0; Tm s ln nht, nh
nht ca dy v s ln xut hin cc gi tr
4. c vo mt dy cho ti khi tng ca dy ln hn 2011.
Tnh trung bnh cng cc s l c
5. c x v eps v tnh biu thc sau vi chnh xc nh
hn eps
( 1) n x n
x 2 x3

+L+
+L
S =1 x +
2! 3!
n!
1/27/2012

210

35

Chng 4: Cu trc iu khin

Chng 4: Cu trc iu khin

4.3 Cu trc lp

4.3 Cu trc lp

Bi tp

Tnh hm

Vit chng trnh c x v n vo t bn phm ri tnh


S = x + x x + L + x n d' u c n

pow(x,y) sinh ra li khi x m


v y khng l s nguyn
fabs(x) tr v tr tuyt i ca
x khi l s thc

5.
for(x=-10.0; x<=5.0; x+=0.1){
6.
if(x==0)
for(int i=-100;i<50;i++){
x=(float)i/10;
7.
fx = 0.0;
.
8.
else
9.
fx = pow(x,5)+x/fabs(x) * pow(fabs(x), 0.2);
10.
printf("<%4.1f,%7.2f>\n",x,fx);
11.
}
12. }
211

1/27/2012

212

Chng 4: Cu trc iu khin

Chng 4: Cu trc iu khin

4.3 Cu trc lp

c dy s., tm v m s max

Ni dung chnh

1. #include <stdio.h>
2. #include <limits.h>

1. Cu trc lnh khi


2. Cu trc r nhnh

3. void main(){
4.
int a, d=0, max = INT_MIN;
5.
do {
6.
printf("Nhap mot so : "); scanf("%d",&a);
7.
if( a > max){
8.
max = a;
9.
d = 1;
10.
}else
11.
if (a == max) d++;
12.
}while ( a!= 0);
13.
printf(Max: %d; Co %d gia tri",max,d);
14. }
1/27/2012

1. #include <stdio.h>
2. #include <math.h>
3. void main(){
4.
float x, fx;

C sai s khi x=0.0

x 2 x3
xn
+
+L+
S =1+ x +
n
2
3
x 2 x3
xn
+
+L+
S = 1+ x +
n!
2! 3!
x 2 x3
(1) n x n
S = 1 x +

+L+
2! 3!
n!
1/27/2012

f ( x) = x 5 + 5 x

Cu trc if, if else


Cu trc la chn switch

3. Cu trc lp
Vng lp for
Vng lp while v do while

4. Cc lnh thay i cu trc lp trnh


Cu lnh continue
Cu lnh break
213

1/27/2012

214

Chng 4: Cu trc iu khin

Chng 4: Cu trc iu khin

4.4 Cc lnh thay i cu trc lp trnh

Mc ch

Continue >< break

Cc vng lp while/ do ... while/ for s kt


thc qu trnh lp khi biu thc iu kin
ca vng lp khng cn c tha mn.
Tuy nhin trong lp trnh i khi ta cng cn
thot khi vng lp ngay c khi biu thc
iu kin ca vng lp vn cn c tha
mn.
h tr ngi lp trnh lm vic , ngn
ng C cung cp 2 cu lnh l continue v
break
1/27/2012

215

1/27/2012

216

36

Chng 4: Cu trc iu khin

Chng 4: Cu trc iu khin

4.4 Cc lnh thay i cu trc lp trnh

4.4 Cc lnh thay i cu trc lp trnh

continue

V d 1

B qua vic thc hin cc cu


lnh nm sau lnh continue
trong thn vng lp.
Chuyn sang thc hin mt vng

#include <stdio.h>
#include <conio.h>
void main()
Tnh tng 100 s nguyn u tin
{
ngoi tr cc s chia ht cho 5
int i;
int sum = 0;
for(i = 1;i<=100;i++)
{
if(i % 5 == 0)
for(i=1;i<=100;i++)
continue;
if (i % 5 != 0)
sum += i;
sum += i;
}
}

lp mi

1/27/2012

217

Chng 4: Cu trc iu khin

4.4 Cc lnh thay i cu trc lp trnh

break

V d 2
#include <stdio.h>
#include <conio.h>
void main()
{
int i;
for(i = 1;i<=10;i++)
{
if(i == 5) continue;
printf(%5d,i);
if(i==7) break;
}
getch();
}

Thot khi vng lp ngay c khi biu


thc iu kin ca vng lp vn cn
c tha mn.
Ch :
break dng thot ra khi khi lp
hin ti
break cng dng thot ra khi
lnh r nhnh switch
219

Chng 4: Cu trc iu khin

1/27/2012

220

Chng 4: Cu trc iu khin

4.4 Cc lnh thay i cu trc lp trnh

4.4 Cc lnh thay i cu trc lp trnh

V d 3

Nhp mt s nguyn, kim tra xem c l s nguyn t khng?


#includ <stdio.h>
#include <math.h>
void main()
{ int N, i, OK = 1;
printf("\nNhap gia tri N : "); scanf("%d", &N);
if (n<2) printf("\nSo %d khong phai so nguyen to",N);
else {
for
i<=(int)sqrt(N);
for(i=2;
(i=2;
i < N; i++)
i++)
if (N%i == 0) {
OK = 0;
break;
i <= (int)sqrt(N)
}
if (OK) printf("\nSo %d la so nguyen to.", N);
else
printf("\nSo %d la hop so.", N);
}
i= 2;
getch();
while (N % i != 0) i++;
}
if (i == N) printf( so ng to )

#include <stdio.h>
#include <conio.h>
void main()
{ int i,j;
clrscr();
for(i = 0;i<10;i++) {
for (j=0; j < 10; j ++) {
if(j > i){
break;
}//if
}//for _ j
printf("i:%d j:%d\n",i,j);
}//for_i
getch();
}
1/27/2012

218

Chng 4: Cu trc iu khin

4.4 Cc lnh thay i cu trc lp trnh

1/27/2012

1/27/2012

221

1/27/2012

222

37

Phn tch s nguyn ra tha s nguyn t


1. #include <stdio.h>
2. #include <conio.h>
3. #include <ctype.h>
4. void main(){
5. int N, i;
6. do{ printf("\n\nNhap vao so nguyen duong "); scanf("%d",&N);
7.
printf("%d = ",N);
8.
i = 2;
9.
while (i < N ){
10.
if (N % i == 0){
11.
printf("%d x ",i);
12.
N = N/i;
13.
} else i++;
14.
}
15.
printf("%d \n",N);
16.
printf("Tiep tuc <C/K>?"); fflush(stdin);
17. }while(toupper(getche()) != 'K');
18. }
1/27/2012

223

1/27/2012

Vit chng trnh c x v n vo t bn phm ri tnh

Nhp chui k t cho n khi gp k t *


Tnh tn sut xut hin nguyn m a
1. #include <stdio.h>
2. #include <conio.h>
3. #include <ctype.h>
4. void main(){
5.
char c; int n, d;
6.
do{
7.
printf("\n\n");
8.
d=0; n=0;
9.
while( (c=getche()) !='*'){
10.
n++;
11.
if (c=='a') d++;
12.
}
13.
if(n==0)
14.
printf("\nChuoi ky tu rong\n");
15.
else
16.
printf("\ntan suat xuat hien ky tu 'a' la %5.2f%%\n",(float)100*d/n);
17.
printf("Tiep tuc <C/K>?: ");
18.
}while(toupper(getche()) != 'K');
19.
}
1/27/2012
225

Chng 4: Cu trc iu khin

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.

#include <stdio.h>
x2 x3
xn
#include <conio.h>
+
+L+
S =1+ x +
2! 3!
n!
void main(){
int n, i;
float x, u = 1.0,S=1.0;
clrscr();
printf("Nhap vao so nguyen n : "); scanf("%d",&n);
printf("Nhap vao so thuc x : ");
scanf("%f",&x);
for(i = 1; i <= n; i ++){
u *= x/i;
S += u;
}
printf("Ket qua la %.8f",S);
getch();
}

1/27/2012

226

Chng 4: Cu trc iu khin

4.4 Cc lnh thay i cu trc lp trnh

4.4 Cc lnh thay i cu trc lp trnh

V d tng hp

Nhp mt dy s cho ti khi s phn t trong dy ln hn 100

Vit chng trnh thc hin cc cng vic


sau
Nhp vo mt dy s cho ti khi

Bt u

i
Nhp s a

Tng ca dy ln hn 1550 hoc l


S phn t trong dy ln hn 100

a ra s phn t nm trong khong (35,


70)
a ra trung bnh cng ca cc phn t
chia ht cho 7
1/27/2012

224

i+1

i > 100

Kt thc

227

1/27/2012

#include <stdio.h>
void main(){
int a, i;
i = 0;
do{
printf("Nhap vao so nguyen:");
scanf("%d",&a);
i++;
}while (i <= 100);
}
228

38

Chng 4: Cu trc iu khin

Chng 4: Cu trc iu khin

4.4 Cc lnh thay i cu trc lp trnh

4.4 Cc lnh thay i cu trc lp trnh

Nhp mt dy s cho ti khi tng ca dy ln hn 1550


Bt u
i
S
Nhp s a
S

S+a

S > 1550

Kt thc

Nhp mt dy s cho ti khi tha mn.

#include <stdio.h>
void main(){
int a, S;
S = 0;
do{
printf("Nhap vao so nguyen:");
scanf("%d",&a);
S+=a;
}while (S <= 1550);
}

Bt u
i
S
Nhp s a
S

S+a

i+1

i > 100

S > 1550

#include <stdio.h>
void main(){
int a, i, S;
S = 0; i=0;
do{
printf("Nhap vao so nguyen:");
scanf("%d",&a);
S+=a;
i++;
}while ( (i <=100)&&(S <= 1550) );
}

Kt thc
1/27/2012

229

a ra TBC ca cc phn t chia ht cho 7(1)

230

a ra TBC ca cc phn t chia ht cho 7(2)


#include <stdio.h>
void main(){
int a, i=0,S7=0,d7=0,S=0;
do{
printf("Nhap vao so nguyen:"); scanf("%d",&a);
i++; S+=a;
if(a%7==0){
d7++;
S7+=a;
}
}while ( (i <=100)&&(S <= 1550) );
if(d7==0)
printf(Khong co so chia het cho 7);
else
printf(Ket qua la %.4f,(float) S7/d7);
}

Bt u
#include <stdio.h>
void main(){
int a, i=0,S7=0,d7=0; S7i 0 0
d7 0
do{
printf("Nhap vao so
nguyen:"); scanf("%d",&a);
Nhp s a
i
i+1
i++;
if(a%7==0){
d7 d7+1
a % 7=0
d7++;
S7 S7+1
s
S7+=a;
}
i > 100
s
}while (i <= 100);

if(d7==0)
s
Thng bo: Khng
TBC l: S7/d7
d7=0
printf(Khong
co so
chia het
c scho
chia ht7);
cho 7
else
printf(Ket qua la %.4f,(float) S7/d7);
Kt thc
}
1/27/2012

1/27/2012

231

Chng 4: Cu trc iu khin

4.4 Cc lnh thay i cu trc lp trnh

V d tng hp
#include <stdio.h>
void main(){
int a, i=0,S7=0,d7=0,S=0, d = 0;
do{
printf("Nhap vao so nguyen:"); scanf("%d",&a);
i++; S+=a;
if(a%7==0){
d7++;
S7+=a;
}
if( (a>35) && (a < 70) ) d++;
}while ( (i <=100)&&(S <= 1550) );
printf(So phan tu trong khoang (35,70) la %d \n,d);
if(d7==0) printf(Khong co so chia het cho 7);
else printf(TBC cac so chia het cho 7 %.4f,(float) S7/d7);
1/27/2012
233
}

1/27/2012

232

Chng 4: Cu trc iu khin

Tng kt
1. Cu lnh khi
t trong cp ngoc nhn { }

2. Cu trc r nhnh
if (bieu_thuc), if (bieu_thuc) else
switch (bieu_thuc) {(case/break/default)}

3. Cu trc lp
for(bieu_thuc_1; bieu_thuc_2; bieu_thuc_3) CauLenh;
while (bieu_thuc) CauLenh;
do Cau_Lenh while (bieu_thuc);

4. Cc lnh thay i cu trc lp trnh


continue/ break
1/27/2012

234

39

Phn 3: Lp trnh C

Chng 5: Mng, con tr v xu k t

Ni dung chnh

Ni dung chnh

Chng 1: Tng quan v ngn ng C

1. Mng

Chng 2: Kiu d liu v biu thc trong C


Chng 3: Vo ra d liu

Khi nim
Khai bo v s dng
Cc thao tc thng gp

2. Con tr

Chng 4: Cu trc iu khin

Chng 5: Mng, con tr v xu k t


Chng 6: Cu trc

Khi nim v cch khai bo


Ton t a ch (&), ton t ni dung (*)
Php ton trn con tr
Con tr v mng

3. Xu k t

Chng 7: Hm
Chng 8: Tp d liu
1/27/2012

235

Chng 5: Mng, con tr v xu k t

Khi nim
Khai bo v s dng
Cc hm x l k t v xu k t
1/27/2012

236

Chng 5: Mng, con tr v xu k t

5.1 Mng

5.1 Mng

Khi nim mng

Khi nim mng

Trong thc t, thng gp cc i tng c


tnh cht chung

Kiu mng l mt kiu d liu gm

Thng trong nm
im trung bnh ca sinh vin trong lp

Cc i tng c nhm li di mt tn
i tng c c trng bi tn nhm v
th t trong nhm
Thng th 3 trong nm: Thng 3
Sinh vin th 17 trong lp:

Mt s hu hn thnh phn.
Cc thnh phn c cng mt kiu: kiu c s
hay l kiu thnh phn.

Mi phn t ca mng c tham kho


thng qua
Tn mng v
Ch s ca phn t trong mng

S th t trong nhm l ch s phn t


1/27/2012

237

Chng 5: Mng, con tr v xu k t

1/27/2012

Chng 5: Mng, con tr v xu k t

5.1 Mng

5.1 Mng

Khai bo mng

Cp pht b nh cho mng

Kiu_d_liu Tn_Mng[Kch thc];


Kiu_d_liu: kiu ca cc phn t trong
mng (nguyn, thc, k t, chui, mng,)
Tn_mng: tn ca mng
Kch_thc_mng: s phn t trong mng
V d

Cc phn t trong mng c cp pht cc


nh k tip nhau trong b nh
Kch thc ca mng bng kch thc mt
phn t nhn vi s phn t
V d:
int A[10];//Mng A gm 10 phn t nguyn
A[0]

// khai bo mng 10 phn t c kiu d liu int


int Mang_so_nguyen[10];
float A[10]; // Mng 10 phn t kiu s thc
1/27/2012

238

A[1]

A[2]

A[3]

A[4]

A[5]

A[6]

A[7]

A[8]

A[9]

Kch thc ca mng A: 10 x 2 = 20 bytes


239

1/27/2012

240

40

Chng 5: Mng, con tr v xu k t

Chng 5: Mng, con tr v xu k t

5.1 Mng

5.1 Mng

Truy nhp n thnh phn ca mng

Truy nhp n thnh phn ca mngV d

Bin mng lu tr a ch nh u tin


trong vng nh c cp pht
Ngn ng C nh ch s cc phn t trong
mng bt u t 0
Cc phn t ca mng c truy nhp
thng qua
Tn mng v
Ch s ca phn t ca phn t trong mng

Tn_Mang[Ch_s_phn_t];
1/27/2012

241

Chng 5: Mng, con tr v xu k t

A[1]
5

A[2]

A[0]

A[3]

A[4]
7

A[5]

A[4]

A[6]

A[7]

A[8]

A[9]

A[9]

A[0] = 7;
A[1] = 5;
A[4] = 7;
int N = A[1] + A[4]; N = 14
1/27/2012

242

5.1 Mng

V d

Mng nhiu chiu


Mi phn t ca mng c th l mt mng

int A[10];
for(int i = 0; i < 10; i++) A[i]= 2* i;
0?

2?

4?

?
6

8?

Mng nhiu chiu

?
?
?
?
16
10
12
14

?
18

Kiu Tn[Chiu_1] [Chiu_2] [Chiu_N];

0
i : 10
7
4
1
2
5
6
3
8
9
Ch : C khng kim tra vt qu gii hn
ca mng khi truy nhp
int A[3], B[4], C[3];
A[0]

A[1]

A[2]

B[0]

B[1]

B[2]

B[3]

C[0]

C[1]

C[2]

A[5] B[2] C[-2] nu c/cp lin tip

243

Chng 5: Mng, con tr v xu k t

Kiu: Kiu ca mi phn t trong mng


Chiu_1, Chiu_2,Chiu_N: Cc hng s
nguyn, cho bit kch thc (s phn t) ca mi
chiu
Mng gm: Chiu_1 x Chiu_2 x...x Chiu_N
phn t c lu tr trong vng nh lin tc. Cc
phn t thuc kiu Kiu

1/27/2012

244

Chng 5: Mng, con tr v xu k t

5.1 Mng

5.1 Mng

Mng nhiu chiu

Mng nhiu chiuV d


int b[3][4][5];

int t[3][4] ;
t[0]

t[0][0]

t[0][1]

t[0][2]

t[0][3]

t[1]

t[1][0]

t[1][1]

t[1][2]

t[1][3]

t[2]

t[2][0]

t[2][1]

t[2][2]

t[2][3]

b[2][2][4]

b[2]
b[1]
b[0]
b[0][1][2]

Mng b gm 3 phn t b[0], b[1], b[2]


Mi phn t l mng hai chiu gm 4 hng
(hng 0, 1, 2, 3) v 5 ct (0, 1, 2, 3, 4)
Mi phn t c kiu nguyn c du, 2 byte

t[1][0] t[1][1] t[1][2] t[1][3]


1/27/2012

A[0]
7

Chng 5: Mng, con tr v xu k t

5.1 Mng

1/27/2012

int A[10];//Mng A gm 10 phn t nguyn

245

1/27/2012

246

41

Chng 5: Mng, con tr v xu k t

Chng 5: Mng, con tr v xu k t

5.1 Mng

5.1 Mng

Khi to gi tr cho mng Ch

Khi to gi tr cho mng


Cc phn t ca mng c th c khi to
gi tr ngay khi khai bo
V d
int a[4] = {1,4,6,2};
int b[2][3]={ {1,2,3}, {4,5,6} };
int t[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
};
1/27/2012

S lng gi tr khi to khng c ln


hn s lng phn t trong mng
Nu s lng ny nh hn, cc phn t cn li
c khi to gi tr 0
int A[3][4] = { {1}, {4,5} };
int A[3][4] = { };Tt c u mang gi tr 0

C th xc nh kch thc mng thng qua


s gi tr khi to nu trng kch thc
mng
int A1 [8] = {2, 4, 6, 8, 10, 12, 14, 16};
int A2 [] = {2, 4, 6, 8, 10, 12, 14, 16};
247

Chng 5: Mng, con tr v xu k t

1/27/2012

248

Chng 5: Mng, con tr v xu k t

5.1 Mng

5.1 Mng

Cc thao tc thng gp

Nhp d liu

Dng hm scanf()

Nhp/Xut d liu cho mng


Mng 1 chiu, ma trn

V d:

Bi ton m

Nhp d liu cho mt phn t

m s phn t
Tnh ton trn cc phn t..

scanf(%d,&Tab[2]);phn t th 3 ca mng

Nhp d liu cho c mng

Tm kim phn t

Dng vng lp for

Ln nht/nh nht/bt k

for(i = 1; i < 10; i++)

Sp xp phn t trong mng

scanf(%d,&Tab[i]);

Theo th t, theo nguyn tc

Chn thm phn t, xa phn t

1/27/2012

int Tab[10];

Nn in ra ch s phn t khi nhp


249

Chng 5: Mng, con tr v xu k t

1/27/2012

printf(Tab[%d] : ); scanf(%d,&Tab[i])

Chng 5: Mng, con tr v xu k t

5.1 Mng

5.1 Mng

Nhp d liuV d 1

Nhp d liuLu

Nhp vo lng ma (mm) trong nm

Nu s phn t ca mng ch c bit ti


thi im thc hin chng trnh (nhng
bit s phn t ti a)

#include <stdio.h>
#define MONTHS 12
int main(){
int rainfall[MONTHS], i;
for ( i=0; i < MONTHS; i++ ){

Khai bo mng vi kch thc ti a


S dng bin nguyn lu s phn t thc s
ca mng.

V d:
Nhp vo mng khng qu 100 s thc

printf(Nhap luong ma thng %d: , i+1);


scanf("%d", &rainfall[i] );
}
return 0;
}

1/27/2012

250

251

Khai bo mng thc Tab c ti a 100 phn t.


Nhp s phn t thc s ca mng
Nhp gi tr cho tng phn phn t (dng for)

1/27/2012

252

42

Chng 5: Mng, con tr v xu k t

Chng 5: Mng, con tr v xu k t

5.1 Mng

5.1 Mng

Nhp d liuV d 2

Xut d liu trong mng

#include<stdio.h>
#void main(){
float A[100];
int n, i;
do{
printf(\n Cho biet so phan tu cua mang: );
scanf(%d,&n);
}while (n>100 || n<=0);

Dng hm printf()
int Tab[10];
V d:
Hin th phn t th 5:
printf(%d,Tab[4]);

hin th tt c cc phn t:
for(i = 0; i < 10; i++)
printf(%4d,Tab[i]);

for(i = 0; i < n; i++){


printf(A[%d] = ", i); scanf("%f",&A[i]);
}
}

1/27/2012

Cc kiu xut d liu


Hin th tt c/mt phn theo dng/ct..
Hin th tng k phn t trn mt dng
253

Chng 5: Mng, con tr v xu k t

1/27/2012

254

Chng 5: Mng, con tr v xu k t

5.1 Mng

5.1 Mng

Xut d liu trong mngV d 1

Xut d liu trong mngV d 1Thc hin

#include <stdio.h>
#define MAX 12
void main(){
int A[MAX], i;
for ( i=0; i < MAX; i++ ){ //Nhp d liu
printf(A[%d]: , i+1); scanf("%d", &A [i] );
}
for ( i=0; i < MAX; i++ ){
)
printf( "%d\n
"%4d
,
A[i]);
"%4d , A[i]);
if( (i+1) %4==0) printf(\n);
}

1/27/2012

255

Chng 5: Mng, con tr v xu k t

256

Chng 5: Mng, con tr v xu k t

5.1 Mng

5.1 Mng

V d 2: Nhp v a ra mn hnh mt ma trn


1. #include <stdio.h>
2. void main(){
3.
int A[20][20], n, m, i,j;
4.
printf("Nhap so hang : "); scanf("%d",&n);
5.
printf("Nhap so cot : ");
scanf("%d",&m);
6.
printf("\n");
7.
for ( i=0; i < n; i++ )
8.
for(j=0; j < m; j++) {
9.
printf("Nhap phan tu A[%d,%d]: ", i+1,j+1);
10.
scanf("%d", &A[i][j] );
11.
}
12.
printf("\n\n MA TRAN DA NHAP \n\n");
13.
for ( i=0; i < n; i++ ){
14.
for(j=0; j < m; j++)
15.
printf( "%4d" ,A[i][j]);
16.
printf("\n");
17.
}
18. }
1/27/2012

1/27/2012

257

V d 2Kt qu thc hin

1/27/2012

258

43

Chng 5: Mng, con tr v xu k t

Chng 5: Mng, con tr v xu k t

5.1 Mng

5.1 Mng

m s phn t tha mn iu kin

V d: Nhp mng, a ra TBC cc s chia ht cho 7

Duyt tng phn t ca dy (dng for )


Nu phn t xt tha mn iu kin
Ghi nhn

Chuyn sang xem xt phn t tip theo


V d: m s thng c lng ma ln hn 50mm
int dem = 0;
for(i = 0; i < MONTHS; i++)
if(rainfall[i] > 50)
dem++;
printf("\nThang mua nhieu hon 50mm: %d", dem);
1/27/2012

259

Chng 5: Mng, con tr v xu k t

#include<stdio.h>
void main(){
int A[100];
int n, i, d = 0, S=0;
printf(\n So phan tu cua mang (<100) : ); scanf(%d,&n);
for(i = 0; i < n; i++){
printf("A[%d] = ", i); scanf("%d",&A[i]);
}
for(i = 0; i < n; i++)
if(A[i] %7==0){
d++;
S+= A[i];
}
if(d > 0) printf(TBC so chia het cho 7: %7.2f,(float)S/d);
else printf(Trong day khong co so chia het cho 7);
}
1/27/2012
260

Chng 5: Mng, con tr v xu k t

5.1 Mng

5.1 Mng

Tm kim phn t

Tm kim phn t

Tm phn t ln nht (nh nht)

Tm kim cc phn t tha mn iu kin


(ging bi ton m)

Gi s phn t l phn t u tin


Ln lt so snh vi cc phn t cn li

Dng for duyt ton b

Nu phn t mi ca dy ln hn coi y l phn


t ln nht v tip tc so snh vi phn t k
Nu khng ng, so snh tip vi phn t k

Nu cn thit, dng thm mng ghi li ch s

V d: Tm thng c lng ma nhiu nht trong nm


max = rainfall[0];
for(i = 1; i < MONTHS; i++)
if(rainfall[i] > max)
max = rainfall[i];
printf("\n Luong mua nhieu nhat la: %d", max);
1/27/2012

261

Chng 5: Mng, con tr v xu k t

V d: a ra danh sch cc thng c lng


ma nhiu hn 50mm
printf(Thang co luong mua lon hon 500mm)
for(i = 0; i < MONTHS; i++)
if(rainfall[i] > 50)
printf("\nThang %d", i+1);
1/27/2012

Chng 5: Mng, con tr v xu k t

5.1 Mng

5.1 Mng

Tm kim phn t (tip)

Tm kim phn t V d

Tm phn t u tin ca danh sch

int Tab[100]
int N, i, k, f;//N: s phn t, k phn t cn tm

Dng vn lp for kt hp vi break;

Dng for

Dng vng lp while

for(i = 0; i < N; i++)


if(Tab[i] == k) break;
if(i< N) printf(Tim thay tai vi tri %d,i);

V d
a ra phn t u ca mng c gi tr
bng k;

1/27/2012

262

Dng while

263

i=0; f =0;
//f: found. f = 1 k is found
while(i < N && f==0){
if(Tab[i] == k) f = 1;
else i++;}
if
(f==1)
printf(Tim thay tai vi tri %d,i);
1/27/2012

264

44

Chng 5: Mng, con tr v xu k t

Chng 5: Mng, con tr v xu k t

5.1 Mng

5.1 Mng

Bi ton sp xp tng Thut ton la chn


Nguyn tc

Bi ton sp xp theo th t
Cho mng phn t, sp xp theo th t
tng/gim

Ti lt sp th k, tm phn t nh nht trong s


cc phn t cha c sp xp ([k..last]) v i
ch cho phn t th k (c ch s k-1)

Cc thut ton

Khi k = 1, phn t th nht (ch s 0) ng v tr


Khi k= 2, phn t th hai (ch s 1) ng v tr

Sp xp thm dn (insertion sort)


Sp xp la chn (selection sort)
Sp xp ni bt (bubble sort)
Sp xp vun ng (heap sort)
Sp xp nhanh (quick sort)
Sp xp trn (merge sort)
.
1/27/2012

265

Chng 5: Mng, con tr v xu k t

266

Chng 5: Mng, con tr v xu k t

5.1 Mng

5.1 Mng

Bi ton sp xp tng Thut ton la chn

Bi ton sp xp tng Thut ton la chn

Lt 2 Lt 3 Lt 4

Dy

Lt 1

3
2
1

3
2
5

2
3

5
3

5
3

6
5

1
2

3
2

3
5

5
6

1/27/2012

267

Chng 5: Mng, con tr v xu k t

//Khai bo cc bin
int A[100];
//Mng cha d liu
int N, i, j, tmp;
//Sp xp
for(i = 0; i < N 1; i++)
for(j = i + 1; j < N; j++)
if(A[i] > A[j]) {
tmp = A[i];
A[i] = A[j];
A[j] = tmp;
}
1/27/2012

268

Chng 5: Mng, con tr v xu k t

5.1 Mng

5.1 Mng

V d

V d

Nhp vo t bn phm mt mng cc s


nguyn khng qu 100 phn t
Hin th dy s va nhp
Sp xp dy theo th t gim dn
Hin th dy ti mi lt sp xp

1/27/2012

1/27/2012

269

1. #include<stdio.h>
2. void main(){
3.
int A[100] ;
4.
int N, i, j , t;
5.
printf("So phan tu [< 100]: "); scanf("%d",&N);
6.
printf("Hay nhap day so...\n");
7.
for(i=0; i < N; i++){
8.
printf("A[%d] = ",i+1); scanf("%d",&A[i]);
9.
}
10.
printf("\nDay vua nhap...\n");
11.
for(i=0; i < N; i++)
12.
printf("%4d", A[i]);
13.
printf("\n\n");

1/27/2012

270

45

Chng 5: Mng, con tr v xu k t

Chng 5: Mng, con tr v xu k t

5.1 Mng

5.1 Mng

V d

V dKt qu

1.
printf("Sap xep day theo thuat toan lua chon");
2.
for(i=0; i < N-1; i++){
3.
for(j=i; j < N; j++)
4.
if(A[i] < A[j]) {
5.
t = A[i];
6.
A[i] = A[j];
7.
A[j] = t;
8.
}//if & for_j
9.
printf("\nLuot %d : ",i+1);
10.
for(j=0; j < N; j++)
11.
printf("%4d", A[j]);
12.
}//for_i
13. }//main

1/27/2012

271

Chng 5: Mng, con tr v xu k t

1/27/2012

272

Chng 5: Mng, con tr v xu k t

5.1 Mng

5.1 Mng

Bi ton chn phn t a vo v tr k

Bi ton xa phn t v tr k (0k<N)

for(i = N; i > k; i--)

A[i] = A[i-1];

8
7

4
8

A[k] = a;

N= N + 1;

3
9
N

Ch :

9
4

N = MAX: khng chn c

A[i-1] = A[i];
N= N - 1;

4
9
4

k > N Chn vo v tr N;

?
9

8
3

for(i = k+1; i < N; i++)

k< 0 Chn vo v tr 0

1/27/2012

273

Chng 5: Mng, con tr v xu k t

1/27/2012

Chng 5: Mng, con tr v xu k t

5.1 Mng

5.1 Mng

Bi tp 1

Bi tp 2

1.

1.

Nhp vo t bn phm mt dy s nguyn (<100 phn


t). Sp xp dy theo nguyn tc: Bn trn l s chn
chia ht cho 3. Bn dui l s l chia ht cho 3. Gia l
cc s cn li. a c 2 dy ra mn hnh.

2.

Vit chng trnh nhp vo t bn mt dy s (<100


phn t). a ra s b nht v v tr nhng s bng s
b nht

3.

Nhp vo mt dy s (<100 phn t) v sp xp theo


th t tng dn. Nhp thm vo mt s v chn s mi
nhp vo ng v tr

4.

Nhp vo mt dy (<100 phn t); xa i cc phn t


chia ht cho 5 v a kt qu ra mn hnh

Nhp vo dy s, tnh v a ra mn hnh

2.
3.
4.

5.

Tng v tch ca dy s
Cc s chia ht cho 3 v ln hn 10
m cc s nm trong on [100,1000]

Nhp vo mt dy s; tm s chn nh nht dy


Nhp dy s; m xem c bao nhiu b 3 s tha
mn iu kin xi=(xi-1+xi+1)/2
c vo dy s c n phn t (n<100). c s x v
s k nguyn. Chn x vo v tr k ca dy. Nu k>n,
chn x vo v tr n+1.
Nhp vo n v dy s (x1,x2,xn) ;(y1,y2,..yn) ri tnh
n

a)
1/27/2012

274

cosx sin x
i

i =1

(x y )

n1

b)

i =1

c)

x
1

i +1
2
i +1

275

1/27/2012

276

46

Chng 5: Mng, con tr v xu k t

Chng 5: Mng, con tr v xu k t

5.1 Mng

5.1 Mng

Bi cha

Bi cha Sp xp s chn chia ht 3 ln u dy..

#include<stdio.h>
void main(){
int A[100];
int N, i;
//Nhp d liu
printf("So phan tu : "); scanf("%d",&N);
for(i=0; i < N; i ++){
printf("A[%d] = ",i);scanf("%d",&A[i]);
}
//Cc thao tc x l mng: chn, xa, sp xp,
//a D liu ra
for(i=0; i < N; i ++)
printf("%4d",A[i]);
}

1. { int d = 0, t;
2.
for(i=0;i < N; i++)
3.
if(A[i]%6==0){
4.
t=A[i]; A[i]=A[d]; A[d] = t;
5.
d++;
6.
}
7.
for(i=d; i < N; i++)
8.
if(A[i]%3 != 0){
9.
t=A[i]; A[i]=A[d]; A[d] = t;
10.
d++;
11.
}
12. }

1/27/2012

277

Chng 5: Mng, con tr v xu k t

278

Chng 5: Mng, con tr v xu k t

5.1 Mng

5.1 Mng

Bi cha Sp xp tng dn v chn ng v tr

Bi cha Xa cc phn t chia ht cho 5..

1. { int k = 0,i, j, t;
2.
for(i=0;i < N - 1; i++)//Sp xp la chn
3.
for(j=i+1;j < N ; j++)
4.
if(A[i] > A[j]){
5.
t = A[j]; A[j] = A[i]; A[i]=t;
6.
}
7.
printf("Phan tu moi:"); scanf("%d",&k);//Nhp p/t mi
8.
i = N; //Chn ng v tr
9.
while( (i > 0) &&(A[i-1] > k) ){
10.
A[i] = A[i-1];
11.
i--;
12.
}
13.
A[i] = k;
14.
N++;
15. }
1/27/2012

1/27/2012

1. { // PP: Gi li cc phn t khng chia ht cho 5


2.
int d = 0, i;
3.
for(i=0;i < N; i++)
4.
if(A[i] % 5 != 0){
5.
A[d] = A[i];
6.
d++;
7.
}
8.
N = d;
9. }

279

Chng 5: Mng, con tr v xu k t

1/27/2012

280

Chng 5: Mng, con tr v xu k t

5.1 Mng

5.1 Mng

Xa cc phn t chia ht cho 5 Kt qu

Bi tp 3 : Ma trn
1. Vit chng trnh nhp vo mt ma trn vung,
cc phn t nguyn, sau

a ra ma trn tam gic dui


a ra ma trn tam gic trn

2. Nhp M, N (M, N < 30) v mt ma trn MxN.


a ma trn ra mn hnh

Tm hng/ct c tng cc phn t ln nht


Tm s ln nht/nh nht v v tr trong ma trn
a ra ma trn S cng kch thc tha mn

si , j
1/27/2012

281

1/27/2012

1 n' u ui , j > 0

= 0 n' u ui , j = 0

1 n' u ui , j < 0

282

47

Chng 5: Mng, con tr v xu k t

Chng 5: Mng, con tr v xu k t

5.1 Mng

5.1 Mng

Nhp vo mt ma trn vung,..

a ra ma trn tam gic trn, di

#include <stdio.h>
void main(){
int A[20][20], N,i,j;
printf("Nhap kich thuoc : "); scanf("%d",&N);
printf("\n");
for ( i=0; i < N; i++ )
for(j=0; j < N; j++)
{
printf("Nhap phan tu [%d,%d]:", i+1,j+1);
scanf("%d", &A[i][j] );
}
printf("\n\n MA TRAN DA NHAP \n\n");
for ( i=0; i < N; i++ ){
for(j=0; j < N; j++)
printf( "%4d" ,A[i][j]);
printf("\n");
}
1/27/2012

283

printf("\n\n MA TRAN TAM GIAC TREN \n\n");


for ( i=0; i < N; i++ ){
for(j=0; j < N; j++)
if(j >= i)
printf( "%4d" ,A[i][j]);
else
printf("%4c",32); //32 l m ASCII ca du cch
printf("\n");
}
printf("\n\n MA TRAN TAM GIAC DUOI \n\n");
for ( i=0; i < N; i++ ){
for(j=0; j <= i; j++)
printf( "%4d" ,A[i][j]);
printf("\n");
}
}//main
1/27/2012

284

Chng 5: Mng, con tr v xu k t

Chng 5: Mng, con tr v xu k t

5.1 Mng

Ni dung chnh

Thc hin

1. Mng

Khi nim
Khai bo v s dng
Cc thao tc thng gp

2. Con tr

Khi nim v cch khai bo


Ton t a ch (&), ton t ni dung (*)
Php ton trn con tr
Con tr v mng

3. Xu k t

1/27/2012

285

Chng 5: Mng, con tr v xu k t

5.2 Con tr

Gii thiu

a ch
B nh gm dy cc nh

L mt khi nim mnh


trong C

Cho php truy nhp gin tip


ti mt i tng c a ch
(bin, hm)
Truy nhp trc tip thng
qua tn

00000
00001

Mi nh l mt byte
Mi nh c mt a ch ring

Cc bin trong chng trnh c lu ti vng


nh no trong b nh

Bin

Khi khai bo bin, ty thuc vo kiu, bin s


c cp mt s nh lin tc nhau
Bin int c cp 2 bytes, float c cp 4 bytes,..

Con tr
FFFFF

B nh
1/27/2012

286

Chng 5: Mng, con tr v xu k t

5.2 Con tr

Cho php tnh ton trn con tr


S dng con tr hm

Khi nim
Khai bo v s dng
Cc hm x l k t v xu k t
1/27/2012

287

a ch ca bin, l a ch ca byte u tin trong s


cc byte c cp
Khi gn gi tr cho bin, ni dung cc byte cung cp cho
bin s thay i
288

1/27/2012

48

Chng 5: Mng, con tr v xu k t

Chng 5: Mng, con tr v xu k t

5.2 Con tr

5.2 Con tr

a ch V d
int N;
float x;
char Arr[4];

Con tr
Con tr l mt bin m
gi tr ca n l a ch
ca mt vng nh

a ch bin N
?
E8
03
?
?
00
?
00
?
1B
?
41
?
01
?
05
?
09
?
0D

a ch bin X

N = 1000;//03E8
a ch bin Arr
X=9.6875;//411B0000
for(i=0;i<4;i++)
Arr[i]= 4*i+1;
a ch ca mt bin l a ch byte
nh u tin c cung cp cho
bin lu tr d liu

N
X
Arr

Bin nh

EB03

ABCD

ABCD

EFCD

Bin con tr

C th tr ti mt hm

289

Chng 5: Mng, con tr v xu k t

FFFF

B nh

1/27/2012

290

Chng 5: Mng, con tr v xu k t

5.2 Con tr

5.2 Con tr

Con tr Khai bo
Kiu

Ton t a ch (&)

K hiu: &
L ton t mt ngi, tr
v a ch ca bin

Tn;

Tn: Tn ca mt bin con tr


Kiu: Kiu ca bin m con tr Tn tr ti
Tr ti cc bin khc nhau, c cng kiu

Kiu bin m con tr tr ti khng thay i c


Mun thay i phi thc hin p kiu

V d:
int * pi;

//Con tr, tr ti mt bin kiu nguyn

char * pc; //Con tr, tr ti mt bin kiu k t


1/27/2012

0000
Bin N
ABCD

a ch bin c th c
gn cho mt con tr, tr ti
i tng cng kiu

Gi tr ca con tr c th thay i c

291

Chng 5: Mng, con tr v xu k t

V d

ABCD

int N; // &N ABCD


int * pi;
pi = &N; // piABCD

EFCD

Bin pi
FFFF

B nh

1/27/2012

292

Chng 5: Mng, con tr v xu k t

5.2 Con tr

5.2 Con tr

Ton t ni dung (*)


K hiu: *
L ton t mt ngi, tr v gi
tr (ni dung) ca vng nh m
con tr ang tr ti
V d

Gn gi tr cho con tr
0000
Bin N

20
10

ABCD

Con tr c gn a ch ca mt bin
Bin cng kiu vi kiu m con tr tr ti
Nu khng, cn phi p kiu

Con tr c gn gi tr ca con tr khc


Hai con tr s tr ti cng mt bin(do cng a ch)
Hai con tr nn cng kiu tr n

int N;

Nu khng, phi p kiu

N= 10; *pi = 10;

N = 10;//Vng nh m pi tr ti
mang gi tr 10; Vy *pi=10
*pi = 20;// Vng nh pi tr ti c
gn gi tr 20; Vy N= 20
1/27/2012

Con tr dng tr ti mt
bin nh
C th tr ti con tr khc

B nh

1/27/2012

int * pi;
pi = &N;

Vng nh ny c th dng
cha cc bin c kiu c
bn (nguyn, thc, k t,)
hay c cu trc (mng, bn
ghi,..)

0000

ABCD

EFCD

Con tr pi
FFFF

B nh

Con tr c gn gi tr NULL
V d: int *p; p = 0;
Gn ni dung vng nh 2 con tr tr ti.
V d: int *p1, *p2;

293

1/27/2012

*p1 = *p2;
294

49

Chng 5: Mng, con tr v xu k t

Chng 5: Mng, con tr v xu k t

5.2 Con tr

5.2 Con tr

V d

V d

#include <stdio.h>

#include <stdio.h>

void main(){

void main(){
int N=5, M=10;

int *p1 = &N;

int *p1 = &N;

int *p2 = &M;

int *p2 = &M;

*p1 = *p2;

p1 = p2;

printf("%d %d",*p1,*p2);
}

2. void main(){

printf("%d %d",*p1,*p2);
}

10 10

3.

int N=5, M=10;

4.

int *p1 = &N;

5.

int *p2 = &M;

6.

*p1 = *p2;

7.

printf("%d %d",*p1,*p2);

10
5
10
ABCF
ABCD

ABCD
ABCF

p2 p1

int N=5, M=10;

0000

1. #include <stdio.h>

8. }

10 10

B nh
1/27/2012

295

Chng 5: Mng, con tr v xu k t

FFFF

1/27/2012

296

Chng 5: Mng, con tr v xu k t

5.2 Con tr

5.2 Con tr

V d

Cc php ton trn con tr


0000

1. #include <stdio.h>

Cng con tr vi mt s nguyn


Kt qu: Con tr cng kiu

2. void main(){

ABCD

5
10

int N=5, M=10;

4.

int *p1 = &N;

5.

int *p2 = &M;

6.

p1 = p2;

ABCF

7.

printf("%d %d",*p1,*p2);

ABCD
ABCF

ABCF

p2 p1

3.

Tr con tr vi mt s nguyn
Kt qu: Con tr cng kiu

Tr 2 con tr cng kiu cho nhau


Kt qu: Mt s nguyn
Khong cch gia 2 con tr c o bng s phn t
thuc kiu d liu m con tr tr ti

8. }
FFFF

B nh

1/27/2012

297

Chng 5: Mng, con tr v xu k t

5.2 Con tr

Mi quan h gia con tr v mng mt chiu

Cc php ton trn con trV d


0000

int N=1000, M=2000,P=3000;

p1 - p2 -2

P
M
N

* (p2-1) 2000
* ++ p1 2000

298

Chng 5: Mng, con tr v xu k t

5.2 Con tr

int * p1 = &P, *p2 = &N;

1/27/2012

p2
p1

Ghi ch:
Kiu int, cc phn t cch nhau 2 bytes
Kiu float, cc phn t cch nhau 4 bytes
1/27/2012

E8
03
D0
07
B8
0B

ABC0
ABC1
ABC2
ABC3
ABC4
ABC5
ABC6

Nu Tab l tn mt mng Tab l mt con


tr hng cha a ch ca phn t u tin
ca mng Tab (&Tab[0])
Khng tn ti php tnh trn tn mng, hoc gn
gi tr cho tn mng (VD: Tab=; Tab++)

C th s dng mt con tr duyt mng


nu n c gn gi tr bng a ch ca
mng (a ch ca phn t u tin)

ABC4
ABC0
ABC2
FFFF

B nh
299

1/27/2012

300

50

Chng 5: Mng, con tr v xu k t

Chng 5: Mng, con tr v xu k t

5.2 Con tr

5.2 Con tr

V d

Con tr void
void * Tn_con_tr

int Tab[10];
int * p = Tab; // int *p = &Tab[0]

L mt con tr c bit: con tr khng c kiu


C th nhn gi tr l a ch ca mt bin c kiu
d liu bt k

for(i = 0; i < 10; i ++)


printf(%d , *(p + i) );

Thng dng lm i s trong li gi hm c th


nhn bt k kiu a ch no ca tham s c truyn

for(i = 0; i < 10; i ++)


printf(%d , p[i]);

V d:
void * p, *q;
int n; float x;

for(i = 0; i < 10; i ++)


printf(%d , *(p++) );
1/27/2012

p = & n; q= & x; \\Cc cu lnh hp l


301

Chng 5: Mng, con tr v xu k t

1/27/2012

302

Chng 5: Mng, con tr v xu k t

5.2 Con tr

5.2 Con tr

V d

V d

#include<stdio.h>
int main()
30
{
int a=3, *p;
p = &a;
printf("%d\n", a * *p * a + *p);
return 0;
}

#include<stdio.h>

1/27/2012

int main(){
int arr[2][2][2] = {10, 2, 3, 4, 5, 6, 7, 8};
int *p, *q;
p = &arr[1][1][1];
q = (int *) arr;
return 0;
}
303

Chng 5: Mng, con tr v xu k t

Khi nim xu k t
Xu k t (string) l mt dy cc k t vit
lin tip nhau

Khi nim
Khai bo v s dng
Cc thao tc thng gp

di xu l s k t c trong xu

2. Con tr

Xu khng c k t no: Xu rng

Khi nim v cch khai bo


Ton t a ch (&), ton t ni dung (*)
Php ton trn con tr
Con tr v mng

V d: Tin hoc, String


Lu tr: kt thc xu bng k t \0 hay
NULL (m ASCII l 0)

3. Xu k t
Khi nim
Khai bo v s dng
Cc hm x l k t v xu k t
1/27/2012

304

5.3 Xu k t

1. Mng

1/27/2012

Chng 5: Mng, con tr v xu k t

Ni dung chnh

8, 5

printf("%d, %d\n", *p, *(q+4) );

T
305

1/27/2012

i n

c \0
306

51

Chng 5: Mng, con tr v xu k t

Chng 5: Mng, con tr v xu k t

5.3 Xu k t

5.3 Xu k t

Khai bo

Khi nim xu k tLu


Xu k t >< mng k t

char tn_xu [s_k_t_ti_a];

Tp hp cc k t vit lin tip nhau

lu tr mt xu c n k t chng ta cn
mt mng c kch thc n+1

Truy nhp mt phn t ca xu k t (l mt k t)


ging nh truy nhp vo mt phn t ca mng:
Tn[Ch_s]

Phn t cui cng cha k t NULL

Xu k t c k t kt thc xu, mng k t


khng c k t kt thc xu

V d

Xu k t di 1 >< k t (A =A ?)
A l 1 k t, c lu tr trong 1 byte
A l 1 xu k t, ngoi k t A cn c k t \0
=> c lu tr trong 2 byte
1/27/2012

307

Chng 5: Mng, con tr v xu k t

char str[8] = Tin hoc;

1/27/2012

i n

c \0

308

Chng 5: Mng, con tr v xu k t

5.3 Xu k t

5.3 Xu k t

Truy nhp phn t ca xu

V d: Nhp xu v m s k t *

Ging nh truy nhp ti mt phn t ca


mng k t
tn_xu [ch_s_ca_k_t]
V d:
T

1/27/2012

lu tr xu Tin hoc chng ta phi khai


bo xu c s phn t ti a t nht l 8

char Str[10] = Tin hoc;


i

Str[0] T
Str[3]
Str[7] \0
Str[8] ?

1 \0
c \0 ?
?

Str[3] = -;
Str[7] = ;
Str[8] = 1 ;
Str[9] = \0; Str: Tin-hoc 1

309

Chng 5: Mng, con tr v xu k t

Tnh chiu di ca xu
#include <stdio.h>
d=0;
void main(){
while(Str[d] != '\0') d++;
char Str[100];
int d=0, i=0;
printf("Nhap xau ky tu: "); gets(Str);
while(Str[i] != '\0'){
if(Str[i]=='*')
d++;
i++;
}
printf("Ket qua : %d",d);
}

1/27/2012

310

Chng 5: Mng, con tr v xu k t

5.3 Xu k t

5.3 Xu k t

Cc hm x l k t

Cc hm x l k tChuyn i ch hoa/thng
int toupper(char ch):
Chuyn k t thng thnh k t hoa
toupper(a) => A

Tp tiu : ctype.h

int tolower(char ch)


Chuyn k t hoa thnh k t thng

#include <ctype.h>

tolower(B) => b

V d
do{
.
printf(Tiep tuc <C/K>? :); fflush(stdin);
}while(toupper(getche()) !='K');

1/27/2012

311

1/27/2012

312

52

Chng 5: Mng, con tr v xu k t

Chng 5: Mng, con tr v xu k t

5.3 Xu k t

5.3 Xu k t

Cc hm x l k t Kim tra ch hoa/thng

Cc hm x l k t Kim tra ch ci/ch s

int isalpha(char ch):

int islower(char ch)

Kim tra k t trong tham s c phi ch ci


khng (az,A,..Z). Hm tr v khc 0 nu
ng, ngc li tr v gi tr bng 0
V d: printf("%d ",isalpha('A')); 0 (1 !?)

Kim tra ch thng:


Hm tr v gi tr khc 0 nu ch l ch
thng, ngc li tr v 0
V d: printf("%d ",islower('A')); 0

int isdigit(char ch):

int isupper(char ch):


Kim tra ch hoa:

Kim tra k t trong tham s c phi ch s


(0,1,..9) khng. Hm tr v khc 0 nu ng,
ngc li tr v gi tr bng 0
V d: printf("%d ",isdigit('A')); 0

Hm tr v gi tr khc 0 nu ch l ch hoa,
ngc li tr v 0
V d: printf("%d ",isupper('A')); 0 (1 !?)
1/27/2012

313

Chng 5: Mng, con tr v xu k t

314

Chng 5: Mng, con tr v xu k t

5.3 Xu k t

5.3 Xu k t

Khi nim xu k tKim tra k t c bit

V d: Nhp xu v m t, phn cch bi du trng

int iscntrl(char ch)


Kim tra k t iu khin (0-31).
Hm tr v khc 0 nu ng, ngc li tr v
gi tr bng 0

int isspace(char ch)


Kim tra k t du cch (m 32), xung dng
(\n 10), u dng (\r 13), tab ngang (\t 9), tab
dc (\v 11).
Hm tr v khc 0 nu ng, ngc li tr v
gi tr bng 0
1/27/2012

1/27/2012

315

Chng 5: Mng, con tr v xu k t

#include <stdio.h>
#include <conio.h>
#include <ctype.h>
int main(){
char Str[100]; int d=0, i=0;
printf("Nhap xau ky tu: "); gets(Str);
if(Str[0] == '\0') printf( Xau rong ");
else{
if( ! isspace(Str[0]) ) d=1;
i=1;
while(Str[i] != '\0'){
if( isspace(Str[i-1] ) && (! isspace(Str[i])) ) d++;
i++;
}
printf("Ket qua : %d",d);
}
}
1/27/2012

Chng 5: Mng, con tr v xu k t

5.3 Xu k t

5.3 Xu k t

Cc hm x l xu k t

Cc hm x l xu k t

Vo/ra xu k t

Tp tiu : string.h

Tp tiu : stdio.h
Nhp xu k t

#include <string.h >

gets(tn_xu);
scanf(%s,&tn_xu);
puts(tn_xu);
printf(%s,tn_xu);

Ch :
char str[100] = Hello world;
char * p = str;
p l con tr ti mng cc k t/ xu k t

S khc nhau gia gets v scanf?

Xu k t, c th c khai bo char *

Hin th xu k t

1/27/2012

316

p+6 cng l xu k t : world


317

1/27/2012

318

53

Chng 5: Mng, con tr v xu k t

Chng 5: Mng, con tr v xu k t

5.3 Xu k t

5.3 Xu k t

Cc hm x l xu k t

Cc hm x l xu k t
int strcmp(char * xu_1, char * xu_2)

size_t strlen(char * xu)

So snh hai xu.


Tr v gi tr 0 nu hai xu ging nhau;
Gi tr < 0: xu_1 < xu_2
Gi tr >0: xu_1 > xu_2

Tr v di xu
printf("%d ",strlen("Hello world")); 11

char * strcpy(char * ch, char * ngun)

V d

sao chp xu, tr v gi tr xu ngun

char Str[20];
strcpy(Str,hello);
printf(%d, strcmp(Str,hello));0
printf(%d, strcmp(Str,hello!); -1 (!?)
printf(%d, strcmp(Str,Hello); 1 (!?)

char Str[20];
printf("%s ",strcpy(Str,"Hello")); Hello
printf("%s", Str); Hello
Ch : Php gn Str = Hello l khng hp l
1/27/2012

319

Chng 5: Mng, con tr v xu k t

1/27/2012

Chng 5: Mng, con tr v xu k t

5.3 Xu k t

5.3 Xu k t

Cc hm x l xu k t

Cc hm x l xu k t

char * strcat(char * xch, char * ngun)

char * strchr (char * s, int c)

Ghp ni xu ngun vo ngay sau xu ch, tr


li xu kt qu

V d
char Str[20];
strcpy(Str,"Hello ");
printf("%s ",strcat(Str,"world")); Hello world
printf("\n%s",Str); Hello world

1/27/2012

Tr v con tr tr ti v tr xut hin u tin


ca chui s2 trong s1. Nu khng tn ti, tr
v con tr null
printf("%s ",strstr(Str,llo)); llo world
321

1/27/2012

322

Chng 5: Mng, con tr v xu k t

5.3 Xu k t

5.3 Xu k t

Cc hm x l xu k t (tip)

V d: o ngc xu k t
#include<stdio.h>
#include<string.h>
main(){
char s[100],c;
int i, n;
printf("Nhap xau: ");gets(s);
n =strlen(s);
for(i=0;i <n/2;i++){
c = s[i];
s[i] = s[n-i-1];
s[n-i-1]=c;
}
printf("%s",s);
}

Tp tiu : stdlib.h
int atoi(char * str):
Chuyn mt xu k t thnh mt s nguyn
tng ng
V d: atoi(1234) 1234

int atol(char * str):


Chuyn xu k t thnh s long int

float atof(char * str):


Chuyn xu k t thnh s thc
V d:
atof(123.456E-2) 1.23456

Tht bi c 3 hm: tr v 0

Tr v con tr tr ti v tr xut hin u tin


ca k t c trong s. Nu khng c tr v con
tr null
strcpy(Str,"Hello world");
printf("%s ",strchr(Str,o')); o world

char* strstr(char * s1, char * s2)

Chng 5: Mng, con tr v xu k t

1/27/2012

320

323

1/27/2012

324

54

Chng 5: Mng, con tr v xu k t

Chng 5: Mng, con tr v xu k t

5.3 Xu k t

5.3 Xu k t

V d: Kim tra xu i xng

m s ln xut hin ch ci trong xu

#include<stdio.h>
#include<string.h>
main(){
char s[20];
int i,n;
printf("Nhap vao xau ki tu: ");gets(s);
n=strlen(s);
for(i=0;i<n/2;i++)
if(s[i]!=s[n-1-i])
break;
if(i==n/2)
printf("Xau doi xung");
else
printf("Xau khong doi xung");
}
1/27/2012

325

Chng 5: Mng, con tr v xu k t

#include<stdio.h>
#include<ctype.h>
#include<string.h>
main(){
char s[20];
int dem[26] = {};
int i,n;
puts("Nhap vao xau ki tu:");gets(s);
n=strlen(s);
for(i=0;i<n;i++)
if(isalpha(s[i]))
dem[ tolower(s[i ]) - 'a ]++;
for(i=0;i<26;i++)
if(dem[i]!=0)
printf("Ki tu %c xuat hien %d lan\n",'a'+i,dem[i]);
}
1/27/2012

326

Chng 5: Mng, con tr v xu k t

5.3 Xu k t

5.3 Xu k t

m s ln xut hin ch ci trong xu

Mng xu k t
Xu k t c th l kiu phn t ca mng
Khai bo
char DS[100][30];
Mng c ti a 100 phn t, cc phn t l
xu c di ti a 30

S dng
Nh mt mng bnh thng
Mi phn t mng c s dng nh mt xu
k t
1/27/2012

327

Chng 5: Mng, con tr v xu k t

5.3 Xu k t

V d: Nhp vo DSSV cho ti khi gp tn rng, in DS


#include <stdio.h>
#include <string.h>
void main(){
int i, n;
char DS[100][30];
printf("Nhap DSSV (<100), go Enter de thoat..\n");
n =0;
do{
printf("Ten sinh vien[%d]: ",n+1); gets(DS[n]);
if(DS[n][0] !='\x0') n++;
else break;
if(strcmp(DS[n],""))n++
if(n==100) break;
if(strlen(DS[n])>0) n++
}while(1);
printf("\n\nDS sinh vien vua nhap \n");
for(i=0;i<n;i++) printf("%s\n",DS[i]);
329
}
1/27/2012
329

1/27/2012

328

Chng 5: Mng, con tr v xu k t

5.3 Xu k t

V dKt qu thc hin

1/27/2012

330

55

Chng 5: Mng, con tr v xu k t

Chng 5: Mng, con tr v xu k t

5.3 Xu k t

5.3 Xu k t

V d

V d: Nhp vo DS sinh vin, in ra DS sp


#include <stdio.h>
#include <string.h>
void main(){
int i, j, N;
char DS[100][30], str[30];
//Nhap DS lop
printf("So sinh vien : ");
scanf("%d",&N);
fflush(stdin);
for(i=0;i < N;i++){
printf("Ten sinh vien[%d]: ",i);
gets(DS[i]);
}

1/27/2012

//So snh theo H+m+tn


for(i = 0; i < N - 1; i ++)
for(j = i +1; j < N; j ++)
if(strcmp(DS[i],DS[j]) > 0){
strcpy(str,DS[i]);
strcpy(DS[i],DS[j]);
strcpy(DS[j],str);
}
//In danh sch sp xp
printf("\nDS sinh vien vua nhap \n");
for(i=0;i < N;i++)
printf("%s\n",DS[i]);
}//main
331

Chng 5: Mng, con tr v xu k t

332

Chng 5: Mng, con tr v xu k t

5.3 Xu k t

5.3 Xu k t

V d

1/27/2012

1/27/2012

V d

333

//Sap xep theo tn


char ten_i[30],ten_j[30];
for(i = 0; i < N - 1; i ++)
for(j = i +1; j < N; j ++){
strcpy(ten_i,strrchr(DS[i],32));
strcpy(ten_j,strrchr(DS[j],32));
if(strcmp(ten_i,ten_j) > 0){
strcpy(str,DS[i]);
strcpy(DS[i],DS[j]);
strcpy(DS[j],str);
}
}

1/27/2012

334

Phn 3: Lp trnh C

Chng 5: Mng, con tr v xu k t

5.3 Xu k t

V d

Ni dung chnh
Chng 1: Tng quan v ngn ng C
Chng 2: Kiu d liu v biu thc trong C
Chng 3: Vo ra d liu
Chng 4: Cu trc iu khin
Chng 5: Mng, con tr v xu k t
Chng 6: Cu trc
Chng 7: Hm
Chng 8: Tp d liu

1/27/2012

335

1/27/2012

336

56

Chng 6: Cu trc

Chng 6: Cu trc

6.1 Khi nim cu trc

Ni dung chnh

V d Bi ton qun l th sinh thi i hc

1. Khi nim cu trc

qun l cn lu tr cc thng tin

Khi nim

2. Khai bo cu trc

Khi bo kiu cu trc


Khai bo bin cu trc
nh ngha kiu d liu vi typedef

S bo danh: S nguyn khng du


H tn sinh vin: Chui k t khng qu 30
Khi thi: K t (A,B,C..)
Tng im 3 mn thi: kiu thc

Do vy vi mi sinh vin cn cc bin


unsigned
char
char
float

3. X l d liu cu trc

Truy nhp cc trng d liu


Php gn gia cc bin cu trc
Mt s v d

1/27/2012

337

Chng 6: Cu trc

SBD;
Ten[30];
KhoiThi;
KetQua;

1/27/2012

338

Chng 6: Cu trc

6.1 Khi nim cu trc

6.1 Khi nim cu trc

V d Bi ton qun l th sinh thi i hc (tip)

V d Bi ton qun l th sinh thi i hc (tip)

qun l danh sch (di 1000) th sinh d


thi, cn nhiu mng ri rc

DS_SBD
123

456

789

Mng k t

DS_Ten

#define MAX 1000

Nguyn Nguyn Trn An


Vn An Hong Ngha

unsigned

DS_SBD[MAX];

char

DS_Ten[MAX][30];

char

DS_KhoiThi[MAX];

float

DS_KetQua[MAX];

1/27/2012

DS_KhoiThi
A

DS_KetQua
24.5 28.5 22.0

339

Chng 6: Cu trc

1/27/2012

TS: i+2
TS: TS:
i i+1

Bin iu khin
dng duyt mng
340

Chng 6: Cu trc

6.1 Khi nim cu trc

6.1 Khi nim cu trc

V d Vn & gii php

Khi nim

Dng nhiu mng

Cu trc l kiu d liu phc hp, do ngi


dng t nh ngha

- Kh qun l, d nhm ln
- Khng th hin cu trc thng tin dnh cho tng
th sinh
Mng cc cu
trc thng tin
dnh cho th sinh

1/27/2012

Cu trc thng tin


dnh cho mt th sinh

THNG TIN TH SINH


THNG TIN TH SINH
S
bo
danh:....123
S bo
danh:
THNG
TIN
THSINH
SINH
THNG
H
TIN
v
TH
Tn:..Nguyn
Vn An..
H v Tn:
S bo danh:
Khi
thi:A.
S bo danh:
Khi thi:.
H v Tn:
Ktqu:.
qu:24.5.
H v Tn:
Kt
Khi thi:.
Khi thi:.
Ktqu:.
qu:. Mi phn t ca mng
Kt

l mt cu trc thng341
tin

Kiu cu trc bao gm nhiu thnh phn c th


thuc cc kiu d liu khc nhau
Cc thnh phn: gi l trng d liu (field)
Cc thnh phn, khng c truy nhp theo ch
s (nh mng) m theo tn ca trng.
C th coi mt bin cu trc l mt tp hp ca mt
hay nhiu bin ri rc, thng c kiu khc nhau
thnh mt bin c mt tn duy nht d dng
qun l v s dng
1/27/2012

342

57

Chng 6: Cu trc

Chng 6: Cu trc

6.1 Khi nim cu trc

Khi nim V d

Ni dung chnh

Kt qu hc tp ca sinh vin

1. Khi nim cu trc

TenSV: Chui k t

2. Khai bo cu trc

MaSV: Chui s/ s nguyn

iem: S thc

im trong mt phng
Tn im: K t (A, B, C..)

Khi bo kiu cu trc


Khai bo bin cu trc
nh ngha kiu d liu vi typedef

3. X l d liu cu trc

Honh : S thc

Tung : S thc
1/27/2012

Khi nim

343

Chng 6: Cu trc

Truy nhp cc trng d liu


Php gn gia cc bin cu trc
Mt s v d

1/27/2012

Chng 6: Cu trc

6.2 Khai bo cu trc

6.2 Khai bo cu trc

Khai bo kiu cu trc V d

Khai bo kiu cu trc

Th sinh vin

struct Tn_kiu_cu_ trc {


<Khai bo cc trng d liu>
};

S hiu:(Chui k t)..
Tn sinh vin: (Chui k t)
Nm sinh:(S nguyn)

struct: t kha, cho php ngi dng khai bo


kiu d liu mi: kiu cu trc
Tn_kiu_cu_truc: Tn ca kiu cu trc do
ngi dng t nh ngha

Kha:(S nguyn).
Lp: :.(Chui k t).

Tun theo nguyn tc t tn i tng trong C

Point2D

Khai bo cc trng d liu: Danh sch cc


khai bo thnh phn (trng:field) ca cu trc
Ging khai bo bin

Cc trng c th c kiu bt k
1/27/2012

Honh (x)(S thc)..


Tung (y)..(S thc)..
345

Chng 6: Cu trc

struct SinhVien{
char SHSV[10];
char Ten[30];
int NS;
int Khoa;
char Lop [10];
};
struct Point{
float x, y;
};

1/27/2012

346

Chng 6: Cu trc

6.2 Khai bo cu trc

6.2 Khai bo cu trc

Khai bo bin cu trc

Khai bo kiu cu trc nhm to nh ngha


ton th cho cc cu trc s c dng
sau ny

Khai bo bin cu trc C php


Tn ti nh ngha kiu cu trc

struct Kiu_cu_ trc Tn_bin;


Khai bo trc tip

struct {
<Khai bo cc trng d liu>
}Tn_bin;

Khng cung cp khng gian nh cho kiu

Khai bo bin cu trc nhm yu cu


chng trnh to vng nh lu tr cc
d liu cho bin cu trc

Kt hp vi khai bo kiu

Cha d liu ca cc trng ca cu trc

1/27/2012

344

347

1/27/2012

struct Kiu_cu_ trc {


<Khai bo cc trng d liu>
}Tn_bin;

348

58

Chng 6: Cu trc

Chng 6: Cu trc

6.2 Khai bo cu trc

6.2 Khai bo cu trc

Khai bo bin cu trc V d


Tn ti nh ngha kiu cu trc

Khai bo bin cu trc Ch

Cc cu trc c th c khai bo lng nhau


struct diem_thi {
float dToan, dLy, dHoa;
}
struct thi_sinh{
char SBD[10];
char ho_va_ten[30];
struct diem_thi ket_qua;
} thi_sinh_1, thi_sinh_2;

struct SinhVien SV1, SV2, Thu khoa;


Khai bo trc tip

struct {
float x, y; //Ta trn mt phng
}A, B;
//Khai bo 2 im A, B
Kt hp vi khai bo kiu

struct Point_3D{
float x, y, z;// Ta khng gian
}A, B;

1/27/2012

349

Chng 6: Cu trc

350

Chng 6: Cu trc

6.2 Khai bo cu trc

6.2 Khai bo cu trc

Khai bo bin cu trc Ch

Khai bo bin cu trc Ch

C th khai bo trc tip cc trng d liu


ca mt cu trc bn trong cu trc khc
struct thi_sinh{
char SBD[10];
char ho_va_ten[30];
struct{
float dToan, dLy, dHoa;
} ket_qua;
} thi_sinh_1, thi_sinh_2;
1/27/2012

C th gn gi tr khi u cho mt bin cu


trc, theo nguyn tc nh kiu mng
struct SinhVien{
V d:

char Ten[20];
struct Date{
struct Date{
int day;
int day;
int month;
int month;
int year;
int year;
};
} NS;
struct SinhVien{
} SV = {Tran Anh", 20,12,1990 };
char Ten[30];
struct Date NS;
} SV = {Tran Anh", 20, 12, 1990 };

351

Chng 6: Cu trc

1/27/2012

352

Chng 6: Cu trc

6.2 Khai bo cu trc

6.2 Khai bo cu trc

nh ngha kiu d liu vi typedef

nh ngha kiu d liu vi typedef

typedef <tn_c> <tn_mi>;

Thng c kt hp vi kiu cu trc


khai bo mt b danh cho mt cu trc

Mc ch
t tn mi ng ngha vi tn ca mt kiu
d liu c nh ngha
Thng c s dng cho kiu cu trc
Gip cho khai bo tr nn quen thuc v t b sai hn

V d

1/27/2012

1/27/2012

typedef char Str80[80] ;


typedef long mask;
Str80 str="Bonjour tout le monde !";
mask a, b;

Gip khai bo tr nn quen thuc v t b sai hn


typedef struct { //nh ngha mt cu trc
char SHSV[10];
char Ten[30];
int NS;
int Khoa;
char Lop [10];
} SinhVien;
//t tn cho cu trc l SinhVien
SinhVien SV;

353

1/27/2012

//To mt bin cu trc


354

59

Chng 6: Cu trc

Chng 6: Cu trc

6.2 Khai bo cu trc

6.2 Khai bo cu trc

nh ngha kiu d liu vi typedef Ch

nh ngha kiu d liu vi typedef Ch

Cho php t tn mi trng vi tn c

typedef struct point_2D {


float x, y;
}point_2D, diem_2_chieu, ten_bat_ki;
point_2D X;
diem_2_chieu Y;
ten_bat_ki Z;
Ch :
point_2D, diem_2_chieu, ten_bat_ki l
cc tn cu trc, khng phi tn bin

typedef struct {
float x, y, z;
}point_3D;
point_3D M;
point_3D N;

V d
struct point_3D{
float x, y, z;
}
struct point_3D M;
typedef struct point_3D point_3D;
point_3D N;
1/27/2012

355

Chng 6: Cu trc

1/27/2012

356

Chng 6: Cu trc

6.3 X l d liu cu trc

Ni dung chnh

Truy cp cc trng d liu

1. Khi nim cu trc

C php

Khi nim

tn_bin_cu_trc.tn_trng

2. Khai bo cu trc

Lu

Khi bo kiu cu trc


Khai bo bin cu trc
nh ngha kiu d liu vi typedef

Du . l ton t truy cp vo trng


d liu trong cu trc
Nu trng d liu l mt cu trc =>
s dng tip du . truy cp vo
thnh phn mc su hn

3. X l d liu cu trc

Truy nhp cc trng d liu


Php gn gia cc bin cu trc
Mt s v d

1/27/2012

357

Chng 6: Cu trc

1/27/2012

358

Chng 6: Cu trc

6.3 X l d liu cu trc

6.3 X l d liu cu trc

V d

V d

#include <stdio.h>
void main(){
struct{
char Ten[20];
struct Date{
int day;
int month;
int year;
} NS;
} SV = {"Tran Anh", 20,12, 1990 };

Xy dng mt cu trc biu din im trong


khng gian 2 chiu. Nhp gi tr cho mt
bin kiu cu trc ny, sau hin th gi
tr cc trng d liu ca bin ny ra mn
hnh.
Cu trc: tn im, ta x, ta y
Nhp, hin th tng trng ca bin cu trc
nh cc bin d liu khc

printf(" Sinh vien %s (%d/%d/%d)",


SV.Ten,SV.NS.day,SV.NS.month,SV.NS.year);
}

1/27/2012

359

1/27/2012

360

60

Chng 6: Cu trc

Chng 6: Cu trc

6.3 X l d liu cu trc

6.3 X l d liu cu trc

Php gn gia cc bin cu trc

V d
#include<stdio.h>
#include<conio.h>
typedef struct{
char ten[5];
int x,y;
}toado;
void main(){
toado t;
printf("Nhap thong tin toa do\n");
printf("Ten diem: ");gets(t.ten);
printf("Toa do x: ");scanf("%d",&t.x);
printf("Toa do y: ");scanf("%d",&t.y);
printf("Gia tri cac truong\n");
printf("%-5s%3d%3d\n",t.ten,t.x,t.y);
getch();
}
1/27/2012

Mun sao chp d liu t bin cu trc ny


sang bin cu trc khc cng kiu
gn ln lt tng trng trong hai bin cu trc
C cung cp php gn hai bin cu trc cng
kiu:
bin_cu_trc_1 = bin_cu_trc_2;

361

Chng 6: Cu trc

362

Chng 6: Cu trc

6.3 X l d liu cu trc

6.3 X l d liu cu trc

Php gn gia cc bin cu trc

V d

V d
Xy dng cu trc gm h tn v im
TC ca sinh vin
a, b, c l 3 bin cu trc.
Nhp gi tr cho bin a.
Gn b=a,
gn tng trng ca a cho c.
So snh a, b v c ?

1/27/2012

1/27/2012

363

Chng 6: Cu trc

#include<stdio.h>
#include<conio.h>
typedef struct{
char hoten[20];
int diem;
}sinhvien;
void main(){
sinhvien a,b,c;
printf("Nhap thong tin sinh vien\n");
printf("Ho ten: ");gets(a.hoten);
printf("Diem:");scanf("%d",&a.diem);

1/27/2012

364

Chng 6: Cu trc

6.3 X l d liu cu trc

6.3 X l d liu cu trc

V d Kt qu

V d
b=a;
strcpy(c.hoten,a.hoten);
c.diem=a.diem;
printf(Bien a: ");
printf("%-20s%3d\n",a.hoten,a.diem);
printf(Bien b: ");
printf("%-20s%3d\n",b.hoten,b.diem);
printf(Bien c: ");
printf("%-20s%3d\n",c.hoten,c.diem);
getch();
}

1/27/2012

365

1/27/2012

366

61

Chng 6: Cu trc

Chng 6: Cu trc

6.3 X l d liu cu trc

6.3 X l d liu cu trc

Bi tp

Bi tp 1

1. Lp trnh c vo mt danh sch khng qu


100 sinh vin gm: H tn, nm sinh
1. a ra DS nhng sinh vin sinh nm 1990
2. a ra DSSV sp xp theo th t ABC

2. Lp trnh c vo DS th sinh gm H tn,


im thi 3 mn Ton, L,Ha, kt thc nhp
khi gp sinh vin c tn rng
1. c tip vo mt im chun; a ra danh sch
th sinh trng tuyn (khng c im lit - 0)
2. a ra th sinh cao im nht
3. Tm im chun, nu ch ly K SV, K nhp vo.
Nu c nhiu ngi bng im nhau; loi c
1/27/2012

367

Chng 6: Cu trc

#include <stdio.h>
#include <string.h>
typedef struct{
char Ten[30];
int NS;
}SinhVien;
void main(){
SinhVien DS[100], SV;
int N,i,j;
printf("Nhap So sinh vien : "); scanf("%d",&N);
fflush(stdin);
for ( i=0; i < N; i++ ){
fflush(stdin);
printf("Nhap du lieu cho sinh vien %d: \n", i+1);
printf("Ho ten : "); gets(DS[i].Ten);
printf("Nam sinh :");scanf("%d", &DS[i].NS);
}

1/27/2012

368

Chng 6: Cu trc

6.3 X l d liu cu trc

6.3 X l d liu cu trc

Bi tp 1 Kt qu

Bi tp 1 (tip)
printf("\n\n DANH SACH SINH VIEN\n\n");
for(i = 0; i < N; i ++)
if(DS[i].NS ==1990)
printf("%s\n",DS[i].Ten);
for(i = 0; i < N - 1; i ++)
for(j = i+1; j < N; j ++)
if(strcmp(DS[i].Ten,DS[j].Ten) > 0){
SV= DS[i];
DS[i]=DS[j];
DS[j] = SV;
}
printf("\n\n DANH SACH SINH VIEN DA SAP XEP\n\n");
for(i = 0; i < N; i ++)
printf("%s\n",DS[i].Ten);
}//main
1/27/2012

369

Chng 6: Cu trc

370

Chng 6: Cu trc

6.3 X l d liu cu trc

6.3 X l d liu cu trc

Bi tp 2 (1/4)

Bi tp 2 (2/4)

#include <stdio.h>
#include <string.h>
typedef struct{
char Ten[30];
struct{
int T, L, H, S;
} DT;
}SinhVien;
void main(){
SinhVien DS[100], TK, SV;
int N,i,j,K;
float C;
1/27/2012

1/27/2012

371

N = 0;
do{
printf("\nNhap DL cho sv thu %d\n",N+1);
printf("Ten SV : "); gets(DS[N].Ten);
if(strlen(DS[N].Ten)==0)
break;
else{
printf("Diem thi T L H cua SV %s : ",DS[N].Ten);
scanf("%d%d%d",&DS[N].DT.T,&DS[N].DT.L,&DS[N].DT.H);
fflush(stdin);
DS[N].DT.S = DS[N].DT.T + DS[N].DT.L + DS[N].DT.H;
N++;
}
}while(1);
printf("\n\n DANH SACH SINH VIEN\n\n");
printf("
Ten SV
Toan Ly
Hoa Tong \n");
for(i = 0; i < N; i ++)
printf("%-20s%5d%5d%5d%6d\n",DS[i].Ten,
DS[i].DT.T,DS[i].DT.L,DS[i].DT.H,DS[i].DT.S);

1/27/2012

372

62

Chng 6: Cu trc

Chng 6: Cu trc

6.3 X l d liu cu trc

6.3 X l d liu cu trc

Bi tp 2 (3/4)

Bi tp 2 (4/4)

printf("\n\nDiem Chuan : ");scanf("%f",&C);


printf("\n\n DANH SACH SINH VIEN TRUNG TUYEN \n\n");
for(i = 0; i < N; i ++)
if( (DS[i].DT.S >= C)&&
(DS[i].DT.T*DS[i].DT.L*DS[i].DT.H > 0))
printf("%s\n",DS[i].Ten);
TK = DS[0];
for(i = 1; i < N; i ++)
if(DS[i].DT.S > TK.DT.S)
TK = DS[i];
for(i = 0; i < N; i ++)
if(DS[i].DT.S == TK.DT.S)
printf("\n\n THU KHOA: %s \n\n",TK.Ten);
1/27/2012

373

Chng 6: Cu trc

Chng 6: Cu trc

6.3 X l d liu cu trc

6.3 X l d liu cu trc

Cu hi 1: Kt qu a ra mn hnh
#include<stdio.h>
typedef struct {
int SHSV;
char Ten[25];
}SV;
void main(){
SV DS[] = { {12, "Mai"},
{13, "Nam"},
{14, "Minh"}};
printf("%d ", DS[1].SHSV);
printf("%s\n", (*(DS+2)).Ten);
}1/27/2012

a
b
c
d
e

Bi tp 1

Lp trnh thc hin cc cng vic sau

12 Mai
12 Nam
13 Nam
13 Minh
14 Minh

c vo t bn phm mt danh sch thuc gm


Tn thuc (chui khng qu 20 k t)
Nm ht hn
S lng cn
n gi
Kt thc nhp khi gp thuc c tn ***

a danh sch thuc ra mn hnh


a ra danh sch cc thuc ht hn
Xa khi danh sch nhng thuc ht hn.
a danh sch mi ra mn hnh
Tnh tng gi tr cc thuc ht hn
375

1/27/2012

376

Phn 3: Lp trnh C

Chng 6: Cu trc

6.3 X l d liu cu trc

Ni dung chnh

Bi tp 2
Cho mt danh sch thnh tch thi u bng ca 32
i tuyn bao gm: Tn i bng, s bn thng, s
bn thua, s th , s th vng
Vit chng trnh thc hin
Nhp d liu vo t bn phm
Nhp vo tn i bng,
a ra thnh thch ca i ny
Nu khng tn ti, thng bo: khng tm thy

Tnh v a ra mn hnh s im ca cc i nu
Mi bn thng c tnh 10 im
Mi bn thua b pht 5 im, mi th vng tr 2 im,
th tr 5 im
1/27/2012

printf("\nSo nguoi trung tuyen:"); scanf("%d",&K);


for(i = 0; i < N - 1; i ++)
for(j = i+1; j < N; j ++)
if(DS[i].DT.S < DS[j].DT.S ){
SV= DS[i];
DS[i]=DS[j];
DS[j] = SV;
}
while((K>0)&&(DS[K-1].DT.S==DS[K].DT.S))K--;
if(K>0){
printf("Diem Chuan La : %4d",DS[K-1].DT.S);
printf("\n\n Danh Sach sinh vien trung tuyen \n");
for(i=0; i < K; i++)
printf("%s\n",DS[i].Ten);
}
}//main
1/27/2012
374

Chng 1: Tng quan v ngn ng C


Chng 2: Kiu d liu v biu thc trong C
Chng 3: Vo ra d liu
Chng 4: Cu trc iu khin
Chng 5: Mng, con tr v xu k t
Chng 6: Cu trc
Chng 7: Hm
Chng 8: Tp d liu

377

1/27/2012

378

63

Chng 7: Hm

Chng 7: Hm

7.1 Khi nim hm

Ni dung chnh

Khi nim & Vai tr

1. Khi nim hm

Khi nim

Khi nim chng trnh con


Phn loi: hm v th tc

L mt chng trnh nm trong mt chng


trnh ln hn nhm thc hin mt nhim v c
th

2. Khai bo v s dng hm

Vai tr

Khai bo v s dng

Chia nh chng trnh ra thnh tng phn


qun l

3. Phm vi ca bin

Ton cc v a phng

Phng php lp trnh c cu trc

4. Truyn tham s

C th s dng li nhiu ln: printf(), scanf()


Chng trnh d dng c v bo tr hn

Truyn theo gi tr, truyn theo a ch


Bin static, bin register

1/27/2012

379

7.1 Khi nim hm

Ni dung chnh

Phn loi
Hm
(function)
C tr v gi tr

1. Khi nim hm

Hm chun C
trong th vin

Hm (ngi dng)
t nh ngha

Ch cho php khai bo chng trnh con l hm.


S dng kiu void vi ngha khng l kiu
d liu no c chuyn th tc v dng hm
381

Chng 7: Hm

4. Truyn tham s

Truyn theo gi tr, truyn theo a ch


Bin static, bin register

1/27/2012

382

7.2 Khai bo v s dng hm

V d

1/27/2012

Ton cc v a phng

Chng 7: Hm

7.2 Khai bo v s dng hm

Gi chng
trnh con ra
thc hin

Khai bo v s dng

3. Phm vi ca bin

Ngn ng lp trnh C

1/27/2012

Khi nim chng trnh con


Phn loi: hm v th tc

2. Khai bo v s dng hm

Th tc
(procedure)
Khng tr v gi tr

nh ngha hm
#include<stdio.h>
int bp(int x){
int y;
y = x * x;
return y;
}
void main(){
int i;
for (i=1; i< 20; i+=2)
printf("%4d\n", bp(i));
printf("\n");
}

C php
Dng u hm

Kiu_hm Tn_hm(DS khai bo tham s)


{
[<Cc khai bo cc b>]
[<Cc cu lnh>]
}
Thn hm

Khai bo
chng
trnh con

380

Chng 7: Hm

Chng 7: Hm

Chng
trnh con

1/27/2012

383

1/27/2012

384

64

Chng 7: Hm

Chng 7: Hm

7.2 Khai bo v s dng hm

7.2 Khai bo v s dng hm

Dng u hmTn hm

Dng u hm

Kiu_hm Tn_hm(DS khai bo tham s)


M t cc thng tin c trao i gia bn
trong v bn ngoi hm.

L tn do ngi s dng t nh ngha


Tun theo quy tc t tn i tng

Tn ca hm,
Cc tham s u vo

Nn mang ngha gi chc nng ca hm

Hm cn nhng thng tin g hot ng

Tham s u ra v gi tr tr v
Hm cung cp nhng thng tin g cho mi trng

Dng phn bit cc hm vi nhau,


khng tn ti 2 hm c dng u hm ging nhau.
1/27/2012

385

Chng 7: Hm

1/27/2012

Chng 7: Hm

7.2 Khai bo v s dng hm

7.2 Khai bo v s dng hm

Dng u hmKhai bo cc tham s hnh thc

Dng u hmKhai bo cc tham s hnh thc

Khai bo cc thng tin cn cho hot ng


ca hm v cc thng tin, kt qu tnh ton
c hm tr li.

Cc tham s cung cp cho hm trong qu


trnh thc hin hm l tham s thc s

Tham s cha d liu vo cung cp cho hm


Tham s cha d liu ra m hm tnh ton c.

Cc tham s s dng trong khai bo hm l


tham s hnh thc.
Nguyn tc khai bo tham s hnh thc nh
ging nh khai bo mt bin
kiu_d_liu_ca_tham_s tn_ca_tham_s
1/27/2012

386

387

Chng 7: Hm

Kiu d liu ca tham s thc phi ging kiu d


liu ca tham s hnh thc tng ng vi tham
s thc s ,.

Mt hm c th c mt, nhiu hoc khng c


tham s no c
Nu c nhiu tham s, phi c phn cch vi
nhau bng du phy.
khng c tham s vn phi c cp du ngoc
n sau tn hm
1/27/2012

388

Chng 7: Hm

7.2 Khai bo v s dng hm

7.2 Khai bo v s dng hm

Dng u hmKiu d liu tr v

Dng u hmKiu d liu tr v

Thng thng hm sau khi c thc hin


s tr v mt gi tr kt qu tnh ton no
.
s dng c gi tr cn phi bit
n thuc kiu d liu g.

Trong C, kiu d liu tr v ca hm c th


l kiu d liu bt k (kiu d liu c sn
hoc kiu d liu do ngi dng t nh
ngha) nhng khng c l kiu d liu
mng.
Nu kiu d liu tr v l kiu void th hm
khng tr v gi tr no c.
Nu khng khai bo kiu d liu tr v th
chng trnh dch ca C s ngm hiu
rng kiu d liu tr v ca hm l kiu int.

Kiu d liu ca i tng tnh ton c hm


tr v c gi l kiu d liu tr v ca hm.

1/27/2012

389

1/27/2012

390

65

Chng 7: Hm

Chng 7: Hm

7.2 Khai bo v s dng hm

7.2 Khai bo v s dng hm

Thn hm

Thn hm (tip)

Danh sch cc cu lnh


Thng c t nht mt lnh return
Hat ng ca hm
Thc hin ln lt cc lnh cho n khi

Khi gp lnh return biu_thc


Tnh ton gi tr ca biu_thc,
Ly kt qu tnh ton c lm gi tr tr v cho
li gi hm
Kt thc vic thc hin hm, tr v chng trnh
gi n.

Thc hin xong tt c cc cu lnh c trong


thn hm
Gp lnh return

Nu return khng c phn biu_thc,


Kt thc thc hin hm m khng tr v gi
tr no c.

C php chung

return [biu_thc];

Dng khi hm c khai bo c kiu tr v l void

1/27/2012

391

Chng 7: Hm

1/27/2012

392

Chng 7: Hm

7.2 Khai bo v s dng hm

7.2 Khai bo v s dng hm

S dng hm

V d: Cho bit kt qu thc hin chng trnh


#include<stdio.h>

Tn_hm (DS_tham_s_thc _s);


V d:
N = bp(1);N= bp(3);,
Lu :

int fun(int a){


a++;
return a;
}

Gi hm thng qua tn hm v cc tham s c cung


cp thc s cho hm (tham s thc s).
Nu hm nhn nhiu tham s th cc tham s ngn cch
nhau bi du phy
Cc tham s hnh thc ca hm s nhn cc gi tr t
tham s truyn vo
393

Chng 7: Hm

int main(){
printf("%d\n", fun(5));
return 0;
}
1/27/2012

5
fun(5)

1/27/2012

6
394

7.2 Khai bo v s dng hm

V d: Cho bit kt qu thc hin chng trnh

int fun(int n){


if(n==0) return 1;
else return n*fun(n-1);
}

fun(4)

Chng 7: Hm

7.2 Khai bo v s dng hm

#include<stdio.h>

fun(3)

int main(){
printf("%d\n", fun(fun(fun(3))));
return 0;
}

Sau khi thc hin xong, tr v im m hm c gi


1/27/2012

V d 1: Tnh TBC f(a),f(b), f(c) nu f(x) =

fun(5)

#include <stdio.h>
#include <math.h>

5 * fun(4)
4 * fun(3)
3 * fun(2)
2 * fun(1)
1 * fun(0)

120

f ( x) = x 5 + 5 x

1
395

float f(float x){


if(x==0.0)
return 0;
else
return pow(x,5)+x/fabs(x) * pow(fabs(x), 0.2);
}
void main(){
float a, b, c;
printf("So 3 so thuc : "); scanf("%f%f%f",&a,&b,&c);
printf("Ket qua %f \n",(f(a)+f(b)+f(c))/3);
}1/27/2012
396

66

Chng 7: Hm

Chng 7: Hm

7.2 Khai bo v s dng hm

7.2 Khai bo v s dng hm

VD c ta 3 im A,B,C v a ra d/tch ABC


#include <stdio.h>
#include <math.h>
typedef struct{
float x, y;
}Point;
float kc(Point A, Point B){
return sqrt(pow(A.x-B.x,2)+pow(A.y-B.y,2));
}
1/27/2012

397

7.2 Khai bo v s dng hm

V d 3: Tm SCLN ca dy s
1.
# include <stdio.h>
2.
int uscln(int a, int b) {
3.
while (a !=b){
4.
if(a > b) a = a- b;
5.
else b = b - a;
6.
}
7.
return a;
8.
}
9.
void main(){
10.
int A[100], N, i, r;
11.
printf("So phan tu : "); scanf("%d",&N);
12.
for(i=0; i < N; i++){
13.
printf("A[%d] = ",i+1); scanf("%d",&A[i]);
14.
}
15.
r = A[0];
16.
for(i = 1; i < N; i++)
17.
r = uscln(r,A[i]);
18.
printf("Ket qua %d \n",r);
1/27/2012
19. }

1. Khi nim hm

1/27/2012

Khai bo v s dng

3. Phm vi ca bin

Ton cc v a phng

4. Truyn tham s

399

Truyn theo gi tr, truyn theo a ch


Bin static, bin register

1/27/2012

400

Chng 7: Hm

7.3 Phm vi ca bin

Phn loi bin

Phm vi

Tnh hung
Trong hai phm vi khc nhau c
hai bin cng tn. Trong mt
phm vi ny nm trong phm vi
kia?

Khi nim chng trnh con


Phn loi: hm v th tc

2. Khai bo v s dng hm

7.3 Phm vi ca bin

Bin ch c tc dng trong


phm vi c khai bo
Trong cng mt phm vi
cc bin phi c tn khc
nhau.

398

Ni dung chnh

Chng 7: Hm

Khi lnh, chng trnh con,


chng trnh chnh

void main(){
Point A, B, C;
float AB,BC,CA,p,S;
printf("Toa do A (x,y) :"); scanf("%f%f",&A.x,&A.y);
printf("Toa do B (x,y) :"); scanf("%f%f",&B.x,&B.y);
printf("Toa do C (x,y) :"); scanf("%f%f",&C.x,&C.y);
AB = kc(A,B); BC = kc(B,C); CA = kc(C,A);
p= (AB + BC + CA)/2;
S = sqrt(p*(p-AB)*(p-BC)*(p-CA));
printf("Dien tich ABC %f",S);
}1/27/2012

Chng 7: Hm

Chng 7: Hm

Phm vi:

VD c ta 3 im A,B,C v a ra d/tch ABC

#include<stdio.h>
#include<conio.h>
int i;
int binhphuong(int x){
int y;
y = x * x;
return y;
}
void main(){
int y;
for (i=0; i<= 10; i++){
y = binhphuong(i);
printf(%d , y);
}
}

Bin ton cc:


Bin c khai bo trong chng trnh chnh,
c t sau khai bo tp tiu .

Bin cc b:
bin c khai bo trong lnh khi hoc
chng trnh con, c t trc cc cu lnh.

Ghi ch
Hm main() cng l mt chng trnh con
nhng l ni chng trnh c bt u
Bin khai bo trong hm main() cng l bin
cc b, ch c phm vi trong hm main().
401

1/27/2012

402

67

Chng 7: Hm

Chng 7: Hm

7.3 Phm vi ca bin

7.3 Phm vi ca bin

Bin static

V dKt qu

Bin cc b ra khi phm vi th b nh


dnh cho bin c gii phng

#include <stdio.h>
# include <conio.h>
void fct() {

Yu cu lu tr gi tr ca bin cc b mt
cch lu di => s dng t kha static

static int count = 1;


printf("\n Day la lan goi ham fct lan thu %2d", count++);
}

C php:

void main(){

static <kiu_d_liu> tn_bin;

int i;
for(i = 0; i < 10; i++) fct();
getch();
}

1/27/2012

403

Chng 7: Hm

1/27/2012

404

Chng 7: Hm

7.3 Phm vi ca bin

7.3 Phm vi ca bin

V d

Bin register

Thanh ghi c tc truy cp nhanh hn


RAM, b nh ngoi
Lu bin trong thanh ghi s tng tc
thc hin chng trnh
C php
register <kiu_d_liu> tn_bin;
Lu :
s lng bin register khng nhiu v thng
ch vi kiu d liu nh nh int, char
1/27/2012

405

Chng 7: Hm

1/27/2012

Chng 7: Hm

7.4 Truyn tham s

Ni dung chnh

V d

1. Khi nim hm

# include <stdio.h>
void swap(int a, int b) {
int x = a;
a = b;
b = x;
return;
}
void main(){
int a = 5, b = 100;
printf("Truoc: a=%d, b=%d \n\n",a,b);
swap(a,b);
printf("Sau : a=%d, b=%d\n\n",a,b);
return;
}

Khi nim chng trnh con


Phn loi: hm v th tc

2. Khai bo v s dng hm

Khai bo v s dng

3. Phm vi ca bin

Ton cc v a phng

4. Truyn tham s

1/27/2012

406

Truyn theo gi tr, truyn theo a ch


Bin static, bin register
407

1/27/2012

408

68

Chng 7: Hm

Chng 7: Hm

74 Truyn tham s

7.4 Truyn tham s

Truyn theo gi tr v truyn theo bin

Truyn theo bin

Truyn theo tr

Thc cht l truyn theo a ch ca bin

Da trn nguyn tc truyn nhng bn sao ca


bin c truyn
Nhng cu lnh thay i gi tr tham s hnh
thc s khng nh hng ti bin c truyn

Truyn theo bin


Tham s c truyn s thc s l bin v cc
thao tc s thi hnh trc tip vi bin
Nhng cu lnh thay i gi tr tham s hnh
thc s nh hng ti bin c truyn
1/27/2012

409

Chng 7: Hm

V d: void swap (int *pa, int *pb);

Truyn tham s
a ch ca bin c truyn
V d: swap(&a,&b)

1/27/2012

410

6.3 X l d liu cu trc

V d

Cu hi 1: Kt qu a ra mn hnh

# include <stdio.h>
# include <conio.h>
void swap(int * pa, int * pb) {
int x = *pa;
*pa = *pb;
*pb = x;
return;
}
void main(){
int a = 5, b = 100;
printf("Truoc: a=%d, b=%d \n\n",a,b);
swap(&a,&b);
printf("Sau : a=%d, b=%d\n\n",a,b);
return;
}
1/27/2012

411

Chng 6: Cu trc

#include<stdio.h>
void fun(int n){
if(n > 0) {
fun(--n);
printf("%d ", n);
fun(--n);
}
}
int main(){
fun(3);
return 0;
}
1/27/2012

a
b
c
d
e

0210
0102
1120
0120
0201

412

Chng 6: Cu trc

6.3 X l d liu cu trc

6.3 X l d liu cu trc

Cu hi 2: Kt qu a ra mn hnh

1/27/2012

Khai bo l mt con tr, tr ti mt i tng c


kiu mun truyn vo

Chng 6: Cu trc

7.4 Truyn tham s

#include<stdio.h>
void fun(int *i, int *j){
*i = *i * *i;
*j = *j * *j;
}
int main(){
int i=5, j=2;
fun(&i, &j);
printf("%d, %d", i, j);
return 0;
}

Khai bo hm [tham s phi cha a ch]:

a
b
c
d
e

Cu hi 3: Kt qu a ra mn hnh
5, 2
2, 5
10, 4
4, 25
25, 4

413

#include<stdio.h>
void fun(char *a){
printf("%c", *++a);
a++;
printf("%c", *a);
}
int main(){
void fun(char*);
char a[10]="ABCDEF";
fun(&a[0]);
return 0;
}1/27/2012

a
b
c
d
e

AB
AC
BC
BD
CD

414

69

Phn 3: Lp trnh C

"
Ni dung chnh

Chng 1: Tng quan v ngn ng C


Chng 2: Kiu d liu v biu thc trong C
Chng 3: Vo ra d liu
Chng 4: Cu trc iu khin
Chng 5: Mng, con tr v xu k t
Chng 6: Cu trc
Chng 7: Hm
Chng 8: Tp d liu
1/27/2012

415

70

You might also like