C PRIME PLUS---------------------------------------第十章编程题

10-1

#include <stdio.h>
#define MONTHS 12    // number of months in a year
#define YEARS   5    // number of years of data
int main(void)
{
    // initializing rainfall data for 2010 - 2014
    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 each year, sum rainfall for each month
        for (month = 0, subtot = 0; month < MONTHS; month++)
            subtot += *((*rain + year)+ month) ;
        printf("%5d %15.1f\n", 2010 + year, subtot);
        total += subtot; // total for all years
    }
    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 each month, sum rainfall over years
        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>
void copy_arr(double arr1[], double arr2[], int n);
void copy_ptr(double* pt1, double* pt2, int n);
void copy_ptrs(double* pt1, double* start, double* end);

int main(void)
{
    double source[5] = { 1.1,2.2,3.3,4.4,5.5 };
    double target1[5];
    double target2[5];
    double target3[5];

    copy_arr(target1, source, 5);
    copy_ptr(target2, source, 5);
    copy_ptrs(target3, source, source+5);
    return 0;
}
void copy_arr(double arr2[], double arr1[], int n)
{
    for (int i = 0; i < n; i++)
    {
        arr2[i] = arr1[i];
        printf("%4.1lf", arr2[i]);
    }
    printf("\n");
}

void copy_ptr(double *pt2, double *pt1, int n)
{
    for (int i = 0; i < n; pt1++, pt2++, i++)
    {
        *pt2 = *pt1;
        printf("%4.1lf", *pt2);
    }
    printf("\n");
}

void copy_ptrs(double* pt1, double* start, double * end)
{
    while (start < end)
    {
        *pt1 = *start;
        printf("%4.1lf", *pt1);
        pt1++;
        start++;
    }
    printf("\n");
}

10-3

#include <stdio.h>
void Find_Biggest(int arr[], int m);

int main(void)
{
    int digits[100] = { 2,4,12,65,34,1000 };
    Find_Biggest(digits,100);
    return 0;
}

void Find_Biggest(int arr[], int m)
{
    int biggest = arr[0];
    for (int i = 1; i < m; i++)
    {
        if (biggest < arr[i])
            biggest = arr[i];
    }
    printf("数组中最大的数为%d", biggest);
}

10-4

#include <stdio.h>
void Find_Biggest(double arr[], int m);

int main(void)
{
    double digits[50] = { 2,4,12,65,34,1000 };
    Find_Biggest(digits,50);
    return 0;
}

void Find_Biggest(double arr[], int m)
{
    double biggest = arr[0];
    int flag = 0;
    for (int i = 1; i < m; i++)
    {
        if (biggest < arr[i])
        {
            biggest = arr[i];
            flag = i;
        }
    }
    printf("数组中最大值的下标为%d",flag);
}

10-5

#include <stdio.h>
void Find_Biggest_Dvalue(double arr[], int m);

int main(void)
{
    double digits[6] = { 2,4,12,65,34,1000 };
    Find_Biggest_Dvalue(digits,6);
    return 0;
}

void Find_Biggest_Dvalue(double arr[], int m)
{
    double biggest = arr[0];
    double smallest = arr[0];
  
    for (int i = 1; i < m; i++)
    {
        if (biggest < arr[i])
        {
            biggest = arr[i];
           
        }
        if (smallest > arr[i])
        {
            smallest = arr[i];
        }
    }
    printf("数组中最大值和最小值的差值为%.1lf",biggest-smallest);
}

10-6

#include <stdio.h>
void Reverse_Order(double arr[], int m);

int main(void)
{
    double digits[6] = { 2,4,12,65,34,1000 };
     Reverse_Order(digits,6);
    return 0;
}

 void Reverse_Order(double arr[], int m)
{
    
    for (int i = m-1; i>=0; i--)
    {
        printf("%5.1lf", arr[i]);
    }
   
}

10-7

#include <stdio.h>
void copy_ptrs(double* pt1, double* start, double* end);
void copy_2D(double(*pt1)[4], double(*pt2)[4], int m);

