软件是vs2019
#include<stdio.h>
int main()
{
void are(int arr[], int n);
int a[8], i;
printf("输入七个数字:\n");
for (i = 0; i < 7; i++)
scanf_s("%d", &a[i]);
printf("排列结果为:\n");
int k, g;
for (k = 0; k < 7; k++)
for (i = 0; i < 7 - k; i++)
if (a[i] > a[i + 1])
{
g = a[i];
a[i] = a[i + 1];
a[i + 1] = g;
}
for (i = 7; i >0; i--)
printf("%d\n", a[i]);
printf("输入第八个数字:\n");
scanf_s("%d", &a[8]);
are(a, 8);
printf("\n");
for (i = 0; i < 8; i++)
printf("%d\n", a[i]);
printf("\n");
return 0;
}
void are(int arr[], int n)
{
int i, j, t, y;
for (i = 1; i < n ; i++)
{
t = i;
for (j = i + 1; j < n+1; j++)
if (arr[i] < arr[t])
t = j;
y = arr[t];
arr[t] = arr[i];
arr[i] = y;
}
}
运行前面都还好,从输入a[8]之后开始出错了
感觉是后面的内存出现问题,但是处理不了
数组下标是从0开始的,第八个数字是a[7],不是a[8]
printf("输入第八个数字:\n");
scanf_s("%d", &a[7]);
你代码好多地方都错了。正确的如下:自己与注释的部分对比下
#include <stdio.h>
int main()
{
void are(int arr[], int n);
int a[8], i;
printf("输入七个数字:\n");
for (i = 0; i < 7; i++)
scanf_s("%d", &a[i]);
printf("排列结果为:\n");
int k, g;
// for (k = 0; k < 7; k++)
for (k = 0; k < 6; k++)
// for (i = 0; i < 7 - k; i++)
for (i = 0; i < 6 - k; i++)
if (a[i] > a[i + 1])
{
g = a[i];
a[i] = a[i + 1];
a[i + 1] = g;
}
// for (i = 7; i > 0; i--)
for (i = 6; i >= 0; i--)
printf("%d\n", a[i]);
printf("输入第八个数字:\n");
// scanf_s("%d", &a[8]);
scanf_s("%d", &a[7]);
are(a, 8);
printf("\n");
for (i = 0; i < 8; i++)
printf("%d\n", a[i]);
printf("\n");
return 0;
}
void are(int arr[], int n)
{
int i, j, t, y;
// for (i = 1; i < n; i++)
for (i = 0; i < n-1; i++)
{
t = i;
// for (j = i + 1; j < n + 1; j++)
for (j = i + 1; j < n; j++)
// if (arr[i] < arr[t])
if (arr[j] < arr[t])
t = j;
y = arr[t];
arr[t] = arr[i];
arr[i] = y;
}
}
如有帮助,望采纳!谢谢!