对i++在程序运行中的一些疑问

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
#include <stdio.h>
int main()
{int i=0;
int j;
for(j=0;j<100;j++){
i=i++;
}
printf("%d",i);
} 

#include<stdio.h>
#include<stdlib.h>
long factorial(int n)
{  long f=1;
       if(n>1){
         f=n*factorial(n-1);
     return f;}
      if(n=1)
     return 1;
}
main()
{ int n;
     scanf("%d",&n);
     printf("%ld",factorial(n));
}
运行结果及报错内容

第一段代码的运行结果为什么是i=0而不是i=100?
为什么把第二段代码第六行括号内的n-1改为++n后计算结果为(n-1)的阶乘而不是n的阶乘?
而把n-1改为n++后就运行不出结果了呢?
恳求各位的解答,希望能详细一点,谢谢。

我的解答思路和尝试过的方法
我想要达到的结果