C primer plus第六版 第十章答案

//10.1
#include<stdio.h>
#define MONTHS 12
#define YEARS   5
int main(void)
{
    const float rain[YEARS][MONTHS] = 
    {
        { 4.3, 4.3, 4.3, 3.0, 2.0, 1.2, 0.2, 0.2, 0.4, 2.4, 3.5, 6.6 },
        { 8.5, 8.2, 1.2, 1.6, 2.4, 0.0, 5.2, 0.9, 0.3, 0.9, 1.4, 7.3 },
        { 9.1, 8.5, 6.7, 4.3, 2.1, 0.8, 0.2, 0.2, 1.1, 2.3, 6.1, 8.4 },
        { 7.2, 9.9, 8.4, 3.3, 1.2, 0.8, 0.4, 0.0, 0.6, 1.7, 4.3, 6.2 },
        { 7.6, 5.6, 3.8, 2.8, 3.8, 0.2, 0.0, 0.0, 0.0, 1.3, 2.6, 5.2 },

    };
    int year, month;
    float subtot, total;

    printf(" YEAR     RAINFALL  (inches)\n");
    for (year = 0, total = 0; year < YEARS; year++)
    {
        for (month = 0, subtot = 0; month < MONTHS; month++)
            subtot += *(*(rain + year) + month);    //原爲:subtot += rain[year][month];
        printf("%5d %15.1f\n", 2010 + year, subtot);
        total += subtot;
    }
    printf("\nThe yearly average is %.1f inches.\n\n", total / YEARS);
    printf("MONTHLY AVERAGES:\n\n");
    printf(" Jan Feb Mar Apr May Jun Jul Aug Sep Oct ");
    printf(" Nov Dec\n");

    for (month = 0; month < MONTHS; month++)
    {
        for (year = 0, subtot = 0; year < YEARS; year++)
            subtot += *(*(rain + year) + month);
        printf("%4.1f ",subtot / YEARS);
    }
    printf("\n");

    return 0;
}
//10.2
#include <stdio.h>
#include <stdlib.h>
void copy1(double *a1, double *source, int n);
void copy2(double *a2, double *source, int n);
void copy3( double *source, double *start,double*end);
void printcopy(double *a,int n);
int main()
{
    int n;
    double source[5]= {1.1,2.2,3.3,4.4,5.5};
    double a1[5];
    double a2[5];
    double a3[5];
    copy1(a1,source,5);
    copy2(a2,source,5);
    copy3(source,a3,a3+5);
    printcopy(1,n);
    printcopy(2,n);
    printcopy(3,n);
    return 0;
}
void copy1(double *a1, double *source, int n)
{
    int i;
    for(i=0; i<n; i++)
    {
        a1[i]=source[i];
    }
}
void copy2(double *a1, double *source, int n)
{
    int i;
    for(i=0; i<n; i++)
        *(a1+i)=*(source+i);
}
void copy3(double *source,double*start,double*end)
{

    double *i;
    for(i=start; i<end; i++)
    {
        *(start++)=*i;
    }
}
void printcopy(double *a,int n)
{
    int i;
    printf("1?2?3?:\n");
    for(i=0; i<5; i++)
    {
        printf("%.2lf",a[i]);
    }
    printf("\n");
}
//10.3
#include<stdio.h>
int find_max(int arry[], int n);
int main()
{
    int arr[5] = { 1, 2, 3 , 4, 5 };
    int max = find_max(arr , 5);
    printf("%d", max);

    return 0;
}

