回 帖 发 新 帖 刷新版面

主题:下面这个for的操作数在循环体内赋初值和直接在for中赋初值有什么区别

int main()
{
   int i,p;
    for(i=1,p=1;i<=5;i++)
     p*=i;
    printf("%d",p);
    system("pause");
    return 0;}
若将程序改为以下程序则结果会一样吗?

int main()
{
    int i,p;
     for(i=1;i<=5;i++)
      {p=1;
       p*=i;}
    printf("%d",p);
    system("pause");
    return 0;}





回复列表 (共2个回复)

沙发

结果肯定是不一样的,首先第一个程序
    for(i=1,p=1;i<=5;i++)   /*p在这里赋初值,则在运行循环体p*=i时,第一次,p=1,当i=2时p=2*/
     p*=i;                 /*i=3时,p=6,i=4时,p=24;i=5时,p的值就是120了*/
    再看下面这个循环
     for(i=1;i<=5;i++)
      {p=1;          /*不管循环几次,在每次循环时都会执行p=1,也就是p的值在每次循环开始*/
       p*=i;}        /*时都是1,当循环到i=5时,p=1*5,输出 结果就是 5 */
   

板凳

结果肯定不一样,第二个循环中,每次都设定了p=1,所以不管前面循环几次,到头来p重新赋值为1,再与最后一次循环的i=5进行运算,最后结果P=5,而第一个代码只是5的阶乘。

我来回复

您尚未登录,请登录后再回复。点此登录或注册