問題2の答え

1からnまでの自然数を順番に掛け合わせていく、典型的な繰り返し処理です。
 integer :: i, n, nFact
 
 print *, "n = ?"
 read *, n
 nFact = 1
 do i=1,n
    nFact = nFact*i
 end do
 print *, n, "! is ", nFact
最初に『nFact=1』としておくところがポイントです。0には何をかけても0にしかなりません。
なお実際には、整数型の変数『nFact』の代わりに実数型の変数を使った方が実用的になります。
ちなみに、「階乗」は英語で「factorial」です。
 integer :: i, n
 real(kind=double) :: fact
 
 print *, "n = ?"
 read *, n
 fact = 1.d0
 do i=1,n
    fact = fact*i
 end do
 print *, n, "! is ", fact