如何使用C查找二维数组特定行中大元素和小元素之间的差异
How to find difference between large and small element in a specific row of an 2D array using C
写一个C程序,可以显示四个城市最近五天的温度,并显示每个城市最高和最低温度的差异
示例输入
20 27 28 22
12 22 12 20
22 24 25 33
33 30 30 29
示例输出
8
8
11
4
我一直在使用 C 查找二维数组特定行中大元素和小元素之间的区别。我能够找到大元素和小元素,但我在搜索特定行之间有点迷茫找出大元素和小元素之间的区别。下面我展示了我的一段代码 -
#include<stdio.h>
int main()
{
int array1[10][10];
int num, row, column;
printf("How many rows and columns are needed: ");
scanf("%d %d", &row, &column);
printf("\nHow many cities temperature you want to enter: ");
scanf("%d", &num);
printf("\nEnter %d cities temperature: ", num);
for(int i=0; i<row; i++)
{
for(int j=0; j<column; j++)
{
scanf("%d", &array1[i][j]);
}
printf("\n");
}
int largeA = array1[0][0];
int smallA = array1[0][0];
int diff = 0;
for(int i=0; i<row; i++)
{
int diff = 0;
for(int j=1; j<column; j++)
{
if(array1[i][j] > largeA)
{
largeA = array1[i][j];
}
if(array1[i][j] < smallA)
{
smallA = array1[i][j];
}
}
diff = largeA - smallA;
printf("%d\n", diff);
}
return 0;
}
在for(i)
循环中每次设置最小值和最大值。
使用 unsigned
数学来避免 int
溢出。
// Not needed
// int largeA = array1[0][0];
// int smallA = array1[0][0];
// int diff = 0;
for(int i=0; i<row; i++)
{
//int diff = 0;
int largeA = array1[i][0]; // add
int smallA = array1[i][0]; // add
for(int j=1; j<column; j++)
{
if(array1[i][j] > largeA)
{
largeA = array1[i][j];
}
if(array1[i][j] < smallA)
{
smallA = array1[i][j];
}
}
// diff = largeA - smallA;
unsigned diff = 0u + largeA - smallA;
// printf("%d\n", diff);
printf("%u\n", diff);
}
- 使用函数。它使代码更具可读性,不要在
main
中编程
- 使用正确的索引类型(size_t)
- 在您测试您的代码时避免用户输入会容易得多。它将为您节省大量输入 table 值的时间。
#include <stdio.h>
int getDiff(const size_t cols, const int *arr)
{
int max = 0, min = 0;
if(arr)
{
max = arr[0]; min = arr[0];
for(size_t col = 1; col < cols; col++)
{
if(min > arr[col]) min = arr[col];
else if(max < arr[col]) max = arr[col];
}
}
return max - min;
}
int main(void)
{
int temps[][4] = {
{20, 27, 28, 22,},
{12, 22, 12, 20,},
{22, 24, 25, 33,},
{33, 30, 30, 29,},
};
for(size_t row = 0; row < 4; row++)
{
printf("Diff row %zu = %d\n", row, getDiff(4, temps[row]));
}
}
写一个C程序,可以显示四个城市最近五天的温度,并显示每个城市最高和最低温度的差异
示例输入
20 27 28 22
12 22 12 20
22 24 25 33
33 30 30 29
示例输出
8
8
11
4
我一直在使用 C 查找二维数组特定行中大元素和小元素之间的区别。我能够找到大元素和小元素,但我在搜索特定行之间有点迷茫找出大元素和小元素之间的区别。下面我展示了我的一段代码 -
#include<stdio.h>
int main()
{
int array1[10][10];
int num, row, column;
printf("How many rows and columns are needed: ");
scanf("%d %d", &row, &column);
printf("\nHow many cities temperature you want to enter: ");
scanf("%d", &num);
printf("\nEnter %d cities temperature: ", num);
for(int i=0; i<row; i++)
{
for(int j=0; j<column; j++)
{
scanf("%d", &array1[i][j]);
}
printf("\n");
}
int largeA = array1[0][0];
int smallA = array1[0][0];
int diff = 0;
for(int i=0; i<row; i++)
{
int diff = 0;
for(int j=1; j<column; j++)
{
if(array1[i][j] > largeA)
{
largeA = array1[i][j];
}
if(array1[i][j] < smallA)
{
smallA = array1[i][j];
}
}
diff = largeA - smallA;
printf("%d\n", diff);
}
return 0;
}
在for(i)
循环中每次设置最小值和最大值。
使用 unsigned
数学来避免 int
溢出。
// Not needed
// int largeA = array1[0][0];
// int smallA = array1[0][0];
// int diff = 0;
for(int i=0; i<row; i++)
{
//int diff = 0;
int largeA = array1[i][0]; // add
int smallA = array1[i][0]; // add
for(int j=1; j<column; j++)
{
if(array1[i][j] > largeA)
{
largeA = array1[i][j];
}
if(array1[i][j] < smallA)
{
smallA = array1[i][j];
}
}
// diff = largeA - smallA;
unsigned diff = 0u + largeA - smallA;
// printf("%d\n", diff);
printf("%u\n", diff);
}
- 使用函数。它使代码更具可读性,不要在
main
中编程
- 使用正确的索引类型(size_t)
- 在您测试您的代码时避免用户输入会容易得多。它将为您节省大量输入 table 值的时间。
#include <stdio.h>
int getDiff(const size_t cols, const int *arr)
{
int max = 0, min = 0;
if(arr)
{
max = arr[0]; min = arr[0];
for(size_t col = 1; col < cols; col++)
{
if(min > arr[col]) min = arr[col];
else if(max < arr[col]) max = arr[col];
}
}
return max - min;
}
int main(void)
{
int temps[][4] = {
{20, 27, 28, 22,},
{12, 22, 12, 20,},
{22, 24, 25, 33,},
{33, 30, 30, 29,},
};
for(size_t row = 0; row < 4; row++)
{
printf("Diff row %zu = %d\n", row, getDiff(4, temps[row]));
}
}