10-1
#include <stdio.h>
#define MONTHS 12 // number of months in a year
#define YEARS 5 // number of years of data
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}
};
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 < 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 / 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 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");
return 0;
}
10-2
#include <stdio.h>
void copy_arr(double arr1[], double arr2[], int n);
void copy_ptr(double* pt1, double* pt2, int n);
void copy_ptrs(double* pt1, double* start, double* end);
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);
return 0;
}
void copy_arr(double arr2[], double arr1[], int n)
{
for (int i = 0; i < n; i++)
{
arr2[i] = arr1[i];
printf("%4.1lf", arr2[i]);
}
printf("\n");
}
void copy_ptr(double *pt2, double *pt1, int n)
{
for (int i = 0; i < n; pt1++, pt2++, i++)
{
*pt2 = *pt1;
printf("%4.1lf", *pt2);
}
printf("\n");
}
void copy_ptrs(double* pt1, double* start, double * end)
{
while (start < end)
{
*pt1 = *start;
printf("%4.1lf", *pt1);
pt1++;
start++;
}
printf("\n");
}
10-3
#include <stdio.h>
void Find_Biggest(int arr[], int m);
int main(void)
{
int digits[100] = { 2,4,12,65,34,1000 };
Find_Biggest(digits,100);
return 0;
}
void Find_Biggest(int arr[], int m)
{
int biggest = arr[0];
for (int i = 1; i < m; i++)
{
if (biggest < arr[i])
biggest = arr[i];
}
printf("数组中最大的数为%d", biggest);
}
10-4
#include <stdio.h>
void Find_Biggest(double arr[], int m);
int main(void)
{
double digits[50] = { 2,4,12,65,34,1000 };
Find_Biggest(digits,50);
return 0;
}
void Find_Biggest(double arr[], int m)
{
double biggest = arr[0];
int flag = 0;
for (int i = 1; i < m; i++)
{
if (biggest < arr[i])
{
biggest = arr[i];
flag = i;
}
}
printf("数组中最大值的下标为%d",flag);
}
10-5
#include <stdio.h>
void Find_Biggest_Dvalue(double arr[], int m);
int main(void)
{
double digits[6] = { 2,4,12,65,34,1000 };
Find_Biggest_Dvalue(digits,6);
return 0;
}
void Find_Biggest_Dvalue(double arr[], int m)
{
double biggest = arr[0];
double smallest = arr[0];
for (int i = 1; i < m; i++)
{
if (biggest < arr[i])
{
biggest = arr[i];
}
if (smallest > arr[i])
{
smallest = arr[i];
}
}
printf("数组中最大值和最小值的差值为%.1lf",biggest-smallest);
}
10-6
#include <stdio.h>
void Reverse_Order(double arr[], int m);
int main(void)
{
double digits[6] = { 2,4,12,65,34,1000 };
Reverse_Order(digits,6);
return 0;
}
void Reverse_Order(double arr[], int m)
{
for (int i = m-1; i>=0; i--)
{
printf("%5.1lf", arr[i]);
}
}
10-7
#include <stdio.h>
void copy_ptrs(double* pt1, double* start, double* end);
void copy_2D(double(*pt1)[4], double(*pt2)[4], int m);
int main(void)
{
double source[6][4] = { {2,4,12,65},
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16},
{17,18,19,20}
};
double target[6][4];
copy_2D(target, source, 6);
return 0;
}
void copy_2D(double(*pt1)[4],double(*pt2)[4],int m)
{
for (int i = 0; i < m; i++)
{
copy_ptrs(pt1+i, pt2+i, *(pt2+i) + 4);
}
}
void copy_ptrs(double* pt1, double* start, double* end)
{
while (start < end)
{
*pt1 = *start;
printf("%5.1lf", *pt1);
pt1++;
start++;
}
printf("\n");
}
10-8
#include <stdio.h>
void copy_ptrs(double* pt1, double* start, double* end);
int main(void)
{
double source[7] = {1,2,3,4,5,6,7};
double target[3];
copy_ptrs(target, source + 2, source + 5);
return 0;
}
void copy_ptrs(double* pt1, double* start, double* end)
{
while (start < end)
{
*pt1 = *start;
printf("%5.1lf", *pt1);
pt1++;
start++;
}
printf("\n");
}
10-9 ----------无法编译变长数组,只能用处理N*5的数组。
#include <stdio.h>
void copy(double source[][5], double target[][5], int m);
void show(double ar1[][5], double ar2[][5], int m);
int main(void)
{
double source[3][5] = {
{1,2,3,4,5},
{6,7,8,9,10},
{11,12,13,14,15}
};
double target[3][5];
copy(source,target,3);
show(source, target, 3);
return 0;
}
void copy( double source[ ][5],double target[][5],int m)
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < 5; j++)
target[i][j] = source[i][j];
}
}
void show(double ar1[][5], double ar2[][5], int m)
{
printf("第一个数组为:\n");
for (int i = 0; i < m; i++)
{
for (int j = 0; j < 5; j++)
printf("%5.1lf", ar1[i][j]);
printf("\n");
}
printf("第二个数组为:\n");
for (int i = 0; i < m; i++)
{
for (int j = 0; j < 5; j++)
printf("%5.1lf", ar1[i][j]);
printf("\n");
}
}
10-10
#include <stdio.h>
void sum(int arr1[], int arr2[], int arr3[], int m);
int main(void)
{
int arr1[5] = { 1,2,3,4,5 };
int arr2[5] = { 1,2,3,4,5 };
int arr3[5];
sum(arr1, arr2, arr3, 5);
return 0;
}
void sum(int arr1[], int arr2[], int arr3[], int m)
{
for (int i = 0; i < m; i++)
{
arr3[i] = arr1[i] + arr2[i];
printf("%3d", arr3[i]);
}
}
10-11
#include <stdio.h>
void show(int arr1[][5], int m);
void Two_Times(int source[][5], int target[][5], int m);
int main(void)
{
int arr1[3][5] = {
{1,2,3,4,5},
{6,7,8,9,10},
{11,12,13,14,15}
};
int arr2[3][5];
printf("原数组为:\n");
show(arr1, 3);
Two_Times(arr1,arr2,3);
printf("变换后的数组为:\n");
show(arr2, 3);
return 0;
}
void show(int arr1[][5], int m)
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < 5; j++)
printf("%3d", arr1[i][j]);
printf("\n");
}
}
void Two_Times(int source[][5],int target [][5],int m)
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < 5; j++)
target[i][j]= 2* source[i][j];
}
}
10-12
#include <stdio.h>
void Average_year(double arr[][12], int m);
void Average_month(double arr[][12], int m);
int main(void)
{
double rain[5][12] =
{
{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}
};
Average_year(rain,5);
Average_month(rain,5);
return 0;
}
void Average_year( double arr[][12],int m)
{
double average = 0;
double total = 0;
for (int i = 0; i < m; i++)
{
double sum = 0;
for (int j = 0; j < 12; j++)
{
sum += arr[i][j];
total += arr[i][j];
}
printf("%d的年降雨量为%lf\n", i + 2010, sum);
}
printf("年平均降雨量为%lf.\n", total / 5);
}
void Average_month(double arr[][12],int m)
{
for (int i = 0; i < 12; i++)
{
double sum = 0;
for (int j = 0; j < m; j++)
{
sum += arr[j][i];
}
printf("%d月的平均降雨量为%lf\n",1+i, sum/5);
}
}
10-13--------输出函数不是一个
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void storage(double arr[][5], int m);
double Average_row(double arr[], int m);
void Average(double arr[][5], int m);
double Find_max(double arr[][5], int m);
void show_result(double arr[][5], int m);
int main(void)
{
double source[3][5];
storage(source,3);
for (int i = 0; i < 3; i++)
{
Average_row(source[i], 5);
}
Average(source, 3);
Find_max(source, 3);
show_result(source, 3);
return 0;
}
void storage(double arr[][5], int m)
{
for (int i = 0; i < m; i++)
{
printf("请输入1组数,每组数包含5个double类型的数:\n");
for (int j = 0; j < 5; j++)
scanf("%lf", &arr[i][j]);
}
}
double Average_row(double arr[], int m)
{
double sum = 0;
for (int i = 0; i < m; i++)
{
sum += arr[i];
}
printf("每行的平均值为%lf.\n", sum / m);
return sum / 5;
}
void Average(double arr[][5], int m)
{
double sum = 0;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < 5; j++)
{
sum += arr[i][j];
}
}
printf("所有数据平均值为%lf.\n", sum /(m*5) );
}
double Find_max(double arr[][5], int m)
{
double max = arr[0][0];
for(int i = 0;i< m;i++)
for (int j = 0; j < 5; j++)
{
if (max < arr[i][j])
max = arr[i][j];
}
printf("所有数据的最大值为%lf.\n",max);
return max;
}
void show_result(double arr[][5], int m)
{
printf("let us check the arreys:\n");
printf("the arrey you input is ;\n");
for (int i = 0; i < m; i++)
{
for (int j = 0; j < 5; j++)
printf("%lf", arr[i][j]);
printf("\n");
}
}
10-13---输出函数是一个
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void storage(double arr[][5], int m);
double Average_row(double arr[], int m);
double Average(double arr[][5], int m);
double Find_max(double arr[][5], int m);
void show_result(double arr[][5], int m);
int main(void)
{
double source[3][5];
storage(source, 3);
show_result(source, 3);
return 0;
}
void storage(double arr[][5], int m)
{
for (int i = 0; i < m; i++)
{
printf("请输入1组数,每组数包含5个double类型的数:\n");
for (int j = 0; j < 5; j++)
scanf("%lf", &arr[i][j]);
}
}
double Average_row(double arr[], int m)
{
double sum = 0;
for (int i = 0; i < m; i++)
{
sum += arr[i];
}
// printf("每行的平均值为%lf.\n", sum / m);
return sum / 5;
}
double Average(double arr[][5], int m)
{
double sum = 0;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < 5; j++)
{
sum += arr[i][j];
}
}
//printf("所有数据平均值为%lf.\n", sum / (m * 5));
return (sum / (m * 5));
}
double Find_max(double arr[][5], int m)
{
double max = arr[0][0];
for (int i = 0; i < m; i++)
for (int j = 0; j < 5; j++)
{
if (max < arr[i][j])
max = arr[i][j];
}
//printf("所有数据的最大值为%lf.\n", max);
return max;
}
void show_result(double arr[][5], int m)
{
printf("let us check the arreys:\n");
printf("the arrey you input is ;\n");
for (int i = 0; i < m; i++)
{
for (int j = 0; j < 5; j++)
printf("%5.1lf", arr[i][j]);
printf("\n");
}
// 最大值
printf("所有数据的最大值%3.1lf\n", Find_max(arr, 3));
//平均值
printf("每组的平均值%3.1lf\n", Average(arr, 3));
//每组平均值
for (int i = 0; i < 3; i++)
{
printf("第%d行的平均值为%3.1lf\n", i + 1, Average_row(arr[i], 5));
}
}