題目字太多了略🤣有問題歡迎留言讨論~
IDE: Xcode
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 }
};
const float (* prain)[MONTHS] = rain; //因為prain指向的是一個const數組,是以要聲明一個const指針,不允許通過prain修改它指向的數組的值
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 += *(*(prain + year) + month);
printf("%5d %15.1f\n", 2010 + year, subtot);
total +=subtot; //5年的總降水量
}
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 Dec\n");
for(month = 0; month < MONTHS; month++)
{
for(year = 0, subtot = 0; year < YEARS; year++)
subtot += *(*(prain + year) + month);
printf("%4.1f", subtot / YEARS);
}
printf("\n");
return 0;
}
Output:
10-2
#include <stdio.h>
void copy_arr(double trg[], double src[], int length);
void copy_ptr(double *trg, double *src, int length);
void copy_ptrs(double *trg, double *src_start, double *src_end);
void print_arr(double *print_arr, int length);
int main()
{
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);
//C語言在配置設定空間時,指向數組最後第一個位置的指針仍是有效的指針,但儲存在此位置的值不确定,是以程式不能通路這個位置。
copy_ptrs(target3, source, source + 5);
print_arr(target1, 5);
print_arr(target2, 5);
print_arr(target3, 5);
return 0;
}
void copy_arr(double trg[], double src[], int length)
{
int i;
for(i = 0; i < length; i++){
trg[i] = src[i];
}
}
void copy_ptr(double *trg, double *src, int length)
{
int i;
for(i = 0; i < length; i++){
*trg = *src;
trg++;
src++;
}
}
void copy_ptrs(double *trg, double *src_start, double *src_end)
{
int i;
for(i = 0; i < (src_end - src_start); i++){
*trg = *(src_start + i);
trg++;
}
}
void print_arr(double *print_arr, int length)
{
int i;
for(i = 0; i < length; i++){
printf("%.1f ", *(print_arr + i));
}
printf("\n");
}
Output:
10-3
#include <stdio.h>
int max_value_in_array(int *array, int length);
void print_arr(int *print_arr, int length);
int main()
{
int max;
int arr[10] = {5, 86, 45, 8, 98, 1, 3, 67, 79, 5};
max = max_in_array(arr, 10);
print_arr(arr, 10);
printf("max = %d\n", max);
return 0;
}
int max_value_in_array(int *array, int length)
{
int i;
int max = 0;
for(i = 0; i < length; i++){
if(array[i] > max)
max = array[i];
}
return max;
}
void print_arr(int *print_arr, int length)
{
int i;
for(i = 0; i < length; i++){
printf("%d ", *(print_arr + i));
}
printf("\n");
}
Output:
10-4
#include <stdio.h>
int max_index_in_array(double *array, int length);
void print_arr(double *print_arr, int length);
int main()
{
int max_index;
double arr[10] = {5.5, 86.6, 45.3, 8.9, 98.2, 1.7, 3.5, 67.1, 79.7, 5.8};
max_index = max_index_in_array(arr, 10);
print_arr(arr, 10);
printf("max index = %d\n", max_index);
return 0;
}
int max_index_in_array(double *array, int length)
{
int i;
int max_index = 0;
double max_value = 0;
for(i = 0; i < length; i++){
if(array[i] > max_value){
max_value = array[i];
max_index = i;
}
}
return max_index;
}
void print_arr(double *print_arr, int length)
{
int i;
for(i = 0; i < length; i++){
printf("%.1f ", *(print_arr + i));
}
printf("\n");
}
Output:
10-5
#include <stdio.h>
double diff_value_in_array(double *array, int length);
void print_arr(double *print_arr, int length);
int main()
{
double arr_diff_value;
double arr[10] = {5.5, 86.6, 45.3, 8.9, 98.2, 1.7, 3.5, 67.1, 79.7, 5.8};
arr_diff_value = diff_value_in_array(arr, 10);
print_arr(arr, 10);
printf("The difference between the highest and the lowest values in array is %.1f\n", arr_diff_value);
return 0;
}
double diff_value_in_array(double *array, int length)
{
int i;
double max_value = array[0];
double min_value = array[0];
double diff_value = 0;
for(i = 0; i < length; i++){
if(array[i] > max_value){
max_value = array[i];
}
if(array[i] < min_value){
min_value = array[i];
}
}
diff_value = max_value - min_value;
return diff_value;
}
void print_arr(double *print_arr, int length)
{
int i;
for(i = 0; i < length; i++){
printf("%.1f ", *(print_arr + i));
}
printf("\n");
}
Output:
10-6
#include <stdio.h>
void reverse_array(double *array, int length);
void print_arr(double *print_arr, int length);
int main()
{
double arr_diff_value;
double arr[10] = {5.5, 86.6, 45.3, 8.9, 98.2, 1.7, 3.5, 67.1, 79.7, 5.8};
print_arr(arr, 10);
printf("reverse this array:\n");
reverse_array(arr, 10);
print_arr(arr, 10);
return 0;
}
void reverse_array(double *array, int length)
{
int i;
double temp;
for(i = 0; i < length / 2; i++){
temp = array[i];
array[i] = array[length - 1 - i];
array[length - 1 - i] = temp;
}
}
void print_arr(double *print_arr, int length)
{
int i;
for(i = 0; i < length; i++){
printf("%.1f ", *(print_arr + i));
}
printf("\n");
}
Output:
10-7
#include <stdio.h>
#define ARRAY_X 2
#define ARRAY_Y 3
void copy_ptr(double *trg, double *src, int length);
void print_arr(double print_arr[ARRAY_X][ARRAY_Y]);
int main()
{
double array[ARRAY_X][ARRAY_Y] = {{1.1, 2.2, 3.3}, {4.4, 5.5, 6.6}};
double array_copy[ARRAY_X][ARRAY_Y];
int i;
for(i = 0; i < ARRAY_X; i++){
copy_ptr(array_copy[i], array[i], 3);
}
printf("array:\n");
print_arr(array);
printf("copy array to new array:\n");
print_arr(array_copy);
return 0;
}
void copy_ptr(double *trg, double *src, int length)
{
int i;
for(i = 0; i < length; i++){
*trg = *src;
trg++;
src++;
}
}
void print_arr(double print_arr[ARRAY_X][ARRAY_Y])
{
int i, j;
for(i = 0; i < ARRAY_X; i++){
for(j = 0; j < ARRAY_Y; j++){
printf("%.1f ", print_arr[i][j]);
}
}
printf("\n");
}
Output:
10-8
#include <stdio.h>
void copy_ptr(double *trg, double *src, int length);
void print_arr(double *print_arr, int length);
int main()
{
double array_a[7] = {1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7};
double array_b[3];
copy_ptr(array_b, &array_a[2], 3);
printf("array a:\n");
print_arr(array_a, 7);
printf("copy array_a to array_b:\n");
print_arr(array_b, 3);
return 0;
}
void copy_ptr(double *trg, double *src, int length)
{
int i;
for(i = 0; i < length; i++){
*trg = *src;
trg++;
src++;
}
}
void print_arr(double *print_arr, int length)
{
int i;
for(i = 0; i < length; i++){
printf("%.1f ", *(print_arr + i));
}
printf("\n");
}
Output:
10-9
#include <stdio.h>
void copy_array(int rows, int cols, double src_arr[rows][cols], double trg_arr[rows][cols]);
void print_array(int rows, int cols, double array[rows][cols]);
int main()
{
double array_a[3][5] = {
{1.1, 2.2, 3.3, 4.4, 5.5},
{6.6, 7.7, 8.8, 9.9, 10.10},
{11.11, 12.12, 13.13, 14.14, 15.15}
};
double array_b[3][5];
copy_array(3, 5, array_a, array_b);
printf("array a:\n");
print_array(3, 5, array_a);
printf("copy array_a to array_b:\n");
print_array(3, 5, array_b);
return 0;
}
void copy_array(int rows, int cols, double src_arr[rows][cols], double trg_arr[rows][cols])
{
int i, j;
for(i = 0; i < rows; i++){
for(j = 0; j < cols; j++){
trg_arr[i][j] = src_arr[i][j];
}
}
}
void print_array(int rows, int cols, double array[rows][cols])
{
int i, j;
for(i = 0; i < rows; i++){
for(j = 0; j < cols; j++){
printf("%.2f ", array[i][j]);
}
}
printf("\n");
}
Output:
10-10
#include <stdio.h>
#define LENGTH 4
void add_array(int length, int * arr_a, int * arr_b, int * arr_sum);
void print_arr(int *print_arr, int length);
int main()
{
int array_a[LENGTH] = {2, 4, 5, 8};
int array_b[LENGTH] = {1, 0, 4, 6};
int array_c[LENGTH];
add_array(LENGTH, array_a, array_b, array_c);
printf("array 1:\n");
print_arr(array_a, LENGTH);
printf("array 2:\n");
print_arr(array_b, LENGTH);
printf("add array 1 and array 2 element, array 3:\n");
print_arr(array_c, LENGTH);
return 0;
}
void add_array(int length, int * arr_a, int * arr_b, int * arr_sum)
{
int i;
for(i = 0; i < length; i++){
arr_sum[i] = arr_a[i] + arr_b[i];
}
}
void print_arr(int *print_arr, int length)
{
int i;
for(i = 0; i < length; i++){
printf("%d ", *(print_arr + i));
}
printf("\n");
}
Output:
10-11
#include <stdio.h>
#define ROW 3
#define COL 5
void double_array_value(int src_arr[][COL], int trg_arr[][COL], int rows);
void print_array(int array[][COL], int rows);
int main()
{
int array_a[ROW][COL] = {
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15}
};
int array_b[ROW][COL];
double_array_value(array_a, array_b, ROW);
printf("array:\n");
print_array(array_a, ROW);
printf("Double the values in the array:\n");
print_array(array_b, ROW);
return 0;
}
void double_array_value(int src_arr[][COL], int trg_arr[][COL], int rows)
{
int i, j;
for(i = 0; i < rows; i++){
for(j = 0; j < COL; j++){
trg_arr[i][j] = src_arr[i][j] * 2;
}
}
}
void print_array(int array[][COL], int rows)
{
int i, j;
for(i = 0; i < rows; i++){
for(j = 0; j < COL; j++){
printf("%d ", array[i][j]);
}
}
printf("\n");
}
Output:
10-12
#include <stdio.h>
#define MONTHS 12 //一年的月份數
#define YEARS 5 //年數
float rain_in_one_year(const float rain[YEARS][MONTHS], int year);
float rain_in_one_month_of_all_year(const float rain[YEARS][MONTHS], int month);
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++)
{ //每一年,各月的降水量總和
subtot = rain_in_one_year(rain, year);
printf("%5d %15.1f\n", 2010 + year, subtot);
total +=subtot; //5年的總降水量
}
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 Dec\n");
for(month = 0; month < MONTHS; month++)
{
subtot = rain_in_one_month_of_all_year(rain, month);
printf("%4.1f", subtot / YEARS);
}
printf("\n");
return 0;
}
float rain_in_one_year(const float rain[YEARS][MONTHS], int year)
{
int month;
float sum = 0;
for(month = 0; month < MONTHS; month++)
sum += rain[year][month];
return sum;
}
float rain_in_one_month_of_all_year(const float rain[YEARS][MONTHS], int month)
{
int year;
float sum = 0;
for(year = 0; year < YEARS; year++)
sum += rain[year][month];
return sum;
}
Output:
10-13
#include <stdio.h>
#define ROW 3
#define COL 5
void input_double_dimentional_array(double array[ROW][COL]);
double average_in_row(double array[COL]);
double average_in_array(double array[ROW][COL]);
double max_in_array(double array[ROW][COL]);
int main()
{
double array[ROW][COL];
int i;
double avg_in_row, avg_in_arr, max_in_arr;
//task a
printf("Please enter 3 groups of numbers, each containing 5 double types:\n");
input_double_dimentional_array(array);
//task b
for(i = 0; i < ROW; i++){
avg_in_row = average_in_row(array[i]);
printf("The average in group %d: %.2f\n", i, avg_in_row);
}
//task c
avg_in_arr = average_in_array(array);
printf("The average of all numbers : %.2f\n", avg_in_arr);
//task d
max_in_arr = max_in_array(array);
printf("The max of all numbers : %.2f\n", max_in_arr);
return 0;
}
void input_double_dimentional_array(double array[ROW][COL])
{
int i, j;
for(i = 0; i < ROW; i++){
for(j =0; j <COL; j++){
scanf("%lf", &array[i][j]);
}
}
}
double average_in_row(double array[COL])
{
int i;
double average = 0, sum = 0;
for(i = 0; i < COL; i++){
sum += array[i];
}
average = sum / COL;
return average;
}
double average_in_array(double array[ROW][COL])
{
int i;
double avg_in_row_sum = 0, average = 0;
for(i = 0; i < ROW; i++){
avg_in_row_sum += average_in_row(array[i]);
}
average = avg_in_row_sum / ROW;
return average;
}
double max_in_array(double array[ROW][COL])
{
int i, j;
double max = 0;
for(i = 0; i < ROW; i++){
for(j =0; j <COL; j++){
if(array[i][j] > max)
max = array[i][j];
}
}
return max;
}
Output:
10-14
#include <stdio.h>
void input_double_dimentional_array(int row, int col, double array[row][col]);
double average_in_row(int col, double array[col]);
double average_in_array(int row, int col, double array[row][col]);
double max_in_array(int row, int col, double array[row][col]);
int main()
{
double array[3][5];
int i;
double avg_in_row, avg_in_arr, max_in_arr;
//task a
printf("[Use VLA]\n");
printf("Please enter 3 groups of numbers, each containing 5 double types:\n");
input_double_dimentional_array(3, 5, array);
//task b
for(i = 0; i < 3; i++){
avg_in_row = average_in_row(5, array[i]);
printf("The average in group %d: %.2f\n", i, avg_in_row);
}
//task c
avg_in_arr = average_in_array(3, 5, array);
printf("The average of all numbers : %.2f\n", avg_in_arr);
//task d
max_in_arr = max_in_array(3, 5, array);
printf("The max of all numbers : %.2f\n", max_in_arr);
return 0;
}
void input_double_dimentional_array(int row, int col, double array[row][col])
{
int i, j;
for(i = 0; i < row; i++){
for(j =0; j <col; j++){
scanf("%lf", &array[i][j]);
}
}
}
double average_in_row(int col, double array[col])
{
int i;
double average = 0, sum = 0;
for(i = 0; i < col; i++){
sum += array[i];
}
average = sum / col;
return average;
}
double average_in_array(int row, int col, double array[row][col])
{
int i;
double avg_in_row_sum = 0, average = 0;
for(i = 0; i < row; i++){
avg_in_row_sum += average_in_row(col, array[i]);
}
average = avg_in_row_sum / row;
return average;
}
double max_in_array(int row, int col, double array[row][col])
{
int i, j;
double max = 0;
for(i = 0; i < row; i++){
for(j =0; j <col; j++){
if(array[i][j] > max)
max = array[i][j];
}
}
return max;
}
Output: