Upload
binh-thanh-nguyen
View
213
Download
0
Embed Size (px)
Citation preview
8/6/2019 De Thi KTLT K53
1/12
De Thi KTLT K53 - 2010 thi So 1
Mn : K thut lp trnh (IT3040) Thi gian: 90 pht
SV c php s dng ti liu , nhng cm tuyt i : trao i ti liu, dng my tnh, inthoi d
Cu 1 : (0.75) Cho bit hm sau y lm g :void bitchange(int &x, int n) {
x &= ~(1
8/6/2019 De Thi KTLT K53
2/12
void sw(int *a, int *b) { *a ^=*b;*b ^=*a;*a ^=*b;
}
swap (A[j], A[j-1]);doicho++; }
if (doicho == 0) RETURN MainProgram;}
}
thi so 2Mn : K thut lp trnh (IT3040)
Thi gian: 90 phtSV c php s dng ti liu , nhng cm tuyt i : trao i ti liu, dng my tnh, in
thoi d
Cu 1: (1) Mt LTV vit CT nh sau :#include void main(){
int a,b=3,c=6;int *p = &b;
/* chia ccho b */a = c/*p;b = c ; /* gan b = 6 */printf("a=%d, b=%d\n", a,b);
}Khi dch c li c php, LTV sa = cch thmdu ; vo trc lnh printf, nhng run th kt qukhng nh .Hy ch ra li c php, sau tinhnh test v g ri CT sa li c php ca LTV c kq l a= 2 v b=6.Cu 2 : (0.75) Cho bit kt qu hin ra trn mn
hnh khi thc hin chng trnh di y. Hy gii
thch chi tit v sao li c kt qu nh
vy? #include int F(int *x) {
*x +=1; return *x;}
void main(void) {int a =5;printf("F(a) +F(a) = %d\n",F(&a)+F(&a));a=5;printf("2*F(a) = %d\n",2*F(&a));
}
Cu 3:(0.75) Tinh chnh ti u on codesau:float tong (float *m1, float *m2, int n) {
float ta, tb , sum = 0.0;int i = n-1;ta = m1[i]; tb = m2[i];for (i = n-2; i>=0 ; i--) {sum += ta + tb;ta = m1[i]; tb = m2[i]; }
Cu 6 : (1) Tinh chnh nng cao hiu nng cchng trnh sau
void F1(float b, float *a, int n) { int i=0, found = 0;
while ((!found) && (i
8/6/2019 De Thi KTLT K53
3/12
sum += ta + tb;returnsum;
}Cu 4 : (0.75) Cho bit ngha ca hm sau :void dc(int *a, int *b) {
*b ^=*a;
*a ^=*b;*b ^=*a;
}Cu 5: (0.75) Cho bit hm sau lm g :void bitoperation( int &x,int n) {
x |= (1
8/6/2019 De Thi KTLT K53
4/12
printf("2*F(a) = %d\n",2*F(&a)); }KQ : F(&a)+F(&a) = 13
2*F(&a) = 12Gii thch ly do : kt qu khcnhau do hiu ng ph -sideeffect. Thams ca hm F l
con tr, v trong hm F tnggi tr nh ti a ch truyn vo ln 1, v vy ln ugi F(&a) hm tr v 6 v a tng ln 1, lnsau goi F(&a) hm tr v 7=> F(&a)+F(&a)= 13. Cn dng in th 2 : ta c 2* 6 = 12. Nu cn trnh hin tng trn, ta khng truyna ch.y cng l 1 cu ngin gim, tic rng khng t bnsai cu ny
a- Cu 3:(0.75) Tinh chnh ti u on code sau:b-
float tong (float *m1, float *m2, int n) { float ta, tb , sum = 0.0; int i = n; ta = m1[i]; tb = m2[i];for (i = n-1; i >=0 ; i--) {sum += ta + tb;ta = m1[i]; tb = m2[i]; } sum += ta + tb;returnsum;}
float tong(float *m1, float *m2, int n) { float sum = 0.0;for (int i = n-1; i>=0; i--) sum += m1[i] + m2[i];return tg;
}Cu 4 : (0.75) Cho bit ngha ca hm sau :void dc(int *a, int *b) {*b ^=*a;*a ^=*b;*b ^=*a; }Hmny i gi tr ( swap) 2 i s truyn vo m khng dng bin trunggian ( xem bi nhn xt s 1)Cu 5 : (0.75) Cho bit hm sau lm g :void bitoperation( int &x,int n) {
x |= (1
8/6/2019 De Thi KTLT K53
5/12
Cu 6: (1) Tinh chnh nng cao hiu nng ca chng trnh sauvoid F1(float b, float *a, int n){
int i=0,found = 0; while ((!found) && (i
8/6/2019 De Thi KTLT K53
6/12
khng, nu c th in rasohieusv v kqht, ngc li in thng bo khng tm thy . (Yu cu :Tun th cc yu cu v phong cch lp trnh, thit k topdown v cc k thut Lt hiu qu) #include #include struct sinhvien {struct hoso {
char ml[6];char ht[35];long shsv;float kqht; } data;
struct sinhvien *next;} *ds;char *gten( char *l, char *t) { // 1.5 d
char tg[41];int n=strlen(t);while ( n>=0 && t[n-1] !=' ') n--; strcpy(tg,l);strcat(tg,t+n); /* thay vi lenh nay, sv co the dung lenh for de gan cac ky tu thu n+1 den het
xau t vao cac ky tu thu strlen(l++) cua tg */strncat(tg,t,n); // CO THE DUNG strcat(tg,t);return tg;
}void search(char *mal, char *hvt ){ // 2d
struct sinhvien *sv;char s[41];int f=0;strcpy(s,gten(mal,hvt));sv = ds;while (sv != NULL) {
f = stricmp(gten(sv->data.ml,sv->data.ht),s)if (!f){
printf(" \n %ld %5.2f",sv->data.shsv,sv->data.kqht);
break;}else if (fnext;else break; // da ra ngoai pham vi tim
// neu sv chi duyet den cuoi danh sach, khong dung khi da tim thay thi tru 0.5d if (f) printf(" \ khong thay %s %s ",ml,hvt);
}(Nu SV trnh by c bc phn tch, thit k topdown => thng thm 0.5 im Trtrng hp SV c im 10)Bi ny SV c th tin hnh tm kim theo malop truoc, nhng phi lu duyt danh sch while (stricmp(sv->data.ml,mal) next;
8/6/2019 De Thi KTLT K53
7/12
if( sv==NULL || stricmp(sv->data.ml,mal)>0) {printf(" \ khong thay %s %s ",ml,hvt);break; }
else {tip tc tm kim tng t vi ten+hovatendem
}V danh sch c sp xp, nu duyt n node c malop > mal hay hovaten ( do) > hvt
( o) th kt lun lun l khng tm thy Cu 8 : (1.5) Mt chng trnh vit trn mt ngn ng m phng nh sau:
void Bidon(){1- Khi to Stack S vi con tr TDuyt mng V v lu vo Stack S nu V[i] =0
for (i=1;i
8/6/2019 De Thi KTLT K53
8/12
nh phn=> x= 0000 0000 0000 0110 & 0000 0000 0000 1101 = 0000 0 000 0000 0100=> x= 0100nh vy ban u x= 0110, sau khi thc hin hm, ta c x= 0100 => bt th 2 ( n) chuyn t 1 thnh 0.Tng t vi a=6, n=3 =>x= 0110 & (~ 4) = 0110 & 1011 = 0010 => bit th 3 ( n) cung bi chuyn thnh 0.
=> kt lun : Hm ny t bt th n ca x thnh 0. ( hay xa bt th n ca x)
iu ng bun y l : rt nhiu bn khng nh cc ton t trn bit ca c, cng nhkhng bit a vo cc gi tr tm ra kt qu . ( c bit khi truyn tham chiu, thi ngha ca n l g !!! )
Cu 2.Cu ny yu cu Test 1 on code. Nhn s qua on code, ta thy ngay l phi test cciu kin bin. y hm truyn vo 1 xu k t ( con tr xu), nhng li sao chep (strcpy) vo 1 bin cc b l 1 xu khai bo tng minh. nu d i xu vt qu 31=>li. Ta c th dng cp pht ng cho cDest nh 1 s bn lm, hoc kim tra nu di xu input < 32 thi mi copy.Tic rng : nhiu bn phn lung tung ( v du : strcpy(s1,s2) l hm copy ni dung s2 cho
s1, nhng nhiu bn li phn l l copy tng k t, nn khng c=> sai c php ???.Mt s li sa thnh : strcpy(cDest,*s), v bn trn tham s l char * s ...Thc ra bi ny v cng n gin, mc ch l g im, tic rng rt nhiu em khnglm c
S tip tc cc bi vit sau Ve bai thi KTLT k53 BKHN - TiepCu 3- 1 :
Vi cu ny, cc bn c th thy rng l cu duy nht c cc ch thch , d khng c cng khng sao trong
khi cc cu khc vit rt gn v khng ch trn trang=> vy phi ch n c im ny !
Ta bit rng trong NNLT C, khi gp /* trnh dch s hiu l bt u ch thch, v on ch thch y s tip
tc cho n khi gp */ u tin. Lnh gn : a= c/*p v tnh b trnh dch hiu nhm thnh bt u ch thch.
V vy trong on code :a = c/*p;
b = c /* set b to 3 */;
printf("a=%d, b=%d\n", a,b);
Ton b phn bi s bin thnh ch thch, kt qu chng trnh bin thnh
void main(){
int a,b,c=3;
int *p = &c;
a = c ;
printf("a=%d, b=%d\n", a,b); }
vy nn kt qu in ra l a=3 v b khng xc nh.
trnh s nhm ln trn ch cn thay a=c/*p; thanh a=c/(*p);
n gin nh vy, xong tic rng rt nhiu bn li cho l khai bo : int *p = &c; l sai c php ( sai th sao C T
chy v cho kt qu c !!!).
Nhiu bn sa li thnh : int *p; p=&c; : thc cht khng thay i c g. Cn lu l khi ta vit int *p; th kiu
d liu ( data_type ) y l int * v bin l p, ch khng phi kiu l int v bin l *p.
ng bun nht l 1 s bn cho rng lnh : printf("a=%d, b=%d\n", a,b); sai c php, phi sa thnh
printf("a=%d, b=%d\n", &a,&b); !!! bun thay cho SV ngnh CNTT !!!Cu 4- 1 :Cu ny, ging nh cu 1, yu cu xc nh ngha ca hm, tc l gii thch hm lm g. y l 1 hm kiu
void, v truyn con tr, vy n ch c th tc ng ti cc bin i s truyn vo.
8/6/2019 De Thi KTLT K53
9/12
hiu c n tc ng th no, ta hy truyn vo 1 s bin c th. V d a=1,b=0 +. *a ^=*b; => *a=*a ^ *b => *a=0001 ^ 0000 =0001*b ^=*a; => *b= *b ^ *a => *b =0000^0001=0001; => b=1*a^=*b;=> *a=*a ^*b=> *b=0001^0001 =0000 => a=0Vi a=2, b=3 =>*a ^=*b; => *a=*a ^ *b => *a=0010 ^ 0011 =0001=> a=1*b ^=*a; => *b= *b ^ *a => *b =0011^0001=0010; => b=2*a^=*b;=> *a=*a ^*b=> *b=0001^0010 =0011 => a=3Vy hm ny i o gi tr 2 bin truyn vo (m khng cn bin trung gian). iu ng bun y l khng t bn coi ton t ^ l php ly tha !!!! Bun thay SV ngnh CNTT BKVe Ket qua bai thi KTLT K53 2010 - tiep 2
cu 4 : (0.75) toi uu doan code sau :
float f(float *a, float *b, int n) { float ta, tb , sum = 0.0;int i = 0; ta = a[i]; tb = b[i]; for (i = 1; i < n; i++) { sum += ta + tb;ta = a[i]; tb = b[i]; } sum += ta + tb;returnsum;
}R sot oncode trn, ta thy bncht ca oncode l tnh tngn phn tca 2
mng a v b. V vy ch cn loi b cc bin trunggian v tinh chnh nhsau : float f(float *a, float *b, int n) { float sum = 0.0;for (int i = n-1; i>=0 ; i--) sum += a[i] + b[i];return sum;
}Nhiu bn vn nguyn cc bin trung gian, ch thay vng lp tng thnh gim , hoc gim bt c 1,2 lnh ( vch c 0.25)Cu 6 : (1) Tinh chnh nng cao hiu nng ca chng trnh sauvoid my_func(float val, float *a, int n){
int i=0,found = 0; while ((!found) && (i
8/6/2019 De Thi KTLT K53
10/12
}Bi ny nu ch chuyn lnh gnfloat testval = log(val)/log(2); ra ngoi vng lp th chc 0.5 . C nhiu p n, nhngni chung u khngcn n bin found : a nu dng linh canh ( khi phi m bo kch thc mng > n )void my_function(float val, int*a, int n) {
int i=0;float testval = log(val) / log(2);a[n] = testval;while ( (a[i++] != testval));if ( i < n) do_something();
}b : nu khng dng lnh canh void my_function(float val, int*a, int n) {
int i=0;float testval = log(val) / log(2);while ( (i < n) && (a[i] != testval)) i++;if ( i < n) do_something();
}C : void my_function(float val, int*a, int n) {
int i=0;float testval = log(val) / log(2);while ( (i < n) {
if ( a[i] == testval) { do_something; break; }i++;
}}
Cu 7: (3.5) Cho cu trc d liu qun l sinh vinnhsau :struct sinhvien {struct hoso {
char malop[6];char hovaten[35];longsohieusv;float kqht; } data;
struct sinhvien *next;} *ds;D liu c nhp.Hy vit cc hm cn thit Sp xp danh sch sinh vin theo lp ,trong 1 lp theo th t ABC ca tn, h v tn m (Yu cu : Tun th cc yu cu v
phong cch lp trnh, thit k topdown v cc k thut Lt hiu qu) Phn tch : Bi cho 1 cu trc danh sch mc ni n, vi d liu c nhp. yu cu ch
cn sp xp li danh sach, nhng theo th t ABC ca lp, tn, h v tn m. Trong cu trcd liu, ch c trng malop v hovaten, vy cn phi bin i hovaten thnh tenvahotendemri mi so snh sp xp. Cc trng malop v hovaten u thuc kiu xu k t, mun sp xp theo th t ABC calp, tn, ho v tn m ta ch cn to 1 xu gm malop+tenvahotendem da vo malop vahovaten cua SV, so snh cc xu ca tng SV ta s sp xp c nh yu cu ca bi#include #include
8/6/2019 De Thi KTLT K53
11/12
struct sinhvien {
struct hoso {char ml[6];char ht[35];long shsv;float kqht; } data;
struct sinhvien *next;} *ds;/* hm gten, dng ghp malop vi hovaten bin i o tn ln trc Hm nhn 2 tham s l malop v hovaten, v tr v 1 xu gm malop+ten+hovatendem V d : malop= CNPM1 v Hovaten= Tran Van Anh ta c : C NPM1AnhTran Van */char *gten( char *l, char *t){
char tg[41];int n=strlen(t);while ( n>=0 && t[n-1] !=' ') n--; // xc nh v tr du trng trc tnstrcpy(tg,l); // copy malop vo bin xu tgstrcat(tg,t+n); /* ghp ten vo xu tg. N l v tr ca du trng trc tn=> t+n chnh l a
ch ca k t u tin ca tn, lnh trn s ghp tn sinh vin vo sau malop c copy voxu tg.thay vi lenh nay, sv co the dung lenh for de gan cac ky tu thu n den het xau t vao
cac ky tu thu strlen(l) cua tg nh sau :int m=strlen(tg);int k=strlen(t);
for (i=0;inext) { // Duyt danh sch t u
strcpy(s,gten(p->data.ml,p->data.ht)); /* phi lu li malop va ten da bin i vo 1bin tg v hm gten tr v a ch ca bin cc b tg */
diachi=p;for(q=p->next;q!=NULL;q=q->next)
if(stricmp(s,gten(q->data.ml,q->data.ht)) > 0){
strcpy(s,gten(q->data.ml,q->data.ht));diachi=q; // luu lai dia chi ca ptu c gten ln nht ln hn gten ca p
}if ( diachi !=p) { // nu c ptu c gten > gten cua P thi swap data
tam->data=diachi->data;diachi->data=p->data;
p->data=tam->data;
8/6/2019 De Thi KTLT K53
12/12
}}
}(Ni chung khng c bt c 1 sv no lm c hon chnh cu ny. Mt s tin hnh sp xptheo lp, sau tin hnh sp xp theo hovaten ( nhung khng o tn). im cao nht 1 s
SV t c cu ny l 2.5 nu cht th cao nht ch c 1 ) Cu 8: (1.5) Vit li on chng trnh sau sao cho khng dng return m thc cht l Gototypedef int mang[MAX];void Sort1(mang &A, int n){int i,j;int doicho=0;for (i=0;i0;j--)
if (A[j] < A[j-1]) { swap (A[j], A[j-1];doicho++; }
if (doicho == 0) return; }}Thccht tngca Thy LngMnh B khi ra ny l yu cu ccemsa i li oncode trn, khng phi dung lnh return ( v c cu lnh if ) trong vng lp. lm c vic ta ch cn them 1vng lp while . Thut tonny trongmnCTDL& GT cc bn hc, y l thut tonsp xp ni btti u : Khi dy csp xp ri th khngcn kim r sot ht, ch cn r sot 1 ln, hoc 1 s ln, chon khi sp xp xong th lp tc kt thc lun. Ngoi ra, trong oncode trn, ta thy vai trca I honton khngc ngha, v vy, nu c vng lp while th ch cn them 1 vng lp ca j m thi :p n:typedef int mang[MAX];void Sort1(mang &A, int n){
int j,doicho=1;
while (doicho)
{ for (j=n-1;j>0;j--)
if (A[j] < A[j-1]) {swap (A[j], A[j-1]);
doicho++; }
// neu doicho van =1 co nghia la mang da co thu tu, c sp xp ri
if (doicho == 1) doicho =0;
else doicho = 1;
}
}
Cc bn c th kim tra hiu qu ca thut ton trn, = cch xd them 1 hm, dung kiu ni bt bnh thng, numng c 10 phn t, thong thng ta phi kim tra 45 ln ( 9+8+7++2+1), nhng nu dung thu ton nh pn, th c th ch phi kim tra 9 ln u tin, nu khng phi swap ln no, th dng ngay. Bi ny 1.5, tic rng ch c rt t bn v lm bi ny- c th do ht thi gian ???