第一题
#include<stdio.h>
#define MONTHS 12
#define YEARS 5
void sum(int arr[][MONTHS], int);
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);//数组表达法,转变成指针表达法
}//去(rain+year)行的地址,找第month个地址,解引用获得数值
}//其他都是一样的
第二题
#include <stdio.h>
#define LEN 5
//函数声明
void copy_arr(double x[], const double source[], int n);
void copy_ptr(double *x, const double *source, int n);
void copy_ptrs(double *x, const double *source, const double *end);
void show_arr(const double x[], int n);
int main(void)
{
double source[LEN] = {1.1, 2.2, 3.3, 4.4, 5.5};
double target1[LEN];
double target2[LEN];//声明数组
double target3[LEN];
printf("Source array:\n");
show_arr(source, LEN);//调用第一个函数
copy_arr(target1, source, LEN);
printf("Target1: \n");
show_arr(target1, LEN);
copy_ptr(target2, source, LEN);//调用后面几个函数
printf("Target2:\n");
show_arr(target2, LEN);
copy_ptrs(target3, source, source + LEN);
printf("Target3:\n");
show_arr(target3, LEN);
printf("Done.\n");
return 0;
}
void show_arr(const double x[], int n)//带数组表示法的函数
{
for (int i = 0; i < n; i++)
{
printf("%.2lf ", x[i]);
}
putchar('\n');
}
void copy_arr(double x[], const double source[], int n)
{
for (int i = 0; i < n; i++)
{
x[i] = source[i];
}
}
void copy_ptr(double *x, const double *source, int n)
{
for (int i = 0; i < n; i++)
{
*(x + i) = *(source + i);
}
}
void copy_ptrs(double *x, const double *source, const double *end)
{
for (int i = 0; i < end - source; i++)
{
*(x + i) = *(source + i);
}
}
第三题
#include<stdio.h>
void max(int num, int ptr[num]);
int main(void)
{
int number = 5;
int arr[] = { 1, 2, 3, 4, 5 };
max(number, arr);
}
void max(int num, int ptr[num])
{
num = 5;
int i;
for (i = 0; i < num; i++)
{
int m;
int n = 0;
for (m = 0; m < num; m++)
{
if (ptr[i] >= ptr[m])
n = n + 1;
}
if (n == 5)
printf("%d is the biggest\n", ptr[i]);
else
continue;
}
}
第四题
#include <stdio.h>
int max(double [], int);
int main(void)
{
int num = 5;
double arr[] = {1.0, 4.0, 3.0, 2.0, 5.0};
printf("The maximum is %d", max(arr, num));
return 0;
}
int max(double ptr[], int n)
{
int i, j, m = 0;
double ma;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (ptr[i] > ptr[j])
{
m++;
}
}
if (m == 5)
{
ma = ptr[i];
}
}
return i;
}
第五题
#include <stdio.h>
int max(double [], int);
int main(void)
{
int num = 5;
double arr[] = {1.0, 4.0, 3.0, 2.0, 5.0};
printf("The maximum is %d", max(arr, num));
return 0;
}
int max(double ptr[], int n)
{
int i, j, m = 0;
double ma;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (ptr[i] > ptr[j])
{
m++;
}
}
if (m == 5)
{
ma = ptr[i];
}
}
return i;
}
第六题
#include <stdio.h>
void daoxu(double [], int);
int main(void)
{
int i, num = 5;
double zheng[] = {1.1, 2.2, 3.3, 4.4, 5.5};
printf("Before:\n");
show_array(zheng, num);
daoxu(zheng, num);
printf("After:\n");
show_array(zheng, num);
return 0;
}
void daoxu(double arr[], int n)
{
int i, k;
double ptr[n];
for (i = 0, k = 4; i < n, k > -1; i++, k--)
{
ptr[k] = arr[i];
}
for (i = 0; i < n; i++)
{
arr[i] = ptr[i];
}
return;
}
void show_array(const double show[], int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("%.2lf ", show[i]);
}
printf("\n");
}
第七题
#include <stdio.h>
void copy(double arr[][5], double ptr[][5], int);
void show(double show[][5], int);
int main(void)
{
int num = 3;
double before[][5] = {{1.0, 2.0, 3.0, 4.0, 5.0},{1.1, 2.1, 3.1, 4.1, 5.1},{1.2, 2.2, 3.2, 4.2, 5.2}};
double after[num][5];
printf("Before:\n");
show(before, num);
copy(before, after, num);
printf("After:\n");
show(after, num);
return 0;
}
void copy(double arr[][5], double ptr[][5], int n)
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < 5; j++)
ptr[i][j] = arr[i][j];
}
return;
}
void show(double show[][5], int n)
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < 5; j++)
printf("%.2lf ", show[i][j]);
putchar('\n');
}
return 0;
}
第八题
#include<stdio.h>
void show_arr(const double x[], int n);
void copy_arr(double x[], const double source[], int n);
int main(void)
{
double source[7] = {1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7};
double target[3];
copy_arr(target, source, 3);
show_arr(target, 3);
}
void copy_arr(double x[], const double source[], int n)
{
for (int i = 0; i < n; i++)
{
x[i] = source[i + 2];
}
}
void show_arr(const double x[], int n)//带数组表示法的函数
{
for (int i = 0; i < n; i++)
{
printf("%.2lf ", x[i]);
}
putchar('\n');
}
第九题
#include <stdio.h>
#define ROW 3
#define COL 5
double copy(int n, int m, double arr[n][m], double ptr[n][m]);
void show(int n, int m, double ptr[n][m]);
int main(void)
{
double before[ROW][COL] = {{1.0, 2.0, 3.0, 4.0, 5.0},{1.1, 2.1, 3.1, 4.1, 5.1},{1.2, 2.2, 3.2, 4.2, 5.2}};
double after[ROW][COL];
copy(ROW, COL, before, after);
printf("Before:\n");
show(ROW, COL, before);
printf("After:\n");
show(ROW, COL, after);
return 0;
}
double copy(int n, int m, double arr[n][m], double ptr[n][m])
{
int i, j;
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COL; j++)
{
ptr[i][j] = arr[i][j];
}
}
return;
}
void show(int n, int m, double ptr[n][m])
{
int i, j;
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COL; j++)
{
printf("%.2lf ", ptr[i][j]);
}
putchar('\n');
}
return 0;;
}
第十题
#include <stdio.h>
#define NUM 4
int sum(int arr1[], int arr2[], int sum3[], int n);
void show(int show[], int n);
int main(void)
{
int ptr1[NUM] = { 2, 4, 5, 8 };
int ptr2[NUM] = { 1, 0, 4, 6 };
int ptr3[NUM];
printf("The first array is:\n");
show(ptr1, NUM);
printf("The second array is:\n");
show(ptr2, NUM);
sum(ptr1, ptr2, ptr3, NUM);
printf("Their sum is:\n");
show(ptr3, NUM);
return 0;
}
int sum(int arr1[], int arr2[], int sum3[], int n)
{
int i;
for (i = 0; i < n; i++)
{
sum3[i] = arr1[i] + arr2[i];
}
return 0;
}
void show(int show[], int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("%d ", show[i]);
}
printf("\n");
return 0;
}
第十一题
#include<stdio.h>
void show(int show[][5], int);
int two(int two[][5], int);
int main(void)
{
int arr[3][5] = {{1, 2, 3, 4, 5},{2, 3, 4, 5, 6},{3, 4, 5, 6, 7}};
printf("Before:\n");
show(arr, 3);
two(arr, 3);
printf("After:\n");
show(arr, 3);
return 0;
}
int two(int two[][5], int n)
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < 5; j++)
{
two[i][j] = two[i][j] * 2;
}
}
return;
}
void show(int show[][5], int n)
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < 5; j++)
printf("%d ", show[i][j]);
putchar('\n');
}
return 0;
}
第十二题
#include<stdio.h>
#define MONTHS 12
#define YEARS 5
float month(float arr[][MONTHS], int);
float year(float arr[][MONTHS], int);
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(rain, YEARS);
printf("\nThe yearly average is %.1f inches.\n\n", (year(rain, YEARS)) / YEARS);//年平均雨量
printf("MONTHLY AVERAGES:\n\n");
printf("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec\n");
month(rain, YEARS);
return 0;
}
float year(float arr[][MONTHS], int n)
{
int y, m;
float suby, total;
for (y = 0, total = 0; y < YEARS; y++)
{
for (m = 0, suby = 0; m < MONTHS; m++)
suby += arr[y][m];//
printf("%5d %15.1f\n", 2010 + y, suby);//每年下雨总量
total += suby;//下雨总量
}
return total;
}
float month(float arr[][MONTHS], int n)
{
int y, m;
float subm;
for (m = 0; m < MONTHS; m++)
{
for (y = 0, subm = 0; y < YEARS; y++)
{
subm += arr[y][m];//单月下雨总量
}
printf("%4.1f", subm / YEARS);//单月平均雨量
}
}
第十三题
#include <stdio.h>
void get(double ptr[3][5]);
double average(double ptr[][5], int row);
double total(double ptr[3][5]);
double max(double ptr[3][5]);
int main(void)
{
double array[3][5];
double aver[3];
printf("Please enter 15 numbers for 3 rows:\n");
get(array);
int row;
printf("Their averages are:\n");
for (row = 0; row < 3; row++)
{
aver[row] = average(array, row);
printf("%.3lf ", aver[row]);
}
putchar('\n');
printf("The average for all of them is:\n");
total(array);
printf("%.3lf", (total(array)) / 15);
printf("\n");
printf("The biggest number of them is:\n");
printf("%.3lf", max(array));
}
void get(double ptr[3][5])
{
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 5; j++)
{
scanf("%lf", &ptr[i][j]);
}
}
return 0;
}
double average(double ptr[][5], int row)
{
int i;
double subtot = 0, aver;
for (i = 0; i < 5; i++)
{
subtot += ptr[row][i];
}
aver = subtot / 5;
return aver;
}
double total(double ptr[3][5])
{
int i, j;
double tot = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 5; j++)
{
tot += ptr[i][j];
}
}
return tot;
}
double max(double ptr[3][5])
{
int i, j;
double a = 0;
for (i = 0; i < 3; i++)
{
for(j = 0; j < 5; j++)
{
if (a < ptr[i][j])
a = ptr[i][j];
}
}
return a;
}
第十四题
#include <stdio.h>
void get(int n, int m, double ptr[n][m]);
double average(int row, int m, double ptr[row][m]);
double total(int n, int m, double ptr[n][m]);
double max(int n, int m, double ptr[n][m]);
int main(void)
{
double array[3][5];
double aver[3];
printf("Please enter 15 numbers for 3 rows:\n");
get(3, 5, array);
int row;
printf("Their averages are:\n");
for (row = 0; row < 3; row++)
{
aver[row] = average(row, 5, array);
printf("%.3lf ", aver[row]);
}
putchar('\n');
printf("The average for all of them is:\n");
total(3, 5, array);
printf("%.3lf", (total(3, 5, array)) / 15);
printf("\n");
printf("The biggest number of them is:\n");
printf("%.3lf", max(3, 5, array));
}
void get(int n, int m, double ptr[n][m])
{
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 5; j++)
{
scanf("%lf", &ptr[i][j]);
}
}
return 0;
}
double average(int row, int m, double ptr[row][m])
{
int i;
double subtot = 0, aver;
for (i = 0; i < 5; i++)
{
subtot += ptr[row][i];
}
aver = subtot / 5;
return aver;
}
double total(int n, int m, double ptr[n][m])
{
int i, j;
double tot = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 5; j++)
{
tot += ptr[i][j];
}
}
return tot;
}
double max(int n, int m, double ptr[n][m])
{
int i, j;
double a = 0;
for (i = 0; i < 3; i++)
{
for(j = 0; j < 5; j++)
{
if (a < ptr[i][j])
a = ptr[i][j];
}
}
return a;
}