De Thi KTLT K53

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 ???