Параметры самого большого и самого маленького типа имеют указатели
void find_largest_smallest(int a[], int n, int *largest, int *smallest)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Таким образом, внутри функции вам нужно разыменовать указатели для доступа к указанным объектам.
Например
void find_largest_smallest(int a[], int n, int *largest, int *smallest)
{
*largest = *smallest = a[0];
int i;
for ( i = 1; i<n; i++ )
{
if ( *largest<a[i] )
*largest=a[i];
}
for ( i = 1; i<n; i++ )
{
//printf("%d\n", a[i]);
if ( *smallest>a[i] )
*smallest=a[i];
}
printf("Largest is %d\n", *largest);
printf("smallest is %d\n", *smallest);
}
Обратите внимание, что вы можете найти самые большие и самые маленькие элементы, используя только одну петлю. Помимо этого функция должна вычислять указатели на самые большие и самые маленькие элементы вместо их значений, поскольку в общем случае пользователь может передать размер массива, равный 0. В этом случае функция будет иметь неопределенное поведение.
Такжевнутри main переменные x и y должны иметь тип int. Это
int x;
int y;
//...
printf("Largest value stored is %d and the smallest is %d.", x, y );