《c primer plus》编程练习回顾-第十章

来源:互联网 发布:windows图形编程pdf 编辑:程序博客网 时间:2024/05/16 15:47

1.

#include <stdio.h>#define MONTHS 12#define YEARS 5int 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);        printf("%5d %15.1f\n", 2000 + 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;}

2.

#include<stdio.h>void copy_arr(double a[], double b[], int c);void copy_ptr(double *a, double *b, int c);int main(void){    double source[5] = { 1.1, 2.2, 3.3, 4.4, 5.5 };    double target1[5];    double target2[5];    copy_arr(source, target1, 5);    copy_ptr(source, target2, 5);    printf("%lf,%lf,%lf,%lf,%lf\n", target1[0], target1[1], target1[2], target1[3], target1[4]);    printf("%lf,%lf,%lf,%lf,%lf\n", target2[0], target2[1], target2[2], target2[3], target2[4]);    return 0;}void copy_arr(double a[], double b[], int c){    for (int i = 0; i < c; i++)        b[i] = a[i];}void copy_ptr(double *a, double *b, int c){    for (int i = 0; i < c; i++)        *(b + i) = *(a + i);}

3.

#include<stdio.h>int fun(int a[], int b);int main(void){    int num[5] = { 1, 2, 3, 4, 5 };    printf("max=%d\n", fun(num, 5));    return 0;}int fun(int a[], int b){    int max=0;    for (int i = 0; i < b; i++)    {        if (max < a[i])            max = a[i];        else            continue;    }    return max;}

4.

#include<stdio.h>int fun(double a[], int b);int main(void){    double num[5] = { 1, 2, 3, 4, 5 };    printf("The max is num[%d]\n", fun(num, 5));    return 0;}int fun(double a[], int b){    int i, max;    for (i=0,max=1;i<b;i++)    {        if (a[max] < a[i])            max = i;    }    return max;}

5.

#include<stdio.h>double fun(double a[], int b);int main(void){    double num[5] = { 1, 2, 3, 4, 5 };    printf("%lf\n", fun(num, 5));    return 0;}double fun(double a[], int b){    double max, min;    int i, j;    for (i = 0, j = 1; i < b; i++)    {        if (a[i] < a[j])            j = i;        min = a[j];    }    for (i = 0, j = 1; i < b; i++)    {        if (a[i]>a[j])            j = i;        max = a[j];    }    return max - min;}

6.

#include<stdio.h>void fun(double a[][2], double b[][2]);int main(void){    double num[][2] = { 1, 2, 3, 4 };    double c[2][2];    fun(num, c);    printf("%lf,%lf,%lf,%lf\n", c[0][0], c[0][1], c[1][0], c[1][1]);    return 0;}void fun(double a[2][2], double b[2][2]){    int i, j;    for (i = 0; i < 2; i++)    {        for (j = 0; j < 2; j++)            b[i][j] = a[i][j];    }}

7.

#include<stdio.h>void fun(int *a, int b);int main(void){    int num[7] = { 1, 2, 3, 4, 5, 6, 7 };    fun(num, 3);    return 0;}void fun(int *a, int b){    int c[3];    for (int i = 0; i < b; i++)        c[i] = *(a + 2 + i);    printf("%d %d %d\n", c[0], c[1], c[2]);}

8.

#include<stdio.h>#define M 5#define N 3void fun1(double p[N][M], double q[N][M]);void fun2(double p[N][M]);int main(void){    double num[N][M] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };    double num1[N][M];    fun1(num, num1);    fun2(num1);    return 0;}void fun1(double p[N][M], double q[N][M]){    int i, j;    for (i = 0; i < N;i++)       for (j = 0; j < M; j++)           q[i][j] = p[i][j];}void fun2(double p[N][M]){    int i, j;    for (i = 0; i < N; i++)    {        for (j = 0; j < M; j++)            printf("%.2f ", p[i][j]);        printf("\n");    }}

9.

#include<stdio.h>void fun(int *a, int *b, int *c,int d);int main(void){    int r[4] = { 1, 2, 3, 4 }, s[4] = { 5, 6, 7, 8 }, t[4];    fun(r, s, t, 4);    for (int i = 0; i < 4; i++)        printf("%d ", t[i]);    printf("\n");    return 0;}void fun(int *a, int *b, int *c, int d){    for (int i = 0; i < d; i++)        *(c + i) = *(a + i) + *(b + i);}

10.

#include<stdio.h>void print(int (*p)[5],int b);void two(int (*p)[5], int b);int main(void){    int num[3][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };    print(num, 3);    two(num, 3);    print(num, 3);    return 0;}void print(int(*p)[5], int b){    for (int i = 0; i < b * 5; i++)        printf("%2d ", *(*(p)+i));    printf("\n");}void two(int(*p)[5], int b){    for (int i = 0; i < b * 5; i++)        *(*(p)+i) *= 2;}

12.

#include<stdio.h>void input(double (*a)[5],int b);double ave(double (*a)[5], int b);double all_ave(double (*a)[5], int b);double max(double (*a)[5], int b);void print(double *,double*);int main(void){    double *p, *q;    double aver[3], m, all;    int i;    double num[3][5];    input(num, 3);    for (i = 0; i < 3; i++)        aver[i] = ave(num, i);    all = all_ave(num, 3);    m = max(num, 3);    p = &all; q = &m;    print(p,q);    return 0;}void input(double(*a)[5], int b){    printf("please input 15 numbers:");    for (int i = 0; i < b;i++)    for (int j = 0; j < 5; j++)        scanf("%lf", *(a+i)+j);}double ave(double(*a)[5], int b){    double sum = 0;    for (int i = 0; i < 5; i++)        sum += *(*(a)+i + 5 * b);    return (double)sum / 5;}double all_ave(double(*a)[5], int b){    double sum = 0;    for (int i = 0; i < b * 5; i++)        sum += *(*(a)+i);    return (double)sum / (b * 5);}double max(double(*a)[5], int b){    double max = 0;    for (int i = 0; i <= b * 5; i++)    {        if (*(*(a)+i)>max)            max = *(*(a)+i);    }    return max;}void print(double *r,double *s){    printf("ave:%.2lf\n", *r);    printf("max:%.2lf\n", *s);}
0 0