int find_max(int arry[], int n)
{int i;
    int x = arry[0];
    for ( i = 0; i < n; i++)
    {
        if (x < arry[i])
            x = arry[i];
    }

    return x;
}
//10.4
#include<stdio.h>
int max_bot(double *arry, int n)
{
    int max = 0;
    int temp = arry[0];
    for (int i = 0; i < n; i++)
    {
        if (temp < arry[i])
        {
            temp = arry[i];
            max = i;
        }
    }

    return max;
}
int main()
{
    double arry[6] = { 2.1, 3.4, 5.6, 2.3, 8.7, 1.2 };
    int max = max_bot(arry , 6);
    printf("%d", max);

    return 0;
}
//10.5
#include<stdio.h>
double minus(double arry[] , int n)
{
    double max = arry[0];
    double min = arry[0];
    for (int i = 0; i < n; i++)
    {
        if (max < arry[i])
            max = arry[i];
        if (min > arry[i])
            min = arry[i];
    }
    double two_minus = max - min;

    return two_minus; 
}
int main()
{
    double arry[6] = { 2.1, 3.4, 5.6, 2.3, 8.7, 1.2 };
    double result = minus(arry , 6);
    printf("%.2lf", result);

    return 0;
}
//10.6
#include<stdio.h>
void flashback(double arry[] , int n)
{
    double temp = arry[n];
    for (int i = 0; i < n/2; i++) 
    {
        double temp = arry[i];
        arry[i] = arry[n - 1 - i];
        arry[n - 1 - i] = temp;
    }
}

int main()
{
    double arry[6] = { 2.1, 3.4, 5.6, 2.3, 8.7, 1.2 };
    flashback(arry , 6);
    for (int i = 0; i < 6; i++)
        printf("%.2lf ", arry[i]);
    printf("\n");

    return 0;
}
//10.7
#include<stdio.h>
void copy_arr(double *target, double *source, int n)
{
    for (int i = 0; i < n; i++)
        target[i] = source[i]; 
}
int main()
{
    double arr[3][3] = { 
                                { 1.0, 2.0, 3.0 },
                                { 4.0, 5.0, 6.0 },
                                { 7.0, 8.0, 9.0 },
                            };
    
    double arr_copy[3][3];
    for (int i = 0; i < 3; i++)
    {
        copy_arr(arr_copy[i] , arr[i] , 3);
    }

    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
            printf("%.2lf ", arr_copy[i][j]);
        printf("\n");
    }
}
//10.8
#include<stdio.h>
void copy_ptrs(double *target, double *source_begin, double *source_end)
{
    for (double *i = source_begin; i < source_end; i++)
        *(target++) = *i;
}
int main()
{
    double source[7] = { 1, 2, 3, 4, 5, 6, 7 };
    double target[3] = { 0 };
    copy_ptrs(target , source + 2 , source + 5); // 傳址

    for (int i = 0; i < 3; i++)
    {
        printf("%.2lf ", target[i]);
    }

    return 0;
}
/*  Nineth  */
#include<stdio.h>
void arr_copy(double source[][5] , double target[][5] , int n)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < 5; j++)
            target[i][j] = source[i][j];
    }
}
void arr_print(double source[][5] , int n)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < 5; j++)
            printf("%.2lf ", source[i][j]);
    }
}
int main()
{
    double source[3][5] = {
                            { 1.2, 2.3, 3.4, 5.6, 7.8 },
                            { 8.7, 6.5, 4.3, 3.2, 2.1 },
                            { 3.1, 4.5, 5.6, 7.6, 2.4 },
                        };
    double target[3][5] = { 0 };
    arr_copy(source , target , 3);
    arr_print(target , 3);

    return 0;
}
//10.10
#include<stdio.h>
void arry(double source_1[] , double source_2[] , double target[] , int n)
{
    for (int i = 0; i < n; i++)
    {
        target[i] = source_1[i] + source_2[i];
    }
}
int main()
{
    double source_1[3] = { 1, 2, 3 };
    double source_2[3] = { 4, 5, 6 };
    double target[3] = { 0 };

    arry(source_1 , source_2 , target , 3);

    for (int i = 0; i < 3; i++)
        printf("%.2lf ", target[i]);
}
//10.11
#include<stdio.h>
void arr_print(int arr[][5] , int n)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < 5; j++)
            printf("%d ", arr[i][j]);
    }
    printf("\n");
}
void arr_double(int arr[][5] , int n)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < 5; j++)
            arr[i][j] *= 2;
    } 
}
int main()
{
    int arr[3][5] = {
                        { 1, 2, 3, 5, 7 },
                        { 8, 6, 4, 3, 2 },
                        { 3, 4, 5, 7, 2 },
                    };
    arr_print(arr , 3);
    arr_double(arr , 3);
    arr_print(arr , 3);

    return 0;
}
//10.12
#include<stdio.h>
#define MONTHS 12
#define YEARS   5
void year_sum_1(const float rain[][MONTHS]) 
{                                          
    int year, month;
    float subtot, total;
    for (year = 0, total = 0; year < YEARS; year++)
    {
        for (month = 0, subtot = 0; month < MONTHS; month++)
            subtot += rain[year][month];
        printf("%5d %15.1f\n", 2010 + year, subtot);
        total += subtot;
    }
    printf("\nThe yearly average is %.1f inches.\n\n", total / YEARS);
    printf("MONTHLY AVERAGES:\n\n");
    printf(" Jan Feb Mar Apr May Jun Jul Aug Sep Oct ");
    printf(" Nov Dec\n");
}
void year_sum_2(const float rain[][MONTHS])
{
    int year, month;
    float subtot, total;
    for (month = 0; month < MONTHS; month++)
    {
        for (year = 0, subtot = 0; year < YEARS; year++)
            subtot += rain[year][month];
        printf("%4.1f ",subtot / YEARS);
    }
}
int main(void)
{
    const float rain[YEARS][MONTHS] = 
    {
        { 4.3, 4.3, 4.3, 3.0, 2.0, 1.2, 0.2, 0.2, 0.4, 2.4, 3.5, 6.6 },
        { 8.5, 8.2, 1.2, 1.6, 2.4, 0.0, 5.2, 0.9, 0.3, 0.9, 1.4, 7.3 },
        { 9.1, 8.5, 6.7, 4.3, 2.1, 0.8, 0.2, 0.2, 1.1, 2.3, 6.1, 8.4 },
        { 7.2, 9.9, 8.4, 3.3, 1.2, 0.8, 0.4, 0.0, 0.6, 1.7, 4.3, 6.2 },
        { 7.6, 5.6, 3.8, 2.8, 3.8, 0.2, 0.0, 0.0, 0.0, 1.3, 2.6, 5.2 },

    };
    printf(" YEAR     RAINFALL  (inches)\n");
    year_sum_1(rain);
    year_sum_2(rain);
    printf("\n");

    return 0;
}
//10.13
#include<stdio.h>
void input(double arr[][5] , int n);
double aver_part(double arr[] , int n);
double aver_all(double arr[][5] , int n);
double max(double arr[][5] , int n);
void res_print(double arr[][5] , int n);

