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

字號:

3.閱讀下列程序,寫出程序運行的輸出結(jié)果。
    char s[]=“ABCD”;
    main()
    { char * p;
    for( p=s;p< s+4;p++) printf(“%s\n”, p);
    }
    「解]程序定義了一個字符數(shù)組s,由給它所賦的字符串初值知,該數(shù)組只有五個元素。程序另定義了字符指針變量p.循環(huán)開始時,先讓p指向數(shù)組的首元素。循環(huán)每次輸出以p所指字符為首字符的字符串,并讓它指向下一個字符。如此反復(fù)循環(huán)四次,所以程序輸出以下內(nèi)容:
    ABCD
    BCD
    CD
    D
    4.閱讀下列程序,試寫出程序運行的結(jié)果。
    main()
    {int i,b,c,a[]={1,10,-3,-21,7,13},*p_b,*p_c;
    b=C=1;p_b=p_C= a;
    for(i=0;i<6; i++)
    { if(b<*(a+i)) {b=*(a+i); p_b=&a; }
    if(c>*(a+i)) {c=*(a+i); p_c=&a; }
    }
    i=*a;*a=*p_b;*p_b=i;i=*(a+5);*(a+5)=*p_c;*p_c=i;
    printf(“%d,%d,%d,%d,%d,%d\n”, a[O],a[1],a[2],a[3], a[4], a[5]);
    }
    「解]程序定義了一個整型數(shù)組。,由給它所賦的初值知,該數(shù)組有六個元素。程序另定義了三個整型變量i.b、C和兩個指針變量p_b.p_c.程序首先置變量b和C都為1,p_b和p_c都指向數(shù)組a 的首元素a[0].接著執(zhí)行六次循環(huán),循環(huán)體由兩個if語句。第一個if語句是當 b的值小于*(a+i)(就是a)時,將*(a+i)的值復(fù)制到b,并讓p_b指向a.這是在a中找值,將值存于b,值元素的指針存于指針變量p_b.第二個if語句是當c的值大于*(a+i)(就是a)時,將*(a+i) 的值復(fù)制到c,并讓p_c指向a.這是在a中找最小值,將最小值存于c,最小值元素的指針存于指針變量p_c.循環(huán)結(jié)束后的前三個語句實現(xiàn)元素與a[0]交換。接著三個語句是在已經(jīng)過前面交換的基礎(chǔ)上,將最小元與a[5]交換。最后程序順序輸出數(shù)組a的六個元素。所以程序輸出內(nèi)容是:
    13, 10,-3, l, 7,-21.
    若數(shù)組a的初值由輸入任意指定,上述程序?qū)σ环N特殊情況不能完成功能的要求,即最小元素若是a[0],p_c所指元素已被移到p_b指針所指位置,實際與a[5]交換的不再是數(shù)組中的最小元素,而是元素。
    5.4 程序設(shè)計題
    1.輸人3個整數(shù),按從大到小順序輸出。
    「解」存儲輸入的三個整數(shù)可用三個簡單變量,也可用數(shù)組。設(shè)用三個簡單變量x,y,z存儲輸入的三個整數(shù)。另設(shè)若干個指針變量指向存儲輸入數(shù)據(jù)的變量。實現(xiàn)從大到小輸出三個整數(shù)有多種方案,如通過比較交換變量的值,多次比較交換使變量滿足條件x>=y>=z.這樣,變量的輸入值可能會與它的輸出值不一樣。如通過比較交換指針變量,當比較后發(fā)現(xiàn)要交換時,就交換變量的指針,而不交換變量的值,則在比較結(jié)束后,變量的值沒有改變,但從指針方向來看,它們的值是從大到小排列的。下面的程序就采用這種方案。
    # include
    main()
    { int x,y,z;
    int *big=&x,*mid=&y,*sma=&z,/*置三個指針變量分別指向x,y, z*/
    *temp;
    printf(“Enter x,y,z.\n”);
    scanf(“%d%d%d”, big,mid,sma);/*順序為變量x,y,z輸入值*/
    if(*big< *mid) {temp=big;big=mid; mid=temp; }
    /*使*big>=*mid*/
    if(*big<*sma) { temp=big;big=sma;sma=temp; }/*使*big>=*sma*/
    if(*mid<*sma){temp=mid;mid=sma;sma=temp; }/*使*mid>=*sma*/
    printf(“%d\t%d\t%d\n”, x,y,z);/*按輸入順序輸出x,y,z*/
    printf(“%d\t%d\t%d\n”,*big,*mid,*sma);/*按從大到小的順序輸出*/
    }