На мой взгляд, вновь неверно... Теоретически функцию можно описывать внутри другой функции, но я не видел, чтоб к этому прибегали.

У Вас же Chislo описана внутри main.

Также советую разобраться в синтаксисе определения функции.

Код
[тип возвращаемого значения] [имя функции]([список параметров])
{
[код]
}


Никакой переменной с именем функции по умолчанию не создаётся. Все возвраты осуществляются оператором return.

Захотели вернуть 0, пишем return 0;
Захотели вернуть 1, пишем return 1;
Захотели вернуть x, пишем return x;

После выполнения оператора return выполнение функции прекращается и управление передаётся вызывающей функции.

Объявлять все локальные переменные нужно уже в теле функции, там, где у меня написано [код].

То есть, если вы всё вот этот осознаете, то поймёте, что функция описана неверно.

Остальные комментарии:
1. опять main ничего не возвращает - чего вы её так обижаете, такая же функция) Обещает отдавать int, значит, должна отдавать int))
2. Зачем int yk[99]? Зачем Вы выделили память в стеке? Вы же её не используете...
3.
Цитата
как х присвоить yk[i]?

А никак) Просто пишете
Код
Chislo(yk[i]);
и всё


Вот небольшой примерчик с оформлением функций. У меня массив статический, но Вам так нельзя, не подходит по условию статический.

Код

int IsSimple(int x)
{
    int i;
    if (x<2) return 0; //если меньше двух, дальше функция не будет выполняться
    for(i=2;i<x;i++)
    {
        if(!(x%i))
        {
            return 0; //есть делитель больший или равный двойке, но меньше числа, опять же прекращаем
        }
    }
    return 1; //делителей не нашлось, число простое
}

int main()
{
    int i;
    int x[50];
    for(i=0;i<50;i++)
    {
        cin >> x[i];
        if(IsSimple(x[i])) cout << "Prostoe\n";
        else cout << "Sostavnoe\n";
    }
    return 0; //заметьте, обещал вернуть int и вернул int
}