我正在尝试使用名为min()
的函数进行选择排序。
这是我的代码:
#include <stdio.h>
#include <conio.h>
void main() {
int i, temp, arr[20], n, loc;
int min(int [], int, int);
printf("Enter a range of the array");
scanf("%d", &n);
for (i = 0; i < n; i++) {
printf("Enter elements");
scanf("%d", arr[i]);
}
for (i = 0; i < n; i++) {
loc = min(arr, i, n);
temp = arr[i];
arr[i] = arr[loc];
arr[loc] = temp;
}
min(int arr[], int i, int n) {
int j, loc, temp;
for (j = i + 1; j < n; j++) {
if (arr[i] > arr[j]) {
temp = j;
}
}
return (temp);
}
getch();
}
编译时编译器发出一个错误。 它说:
Error SELECTIONSORT.C 22: Expression Syntax.
根据我的编译器Turbo C ++,我的第22行是min(int arr[],int i, int n)
。
请指导我哪里出错了。 谢谢你的帮助。
答案 0 :(得分:3)
您的代码中存在多个问题:
必须在min
函数的正文之外定义函数main()
。
请注意,在本地范围内声明函数原型被认为是不好的样式。在main()
函数之前定义函数或将原型放在main()
函数之前。
main()
不带参数的原型也应为int main(void)
。
在功能min
中,您必须将temp
初始化为i
,或直接使用i
。
您应该在排序后打印数组内容,否则程序无效。
以下是更正后的版本:
#include <stdio.h>
#include <conio.h>
int min(int [], int, int);
int main(void) {
int i, temp, arr[20], n, loc;
printf("Enter a range of the array: ");
if (scanf("%d", &n) == 1) {
for (i = 0; i < n && i < 20; i++) {
printf("Enter element %d: ", i);
if (scanf("%d", &arr[i]) != 1)
break;
}
n = i; // n is the actual number of inputs
for (i = 0; i < n; i++) {
loc = min(arr, i, n);
temp = arr[i];
arr[i] = arr[loc];
arr[loc] = temp;
}
for (i = 0; i < n; i++) {
printf("%d\n" array[i]);
}
}
getch();
return 0;
}
int min(int arr[], int i, int n) {
int j;
for (j = i + 1; j < n; j++) {
if (arr[i] > arr[j]) {
i = j;
}
}
return i;
}