Если по исходной программе:
Сначала процедура. Принимает, вроде бы, массив, судя по описанию, из 100 элементов (потом станет понятно, что это не так, но это потом), дальше печатает 100-й элемент массива A[N] - но в этом массиве нет 100-го элемента - в нем есть элементы с индексами от 0 до 99 - и что дальше? Вероятно, после A идет [ i ] (которое съелось форумом)?
В этом случае передача i идет не через параметр, как следовало бы, а через статическую переменную. Что не есть хороший стиль, который, к тому же, приводит к еще одной ошибке: переменная i, описанная в main, перекрывает область действия переменной i, описанной снаружи, и последняя не меняется. Так что странно, что печатались разные вещественные числа.
Теперь main. В ней сначала все нормально, но потом в цикле вводятся числа, которые кладутся в одну и ту же переменную A. Вероятно, предполагалось, что это будет массив, но идея осталась не реализованной. Адрес A передается в процедуру, где он воспринимается, как начало массива. В результате, A[N] - это ячейка памяти, находящаяся где-то далеко от переменных программы. Хорошо, что в нее ничего не пишется.
Более правильным был бы такой код (авторский стиль постараюсь сохранить):
#include <stdio.h>
#include <conio.h>
#include<math.h>
const int N = 100;
void sin(int r, int A[N])
{
printf("%d:%1.7f ",r+1, sin(A[r]*3.141592/180) );
}
main()
{
int i,r, A[N];
printf("vvedite kol-vo chisel\n");
scanf("%d",&r);
printf("vvedi chislo\n" );
for ( i = 0; i < r; i ++ )
{
scanf ("%d", &A[i]);
}
for ( i = 0; i < r; i ++ )
sin(i,A) ;
getch();
}
Конечно, массив A следовало описать, как double, но это уже не так важно.