(编译环境 Microsoft Visual Studio 2019)
(变长数组的题用MinGW的gcc编译)
1.
/*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}
};
const float(*py)[MONTHS], * pm;
float subtot, total;
printf(" YEAR RAINFALL (INCHES)\n");
for (py = rain, total = 0; py < rain + YEARS; py++)
{
for (pm = *py, subtot = 0; pm < *py + MONTHS; pm++)
subtot += *pm;
printf("%5d %15.1f\n", 2010 + (py - rain), 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 Nov Dce\n");
for (pm = *rain; pm < *rain + MONTHS; pm++)
{
for (py = rain, subtot = 0; py < rain + YEARS; py++)
subtot += *(*py+(pm-*rain));
printf("%4.1f ", subtot / YEARS);
}
printf("\n");
return 0;
}
2.
/*2.*/
#include<stdio.h>
#define FIVE 5
void copy_arr(double* target, double* source, int n);
void copy_ptr(double* target, double* source, int n);
void copy_ptrs(double* target, double* source, double* end);
void put_array(double* ar, int n);
int main(void)
{
double source[FIVE] = { 1.1,2.2,3.3,4.4,5.5 };
double target1[FIVE];
double target2[FIVE];
double target3[FIVE];
copy_arr(target1, source, FIVE);
copy_ptr(target2, source, FIVE);
copy_ptrs(target3, source, source + FIVE);
printf("Target1= ");
put_array(target1, FIVE);
printf("\nTarget2= ");
put_array(target2, FIVE);
printf("\nTarget3= ");
put_array(target3, FIVE);
putchar('\n');
return 0;
}
void copy_arr(double* target, double* source, int n)
{
int i;
for (i = 0; i < n; i++)
target[i] = source[i];
}
void copy_ptr(double* target, double* source, int n)
{
double* p;
for (p = source; p < source + n; p++, target++)
* target = *p;
}
void copy_ptrs(double* target, double* source, double* end)
{
for (; source < end; source++, target++)
* target = *source;
}
void put_array(double* ar, int n)
{
double* p;
for (p = ar; p < ar + n; p++)
printf("%.1f ", * p);
}
3.
/*3.*/
#include<stdio.h>
#define LENGTH 5
int int_max(int* ar,int n);
int main(void)
{
int arr[LENGTH];
int* i;
printf("Please enter five integers.\n");
for (i = arr; i < arr + LENGTH; i++)
scanf_s("%d", i);
printf("The largest is %d\n", int_max(arr,LENGTH));
return 0;
}
int int_max(int *ar,int n)
{
int max = 0;
int* p;
for (p = ar; p < ar + n; p++)
{
if (*p > max)
max = *p;
}
return max;
}
4.
/*4.*/
#include<stdio.h>
#define LENGTH 5
int max_sub(double* ar, int n);
int main(void)
{
double arr[LENGTH];
double* i;
printf("Please enter five decimal.\n");
for (i = arr; i < arr + LENGTH; i++)
scanf_s("%lf", i);
printf("The maximum subscript is %d\n", max_sub(arr, LENGTH));
return 0;
}
int max_sub(double* ar, int n)
{
double max = 0;
int i;
double* p;
for (p = ar; p < ar + n; p++)
{
if (*p > max)
max = *p;
}
for (i = 0; i < n; i++)
{
if (ar[i] == max)
break;
}
return i;
}
5.
/*5.*/
#include<stdio.h>
#define LENGTH 5
double max_min(double* ar, int n);
int main(void)
{
double arr[LENGTH];
double* i;
printf("Please enter five decimal.\n");
for (i = arr; i < arr + LENGTH; i++)
scanf_s("%lf", i);
printf("The difference between the maximum and minimum is %.2f\n",
max_min(arr, LENGTH));
return 0;
}
double max_min(double* ar, int n)
{
double max, min;
double diff;
double* p;
for (p = ar, max = *p; p < ar + n; p++)
{
if (*p > max)
max = *p;
}
for (p = ar, min = *p; p < ar + n; p++)
{
if (*p < min)
min = *p;
}
diff = max - min;
return diff;
}
6.
/*6.*/
#include<stdio.h>
#define LENGTH 5
void re_order(double* ar, int n);
int main(void)
{
double arr[LENGTH];
double* p;
printf("Please enter five decimals.\n");
for (p = arr; p < arr + LENGTH; p++)
scanf_s("%lf", p);
printf("Original array: ");
for (p = arr; p < arr + LENGTH; p++)
printf("%.2f ", *p);
putchar('\n');
re_order(arr, LENGTH);
printf("Current array: ");
for (p = arr; p < arr + LENGTH; p++)
printf("%.2f ", *p);
putchar('\n');
return 0;
}
void re_order(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;
}
}
7.
/*7.*/
#include<stdio.h>
#define ROWS 3
#define COLUMNS 6
void copy_ptrs(double* target, double* source, double* end);
void put_array(double ar[][COLUMNS], int n);
int main(void)
{
double source[ROWS][COLUMNS] =
{
{3.54,2.36,1.24,0.02,1.03,8.69},
{4.54,6.28,9.36,1.63,0.25,4.63},
{5.69,8.69,3.26,1.54,3.65,2.36}
};
double target[ROWS][COLUMNS];
int row;
for (row = 0; row < ROWS; row++)
copy_ptrs(target[row], source[row], source[row] + COLUMNS);
printf("source=\n");
put_array(source, ROWS);
printf("\ntarget=\n");
put_array(target, ROWS);
return 0;
}
void copy_ptrs(double* target, double* source, double* end)
{
for (; source < end; source++, target++)
* target = *source;
}
void put_array(double ar[][COLUMNS], int n)
{
int row, col;
for ( row= 0; row < ROWS; row++)
{
for (col = 0; col < COLUMNS; col++)
printf("%.2f ", ar[row][col]);
putchar('\n');
}
}
8.
/*8.*/
#include<stdio.h>
void copy_ptrs(int* target, int* source, int* end);
void put_array(int* ar, int n);
int main(void)
{
int source[7] = { 1,2,3,4,5,6,7 };
int target[3];
printf("source= ");
put_array(source, 7);
copy_ptrs(target, source + 2, source + 5);
printf("\ntarget= ");
put_array(target, 3);
return 0;
}
void copy_ptrs(int* target, int* source, int* end)
{
for (; source < end; source++, target++)
* target = *source;
}
void put_array(int* ar, int n)
{
int* p;
for (p = ar; p < ar + n; p++)
printf("%d ", *p);
putchar('\n');
}
9.
/*9.*/
#include<stdio.h>
#define ROWS 3
#define COLUMNS 5
void copy_vla(int row, int col, double source[row][col], double target[row][col]);
void put_vla(int row, int col, double ar[row][col]);
int main(void)
{
double source[ROWS][COLUMNS] =
{
{1.56,2.36,2.78,1.69,3.56},
{3.65,5.69,2.36,8.69,1.63},
{8.69,1.36,5.14,6.21,3.25}
};
double target[ROWS][COLUMNS];
printf("source=\n");
put_vla(ROWS, COLUMNS, source);
copy_vla(ROWS, COLUMNS, source, target);
printf("\ntarget=\n");
put_vla(ROWS, COLUMNS, target);
return 0;
}
void copy_vla(int row, int col, double source[row][col], double target[row][col])
{
int r, c;
for (r = 0; r < row; r++)
for (c = 0; c < col; c++)
target[r][c] = source[r][c];
}
void put_vla(int row, int col, double ar[row][col])
{
double(*pr)[col];
double* pc;
for (pr = ar; pr < ar + row; pr++)
{
for (pc = *pr; pc < *pr + col; pc++)
printf("%.2f ", *pc);
putchar('\n');
}
}
10.
/*10.*/
#include<stdio.h>
#define LENGTH 4
void add_per(int* source1, int* source2, int* target, int n);
void put_array(int* ar, int n);
int main(void)
{
int source1[LENGTH] = { 1,2,3,4 };
int source2[LENGTH] = { 1,2,3,4 };
int target[LENGTH];
printf("source1= ");
put_array(source1, LENGTH);
printf("\nsource2= ");
put_array(source2, LENGTH);
add_per(source1, source2, target, LENGTH);
printf("\n\ntarget= ");
put_array(target, LENGTH);
putchar('\n');
return 0;
}
void add_per(int* source1, int* source2, int* target, int n)
{
int i;
for (i = 0; i < n; i++)
target[i] = source1[i] + source2[i];
}
void put_array(int* ar, int n)
{
int* p;
for (p = ar; p < ar + n; p++)
printf("%d ", *p);
}
11.
/*11.*/
#include<stdio.h>
#define ROWS 3
#define COLUMNS 5
void doub(int ar[][COLUMNS], int n);
void put_array(int ar[][COLUMNS], int n);
int main(void)
{
int arr[ROWS][COLUMNS] =
{
{1 ,2 ,3 ,4 ,5 },
{6 ,7 ,8 ,9 ,10},
{11,12,13,14,15}
};
printf("Original array=\n");
put_array(arr, ROWS);
doub(arr, ROWS);
printf("\nCurrent array=\n");
put_array(arr, ROWS);
return 0;
}
void doub(int ar[][COLUMNS], int n)
{
int(*pr)[COLUMNS];
int* pc;
for (pr = ar; pr < ar + n; pr++)
for (pc = *pr; pc < *pr + COLUMNS; pc++)
*pc *= 2;
}
void put_array(int ar[][COLUMNS], int n)
{
int(*pr)[COLUMNS];
int* pc;
for (pr = ar; pr < ar + n; pr++)
{
for (pc = *pr; pc < *pr + COLUMNS; pc++)
printf("%d ",*pc);
putchar('\n');
}
}
12.
/*12.*/
#include<stdio.h>
#define YEARS 5
#define MONTHS 12
float year_rain(const float ar[][MONTHS], int n);
void month_rain(const float ar[][MONTHS], int n);
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}
};
float total;
printf(" YEAR RAINFALL (inches)\n");
total = year_rain(rain,YEARS);
printf("\nThe yearly average is %.1f inches.\n\n", total / YEARS);
printf("MONTHLY AVERAGES:\n\n");
printf(" Jan Feb Mar Apr May Jun Jun Aug Sep Oct Nov Dec\n");
month_rain(rain, YEARS);
return 0;
}
float year_rain(const float ar[][MONTHS], int n)
{
const float(*pr)[MONTHS];
const float* pc;
float subtot, total;
for (pr = ar, total = 0; pr < ar + n; pr++)
{
for (pc = *pr, subtot = 0; pc < *pr + MONTHS; pc++)
subtot += *pc;
printf("%5d %15.1f\n", 2010 + (pr - ar), subtot);
total += subtot;
}
return total;
}
void month_rain(const float ar[][MONTHS], int n)
{
const float(*pr)[MONTHS];
const float* pc;
float subtot;
for (pc = *ar; pc < *ar + MONTHS; pc++)
{
for (pr = ar, subtot = 0; pr < ar + n; pr++)
subtot += *((*pr) + (pc - *ar));
printf("%4.1f ", subtot / YEARS);
}
putchar('\n');
}
13.
/*13.*/
#include<stdio.h>
#define ROWS 3
#define COLUMNS 5
void get_array(double ar[][COLUMNS], int n);
double per_average(double* ar, int n);
double tot_average(double* ave, int n);
double max_array(double ar[][COLUMNS], int n);
void put_result(double* ave, int n, double ave_tot, double max);
int main(void)
{
double arr[ROWS][COLUMNS];
double ave[3], ave_tot;
double max;
int i;
printf("Please enter three groups decimals,each for five.\n");
get_array(arr, ROWS);
for (i = 0; i < ROWS; i++)
ave[i] = per_average(arr[i], COLUMNS);
ave_tot = tot_average(ave, ROWS);
max = max_array(arr, ROWS);
printf("\nResult:\n");
put_result(ave, ROWS, ave_tot, max);
return 0;
}
void get_array(double ar[][COLUMNS], int n)
{
double(*pr)[COLUMNS];
double* pc;
for (pr = ar; pr < ar + n; pr++)
for (pc = *pr; pc < *pr + COLUMNS; pc++)
scanf_s("%lf", pc);
}
double per_average(double* ar, int n)
{
double* p;
double total = 0;
for (p = ar; p < ar + n; p++)
total += *p;
return total / n;
}
double tot_average(double* ave, int n)
{
double* p;
double total = 0;
for (p = ave; p < ave + n; p++)
total += *p;
return total / n;
}
double max_array(double ar[][COLUMNS], int n)
{
double(*pr)[COLUMNS];
double* pc;
double max = 0;
for (pr = ar; pr < ar + n; pr++)
for (pc = *pr; pc < *pr + COLUMNS; pc++)
{
if (*pc > max)
max = *pc;
}
return max;
}
void put_result(double* ave, int n, double ave_tot, double max)
{
double* p;
printf(" GROUP AVERAGE\n");
for (p = ave; p < ave + n; p++)
printf("%4d %10.2f\n", p - ave + 1, *p);
printf("Average of all data: %.2f\n", ave_tot);
printf("Maximum value of all data: %.2f\n", max);
}
14.
/*14.*/
#include<stdio.h>
#define ROWS 3
#define COLUMNS 5
void get_array(int rows,int cols,double ar[rows][cols]);
double per_average(double* ar, int n);
double tot_average(double* ave, int n);
double max_array(int rows,int cols,double ar[rows][cols]);
void put_result(double* ave, int n, double ave_tot, double max);
int main(void)
{
double arr[ROWS][COLUMNS];
double ave[3], ave_tot;
double max;
int i;
printf("Please enter three groups decimals,each for five.\n");
get_array(ROWS,COLUMNS,arr);
for (i = 0; i < ROWS; i++)
ave[i] = per_average(arr[i], COLUMNS);
ave_tot = tot_average(ave, ROWS);
max = max_array(ROWS,COLUMNS,arr);
printf("\nResult:\n");
put_result(ave, ROWS, ave_tot, max);
return 0;
}
void get_array(int rows,int cols,double ar[rows][cols])
{
double(*pr)[COLUMNS];
double* pc;
for (pr = ar; pr < ar + rows; pr++)
for (pc = *pr; pc < *pr + cols; pc++)
scanf_s("%lf", pc);
}
double per_average(double* ar, int n)
{
double* p;
double total = 0;
for (p = ar; p < ar + n; p++)
total += *p;
return total / n;
}
double tot_average(double* ave, int n)
{
double* p;
double total = 0;
for (p = ave; p < ave + n; p++)
total += *p;
return total / n;
}
double max_array(int rows,int cols,double ar[rows][cols])
{
double(*pr)[COLUMNS];
double* pc;
double max = 0;
for (pr = ar; pr < ar + rows; pr++)
for (pc = *pr; pc < *pr + cols; pc++)
{
if (*pc > max)
max = *pc;
}
return max;
}
void put_result(double* ave, int n, double ave_tot, double max)
{
double* p;
printf(" GROUP AVERAGE\n");
for (p = ave; p < ave + n; p++)
printf("%4d %10.2f\n", p - ave + 1, *p);
printf("Average of all data: %.2f\n", ave_tot);
printf("Maximum value of all data: %.2f\n", max);
}