//10.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); //原爲: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;
}
//10.2
#include <stdio.h>
#include <stdlib.h>
void copy1(double *a1, double *source, int n);
void copy2(double *a2, double *source, int n);
void copy3( double *source, double *start,double*end);
void printcopy(double *a,int n);
int main()
{
int n;
double source[5]= {1.1,2.2,3.3,4.4,5.5};
double a1[5];
double a2[5];
double a3[5];
copy1(a1,source,5);
copy2(a2,source,5);
copy3(source,a3,a3+5);
printcopy(1,n);
printcopy(2,n);
printcopy(3,n);
return 0;
}
void copy1(double *a1, double *source, int n)
{
int i;
for(i=0; i<n; i++)
{
a1[i]=source[i];
}
}
void copy2(double *a1, double *source, int n)
{
int i;
for(i=0; i<n; i++)
*(a1+i)=*(source+i);
}
void copy3(double *source,double*start,double*end)
{
double *i;
for(i=start; i<end; i++)
{
*(start++)=*i;
}
}
void printcopy(double *a,int n)
{
int i;
printf("1?2?3?:\n");
for(i=0; i<5; i++)
{
printf("%.2lf",a[i]);
}
printf("\n");
}
//10.3
#include<stdio.h>
int find_max(int arry[], int n);
int main()
{
int arr[5] = { 1, 2, 3 , 4, 5 };
int max = find_max(arr , 5);
printf("%d", max);
return 0;
}
int find_max(int arry[], int n)
{int i;
int x = arry[0];
for ( i = 0; i < n; i++)
{
if (x < arry[i])
x = arry[i];
}
return x;
}
//10.4
#include<stdio.h>
int max_bot(double *arry, int n)
{
int max = 0;
int temp = arry[0];
for (int i = 0; i < n; i++)
{
if (temp < arry[i])
{
temp = arry[i];
max = i;
}
}
return max;
}
int main()
{
double arry[6] = { 2.1, 3.4, 5.6, 2.3, 8.7, 1.2 };
int max = max_bot(arry , 6);
printf("%d", max);
return 0;
}
//10.5
#include<stdio.h>
double minus(double arry[] , int n)
{
double max = arry[0];
double min = arry[0];
for (int i = 0; i < n; i++)
{
if (max < arry[i])
max = arry[i];
if (min > arry[i])
min = arry[i];
}
double two_minus = max - min;
return two_minus;
}
int main()
{
double arry[6] = { 2.1, 3.4, 5.6, 2.3, 8.7, 1.2 };
double result = minus(arry , 6);
printf("%.2lf", result);
return 0;
}
//10.6
#include<stdio.h>
void flashback(double arry[] , int n)
{
double temp = arry[n];
for (int i = 0; i < n/2; i++)
{
double temp = arry[i];
arry[i] = arry[n - 1 - i];
arry[n - 1 - i] = temp;
}
}
int main()
{
double arry[6] = { 2.1, 3.4, 5.6, 2.3, 8.7, 1.2 };
flashback(arry , 6);
for (int i = 0; i < 6; i++)
printf("%.2lf ", arry[i]);
printf("\n");
return 0;
}
//10.7
#include<stdio.h>
void copy_arr(double *target, double *source, int n)
{
for (int i = 0; i < n; i++)
target[i] = source[i];
}
int main()
{
double arr[3][3] = {
{ 1.0, 2.0, 3.0 },
{ 4.0, 5.0, 6.0 },
{ 7.0, 8.0, 9.0 },
};
double arr_copy[3][3];
for (int i = 0; i < 3; i++)
{
copy_arr(arr_copy[i] , arr[i] , 3);
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
printf("%.2lf ", arr_copy[i][j]);
printf("\n");
}
}
//10.8
#include<stdio.h>
void copy_ptrs(double *target, double *source_begin, double *source_end)
{
for (double *i = source_begin; i < source_end; i++)
*(target++) = *i;
}
int main()
{
double source[7] = { 1, 2, 3, 4, 5, 6, 7 };
double target[3] = { 0 };
copy_ptrs(target , source + 2 , source + 5); // 傳址
for (int i = 0; i < 3; i++)
{
printf("%.2lf ", target[i]);
}
return 0;
}
/* Nineth */
#include<stdio.h>
void arr_copy(double source[][5] , double target[][5] , int n)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < 5; j++)
target[i][j] = source[i][j];
}
}
void arr_print(double source[][5] , int n)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < 5; j++)
printf("%.2lf ", source[i][j]);
}
}
int main()
{
double source[3][5] = {
{ 1.2, 2.3, 3.4, 5.6, 7.8 },
{ 8.7, 6.5, 4.3, 3.2, 2.1 },
{ 3.1, 4.5, 5.6, 7.6, 2.4 },
};
double target[3][5] = { 0 };
arr_copy(source , target , 3);
arr_print(target , 3);
return 0;
}
//10.10
#include<stdio.h>
void arry(double source_1[] , double source_2[] , double target[] , int n)
{
for (int i = 0; i < n; i++)
{
target[i] = source_1[i] + source_2[i];
}
}
int main()
{
double source_1[3] = { 1, 2, 3 };
double source_2[3] = { 4, 5, 6 };
double target[3] = { 0 };
arry(source_1 , source_2 , target , 3);
for (int i = 0; i < 3; i++)
printf("%.2lf ", target[i]);
}
//10.11
#include<stdio.h>
void arr_print(int arr[][5] , int n)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < 5; j++)
printf("%d ", arr[i][j]);
}
printf("\n");
}
void arr_double(int arr[][5] , int n)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < 5; j++)
arr[i][j] *= 2;
}
}
int main()
{
int arr[3][5] = {
{ 1, 2, 3, 5, 7 },
{ 8, 6, 4, 3, 2 },
{ 3, 4, 5, 7, 2 },
};
arr_print(arr , 3);
arr_double(arr , 3);
arr_print(arr , 3);
return 0;
}
//10.12
#include<stdio.h>
#define MONTHS 12
#define YEARS 5
void year_sum_1(const float rain[][MONTHS])
{
int year, month;
float subtot, total;
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");
}
void year_sum_2(const float rain[][MONTHS])
{
int year, month;
float subtot, total;
for (month = 0; month < MONTHS; month++)
{
for (year = 0, subtot = 0; year < YEARS; year++)
subtot += rain[year][month];
printf("%4.1f ",subtot / YEARS);
}
}
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 },
};
printf(" YEAR RAINFALL (inches)\n");
year_sum_1(rain);
year_sum_2(rain);
printf("\n");
return 0;
}
//10.13
#include<stdio.h>
void input(double arr[][5] , int n);
double aver_part(double arr[] , int n);
double aver_all(double arr[][5] , int n);
double max(double arr[][5] , int n);
void res_print(double arr[][5] , int n);
int main()
{
double arr[3][5] = { 0 };int i;
printf("Enter three sets of Numbers, each containing five double-type Numbers: \n");
input(arr , 3);
for ( i = 0; i < 3; i++)
{
printf("The average of %d row is %.2lf\n", i + 1, aver_part(arr[i] , 3));
}
printf("The average of all the data is %.2lf\n", aver_all(arr , 3));
printf("Where the largest number is %.2lf\n", max(arr , 3));
res_print(arr , 3);
return 0;
}
void input(double arr[][5] , int n)
{int i,j;
for (i = 0; i < n; i++)
{
for ( j = 0; j < 5; j++)
scanf("%lf", &arr[i][j]);
}
}
double aver_part(double arr[] , int n)
{int i;
double sum;
for ( i = 0; i < n; i++)
sum += arr[i];
return (sum / n);
}
double aver_all(double arr[][5] , int n)
{int i,j;
double sum = 0;
for ( i = 0; i < n; i++)
{
for ( j = 0; j < 5; j++)
sum += arr[i][j];
}
return (sum / (n*5));
}
double max(double arr[][5] , int n)
{int i,j;
double max = arr[0][0];
for ( i = 0; i < n; i++)
{
for (j = 0; j < 5; j++)
{
if (max < arr[i][j])
max = arr[i][j];
}
}
return max;
}
void res_print(double arr[][5] , int n)
{int i,j;
for ( i = 0; i < n; i++)
{
for ( j = 0; j < 5; j++)
printf("%.2lf ", arr[i][j]);
printf("\n");
}
printf("\n");
}