int main()
{
    double arr[3][5] = { 0 };int i;
    printf("Enter three sets of Numbers, each containing five double-type Numbers: \n");
    input(arr , 3);
    for ( i = 0; i < 3; i++)
    {
        printf("The average of %d row is %.2lf\n", i + 1, aver_part(arr[i] , 3));
    }
    printf("The average of all the data is %.2lf\n", aver_all(arr , 3));
    printf("Where the largest number is %.2lf\n", max(arr , 3));
    res_print(arr , 3);

    return 0;
}
void input(double arr[][5] , int n)
{int i,j;
    for (i = 0; i < n; i++)
    {
        for ( j = 0; j < 5; j++)
            scanf("%lf", &arr[i][j]);
    }
}

double aver_part(double arr[] , int n)
{int i;
    double sum;
    for ( i = 0; i < n; i++)
        sum += arr[i];

    return (sum / n);
}

double aver_all(double arr[][5] , int n)
{int i,j;
    double sum = 0;
    for ( i = 0; i < n; i++)
    {
        for ( j = 0; j < 5; j++)
            sum += arr[i][j];
    }

    return (sum / (n*5));
}

double max(double arr[][5] , int n)
{int i,j;
    double max = arr[0][0];
    for ( i = 0; i < n; i++)
    {
        for (j = 0; j < 5; j++)
        {
            if (max < arr[i][j])
                max = arr[i][j];
        }
    }

    return max;
}

void res_print(double arr[][5] , int n)
{int i,j;
    for ( i = 0; i < n; i++)
    {
        for ( j = 0; j < 5; j++)
            printf("%.2lf ", arr[i][j]);
        printf("\n");
    }
    printf("\n");
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章