2015年計(jì)算機(jī)軟件水平考試軟件設(shè)計(jì)筆試練習(xí)題

字號(hào):

1.設(shè)有定義“int a=3, b,*p=&a;”,則下列語(yǔ)句中使 b不為3的語(yǔ)句是( )
    ① b=* &a; ?、?b=* p;
    ③ b=a; ?、?b=*a;
    2 .設(shè)指針x指向的整型變量值為25,則"printf("%d\n",++ *x);"的輸出是( )
    ① 23 ?、?24
    ③ 25 ?、?26
    【解】定義有 int a=3, b,*p=&a;對(duì)b賦值的表達(dá)式有*&a、*p、a 、*a。引用變量。的值有兩種方法,一是直接引用a,二是通過(guò)a的指針間接引用a。對(duì)于后者,又有多種表達(dá)方法,通過(guò)指向a的指針p,間接引用a的內(nèi)容,如*p?;蛲ㄟ^(guò)求地址運(yùn)算符由變量a得到其指針&a,再由這指針表達(dá)式間接引用 a的內(nèi)容,如* &a。所以表達(dá)式*&a、*p和a都能引用變量a的值,而使b的值為3。而表達(dá)式。a是錯(cuò)誤的,因?yàn)閍不是指針變量,不能對(duì)它施行取內(nèi)容運(yùn)算符。所以解答是④。
    【解】若指針變量x指向某個(gè)變量,例如指向變量v,并且變量v的值是25,則表達(dá)式++ *x的值是26。這是因?yàn)楸磉_(dá)式的計(jì)算順序可加圓括號(hào)表達(dá)成(++(*x)),首先是*x,是對(duì)X所指變量V的引用,所以++ *X就是++V。++V是先讓變量V增1,并以增至后的V的值為表達(dá)式++V的結(jié)果,所以其值是 26。所以解答是④。
    1.若給fun函數(shù)的形參s傳送字符串:"ㄩㄩ 6354abcc"(其中ㄩ表示空格字符),則函數(shù)的返回值是__________。
    # include
    long fun(char s[])
    { long n;int sign;
    for(; isspace(*s); s++);
    sign=(*s==’-’ )?-1:l;
    if(*s==’+’ ||*s==’-’) s++;
    for(n=0; isdigit(*s); s++) n=10*n+(*s-’0’);
    return sign *n;
    }
    2.下面函數(shù)要求計(jì)算兩個(gè)整數(shù)X、y之和,并通過(guò)形參Z傳回該和值,請(qǐng)?zhí)羁铡?BR>    void add(int x,int y,________z)
    {_________=x+ y; return;}
    參考答案:
    【解】函數(shù)fun的第一個(gè)for循環(huán)跳過(guò)字符串的前導(dǎo)空白符,接著分析第一個(gè)非空白符是否是負(fù)號(hào),若是置變量sign為 -1;否則,置變量sign為1。接著的if語(yǔ)句在第一個(gè)非空白字符是負(fù)號(hào)或正號(hào)時(shí),跳過(guò)該字符。以后的for循環(huán)將后面的數(shù)字符當(dāng)作十進(jìn)制數(shù)的各位數(shù)字譯出一個(gè)長(zhǎng)整數(shù)n。遇字符a時(shí),結(jié)束譯數(shù)循環(huán)。最后,函數(shù)返回sign與n的乘積。所以若調(diào)用函數(shù)時(shí)提供的實(shí)參是"ㄩㄩ6354abc",函數(shù)返回值是整數(shù)6354。
    【解】函數(shù)希望通過(guò)形參z傳送結(jié)果,形參z必須是指針類型的,由于返回整型結(jié)果,所以z的說(shuō)明是int *z。函數(shù)返回前必須先把結(jié)果通過(guò)形參z間接引用(寫成* z)傳回。