C语言for循环里没有循环体,空白语句有什么作用

程序是输入一个二进制数,然后求这个二进制数的补码。
图片说明

第一个for中并没有循环体,注释掉以后无法运行。
另外这个程序是怎么做到当末位为1时,末位加1等于0,并且向前进一位的?而不是末位加1等于2?

第一个for循环是找到这个二进制数第一个1的位置,如输入0001010,求得i=3。

第一个空循环,可以让找到第一个a[i]等于1的位置,然后方便后面的循环使用这个i来做进一步处理

第一个空循环,看似没有用,其实是有用的,它可以让找到第一个a[i]等于1的位置i,后面的循环用这个i进行进一步处理

首先执行内部循环 里面的那个歌小的循环 然后在执行外面的大循环 其实是有用的 打个比方: 还比你的内部 1 横向循环 4次 外面的
大的 在竖向循环 4次 就变成了 4行 4列的 4 数字 这样说 你懂了?

首先执行内部循环 里面的那个歌小的循环 然后在执行外面的大循环 其实是有用的 打个比方: 还比你的内部 1 横向循环 4次 外面的
大的 在竖向循环 4次 就变成了 4行 4列的 4 数字 这样说 你懂了?

第一个空循环是为了找到左起第一个1的位置

可以执行圆括号里面的语句嘛,找出适合的i。

可以执行圆括号里面的语句嘛,找出适合的i。

讲个例子吧…如果输入“001010” 第一个循环会执行几次呢?i从几开始呢?一开始i是等于6,也就是说,会从你输入的二进制字符串最后一个字符开始查找,如果是上面的字符,循环只会进行一次,找的倒数第二个1就会停止…

还有,这个程序是靠经验写的,而不是+1算出来的…取反加1的规律…

只看循环条件就可以了,当不满足的时候就会跳出循环

for循环中,循环语句(组),为空的时候,只执行三个 循环表达式.
例如形式为 for(e1,e2,e3); 和 for(e1;e2;e3){} 的空循环
第一次进入循环,执行 e1(初始化表达式?)
接着执行 e2(条件表达式)
接着执行 e3 (递增表达式)
然后循环执行 e2,e3
直到 执行e2时候,条件不满足,程序退出循环,
退出这步只执行 e2,不执行 e3

for循环中没有循环体作用是找到这个二进制字符串的第一个1的位置,如输入00001010,求得i = 4。

空循环就是为了找到第一个为1的位置。为了下一个循环服务呀。

主要是取到合适的a[i]=='1'时i的值。

主要是取到合适的a[i]=='1'时i的值。

楼上都只回答了第一个问题,我来都回答一下。

1.第一个for的循环条件是a[i]!='1',所以**当执行完这个for语句时得到的i一定满足a[i]=='1'**

2.如果末尾是1,那么第一个for语句结束后得到i=len-1,同时第二个for语句是从a[len-2]开始往前依次取反,这就意味着a[len-1]的值没变,仍然是1.
这正好满足补码的要求:末尾的1先取反得到0,再加1又成了1,所以**末尾的1的补码仍然是1,不需要改变**。
另外,显然它并没有往前进位,所以前一位依然是按位取反,1变成0,0变成1.

for循环后至少要跟一条语句, 空白语句就是避免产生语法错误用的。

用来得到i的无聊的for循环……

第一个空循环,可以让找到第一个a[i]等于1的位置

就是查找第一个“1”位置,有点笨

第一个循环就是为第二个循环找到第一个数。

第一个空循环并不为了对字符串有什么处理,而是找到a[i]第一个1时a[i]的位置,得到的i,j=i-1,就会依次往前移动,遇1设为0,遇0设为1。实现二进制取反的特点。