|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- /*
- * 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。
- * 写三个函数; ①输入10个数;②进行处理;③输出10个数。
- *
- */
- #include <stdio.h>
- #define LEN 10
- void GetNumber(int number[])
- {
- for (int i = 0; i < LEN; i++)
- {
- scanf("%d", &number[i]);
- }
- }
- void Swap(int number[])
- {
- int max, min, temp;
- int n, i;
- max = min = number[0];
- for (i = 0; i < LEN; i++)
- {
- if (max < number[i])
- {
- max = number[i];
- n = i;
- }
- }
- temp = number[n];
- number[n] = number[LEN-1];
- number[LEN-1] = temp;
- n = 0;
- for (i = 0; i < LEN; i++)
- {
- if (min > number[i])
- {
- min = number[i];
- n = i;
- }
- }
- temp = number[n];
- number[n] = number[0];
- number[0] = temp;
- }
- void Show(int number[])
- {
- for (int i = 0; i < LEN; i++)
- {
- printf("%d ", number[i]);
- }
- }
- int main(void)
- {
- int number[LEN];
- GetNumber(number);
- Swap(number);
- Show(number);
- return 0;
- }
复制代码
上面这段代码我运行了很多次, 包括能想到的特殊值, 结果我觉得都对, 但就是不能通过测试, 请帮我看看问题出在哪里? 我就想知道有什么特殊值能得到错误的结果.
你的代码中有一个问题:在 `Swap` 函数里,当找到最大值或最小值时,没有对变量 `n` 进行初始化,这样可能导致 `n` 的值是未定义的,从而交换出错。建议在函数开始时对 `n` 进行初始化,如 `int n = 0;`。这样就能保证在找到最大值或最小值之前,`n` 的值一定是合法的。
另外,你可以尝试输入一些边界值,比如全是正数、全是负数、正负数混合、有相同的数等等,以确保程序能够正确处理这些情况。
这是修改后的代码:
- #include <stdio.h>
- #define LEN 10
- void GetNumber(int number[]) {
- for (int i = 0; i < LEN; i++) {
- scanf("%d", &number[i]);
- }
- }
- void Swap(int number[]) {
- int max = number[0], min = number[0], max_index = 0, min_index = 0;
- for (int i = 1; i < LEN; i++) {
- if (number[i] > max) {
- max = number[i];
- max_index = i;
- }
- if (number[i] < min) {
- min = number[i];
- min_index = i;
- }
- }
- int temp = number[0];
- number[0] = min;
- number[min_index] = temp;
- temp = number[LEN - 1];
- number[LEN - 1] = max;
- number[max_index] = temp;
- }
- void Show(int number[]) {
- for (int i = 0; i < LEN; i++) {
- printf("%d ", number[i]);
- }
- }
- int main(void) {
- int number[LEN];
- GetNumber(number);
- Swap(number);
- Show(number);
- return 0;
- }
复制代码
主要修改了 `Swap` 函数。在该函数中,我们使用了两个变量 `max` 和 `min` 分别表示数组中的最大值和最小值,并用 `max_index` 和 `min_index` 记录它们的下标。然后交换数组中的元素即可。
另外,我们在输入数据时没有进行错误处理,如果输入非法数据可能会导致程序出错。你可以加上输入数据的错误处理,确保输入的数据是合法的。
|
|