指针运算找到数组中最大和第二大元素
编写下列函数:void find_two_largest(const int*a,int n,int*largest,int*second_largest);
a指向长度为n的数组。函数从数组中找出最大和第二大元素,并把它们分别储存到由largest和second_largest指向的变量中,要求使用指针算术运算而不是取下标来访问数组元素。
void find_two_largest(const int*a,int n,int*largest,int*second_largest) { *largest=*a++; *second_largest=INT_MIN; for(int i=1;i<n;i++,a++) { if(*largest<*a) { *second_largest=*largest; *largest=*a; } else if(*second_largest<*a) *second_largest=*a; } }
[此贴子已经被作者于2020-12-24 17:23编辑过]
//从数组中找出最大和第二大元素,并把它们分别储存到由largest和second_largest指向的变量中 #include<stdio.h> int main() { void find_two_largest(const int *a, int n, int *largest, int *second_largest); int i, *a, *L, *SL, arr[10]; for (i = 0;i < 10;i++) { scanf_s("%d", &arr[i]); } a = arr; if (a[0]>a[1]) { L = &a[0]; SL = &a[1]; } else { L = &a[1]; SL = &a[0]; } find_two_largest(a, 10, L, SL); } void find_two_largest(const int *a, int n, int *largest, int *second_largest) { int i, s; for (i = 1;i <= n;i++, a++) { if (*largest < *a) { if(*second_largest < *largest) *second_largest = *largest; *largest = *a; } else if (*second_largest < *a) { s = *second_largest; *second_largest = *a; if (*second_largest == *largest) *second_largest = s; } } if (*second_largest > *largest) // 最后再次确认 { s = *second_largest; *second_largest = *largest; *largest = s; } printf("largest = %d, second_largest = %d\n",*largest,*second_largest); }