C Primer Plus 第六版 程式設計練習第九章答案 最新出爐

古月弧發表於2020-10-23

尋找志同道合的學習夥伴,請訪問我的個人網頁.
該內容同步釋出在CSDN耳殼網.

提示

8—11題是遞迴部分,為趕進度暫時不做,後面有時間再補上,持續更新。

1、設計一個函式min(x, y),返回兩個double型別值的較小值。在一個簡單的驅動程式中測試該函式。

// 9.1
#include<stdio.h>
double min(double x, double y);

int main(void)
{
    double num1, num2;

    printf("Enter two numbers: ");
    scanf("%lf %lf", &num1, &num2);
    printf("The minist number is %g", min(num1, num2));
}

double min(double x, double y)
{
    return x < y ? x : y;
}

2、 設計一個函式chline(ch, i, j),列印指定的字元j行i列。在一個簡單的驅動程式中測試該函式

// 9.2
#include<stdio.h>
void chline(ch, i, j);

int main(void)
{
    char ch;
    int row, column;

    printf("Enter a character: ");
    ch = getchar();
    printf("Enter two integer: ");
    scanf("%d %d", &row, &column);
    chline(ch, row, column);
}

void chline(ch, i, j)
{
    for(int row = 0; row < i; row++){
        for(int column = 0; column < j; column++)
            putchar(ch);
        putchar('\n');
    }
}

3、編寫一個函式,接受3個引數:一個字元和兩個整數。字元引數是待列印的字元,第1個整數指定一行中列印字元的次數,第2個整數指定列印指定字元的行數。編寫一個呼叫該函式的程式。

和第二題一樣,就不做了。

4、兩數的調和平均數這樣計算:先得到兩數的倒數,然後計算兩個倒數的平均值,最後取計算結果的倒數。編寫一個函式,接受兩個double型別的引數,返回這兩個引數的調和平均數。

和第一題差不多。

5、編寫並測試一個函式larger_of(),該函式把兩個double型別變數的值替換為較大的值。例如, larger_of(x, y)會把x和y中較大的值重新賦給兩個變數。

// 9.5
#include<stdio.h>
void larger_of(double * num1, double * num2);

int main(void)
{
    double num1, num2;

    printf("Enter two numbers: ");
    scanf("%lf %lf", &num1, &num2);
    printf("num1 = %g, num2 = %g\n", num1, num2);
    larger_of(&num1, &num2);
    printf("num1 = %g, num2 = %g", num1, num2);
}

// void larger_of(double * num1, double * num2)
// {
//     if(*num1 >= *num2)
//         *num2 = *num1;
//     else
//         *num1 = *num2;
// }

void larger_of(double * num1, double * num2)
{
    *num1 > *num2 ? (*num2 = *num1) : (*num1 = *num2) 
}

6、編寫並測試一個函式,該函式以3個double變數的地址作為引數,把最小值放入第1個變數,中間值放入第2個變數,最大值放入第3個變數。

// 9.6
#include<stdio.h>
void sort_of(double * num1, double * num2, double * num3);

int main(void)
{
    double num1, num2, num3;

    printf("Enter three numbers: ");
    scanf("%lf %lf %lf", &num1, &num2, &num3);
    printf("num1 = %g, num2 = %g, num3 = %g\n", num1, num2, num3);
    sort_of(&num1, &num2, &num3);
    printf("num1 = %g, num2 = %g, num3 = %g\n", num1, num2, num3);
}

void sort_of(double * num1, double * num2, double * num3)
{
    double max, min, sum;

    sum = *num1 + *num2 + *num3;
    //找出最大值
    *num1 > *num2 ? (max = *num1) : (max = *num2);
    if(*num3 > max)
        max = *num3;
    //找出最小值
    *num1 < *num2 ? (min = *num1) : (min = *num2);
    if(*num3 < min)
        min = *num3;
    *num1 = min;
    *num3 = max;
    *num2 = sum - max - min;
}

7、編寫一個函式,從標準輸入中讀取字元,直到遇到檔案結尾。程式要報告每個字元是否是字母。如果是,還要報告該字母在字母表中的數值位置。例如,c和C在字母表中的位置都是3。合併一個函式,以一個字元作為引數,如果該字元是一個字母則返回一個數值位置,否則返回-1。

// 9.7
#include<stdio.h>
//#include<ctype.h>
int letter_location(char ch);

int main(void)
{
    char ch;
    int res;

    printf("Enter a character: ");
    while((ch = getchar()) != EOF){ 
        // ch = getchar();
        // res = letter_location(ch);
        if(-1 == (res = letter_location(ch)))
            printf("%c is not a letter.\n", ch);
        else
            printf("%c: %d\n", ch, res + 1);
        printf("Enter a character: ");
        while(getchar() != '\n')
            continue;
    }

}

int letter_location(char ch)
{
    int ans;
    
    if(ch >= 'a' && ch <= 'z' )
        ans = ch - 'a';
    else if(ch >= 'A' && ch <= 'Z')
        ans = ch - 'A';
    else
        ans = -1;

    return ans;
}

//或者直接用 ctype.h 函式
// int letter_location(char ch)
// {
//     int ans;

//     if(isalpha(ch))
//         ans = tolower(ch) - 'a' + 1;
//     else 
//         ans = -1;
//     return ans;
// }

8、第6章的程式清單6.20中,power()函式返回一個double型別數的正整數次冪。改進該函式,使其能正確計算負冪。另外,函式要處理0的任何次冪都為0,任何數的0次冪都為1(函式應報告0的0次冪未定義,因此把該值處理為1)。要使用一個迴圈,並在程式中測試該函式。

9、使用遞迴函式重寫程式設計練習8。

10、為了讓程式清單9.8中的to_binary()函式更通用,編寫一個to_base_n()函式接受兩個在2~10範圍內的引數,然後以第2個引數中指定的進位制列印第1個引數的數值。例如,to_base_n(129, 8)顯示的結果為201,也就是129的八進位制數。在一個完整的程式中測試該函式。

11、編寫並測試一個函式FIbonacci(),在該函式中使用迴圈代替遞迴完成斐波納契數列的計算。

尋找志同道合的學習夥伴,請訪問我的個人網頁.
該內容同步釋出在CSDN耳殼網.

相關文章