1-3题
前言
本篇文章的题目为C的基础练习题,二维数组部分。做这些习题之前,你需要确保已经学习了二维数组的知识。
题目
题目4
编写一个程序,定义一个二维整型数组,大小为3行4列。从键盘输入12个整数,将它们存储到数组中。
编写一个函数,接受一个二维数组和数组的行数作为参数,计算并返回数组中所有元素的和。
在主函数中调用该函数,计算并打印数组中所有元素的和。
测试用例
运行这个程序时,可以输入以下测试数据进行验证:
输入:
1 2 3 4 5 6 7 8 9 10 11 12
输出:
二维数组所有元素的和为: 78
题目5
编写一个程序,定义一个二维整型数组,大小为4行5列。从键盘输入20个整数,将它们存储到数组中。
编写一个函数,接受一个二维数组和数组的行数作为参数,计算并返回数组中每一列元素的最大值和最小值的差值。
在主函数中调用该函数,计算并打印每一列元素的最大值和最小值的差值。
测试用例
运行这个程序时,可以输入以下测试数据进行验证:
输入:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
输出:
第1列元素的最大值和最小值的差值为: 15
第2列元素的最大值和最小值的差值为: 15
第3列元素的最大值和最小值的差值为: 15
第4列元素的最大值和最小值的差值为: 15
第5列元素的最大值和最小值的差值为: 15
输入:
-1 -2 -3 -4 -5
-6 -7 -8 -9 -10
-11 -12 -13 -14 -15
-16 -17 -18 -19 -20
输出:
第1列元素的最大值和最小值的差值为: 15
第2列元素的最大值和最小值的差值为: 15
第3列元素的最大值和最小值的差值为: 15
第4列元素的最大值和最小值的差值为: 15
第5列元素的最大值和最小值的差值为: 15
输入:
9 5 7 2 1
6 8 3 4 10
11 15 12 13 14
16 18 17 20 19
输出:
第1列元素的最大值和最小值的差值为: 10
第2列元素的最大值和最小值的差值为: 13
第3列元素的最大值和最小值的差值为: 14
第4列元素的最大值和最小值的差值为: 18
第5列元素的最大值和最小值的差值为: 18
参考答案
题目4
#include<stdio.h>
#define ROW 3
#define COLUMN 4
int calculateSum(int arr[][COLUMN],int row);
int main(void)
{
int arr[ROW][COLUMN];
for(int i=0;i<ROW;i++)
{
for(int j=0;j<COLUMN;j++)
{
scanf("%d",&arr[i][j]);
}
}
printf("二维数组所有元素的和为: %d\n",calculateSum(arr,ROW));
getchar();
getchar();
return 0;
}
int calculateSum(int arr[][COLUMN],int row)
{
int sum=0;
for(int i=0;i<row;i++)
{
for(int j=0;j<COLUMN;j++)
{
sum+=arr[i][j];
}
}
return sum;
}
解析
首先,定义了一个常量ROW表示二维数组的行数,定义了一个常量COLUMN表示二维数组的列数。接下来,在main函数中,通过嵌套的for循环逐个读取用户输入的二维数组的元素,并将其存入arr数组中。然后,调用calculateSum函数计算二维数组所有元素的和,并将结果打印出来。
在calculateSum函数中,首先定义一个局部变量sum用于保存计算结果。然后,通过嵌套的for循环遍历二维数组的每个元素,并将其累加到sum中。最后,返回计算结果sum。
题目5
答案1
#include<stdio.h>
#include<stdlib.h>
#define ROW 4
#define COLUMN 5
int* calculateColumnDiff(int arr[][COLUMN],int row);
int main(void)
{
int arr[ROW][COLUMN];
int *difference;
for(int i=0;i<ROW;i++)
{
for(int j=0;j<COLUMN;j++)
{
scanf("%d",&arr[i][j]);
}
}
difference=calculateColumnDiff(arr,ROW);
for(int i=0;i<COLUMN;i++)
{
printf("第%d列元素的最大值和最小值的差值为: %d\n",i+1,difference[i]);
}
getchar();
getchar();
return 0;
}
int* calculateColumnDiff(int arr[][COLUMN],int row)
{
int max,min;
int *difference=(int*)malloc(COLUMN*sizeof(int));
for(int c=0;c<COLUMN;c++)
{
max=min=arr[0][c];
for(int r=1;r<row;r++)
{
if(arr[r][c]>max)
max=arr[r][c];
else if(arr[r][c]<min)
min=arr[r][c];
}
difference[c]=max-min;
}
return difference;
}
解析
首先,定义了一个常量ROW表示二维数组的行数,定义了一个常量COLUMN表示二维数组的列数。
在main函数中,声明了一个指向整型的指针difference,用于保存每列最大值和最小值之差的结果。然后,通过嵌套的for循环逐个读取用户输入的二维数组的元素,并将其存入arr数组中。接下来,调用calculateColumnDiff函数来计算每列的差值,并将返回的结果赋值给difference。
在calculateColumnDiff函数中,首先定义了局部变量max和min分别表示当前列的最大值和最小值。然后,通过动态内存分配使用malloc函数来分配一个一维数组,其大小为COLUMN*sizeof(int),并将其地址赋给指针difference。接着,使用两层的for循环遍历每一列的元素,更新max和min的值。最后,计算差值max-min,并将结果保存在difference数组的对应位置上。
最后,在主函数中,使用for循环打印出每列的差值结果。
答案2
#include <stdio.h>
int calculateColumnDiff(int arr[][5], int rows)
{
int diffArr[5];
for (int j = 0; j < 5; j++)
{
int max = arr[0][j];
int min = arr[0][j];
for (int i = 1; i < rows; i++)
{
if (arr[i][j] > max)
{
max = arr[i][j];
}
if (arr[i][j] < min)
{
min = arr[i][j];
}
}
diffArr[j] = max - min;
}
for (int i = 0; i < 5; i++)
{
printf("第%d列元素的最大值和最小值的差值为: %d\n", i + 1, diffArr[i]);
}
}
int main()
{
int arr[4][5];
printf("请输入20个整数:\n");
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 5; j++)
{
scanf("%d", &arr[i][j]);
}
}
calculateColumnDiff(arr, 4);
getchar();
getchar();
return 0;
}
解析
主要思路是使用两个嵌套的循环来遍历数组,并在每一列中查找最大值和最小值,然后计算差值,并将结果存储在一个一维数组diffArr中。
在主函数中,先定义了一个二维数组arr来存储用户输入的整数,并通过两个嵌套的for循环来读取用户输入的整数。然后调用calculateColumnDiff函数来计算每列的差值。
在calculateColumnDiff函数中,首先定义了一个一维数组diffArr,用于存储每列的差值。然后,在每一列中初始化max和min的值为当前列的第一个元素。通过两个嵌套的循环遍历二维数组的每个元素,更新max和min的值。最后,将每列的差值max-min存储在diffArr数组对应位置上,并通过一个循环打印出每列的差值结果。
两个答案对比,第一个答案更符合题意要求,但考虑到有些读者此时并没有学习动态内存分配,所以第二种答案也是可以的。