C primer plus 第十章

来源:互联网 发布:qq飞车t1神影至尊数据 编辑:程序博客网 时间:2024/05/17 06:09

编程练习

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 AVERAGE: \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[], double[], int);void copy_ptr(double *, double *, int);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);    return 0;}void copy_arr(double a1[], double a2[], int n){    int i;    for(i = 0; i<n; i++)        a2[i] = a1[i];}void copy_ptr(double *p1, double *p2, int n){    int i;    for(i = 0; i<n; i++)        *(p2 + i) = *(p1 + i);}

3.

#include <stdio.h> #define NUMBER 6int max(int [], int n);int main(void){    int array[] = {4, 5, 6, 3, 7, 8};    printf("The max is:%d", max(array, NUMBER));    return 0;} int max(int a[], int n){    int i, max;    for(i = 1, max = a[0]; i < n; i++)        if(max < a[i])        max = a[i];    return max;}

4.

#include <stdio.h>#define NUMBER 6int max(double [], int);int main(void){    double array[] = {3.1, 3.4, 4.5, 5.6, 39, 5.8};    printf("The max index is:%d", max(array, NUMBER));    return 0;}int max(double a[], int n){    int i, max;    for(i = 0, a[max] = a[0]; i<n; i++)        if(a[max] < a[i])            max = i;    return max;}

5.

#include <stdio.h> #define NUMBER 6int value(double[], int);int main(void){    double array[] = {3.4, 4.5, 5.6, 4.6, 8.4, 3.4};    printf("The gap value is:%d", value(array, NUMBER));    return 0;}int value(double a[], int n){    int i, min, max;    for(i = 0, max = a[0], min = a[0]; i < n; i++)        if(max < a[i])             max = a[i];        if(min > a[i])            min = a[i];    return max - min;}

6.

#include <stdio.h>#define ROW 2#define COL 3void copy_1d(double [][COL], double[][COL], int);void copy_2d(double [], double [], int);int main(void){    double source[ROW][COL] = {1, 2, 3, 4, 5, 6};    double target[ROW][COL] = {0};    copy_1d(source, target, ROW);    return 0;}void copy_1d(double (*source)[COL], double target[][COL], int n){    int i;    for(i = 0; i < n; i++)        copy_2d(*(source + i), target[i], COL);}void copy_2d(double a[], double b[], int n){    int i;    for(i = 0; i < n; i++)        a[i] = b[i];}

7.

#include <stdio.h>#define NUMBER 3void copy(double *, double *, int);int mian(void){    double source[6] = {1, 2, 3, 4, 5, 6};    double target[3];    copy(source+2, target, NUMBER);    printf("target:%g%g%g%g%g%g\n", target[0], target[1], target[2]);    return 0;}void copy(double *p1, double *p2, int n){    int i;    for(i = 0; i < n; i++)        *(p2 + i) = *(p1 + 1);}

8.

#include <stdio.h>#define COL 5void copy(double (*)[COL], double (*)[COL], int);void display(double (*)[COL], int);int main(void){    double source[3][5] = {{1.1, 3.4, 5.6, 3.5, 3.7},                           {2.3, 3.5, 4.4, 5.6, 7.5},                           {3.4, 5.6, 6.7, 3.2, 2.5}};    double target[6][5] = {0};    copy(source, target, COL);    display(source, 3);    display(target, 3);    return 0;}void copy(double (*source)[COL], double target[][COL], int row){    int i, j;    for(i = 0; i < row; i++)        for(j = 0; j < COL; j++)            target[i][j] = source[i][j];    }void display(double (*p)[COL], int rows){    int i,j;    for(i = 0; i < rows; i++)    {        for(j = 0; j < COL; j++)            printf("%g\t", p[i][j]);        printf("\n");    }}

9.

#include <stdio.h> #define NUM 4void plus(int *, int *, int *, int);int main(void){    int source1[] = {2, 4, 5, 8};    int source2[] = {1, 0, 4, 6};    int target[] = {0};    plus(source1, source2, target, NUM);    printf("%g\t", target);    return 0;}void plus(int a[], int b[], int c[], int n){    int i;    for(i = 0; i <n; i++)        c[i] = a[i] + b[i];}

10.

#include <stdio.h>#define COL 5void twice(double (*)[COL], double (*)[COL], int);void display(double (*)[COL], int);int main(void){    double source[3][5] = {{1.1, 3.4, 5.6, 3.5, 3.7},                           {2.3, 3.5, 4.4, 5.6, 7.5},                           {3.4, 5.6, 6.7, 3.2, 2.5}};    double target[6][5] = {0};    twice(source, target, COL);    display(source, 3);    display(target, 3);    return 0;}void twice(double (*source)[COL], double target[][COL], int row){    int i, j;    for(i = 0; i < row; i++)        for(j = 0; j < COL; j++)            target[i][j] = 2 * source[i][j];    }void display(double (*p)[COL], int rows){    int i,j;    for(i = 0; i < rows; i++)    {        for(j = 0; j < COL; j++)            printf("%g\t", p[i][j]);        printf("\n");    }}

11.

#include <stdio.h> #define MONTH 12#define YEARS 5void display(float [][MONTH], int);int main(void){    const float rain[YEARS][MONTH] = {    {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}};    display(rain, YEARS);    return 0;}void display( float rain[][MONTH], int years){    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 < MONTH; month++)        subtot += rain[year][month];    printf("%5d %15.1f\n", 2000 + 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 < MONTH; 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");}

12.

#include <stdio.h>#define ROWS 3#define COLS 5void store(double [][COLS], int);double average(double [], int);double aver(double [][], int, int);double max(double [][], int, int);void display(double p[][COLS], int rows, double average0, double average1, double average2, double average_total,double max);int main(void){    double array[ROWS][COLS];    double average0, average1, average2, average_total, max;    printf("Please enter an array:\n");    store(array, 3);    average(array[1], 5);    average(array[2], 5);    average(array[3], 5);    aver(array, 3, 5);    max(array, 3, 5);    display(array, 3, average0, average1, average2, average_total, max);    return 0;}void store(double p[][COLS], int rows){    int i,j;    for(i = 0; i < rows; i++)        for(j = 0; j < COLS; j++)            scanf("%lf", &*p[COLS]);}double average(double p[], int rows);{    double total, i;    for(i = 0; i < rows; i++)        total += *p[i];    return total / rows;}double aver(double p[][], int rows, int cols){    double total, i, j;    for(i = 0; i < rows; i++)        for(j = 0; j < cols; j++)            total += *p[i][j];    return total / (i * j);}double max(double p[][], int rows, int cols){    double max = p[0][0];    int i, j;    for(i = 0; i < rows; i++)        for(j = 0; j < cols; j++)               if(max < p[i][j])                max = p[i][j];    return max;}void display(double p[][COLS], int rows, double average0, double average1, double average2, double average_total,double max){    int i,j;    printf("a.\narray = \n");    for(i=0;i<rows;i++)    {    for (j=0; j<COLS; j++)        printf("%g\t",p[i][j]);    printf("\n");    }    printf("b.\n");    printf("average0 = %g\n",average0);    printf("average1 = %g\n",average1);    printf("average2 = %g\n",average2);    printf("c.\n");    printf("total average = %g\n",average_total);    printf("d.\n");    printf("max = %g\n",max);}
0 0
原创粉丝点击