自考“高級語言程序設(shè)計”習(xí)題答案詳解(24)

字號:

10.編一個程序,將按第9題中加密的字符率(從鍵盤輸入)解密后輸出。
    「解」本問題編寫的程序是完成上一程序的逆操作。同樣是順序考察輸入字符串,對滿足要求的字符作恢復(fù)更改。要求是當字符減3后是大寫英文字母時,則對其作減3處理的替換;當字符加3后是小寫英文字母時,則對它作加3的處理。如此做法是有錯誤的,程序未考慮原
    先不是英文字母,而未被加3或減3處理,但對它減3或加3后是英文字母時,將被下面的程序轉(zhuǎn)換成英文字母。所以下面的程序不是完成上題程序的逆操作。但沒有簡單的辦法能避免這個錯誤。完整程序如下:
    # include
    # define N 200
    main()
    {char s[N]; int i;
    printf(“Enter string!\n”);
    scanf(“%s”,s);
    for(i=0;s ?。健甛0’;i++)
    if(s-3>=‘A’&&s-3<=‘Z’)
    s-=3;
    else if(s+3>=‘a(chǎn)’ && s+3<= ‘Z’)
    s+=3;
    printf(“s=%s\n”,s);
    }
    5.1 單項選擇題
    1.設(shè)有定義“int a=3, b,*p=&a;”,則下列語句中使 b不為3的語句是( )
    ① b=* &a; ② b=* p;
    ③ b=a; ④ b=*a;
    「解」定義有 int a=3, b,*p=&a;對b賦值的表達式有*&a、*p、a 、*a.引用變量。的值有兩種方法,一是直接引用a,二是通過a的指針間接引用a.對于后者,又有多種表達方法,通過指向a的指針p,間接引用a的內(nèi)容,如*p.或通過求地址運算符由變量a得到其指針&a,再由這指針表達式間接引用 a的內(nèi)容,如* &a.所以表達式*&a、*p和a都能引用變量a的值,而使b的值為3.而表達式。a是錯誤的,因為a不是指針變量,不能對它施行取內(nèi)容運算符……所以解答是④。
    2 .設(shè)指針x指向的整型變量值為萬,則“printf(”%d\n“,++ *x);”的輸出是( )
    ① 23 ② 24 ③ 25 ④ 26
    「解」若指針變量x指向某個變量,例如指向變量v,并且變量v的值是25,則表達式++ *x的值是26.這是因為表達式的計算順序可加圓括號表達成(++(*x)),首先是*x,是對X所指變量V的引用,所以++ *X就是++V.++V是先讓變量V增1,并以增至后的V的值為表達式++V的結(jié)果,所以其值是 26.所以解答是④。
    3.若有說明:“ int i,j= 7,*p=&i;”,則與“ i=j(luò);”等價的語句是( )
    ①i=*p; ②*P=* &j;
    ③i==&j; ④i=* *p;
    「解」指針變量 p指向變量i時,表達式i=*p等價于 i=i;表達式*p=*&j等價于i=j(luò);而表達式i=&j企圖將整型變量的指針賦給整型變量,這是錯誤的;表達式i=* *p也是一種錯誤的表達式。p是指針,*p是p所指變量j,* *p是企圖將整型變量j當作指針,并想通過j間接引用某個變量。所以解答是②。