int main(void)
{
    double source[6][4] = { {2,4,12,65},
                            {1,2,3,4},
                            {5,6,7,8},
                            {9,10,11,12},
                            {13,14,15,16},
                            {17,18,19,20}
    };
    double target[6][4];
    copy_2D(target, source, 6);
    return 0;
}

void copy_2D(double(*pt1)[4],double(*pt2)[4],int m)
{
    for (int i = 0; i < m; i++)
    {
        copy_ptrs(pt1+i, pt2+i, *(pt2+i) + 4);
    }
}

void copy_ptrs(double* pt1, double* start, double* end)
{
    while (start < end)
    {
        *pt1 = *start;
        printf("%5.1lf", *pt1);
        pt1++;
        start++;
    }
    printf("\n");
}

10-8

#include <stdio.h>
void copy_ptrs(double* pt1, double* start, double* end);

int main(void)
{
    double source[7] = {1,2,3,4,5,6,7};
    double target[3];
    copy_ptrs(target, source + 2, source + 5);
    return 0;
}



void copy_ptrs(double* pt1, double* start, double* end)
{
    while (start < end)
    {
        *pt1 = *start;
        printf("%5.1lf", *pt1);
        pt1++;
        start++;
    }
    printf("\n");
}

10-9 ----------无法编译变长数组,只能用处理N*5的数组。

#include <stdio.h>
void copy(double source[][5], double target[][5], int m);
void show(double ar1[][5], double ar2[][5], int m);

int main(void)
{
    double source[3][5] = {
                             {1,2,3,4,5},
                             {6,7,8,9,10},
                             {11,12,13,14,15}
    };
    double target[3][5];
    copy(source,target,3);
    show(source, target, 3);
    return 0;
}

void copy( double source[ ][5],double target[][5],int m)
{
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < 5; j++)
            target[i][j] = source[i][j];
    }
}

void show(double ar1[][5], double ar2[][5], int m)
{
    printf("第一个数组为:\n");
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < 5; j++)
            printf("%5.1lf", ar1[i][j]);
        printf("\n");
    }
    printf("第二个数组为:\n");
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < 5; j++)
            printf("%5.1lf", ar1[i][j]);
        printf("\n");
    }
}

10-10

#include <stdio.h>
void sum(int arr1[], int arr2[], int arr3[], int m);
int main(void)
{
    int arr1[5] = { 1,2,3,4,5 };
    int arr2[5] = { 1,2,3,4,5 };
    int arr3[5];
    sum(arr1, arr2, arr3, 5);
    return 0;
}
void sum(int arr1[], int arr2[], int arr3[], int m)
{
    for (int i = 0; i < m; i++)
    {
        arr3[i] = arr1[i] + arr2[i];
        printf("%3d", arr3[i]);
    }
}

10-11

#include <stdio.h>
void show(int arr1[][5], int m);
void Two_Times(int source[][5], int target[][5], int m);
int main(void)
{
    int arr1[3][5] = {
                        {1,2,3,4,5},
                        {6,7,8,9,10},
                        {11,12,13,14,15}
    };
    int arr2[3][5];
    printf("原数组为:\n");
    show(arr1, 3);
    Two_Times(arr1,arr2,3);
    printf("变换后的数组为:\n");
    show(arr2, 3);
    return 0;
}

void show(int arr1[][5], int m)
{
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < 5; j++)
            printf("%3d", arr1[i][j]);
        printf("\n");
    }
}

void Two_Times(int source[][5],int target [][5],int m)
{
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < 5; j++)
           target[i][j]= 2* source[i][j];
    }
}

10-12

#include <stdio.h>

void Average_year(double arr[][12], int m);
void Average_month(double arr[][12], int m);
int main(void)
{
    double rain[5][12] =
    {
        {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}
    };
     Average_year(rain,5);
    Average_month(rain,5);
    return 0;
}

void Average_year( double arr[][12],int m)
{
    double average = 0;
    double total = 0;
   
    for (int i = 0; i < m; i++)
    {
        double sum = 0;
        for (int j = 0; j < 12; j++)
        {
            sum += arr[i][j];
            total += arr[i][j];
        }
        printf("%d的年降雨量为%lf\n", i + 2010, sum);
    }
    printf("年平均降雨量为%lf.\n", total / 5);
}

