Professional Documents
Culture Documents
KTLT C22 HamNangCao Phan1.Ppt (By Bsquochoai - Ga)
KTLT C22 HamNangCao Phan1.Ppt (By Bsquochoai - Ga)
K THUT LP TRNH
ThS. ng Bnh Phng
dbphuong@fit.hcmus.edu.vn
HM NNG CAO
(PHN 1)
1
&
VC
BB
Ni dung
1 Cc tham s ca hm main
2 Hm c i s mc nh
3 Hm tr v tham chiu
4 Hm ni tuyn (inline)
Cc i s ca chng trnh
Hm main l hm nn cng c tham s.
Chng trnh t ng thc hin hm main m
khng cn li gi hm.
Lm sao truyn i s?
Khi thc thi tp tin chng trnh (.exe), ta
truyn km i s. Tt nhin, hm main cng
phi nh ngha cc tham s c th nhn
cc i s ny.
Cc tham s ca hm main
Trong
argc l s lng i s (tnh lun tn tp tin
chng trnh)
argv l mng cha cc i s (dng chui)
V d
Vit chng trnh c tn Cong, nhn 2 i s
x v y v xut ra gi tr x + y.
argv = {Cong.EXE,
Cong.EXE 2912,
2912 1706};
1706
argc = 3
V d
Vit chng trnh c tn Cong, nhn 2 i s
x v y v xut ra gi tr x + y.
#include <stdio.h>
#include <stdlib.h> // atoi
void main(int argc, char *argv[]) {
if (argc == 3) {
int x = atoi(argv[1]);
int y = atoi(argv[2]);
printf(%d + %d = %d, x, y, x+y);
}
else
printf(Sai! VD: Cong 2912 1706);
}
Hm nng cao (phn 1)
6
&
VC
BB
Cc tham s ca hm main
V d
Vit chng trnh c tn test nhn d liu t
tp tin input.txt, x l v xut kt qu ra tp
tin output.txt.
argv = {test,
test input.txt,
input.txt output.txt};
output.txt
argc = 3
V d
Vit chng trnh c tn test nhn d liu t
tp tin input.txt, x l v xut kt qu ra tp
tin output.txt.
#include <stdio.h>
void main(int argc, char *argv[]) {
if (argc == 3) {
// Nhp d liu t tp tin argv[1]
// X l
// Xut kt qu ra tp tin argv[2]
}
else
printf(Sai! VD: test in.txt out.txt);
}
Hm nng cao (phn 1)
8
&
VC
BB
Hm c i s mc nh
V d
Vit hm Tong tnh tng 4 s x, y, z, t
int Tong(int x, int y, int z, int t)
{
return x + y + z + t;
}
Khi nim
Hm c i s mc nh l hm c mt hay
nhiu tham s hnh thc c gn gi tr.
Tham s ny nhn gi tr mc nh nu
khng c i s truyn vo cho tham s .
Phi c dn v tn cng bn phi.
V d
int Tong(int x, int y, int z = 0, int t = 0)
{
return x + y + z + t;
}
Hm nng cao (phn 1)
10
&
VC
BB
Hm c i s mc nh
Lu
Mun truyn i s khc thay cho i s mc
nh, phi truyn i s thay cho cc i s
mc nh trc n.
V d
In thng tin SV trong lp gm: h tn, phi,
lp, nm sinh
void XuatThongTin(char *hoten, char phai = 0,
char *lop = TH07, int namsinh = 1989)
{
puts(hoten);
printf(phai == 0? Nam\n : Nu\n);
puts(lop);
printf(%d, namsinh);
}
V d
In thng tin SV trong lp gm: h tn, phi,
lp, nm sinh
void main()
{
XuatThongTin(Nguyen Van A);
XuatThongTin(Tran Thi B, 1);
XuatThongTin(Hoang Van C, 0, TH00);
XuatThongTin(Le D, 1, TH07, 1988);
}
Nhn xt
x = a thng xuyn xy ra th nn chuyn x
thnh tham s c i s mc nh l a.
V d, hu ht phai = 0 (nam), lop = TH07
v namsinh = 1989.
x = a v y = b thng xuyn xy ra nhng
y = b thng xuyn hn th nn t tham s
mc nh x trc y.
V d, lop = TH07 xy ra nhiu hn
phai = 0 nn t lop sau phai.
Hm nng cao (phn 1)
14
&
VC
BB
Ch th tin x l #define
V d
Xt 2 cch sau
#define PI 3.14159
float addPi(float s)
{
return s + PI;
}
void main()
{
float s = 0;
for (int i = 1; i<=100000; i++)
s = s + PI; // Cch 1 (0.7s)
s = addPi(s); // Cch 2 (1.4s)
}
Hm nng cao (phn 1)
17
&
VC
BB
Hm ni tuyn (inline)
Nhn xt
S dng hm gip chng trnh d hiu nhng
li tn chi ph cho li gi hm.
Khc phc
S dng hm ni tuyn (inline) bng cch thm
t kha inline trc prototype ca hm.
inline float addPi(float s) {return s + PI;}
Khi nim
Sao chp thn hm n bt c no no hm
c gi kt qu ging ht cch 1.
Hm nng cao (phn 1)
18
&
VC
BB
Hm ni tuyn (inline)
Lu
Gim thi gian thc hin hm (gi v kt thc).
Gim khng gian b nh do cc hm con chim
dng khi hm c gi.
Khng cho php cc hm ni tuyn quy.
Phn ln khng cho php thc hin ni tuyn
cc hm s dng vng lp while.
Ch inline cc hm nh, inline cc hm ln s gy
phn tc dng (b nh cho hm inline chim gi
s lu gii phng hn).
Hm nng cao (phn 1)
19
&
VC
BB
Hm tr v tham chiu
Vd
Hm ch tr v gi tr. V d, x = f();
Vy, g() = x hp l hay khng?
Hp l khi g(x) tr v tham chiu n mt
bin (C++)
C php
<kiu tr v> &<tn hm>([<ds tham s>])
{
return <bin>;
}
V d
#include <stdio.h>
int x;
int &getx()
{
return x;
}
void main()
{
getx() = 5; // x = 5
}
ng dng
Ch s ca mng trong C/C++ bt t 0
Khng quen thuc lm.
Vit hm khi mun truy cp n phn t
th i ca mng a ta s dng V(i) thay v a[i-1]
int a[100];
int &V(int i)
{
return a[i-1];
}
V(1) = 2912; // a[0] = 2912;
Hm nng cao (phn 1)
22
&
VC
BB
Hm tr v tham chiu
Ch
Trong trng hp sau, bin x phi l bin
ton cc khng nn s dng!
int x; // bin ton cc
int &getx()
{
return x;
}
void main()
{
getx() = 2912;
}
Hm nng cao (phn 1)
23
&
VC
BB
Hm tr v tham chiu
Ch
Nu khng mun s dng bin ton cc, phi
truyn x dng tham chiu.
int &getx(int x) { // SAI! x l tham tr bn sao
return x;
}
int &getx() {
int x; // SAI! x l bin cc b
return x;
}
V d
#include <stdio.h>
void main()
{
int a[100];
for (int i = 1; i <= 100; i++)
V(a, i) = 0;
}