まず致命的な点として、現状では配列a, b, cはN要素(添字は0~N-1)しか無いので、
a[N], b[N], c[N]にアクセスしてはいけません。
さらに、浮動小数点演算は誤差を含むので、
ループは整数で回し、最大値と現在の値の比を用いて計算する方がいいでしょう。
コード:
#include<stdio.h>
#include<math.h>
#define N (99)
void main(void)
{
int i = 0;
double a[N + 1], b[N + 1], c[N + 1], pi, t;
pi = 4 * atan(1.0);
printf(" 時間 ωt sinwt\n");
for (i = 0; i <= N; i++) {
t = 0.01666666 * i / (N + 1);
a[i] = t;
b[i] = 120 * pi * t;
c[i] = sin(b[i]);
printf("%5.4lf %5.4lf %5.4lf \n", a[i], b[i], c[i]);
}
}
PWMについては、ハードウェアのPWMが使えるマイコンであれば、
計算した-1~1の値を仕様に合わせた適切な電圧(0~2V?)が出る値に変換し、
タイマー割り込みなどを用いて配列の参照する位置を一定間隔でずらしながら、
PWMの出力する電圧(デューティ比)を決めるレジスタに変換した値を書き込むといいでしょう。
PWMではなくまずはsin波の信号の値をLEDの位置で表したいということであれば、
同様にタイマー割り込みなどを用いた一定間隔で配列の参照する位置をずらし、
配列の現在の要素の値に応じて点灯させるLEDを変えるといいでしょう。