第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);
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;
}
第2题
#include <stdio.h>
void copy_arr(double[], const double[], int);
void copy_ptr(double*, const double*, int);
void copy_ptrs(double[], const double[], double*);
void show_arr(const double*, int);
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);
printf("source array:\n");
show_arr(source, 5);
printf("target1 array:\n");
show_arr(target1, 5);
printf("target2 array:\n");
show_arr(target2, 5);
printf("target3 array:\n");
show_arr(target3, 5);
return 0;
}
void copy_arr(double art[], const double ars[], int n)
{
int i;
for (i = 0; i < n; i++)
art[i] = ars[i];
}
void copy_ptr(double* art, const double* ars, int n)
{
int i;
for (i = 0; i < n; i++)
*(art + i) = *(ars + i);
}
void copy_ptrs(double art[], const double ars[], double* end)
{
while (ars < end)
*art++ = *ars++;
}
void show_arr(const double* arr, int n)
{
int i;
for (i = 0; i < n; i++)
printf("%g ", arr[i]);
printf("\n");
}
第3题
#include <stdio.h>
int max_arr(const int*, int);
void show_arr(const int*, int);
#define LEN 10
int main(void)
{
int orig[LEN] = { 1,2,3,4,12,6,7,8,9,10 };
show_arr(orig, LEN);
printf("max = %d\n", max_arr(orig, LEN));
return 0;
}
void show_arr(const int* arr, int n)
{
int i;
for (i = 0; i < n; i++)
printf("%d ", arr[i]);
printf("\n");
}
int max_arr(const int* arr, int n)
{
int max = arr[0];
int i;
for (i = 1; i < n; i++)
max = max > arr[i] ? max : arr[i];
return max;
}
第4题
#include <stdio.h>
int maxindex_arr(const double*, int);
void show_arr(const double*, int);
#define LEN 10
int main(void)
{
double orig[LEN] = { 1.1,2,3,4,12,61.3,7,8,9,10 };
show_arr(orig, LEN);
printf("The index of max value is %d\n", maxindex_arr(orig, LEN));
return 0;
}
void show_arr(const double* arr, int n)
{
int i;
for (i = 0; i < n; i++)
printf("%g ", arr[i]);
printf("\n");
}
int maxindex_arr(const double* arr, int n)
{
double max = arr[0];
int maxindex = 0;
int i;
for (i = 1; i < n; i++)
if (max < arr[i])
{
max = arr[i];
maxindex = i;
}
return maxindex;
}
第5题
#include <stdio.h>
double dif_arr(const double*, int);
void show_arr(const double*, int);
#define LEN 10
int main(void)
{
double orig[LEN] = { 1.1,2,3,4,12,61.3,7,8,9,10 };
show_arr(orig, LEN);
printf("The difference of max value and min value is %g\n", dif_arr(orig, LEN));
return 0;
}
void show_arr(const double* arr, int n)
{
int i;
for (i = 0; i < n; i++)
printf("%g ", arr[i]);
printf("\n");
}
double dif_arr(const double* arr, int n)
{
double min = arr[0];
double max = arr[0];
int i;
for (i = 1; i < n; i++)
{
min = arr[i] < min ? arr[i] : min;
max = arr[i] > max ? arr[i] : max;
}
return max - min;
}
第6题
#include <stdio.h>
void show_arr(const double*, int);
void inv_arr(double*, int);
#define LEN 10
int main(void)
{
double orig[LEN] = { 1.1,2,3,4,12,61.3,7,8,9,10 };
printf("The original array:\n");
show_arr(orig, LEN);
inv_arr(orig, LEN);
printf("The inverted array:\n");
show_arr(orig, LEN);
return 0;
}
void show_arr(const double* arr, int n)
{
int i;
for (i = 0; i < n; i++)
printf("%g ", arr[i]);
printf("\n");
}
void inv_arr(double* arr, int n)
{
double temp;
int i;
for (i = 0; i < n / 2; i++)
{
temp = arr[i];
arr[i] = arr[n - 1 - i];
arr[n - 1 - i] = temp;
}
}
第7题
#include <stdio.h>
void copy_arr(double*, const double*, int);
#define ROWS 2
#define COLS 5
int main(void)
{
double orig[ROWS][COLS] = { {1.1,2,3,4,12},{61.3,7,8,9,10} };
double target[ROWS][COLS];
int i, j;
int index;
for (index = 0; index < ROWS; index++)
copy_arr(target[index], orig[index], COLS);
printf("target array:\n");
for (i = 0; i < ROWS; i++)
{
for (j = 0; j < COLS; j++)
printf("%g ", target[i][j]);
printf("\n");
}
return 0;
}
void copy_arr(double* art, const double* ars, int n)
{
int i;
for (i = 0; i < n; i++)
art[i] = ars[i];
}
第8题
#include <stdio.h>
void copy_arr(double*, const double*, int);
void show_arr(const double*, int);
#define LEN1 7
#define LEN2 3
int main(void)
{
double orig[LEN1] = { 1.1,2,3,4,12,61.3,7 };
double target[LEN2];
copy_arr(target, orig + 2, LEN2);
printf("original array:\n");
show_arr(orig, LEN1);
printf("target array:\n");
show_arr(target, LEN2);
return 0;
}
void copy_arr(double* art, const double* ars, int n)
{
int i;
for (i = 0; i < n; i++)
art[i] = ars[i];
}
void show_arr(const double* arr, int n)
{
int i;
for (i = 0; i < n; i++)
printf("%g ", arr[i]);
printf("\n");
}
第9题
// 变长数组版本(本人IDE不支持,无法编译)
#include <stdio.h>
#define ROWS 3
#define COLS 5
void copy_vla(int rows, int cols, double art[rows][cols], const double ars[rows][cols]);
void show_vla(int rows, int cols, const double arr[rows][cols]);
int main(void)
{
double source[ROWS][COLS] = {
{1,2,3,4,5},
{6,7,8,-2,10},
{11,12,13,14,15}
};
double target[ROWS][COLS];
copy_vla(ROWS, COLS, target, source);
printf("source array:\n");
show_vla(ROWS, COLS, source);
printf("target array:\n");
show_vla(ROWS, COLS, target);
return 0;
}
void copy_vla(int rows, int cols, double art[rows][cols], const double ars[rows][cols])
{
int i, j;
for (i = 0; i < rows; i++)
for (j = 0; j < cols; j++)
art[i][j] = ars[i][j];
}
void show_vla(int rows, int cols, const double arr[rows][cols])
{
int i, j;
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
printf("%g ", arr[i][j]);
printf("\n");
}
printf("\n");
}
// 传统数组版本
#include <stdio.h>
#define ROWS 3
#define COLS 5
void copy_arr(double[][COLS], const double[][COLS], int);
void show_arr(const double[][COLS], int);
int main(void)
{
double source[ROWS][COLS] = {
{1,2,3,4,5},
{6,7,8,-2,10},
{11,12,13,14,15}
};
double target[ROWS][COLS];
copy_arr(target, source, ROWS);
printf("source array:\n");
show_arr(source, ROWS);
printf("target array:\n");
show_arr(target, ROWS);
return 0;
}
void copy_arr(double art[][COLS], const double ars[][COLS], int n)
{
int i, j;
for (i = 0; i < n; i++)
for (j = 0; j < COLS; j++)
art[i][j] = ars[i][j];
}
void show_arr(const double arr[][COLS], int n)
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < COLS; j++)
printf("%g ", arr[i][j]);
printf("\n");
}
printf("\n");
}
第10题
#include <stdio.h>
#define LEN 4
void add_arr(const int[], const int[], int[], int);
void show_arr(const int[], int);
int main(void)
{
int arr1[LEN] = { 2,4,5,8 };
int arr2[LEN] = { 1,0,4,6 };
int arr3[LEN];
add_arr(arr1, arr2, arr3, LEN);
printf("array 1:\n");
show_arr(arr1, LEN);
printf("array 2:\n");
show_arr(arr2, LEN);
printf("The added array:\n");
show_arr(arr3, LEN);
return 0;
}
void add_arr(const int arr1[], const int arr2[], int arr3[], int n)
{
int i;
for (i = 0; i < n; i++)
arr3[i] = arr1[i] + arr2[i];
}
void show_arr(const int arr[], int n)
{
int i;
for (i = 0; i < n; i++)
printf("%d ", arr[i]);
printf("\n");
}
第11题
#include <stdio.h>
#define ROWS 3
#define COLS 5
void dou_arr(int[][COLS], int);
void show_arr(const int[][COLS], int);
int main(void)
{
int orig[ROWS][COLS] = {
{1,2,3,4,5},
{6,7,8,-2,10},
{11,12,13,14,15}
};
printf("Original array:\n");
show_arr(orig, ROWS);
dou_arr(orig, ROWS);
printf("Doubled array:\n");
show_arr(orig, ROWS);
return 0;
}
void dou_arr(int arr[][COLS], int n)
{
int i, j;
for (i = 0; i < n; i++)
for (j = 0; j < COLS; j++)
arr[i][j] *= 2;
}
void show_arr(const int arr[][COLS], int n)
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < COLS; j++)
printf("%d ", arr[i][j]);
printf("\n");
}
printf("\n");
}
第12题
#include <stdio.h>
#define MONTHS 12
#define YEARS 5
void rainfall_year(const float[][MONTHS], int);
void rainfall_month(const float[][MONTHS], int);
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}
};
rainfall_year(rain, YEARS);
rainfall_month(rain, YEARS);
return 0;
}
void rainfall_year(const float arr[][MONTHS], int years)
{
int y, m;
float subtot, total;
printf(" YEAR RAINFALL (inches)\n");
for (y = 0, total = 0; y < years; y++)
{
for (m = 0, subtot = 0; m < MONTHS; m++)
subtot += arr[y][m];
printf("%5d %15.1f\n", 2010 + y, subtot);
total += subtot;
}
printf("\nThe yearly average is %.1f inches.\n\n",
total / years);
}
void rainfall_month(const float arr[][MONTHS], int years)
{
int y, m;
float subtot, total;
printf("MONTHLY AVERAGES:\n\n");
printf(" Jan Feb Mar Apr May Jun Jul Aug Sep Oct ");
printf(" Nov Dec\n");
for (m = 0; m < MONTHS; m++)
{
for (y = 0, subtot = 0; y < years; y++)
subtot += arr[y][m];
printf("%4.1f ", subtot / years);
}
printf("\n");
}
第13题
#include <stdio.h>
#define ROWS 3
#define COLS 5
void store(double[][COLS], int);
void show_arr(const double[][COLS], int);
double average(const double[], int);
double average2d(const double[][COLS], int);
double max(const double[][COLS], int);
int main(void)
{
double stuff[ROWS][COLS];
int row;
store(stuff, ROWS);
printf("\narray contents:\n");
show_arr(stuff, ROWS);
for (row = 0; row < ROWS; row++)
printf("average value of row %d: %g\n", row + 1, average(stuff[row], COLS));
printf("average value of all rows: %g\n", average2d(stuff, ROWS));
printf("lagest value = %g\n", max(stuff, ROWS));
printf("Bye.\n");
return 0;
}
void store(double ar[][COLS], int n)
{
int i, j;
for (i = 0; i < n; i++)
{
printf("Enter %d numbers for row %d:\n", COLS, i + 1);
for (j = 0; j < COLS; j++)
{
printf("Enter value #%d: ", j + 1);
scanf("%lf", &ar[i][j]);
}
}
}
void show_arr(const double ar[][COLS], int n)
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < COLS; j++)
printf("%g ", ar[i][j]);
printf("\n");
}
printf("\n");
}
double average(const double ar[], int n)
{
int i;
double sum = 0;
for (i = 0; i < n; i++)
sum += ar[i];
return sum / n;
}
double average2d(const double ar[][COLS], int n)
{
int i, j;
double sum = 0;
for (i = 0; i < n; i++)
for (j = 0; j < COLS; j++)
sum += ar[i][j];
return sum / (n * COLS);
}
double max(const double ar[][COLS], int n)
{
int i, j;
double max = ar[0][0];
for (i = 0; i < n; i++)
for (j = 0; j < COLS; j++)
if (ar[i][j] > max)
max = ar[i][j];
return max;
}
第14题
// 本人IDE不支持变长数组,无法编译
#include <stdio.h>
#define ROWS 3
#define COLS 5
void store(int r,int c,double ar[r][c]);
void show_arr(int r, int c, const double ar[r][c]);
double average(const double[], int);
double average2d(int r, int c, const double ar[r][c]);
double max(int r, int c, const double ar[r][c]);
int main(void)
{
double stuff[ROWS][COLS];
int row;
store(ROWS, COLS, stuff);
printf("\narray contents:\n");
show_arr(ROWS, COLS, stuff);
for (row = 0; row < ROWS; row++)
printf("average value of row %d: %g\n", row + 1, average(stuff[row], COLS));
printf("average value of all rows: %g\n", average2d(ROWS, COLS, stuff));
printf("lagest value = %g\n", max(ROWS, COLS, stuff));
printf("Bye.\n");
return 0;
}
void store(int r, int c, double ar[r][c])
{
int i, j;
for (i = 0; i < r; i++)
{
printf("Enter %d numbers for row %d:\n", c + 1, i + 1);
for (j = 0; j < c; j++)
{
printf("Enter value #%d: ", j + 1);
scanf("%lf", &ar[i][j]);
}
}
}
void show_arr(int r, int c, const double ar[r][c])
{
int i, j;
for (i = 0; i < r; i++)
{
for (j = 0; j < c; j++)
printf("%g ", ar[i][j]);
printf("\n");
}
printf("\n");
}
double average(const double ar[], int n)
{
int i;
double sum = 0;
for (i = 0; i < n; i++)
sum += ar[i];
return sum / n;
}
double average2d(int r, int c, const double ar[r][c])
{
int i, j;
double sum = 0;
for (i = 0; i < r; i++)
for (j = 0; j < c; j++)
sum += ar[i][j];
return sum / (r * c);
}
double max(int r, int c, const double ar[r][c])
{
int i, j;
double max = ar[0][0];
for (i = 0; i < r; i++)
for (j = 0; j < c; j++)
if (ar[i][j] > max)
max = ar[i][j];
return max;
}