C语言中for循环中条件表达式的小于和小于等于问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中for循环中条件表达式的小于和小于等于问题相关的知识,希望对你有一定的参考价值。

分不清楚小于和小于等于什么时候怎么用,他们有什么区别。
比如
int main( ) 

int a[10], i, *p;  
for (p=a; p<a+10; p++)  
scanf("%d",p);  
for (p=a; p<a+10; p++) 
printf("%d ",*p);  
printf("\n");
return 0;

其中p<a+10能不能写成p<=a+9呢?
这两个运行的结果是不是一样的?
为什么?
跪求解答!!!

p<a+10和p<=a+9结果是不是一样,你放编译器试试就知道了
<是小于号,<=是小于等于号,前者就是不能等于,而后者可以等于
比如给a[10]赋值,写成:
for (i = 0; i < 10; i++)

for (i = 0; i <= 9; i++)
两者只是表达方式不一样,实际上都是一样的,都是循环10次
而你说那两个,自然也是一样的来自:求助得到的回答
参考技术A p<a+10可以写成p<=a+9,运行结果一样,p最后都是自加到a+10跳出循环,p<=a+9即p<a+9||p=a+9,和p<a+10是一个意思,比如,int x,x<10,和x<=9这两种都是一样的意思 参考技术B 结果是一样的,但是意义不同!p < a+10 可以等价于 p != a+10。。。 参考技术C

当然一样,你怎么搞的?还有,在我的vc上竟然不能运行。你在哪运行

的啊?我用tc运行,两次结果一样,你检查检查是不是输入错了·1?

参考技术D 本人觉得一样

在 C 系列中,为啥在循环中“小于或等于”比“小于”符号更受欢迎? [关闭]

【中文标题】在 C 系列中,为啥在循环中“小于或等于”比“小于”符号更受欢迎? [关闭]【英文标题】:In C families, in a loop why is "less than or equal to" more preferred over just "less than" symbol? [closed]在 C 系列中,为什么在循环中“小于或等于”比“小于”符号更受欢迎? [关闭] 【发布时间】:2014-02-22 11:31:03 【问题描述】:

为什么在 C 语言家族中,当我们对任何循环使用计数器时,最喜欢的比较是 Greater Equal To &lt;= 或其反比?请看这三段代码

for (var i = 0; i <= 5; i++)
.../// loop1

for (var i = 0; i < 6; i++)
.../// loop2

for (var i = 0; i != 6; i++)
.../// loop3

我理解为什么不建议使用循环 3,因为代码中的某些内容可以分配 i &gt; 5 导致无限循环。但是loop1loop2 本质上是相同的,而loop2 在性能方面可能更好,因为只进行了一次比较。那么为什么loop1 更受欢迎。这只是惯例还是有其他内容?

注意:我没有接受过正规的编程培训。当我需要更好的工具来编写 8051s 而不是使用汇编语言时,我才选择了 C。

【问题讨论】:

谁说&lt;=更好? 我认为您的意思是循环 3 中的 != 6 @jrok 如果您看到代码示例,它们都在使用&lt;= 这些例子都不是我写的,然后:D @AwfullyAwesome 大于或小于。 【参考方案1】:

For 循环通常用于遍历数组,限制是数组的长度。由于数组是从零开始的,最后一个有效元素是length-1。所以选择是:

for (int i = 0; i < length; i++)

for (int i = 0; i <= length-1; i++)

第一个比较简单,所以首选。因此,即使限制不是数组大小,这种习惯用法也很常见。

我们不使用!=,因为有时我们会编写索引以可变步长递增的循环,有时它会跳过限制。所以使用&lt;比较更安全,这样就不会变成无限循环。

【讨论】:

你没有给i 一个类型,所以也许还值得指出的是,如果iunsigned,而length 为零,那么第二个循环将完全执行某些操作错了。【参考方案2】:

这通常是上下文语义的问题,便于“追随者”维护代码。

如果你需要 10 次迭代,这通常写成从 0 开始,并以 &lt;!= 为结束条件,因为这意味着 10 实际上是代码的一部分,因此显示很明显,打算进行 10 次迭代。非包含符号对于从零开始的数组(如 C 样式字符串)也更实用。通常不鼓励使用 != 表示法,因为如果索引器不仅仅是一个简单的增量、发生意外溢出等情况,它可能会导致无限循环。

另一方面,如果您需要一个往返于特定值的循环,那么如果您在代码中确实有结束条件,例如for(var i = 1; i &lt;= 5; i++),就可以清楚地看出这是一个包容性循环从 1 到 5。

这些只是使用一种或另一种表示法的常见原因,大多数优秀的程序员会根据上下文和情况决定使用哪种表示法。没有理由选择性能或其他方面。

【讨论】:

@SteveJessop 澄清了一点,谢谢评论。 != 符号是迄今为止 C=+ 中最常见和首选的形式,因为它模仿了使用迭代器编写循环的方式。【参考方案3】:

小于或等于不是首选。传统上,在 C 中, 小于首选;在 C++ 中,不等于是迄今为止最多的 惯用语。因此,在 C 中:

#define N 100

int array[N];
for ( int i = 0; i < N; i ++ ) 
    //  ...

在 C++ 中:

int const N = 100;

int array[N];
for ( int i = 0; i != N; ++ i ) 
    //  ...

甚至更常见的是,如果只有一个容器,并且 否则不需要索引:

for ( int* p = std::begin( array ); p != std::end( array ); ++ p ) 
    //  ...

(当然,在 C++11 之前的版本中,我们使用了自己的实现 begin 和 end 做同样的事情。)

其他形式一般不习惯用,只用在 特殊情况。

【讨论】:

终于有人解决了实际问题。【参考方案4】:

除了上限之外,几乎所有的 for 循环都有完全相同的标题。这是一个有用的约定,有助于快速理解并减少错误。 (约定是&lt;,而不是&lt;=。不知道你从哪里得到的。)

在代码质量方面,执行相同操作的程序不一定相同。编码风格有一个客观的组成部分,它可以帮助人类处理任务的复杂性。

一致性是一个重要目标。如果您可以选择,请选择大多数团队成员都在使用的替代方案。

【讨论】:

以上是关于C语言中for循环中条件表达式的小于和小于等于问题的主要内容,如果未能解决你的问题,请参考以下文章

在 C 系列中,为啥在循环中“小于或等于”比“小于”符号更受欢迎? [关闭]

verilog 语言中 大小比较用啥标识符?

这个有大于小于号的c语言计算,怎么算。a b的值是啥?

C语言的不等于,大于,大于等于怎样表达

C语言for循环详细讲解

布尔表达式