1.
/* Programming Exercise 10-1 */
#include <stdio.h>
#define MONTHS 12 // number of months in a year
#define YRS 5 // number of years of data
int main(void)
{
// initializing rainfall data for 2010 - 2014
const float rain[YRS][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 < YRS; 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/YRS);
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 < YRS; year++)
subtot += *(*(rain + year) + month);
printf("%4.1f", subtot/YRS);
}
printf("\n");
return 0;
}
2.
#include <stdio.h>
void copy_arr(double *pt1,double *ps,int n);
void copy_ptr(double *pt2,double *ps,int n);
void copy_ptrs(double *pt3,double *ps_start,double *ps_end);
void show_ar(double *pt,int n);
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);
show_ar(target1,5);
copy_ptr(target2,source,5);
show_ar(target2,5);
copy_ptrs(target3,source,source + 5);
show_ar(target3,5);
return 0;
}
void copy_arr(double *pt1,double *ps,int n)
{
int j;
for (j = 0;j < n;j++)
pt1[j]= ps[j];
return;
}
void copy_ptr(double *pt2,double *ps,int n)
{
int j;
for (j = 0;j < n;j++)
*(pt2 + j) = *(ps + j);
return;
}
void copy_ptrs(double *pt3,double *ps_start,double *ps_end)
{
while (ps_start < ps_end)
*(pt3++) = *(ps_start++);
return;
}
void show_ar(double *pt,int n)
{
int j;
for (j = 0;j < n;j++)
printf(" %.1f",*(pt + j));
printf("\n");
}
3.
/* Programming Exercise 10-3 */
#include <stdio.h>
#define LEN 10
int max_arr(const int ar[], int n);
void show_arr(const int ar[], int n);
int main(void)
{
int orig[LEN] = {1,2,3,4,12,6,7,8,9,10};
int max;
show_arr(orig, LEN);
max = max_arr(orig, LEN);
printf("%d = largest value\n", max);
return 0;
}
int max_arr(const int ar[], int n)
{
int i;
int max = ar[0];
/* don't use 0 as initial max value -- fails if all array values are neg */
for (i = 1; i < n; i++)
if (max < ar[i])
max = ar[i];
return max;
}
void show_arr(const int ar[], int n)
{
int i;
for (i = 0; i < n; i++)
printf("%d ", ar[i]);
putchar('\n');
}
4.
/* Programming Exercise 10-4 */
#include <stdio.h>
#define LEN 10
int max_index_arr(const int ar[], int n);
void show_arr(const int ar[], int n);
int main(void)
{
int orig[LEN] = {1,2,3,4,12,6,7,8,9,10};
int max_index;
show_arr(orig, LEN);
max_index = max_index_arr(orig, LEN);
printf("%d = largest value's index\n", max_index);
return 0;
}
int max_index_arr(const int ar[], int n)
{
int i;
int max = ar[0];
int max_index = 0;
/* don't use 0 as initial max value -- fails if all array values are neg */
for (i = 1; i < n; i++)
{
if (max < ar[i])
{
max = ar[i];
max_index = i;
}
}
return max_index;
}
void show_arr(const int ar[], int n)
{
int i;
for (i = 0; i < n; i++)
printf("%d ", ar[i]);
putchar('\n');
}
5.
/* Programming Exercise 10-5 */
#include <stdio.h>
#define LEN 10
double max_diff(const double ar[], int n);
void show_arr(const double ar[], int n);
int main(void)
{
double orig[LEN] = {1.1,2,3,4,12,61.3,7,8,9,10};
double max;
show_arr(orig, LEN);
max = max_diff(orig, LEN);
printf("%g = maximum difference\n", max);
return 0;
}
double max_diff(const double ar[], int n)
{
int i;
double max = ar[0];
double min = ar[0];
for (i = 1; i < n; i++)
{
if (max < ar[i])
max = ar[i];
else if (min > ar[i])
min = ar[i];
}
return max - min;
}
void show_arr(const double ar[], int n)
{
int i;
for (i = 0; i < n; i++)
printf("%g ", ar[i]);
putchar('\n');
}
6.
#include <stdio.h>
#define LEN 10
void sort(double ar[], int n);
void show_arr(const double ar[], int n);
int main(void)
{
double orig[LEN] = {1.1,2,3,4,12,61.3,7,8,9,10};
show_arr(orig, LEN);
sort(orig,LEN);
show_arr(orig, LEN);
return 0;
}
void sort(double ar[], int n)
{
int i;
double temp;
for (i = 0;i < n / 2 ;i++ )
{
temp = ar[i];
ar[i] = ar[n-i-1];
ar[n-i-1] = temp;
}
return;
}
void show_arr(const double ar[], int n)
{
int i;
for (i = 0; i < n; i++)
printf("%g ", ar[i]);
putchar('\n');
}
7
#include <stdio.h>
#define ROWS 5
#define COLS 12
void show_arr(const double ar[][COLS], int n);
void copy_arr(double (*pt)[COLS],double (*po)[COLS],int n);
int main(void)
{
double orig[ROWS][COLS] =
{
{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}
};
double target[ROWS][COLS] = {0};
printf("orig[ROWS][COLS]=\n");
show_arr(orig, ROWS);
printf("target[ROWS][COLS]=\n");
show_arr(target, ROWS);
copy_arr(target,orig,5);
printf("After copy\ntarget[ROWS][COLS]=\n");
show_arr(target, ROWS);
return 0;
}
void copy_arr(double (*pt)[COLS],double (*po)[COLS],int n)
{
int i,j;
for (i = 0;i < n;i++)
{
for (j = 0;j < COLS;j++ )
{
pt[i][j]= po[i][j];
}
}
return;
}
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("%.1f ", ar[i][j]);
}
putchar('\n');
}
return;
}
8.
/* Programming Exercise 10-8 */
#include <stdio.h>
#define LEN1 7
#define LEN2 3
void copy_arr(int ar1[], const int ar2[], int n);
void show_arr(const int [], int);
int main(void)
{
int orig[LEN1] = {1,2,3,4,5,6,7};
int copy[LEN2];
show_arr(orig, LEN1);
copy_arr(copy, orig + 2, LEN2);
show_arr(copy, LEN2);
return 0;
}
void copy_arr(int ar1[], const int ar2[], int n)
{
int i;
for (i = 0; i < n; i++)
ar1[i] = ar2[i];
}
void show_arr(const int ar[], int n)
{
int i;
for (i = 0; i < n; i++)
printf("%d ", ar[i]);
putchar('\n');
}
9.
#include <stdio.h>
#define ROWS 5
#define COLS 12
void show_arr(const double ar[][COLS], int n);
void copy_arr(double (*pt)[COLS],double (*po)[COLS],int n);
int main(void)
{
double orig[ROWS][COLS] =
{
{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}
};
double target[ROWS][COLS] = {0};
printf("orig[ROWS][COLS]=\n");
show_arr(orig, ROWS);
printf("target[ROWS][COLS]=\n");
show_arr(target, ROWS);
copy_arr(target,orig,5);
printf("After copy\ntarget[ROWS][COLS]=\n");
show_arr(target, ROWS);
return 0;
}
void copy_arr(double (*pt)[COLS],double (*po)[COLS],int n)
{
int i,j;
for (i = 0;i < n;i++)
{
for (j = 0;j < COLS;j++ )
{
pt[i][j]= po[i][j];
}
}
return;
}
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("%.1f ", ar[i][j]);
}
putchar('\n');
}
return;
}
10.
#include <stdio.h>
void arr_add(int ar1[],int ar2[],int ar3[],int n);
void show_ar(int ar[],int n);
int main(void)
{
int num1[4] = {2,4,5,8};
int num2[4] = {1,0,4,6};
int num3[4] = {0};
show_ar(num1,4);
show_ar(num2,4);
show_ar(num3,4);
arr_add(num1,num2,num3,4);
printf("after add:\n");
show_ar(num3,4);
return 0;
}
void arr_add(int ar1[],int ar2[],int ar3[],int n)
{
int i;
for (i = 0;i <n;i++)
ar3[i] = ar1[i] + ar2[i];
return;
}
void show_ar(int ar[],int n)
{
int j;
for (j = 0;j < n;j++)
printf(" %d",ar[j]);
printf("\n");
return;
}
11.
/* Programming Exercise 10-11 */
#include <stdio.h>
#define ROWS 3
#define COLS 5
void times2(int ar[][COLS], int r);
void showarr2(int ar[][COLS], int r);
int main(void)
{
int stuff[ROWS][COLS] =
{
{1,2,3,4,5},
{6,7,8,-2,10},
{11,12,13,14,15}
};
showarr2(stuff, ROWS);
putchar('\n');
times2(stuff, ROWS);
showarr2(stuff, ROWS);
return 0;
}
void times2(int ar[][COLS], int r)
{
int row, col;
for (row = 0; row < r; row++)
for (col = 0; col < COLS; col++)
ar[row][col] *= 2;
}
void showarr2(int ar[][COLS], int r)
{
int row, col;
for (row = 0; row < r; row++)
{
for (col = 0; col < COLS; col++)
printf("%d ", ar[row][col]);
putchar('\n');
}
}
13
#include <stdio.h>
#define ROWS 3
#define COLS 5
void store(double ar[][COLS], int n);
void showarr2(double ar[][COLS], int n);
double average_row(double ar[], int n);
double average2d(double ar[][COLS], int n);
double max2d(double ar[][COLS], int n);
int main(void)
{
double stuff[ROWS][COLS];
int row;
store(stuff,ROWS);
printf("数组内容:\n");
showarr2(stuff,ROWS);
for (row = 0; row < ROWS; row++)
printf("第%d行的平均值 = %g\n", row, average_row(stuff[row], COLS));
printf("所有元素的平均值 = %g\n", average2d(stuff, ROWS));
printf("数组中最大元素为 = %g\n", max2d(stuff, ROWS));
printf("再见!\n");
return 0;
}
double max2d(double ar[][COLS], int n)
{
int i,j;
int max = ar[0][0];
for (i = 0; i < n; i++)
for (j = 0;j < COLS;j++ )
if (max < ar[i][j])
max = ar[i][j];
return max;
}
double average2d(double ar[][COLS], int n)
{
int i,j;
double sum_total = 0;
for (i = 0;i < n;i++)
for (j = 0;j < COLS;j++)
sum_total += ar[i][j];
if (n * COLS > 0)
return sum_total / (i * j);
else
return 0;
}
double average_row(double ar[], int n)
{
int i;
double sum_row = 0.0;
for (i = 0;i < n;i++)
sum_row += ar[i];
if (n > 0)
return sum_row / n;
else
return 0;
}
void showarr2(double ar[][COLS], int n)
{
int row,col;
for (row = 0; row < n; row++)
{
for (col = 0;col < COLS;col++)
printf("%.1f\t", ar[row][col]);
putchar('\n');
}
return;
}
void store(double ar[][COLS], int n)
{
int i,j;
printf("您需要输入一个%d x %d的double类型数组\n",ROWS,COLS);
for (i = 0;i < n;i++ )
{
for (j = 0;j < COLS;j++)
{
printf("请输入第%d行的第%d个数值: ",i,j);
while (scanf("%lf",&ar[i][j]) != 1)
{
printf("您输入错误,请输入一个double数字:");
while (getchar() != '\n')
continue;
}
}
}
return;
}
14
/* Programming Exercise 10-14 */
#include <stdio.h>
#define ROWS 3
#define COLS 5
void store(double ar[], int n);
double average2d(int rows, int cols, double ar[rows][cols]);
double max2d(int rows, int cols, double ar[rows][cols]);
void showarr2(int rows, int cols, double ar[rows][cols]);
double average(const double ar[], int n);
int main(void)
{
double stuff[ROWS][COLS];
int row;
for (row = 0; row < ROWS; row++)
{
printf("Enter %d numbers for row %d\n", COLS, row + 1);
store(stuff[row], COLS);
}
printf("array contents:\n");
showarr2(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("largest value = %g\n", max2d(ROWS, COLS, stuff));
printf("Bye!\n");
return 0;
}
void store(double ar[], int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("Enter value #%d: ", i + 1);
scanf("%lf", & ar[i]);
}
}
double average2d(int rows, int cols, double ar[rows][cols])
{
int r, c;
double sum = 0.0;
for (r = 0; r < rows; r++)
for (c = 0; c < cols; c++)
sum += ar[r][c];
if (rows * cols > 0)
return sum / (rows * cols);
else
return 0.0;
}
double max2d(int rows, int cols, double ar[rows][cols])
{
int r, c;
double max = ar[0][0];
for (r = 0; r < rows; r++)
for (c = 0; c < cols; c++)
if (max < ar[r][c])
max = ar[r][c];
return max;
}
void showarr2(int rows, int cols, double ar[rows][cols])
{
int row, col;
for (row = 0; row < rows; row++)
{
for (col = 0; col < cols; col++)
printf("%g ", ar[row][col]);
putchar('\n');
}
}
double average(const double ar[], int n)
{
int i;
double sum = 0.0;
for (i = 0; i < n; i++)
sum += ar[i];
if (n > 0)
return sum / n;
else
return 0.0;
}