You are on page 1of 9

Cu 1: (1) Mt LTV vit CT nh sau : #include <stdio.

h> void main(){ int a,b=3,c=6; int *p = &b; /* chia c cho b */ a = c/*p; b = c ; /* gn b = 6 */ printf("a=%d, b=%d\n", a,b); } Khi dch c li c php, LTV sa = cch thm du ; vo trc lnh printf, nhng run th kt qu khng nh .Hy ch ra li c php, sau tin hnh test v g ri CT sa li c php ca LTV c kq l a= 2 v b=6.
Cu lnh a=c/*p; b trnh dch hiu ngm thnh bt u ca on ch thch /* v vy ton b on code n cui dng sau c coi l ch thch ( c du ; kt thc lnh) do trnh dch s bo li c php thiu du ; nu thm ; vo trc lnh printf th ht li c php n nhng kt qu vn sai v cng l do nu trn (a=2 v b=3). Phi sa dng lnh a = c/*p; thnh a=c/(*p);

Neu SV chi sua, khong chi ra ly do : tru 0.5 d 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 <stdio.h> 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)); } KQ : F(&a)+F(&a) = 13 2*F(&a) = 12 G Gii thch ly do : kt qu khc nhau do hiu ng ph -sideeffect. Tham s ca hm F l con tr, v trong hm F tng gi tr nh ti a ch truyn vo ln 1, v vy ln u gi F(&a) hm tr v 6 v a tng ln 1, ln sau 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 truyn a ch. y cng l 1 cu n gin g im, tic rng khng t bn sai cu ny a- Cu 3:(0.75) Tinh chnh ti u on code sau: bfloat 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; return sum; } 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; } Hm ny i gi tr ( swap) 2 i s truyn vo m khng dng bin trung gian ( xem bi nhn xt s 1) Cu 5 : (0.75) Cho bit hm sau lm g : void bitoperation( int &x,int n) { x |= (1 << (n - 1)); } Hm ny xc lp bt th n ca i s th nht x ( t = 1) v d int a=5; Bitoperator(a,2) = 0101 | (1 << 1) = 0101 | 0010 = 0111 Cu 6: (1) Tinh chnh nng cao hiu nng ca chng trnh sau void F1(float b, float *a, int n){ int i=0,found = 0; while ((!found) && (i<n)) { float x = log(b)/log(2); if (a[i] == x) found = 1; else i++; } if (found) do_something; } : a nu dng linh canh 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 : dung break 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 vin nh sau : struct sinhvien { struct hoso { char malop[6]; char hovaten[35]; long sohieusv; float kqht; } data; struct sinhvien *next; } *ds; D liu c nhp v c sp xp theo theo lp , trong 1 lp theo th t ABC ca tn, h v tn m. Hy vit hm Search vi cc tham s truyn vo l MaLop v HoVaTen v cc hm cn thit khc tm kim v nhanh chng xc nh c tn ti h s tng ng hay khng, nu c th in ra sohieusv 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 <string.h> #include <alloc.h> 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 (f<0) // van con nho hon sv = sv->next; 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 Tr trng 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) <0 && sv != NULL) sv=sv->next; 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 T Duyt mng V v lu vo Stack S nu V[i] =0 for (i=1;i <=n;i++) if (V[i] ==0) Push(S,T,i); 2- Duyt Stack for (i =1;i <=n; i++) if Stack is Empty Return MainProgram; D Stack v in ni dung : Pop(S,T,X); Printf( %d,X); Tm con ca X v np vo Stack; } Vit li on 2 ca chng trnh sao cho chng trnh khng phi dng lnh Return Main Program m thc cht l 1 lnh Goto v cho kt qu tng ng. Dap an void Bidon() { 1- Khi to Stack S vi con tr T Duyt mng V v lu vo Stack S nu V[i] tha k for (i=1;i <=n;i++) if (V[i] ==0) Push(S,T,i); 2- Duyt Stack // Li gii cho on 2 i = 1; while (i <=n) && (Stack S is not Empty) { // D Stack v in ni dung { Pop(S,T,X); printf( %d,X);} //Tm con ca X v np vo Stack (nu c): Push(S,T,con(X)); i = i+1; } } c ng bi VuongVd vo lc 06:05 1 nhn xt Gi Email Bi ng Ny BlogThis! Chia s ln Twitter Chia s ln Facebook Chia se ln Google Buzz Nhn: bai thi KTLT

Th by, ngy 18 thng mi hai nm 2010


Ve 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; return sum; } R sot on code trn, ta thy bn cht ca on code l tnh tng n phn t ca 2 mng a v b. V vy ch cn loi b cc bin trung gian v tinh chnh nh sau : 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 ( v ch c 0.25) Cu 6 : (1) Tinh chnh nng cao hiu nng ca chng trnh sau void my_func(float val, float *a, int n){ int i=0,found = 0; while ((!found) && (i<n)) { float testval = log(val)/log(2); if (a[i] == testval) found = 1; else i++; } if (found) do_something; } Bi ny nu ch chuyn lnh gn float testval = log(val)/log(2); ra ngoi vng lp th ch c 0.5 . C nhiu p n, nhng ni chung u khng cn 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 vin nh sau : struct sinhvien { struct hoso { char malop[6]; char hovaten[35]; long sohieusv; 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 trc d liu, ch c trng malop v hovaten, vy cn phi bin i hovaten thnh tenvahotendem ri mi so snh sp xp. Cc trng malop v hovaten u thuc kiu xu k t, mun sp xp theo th t ABC ca lp, tn, ho v tn m ta ch cn to 1 xu gm malop+tenvahotendem da vo malop va hovaten cua SV, so snh cc xu ca tng SV ta s sp xp c nh yu cu ca bi #include <string.h> #include <alloc.h> 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 : CNPM1AnhTran 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 tn strcpy(tg,l); // copy malop vo bin xu tg strcat(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 vo xu 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;i<=k-n;i++) tg[m+i]=t[k+i]; */ strncat(tg,t,n); // Ghp tip h v tn m vo xu tg. CO THE DUNG strcat(tg,t); return tg; } void sapxep(struct sinhvien *l) // Hm sp xp,Truyn vo a ch u ca danh sch { struct sinhvien *p,*q,*diachi,*tam; char s[41]; for(p=l;p!=NULL;p=p->next) { // Duyt danh sch t u strcpy(s,gten(p->data.ml,p->data.ht)); /* phi lu li malop va ten da bin i vo 1 bin 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; } } } (Ni chung khng c bt c 1 sv no lm c hon chnh cu ny. Mt s tin hnh sp xp theo 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 lai oan chng trinh sau sao cho khng dung return ma thc cht la Goto typedef int mang[MAX];

void Sort1(mang &A, int n){ int i,j; int doicho=0; for (i=0;i<n;i++) { doicho = 0; for (j=n-1;j>0;j--) if (A[j] < A[j-1]) { swap (A[j], A[j-1]; doicho++; } if (doicho == 0) return; } } Thc cht tng ca Thy Lng Mnh B khi ra ny l yu cu cc em sa i li on code trn, khng phi dung lnh return ( v c cu lnh if ) trong vng lp. lm c vic ta ch cn them 1 vng lp while . Thut ton ny trong mn CTDL& GT cc bn hc, y l thut ton sp xp ni bt ti u : Khi dy c sp xp ri th khng cn kim r sot ht, ch cn r sot 1 ln, hoc 1 s ln, cho n khi sp xp xong th lp tc kt thc lun. Ngoi ra, trong on code trn, ta thy vai tr ca I hon ton khng c 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, nu mng c 10 phn t, thong thng ta phi kim tra 45 ln ( 9+8+7+ +2+1), nhng nu dung thu ton nh p n, 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 ???

You might also like