鱼C论坛

 找回密码
 立即注册
查看: 2887|回复: 7

for语句的循环赋初值

[复制链接]
发表于 2014-3-10 21:33:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 mack1983 于 2014-3-10 21:45 编辑

第一步:
代码
#include <stdio.h>
void main()
{
int i=1,sum;
for (sum=0;i<=100;i++)
{
  sum=sum+1;
}
printf("%d\n",sum);
}
1.jpg
第二步:
2.jpg
第三步:
另一个例题,1.2.3个循环,第一到二个循环的时候,成功赋值给了变量,第三个循环执行完后再返回到第二循环时for语句中赋初值不成功~
直接上代码和图
题目:有1。2。3。4个数字,能组成多少个互不相同且无重复数字的三位数?
都是多少?
程序分析:可真在百位,十位,个位的数字都是1。2。3。4。组成所有的排列后
再去掉不满足的条件的排列。

#include <stdio.h>
void main()
{
int i,a=1,b,c,w=0;
    for (b=1;a<=4;a++)
{ //b=1;
  for (c=1;b<=4;b++)
  {   //c=1;
   for (;c<=4;c++)
   {
    if (a==b||a==c||b==c)
    {
    }
    else
    {
        w++;
     printf("%d%d%d\n",a,b,c);
    }
   }
  }
}
printf("一共组成%d个数\n",w);
}

第四步:
问题来了,当第三个循环执行完后,返回到第二个循环里,是要把C的值再次改成1的,但单步调试看到,明显没有把C改回1,仍然还是5
1.
执行第二个for语句之前C=5

2.
执行for后,C还是等于5,明显赋初值没有成功


最后,我把C的赋值,放进循环体赋值就可正确了,这是为什么?当第一个循的b的值也要放进循环体,实验结果才完全正确

我的理解是,按这样说,如果赋初值只有在第一次循环才生效,第二次再从别的循环返回来,就不会再赋值,按推算,应该是如果赋初值不有其它赋值,也应该会同样不会赋值成功,还请有空的大虾指点一下~


有些图片弄不上去,不给上传了~~
总之问题出在第二次返第二个循环时,for语句里的赋初值,不能成功赋值,


6.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-10 23:22:23 | 显示全部楼层
我觉得你应该这么写
int main()
{
        int w=0;
        for (int a=1;a<=4;a++)
        { 
                for (int b=1;b<=4;b++)
                {  
                        for (int c=1;c<=4;c++)
                        {        
                                if (a!=b&&b!=c&&c!=a)
                                {
                                        w++;
                                     printf("%d%d%d\n",a,b,c);
                                }
                    }
        }
     }
          printf("一共组成%d个数\n",w);
        system("pause");
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-11 08:26:52 | 显示全部楼层
for循环执行第一次的时候才是三个语句都执行,后边的话就只执行后边两句判断和自增,第一句已经不执行啦,楼主可明白了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-11 09:25:44 | 显示全部楼层
本帖最后由 feitianqu 于 2014-3-11 09:32 编辑

sum=sum+一?
sum=sum+I
你给的什么条件啊如果sum=0那么sum就加100次1什么逻辑啊
int i=1,sum=0;
for (i=1;i<=100;i++)
{
  sum=sum+i;
}





直接SUM=100得了
void main()
{
int i=1,sum=0;
for (i=1;i<=100;i++)
{
  sum=sum+1;
}
printf("%d\n",sum);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-11 09:38:42 | 显示全部楼层
本帖最后由 feitianqu 于 2014-3-11 09:53 编辑

不要用电脑不会的算法
电脑习惯穷举法
int main()

{

        int w=0;
                int a,b,c;

        for (a=1;a<=4;a++)

       {

               for (b=1;b<=4;b++)
               {  

                       for (c=1;c<=4;c++)

                      {        

                                if (a!=b&&b!=c&&c!=a)

                               {

                                       w++;

                                    printf("%d%d%d\n",a,b,c);

                               }

                    }

        }

     }

          printf("一共组成%d个数\n",w);


        return 0;

}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-11 11:55:35 | 显示全部楼层

刚开始的确没有注意到这个问题,理解成每次循环都会把C的值赋为1,所以才想到在上层for语把C的值赋回1,理论上来说,这也没错~我上面的写法是受了按键精灵里for的语句的影响~~
谢了哈~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-11 11:58:21 | 显示全部楼层
machimilk 发表于 2014-3-10 23:22
我觉得你应该这么写

谢谢大虾有空来回答,问题己经解了,再次感谢~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-11 11:59:38 | 显示全部楼层
zhaopengfei 发表于 2014-3-11 08:26
for循环执行第一次的时候才是三个语句都执行,后边的话就只执行后边两句判断和自增,第一句已经不执行啦,楼 ...

谢谢大虾有空来回答,问题己经解了,再次感谢~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 00:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表