void Average_month(double arr[][12],int m)
{

    for (int i = 0; i < 12; i++)
    {
        double sum = 0;
        for (int j = 0; j < m; j++)
        {
            sum += arr[j][i];
        }
        printf("%d月的平均降雨量为%lf\n",1+i, sum/5);
    }
}

10-13--------输出函数不是一个

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void storage(double arr[][5], int m);
double Average_row(double arr[], int m);
void Average(double arr[][5], int m);
double Find_max(double arr[][5], int m);
void show_result(double arr[][5], int m);
int main(void)
{
    double source[3][5];
    storage(source,3);
    for (int i = 0; i < 3; i++)
    {
        Average_row(source[i], 5);
    }
    Average(source, 3);
    Find_max(source, 3);
    show_result(source, 3);
    return 0;
}
void storage(double arr[][5], int m)
{
    for (int i = 0; i < m; i++)
    {
        printf("请输入1组数,每组数包含5个double类型的数:\n");
        for (int j = 0; j < 5; j++)
            scanf("%lf", &arr[i][j]);
    }
}
double Average_row(double arr[], int m)
{
    double sum = 0;
    for (int i = 0; i < m; i++)
    {
        sum += arr[i];
    }   
    printf("每行的平均值为%lf.\n", sum / m);
    return sum / 5;
}
void Average(double arr[][5], int m)
{
    double sum = 0;
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            sum += arr[i][j];
        }
    }
    printf("所有数据平均值为%lf.\n", sum /(m*5) );
}
double Find_max(double arr[][5], int m)
{
    double max = arr[0][0];
    for(int i = 0;i< m;i++)
        for (int j = 0; j < 5; j++)
        {
            if (max < arr[i][j])
                max = arr[i][j];
        }
    printf("所有数据的最大值为%lf.\n",max);
    return max;
}
void show_result(double arr[][5], int m)
{
    printf("let us check the arreys:\n");
    printf("the arrey you input is ;\n");
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < 5; j++)
            printf("%lf", arr[i][j]);
        printf("\n");
    }
}

10-13---输出函数是一个

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void storage(double arr[][5], int m);
double Average_row(double arr[], int m);
double Average(double arr[][5], int m);
double Find_max(double arr[][5], int m);
void show_result(double arr[][5], int m);
int main(void)
{
    double source[3][5];
    storage(source, 3);
    show_result(source, 3);
    return 0;
}
void storage(double arr[][5], int m)
{
    for (int i = 0; i < m; i++)
    {
        printf("请输入1组数,每组数包含5个double类型的数:\n");
        for (int j = 0; j < 5; j++)
            scanf("%lf", &arr[i][j]);
    }
}
double Average_row(double arr[], int m)
{
    double sum = 0;
    for (int i = 0; i < m; i++)
    {
        sum += arr[i];
    }
   // printf("每行的平均值为%lf.\n", sum / m);
    return sum / 5;
}
double  Average(double arr[][5], int m)
{
    double sum = 0;
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            sum += arr[i][j];
        }
    }
    //printf("所有数据平均值为%lf.\n", sum / (m * 5));
    return (sum / (m * 5));
}
double Find_max(double arr[][5], int m)
{
    double max = arr[0][0];
    for (int i = 0; i < m; i++)
        for (int j = 0; j < 5; j++)
        {
            if (max < arr[i][j])
                max = arr[i][j];
        }
    //printf("所有数据的最大值为%lf.\n", max);
    return max;
}
void show_result(double arr[][5], int m)
{
    printf("let us check the arreys:\n");
    printf("the arrey you input is ;\n");
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < 5; j++)
            printf("%5.1lf", arr[i][j]);
        printf("\n");
    }
    //  最大值
    printf("所有数据的最大值%3.1lf\n", Find_max(arr, 3));
    //平均值
    printf("每组的平均值%3.1lf\n", Average(arr, 3));
    //每组平均值
    for (int i = 0; i < 3; i++)
    {
        printf("第%d行的平均值为%3.1lf\n", i + 1, Average_row(arr[i], 5));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值