0%

2-2:不使用逻辑运算符的情况下编写程序

文章时效性提示

本文发布于 471 天前,部分信息可能已经改变,请注意甄别。

《C程序设计语言》练习2-2

1
2
    for (i=0; i<lim-1 && (c=getchar()) != '\n' && c != EOF ; ++i)
        s[i] = c;

在不使用运算符&&或||的条件下编写一个与上面的for循环语句等价的循环语句。

先分析给出的原代码:

  1. 初始化 i = 0
  2. 检查循环条件:
    • i < lim - 1:确保数组的索引不超出界限。
    • (c = getchar()) != '\n':从输入中读取字符,判断是否是换行符。
    • c != EOF:判断是否到达文件尾。
  3. 如果所有条件都为真,则执行循环体 s[i] = c,将字符 c 存入数组 s[i] 中。
  4. 每次循环结束后,执行 ++i,然后重新检查所有条件。

特点:

  • 条件检查非常紧凑,所有条件是“与”的关系(&&)。
  • 一旦任何一个条件不满足,循环立即终止。
  • 如果 getchar() 读到换行符或文件尾(EOF),整个循环停止,且不会再执行 s[i] = c

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    for (i=0; i<lim-1; ++i) 
    {
        if ((c=getchar()) != '\n')
        {
            if (c != EOF)
            {
                s[i] = c;
            }
            else
            {
                break;
            }
        }
        else
        {
            break;
        }
    }

注意:在使用if判断c=getchar()) != '\n'c != EOF时一定要加else来退出这个for循环,因为题目中循环使用&&的短路特性,当任一条件为假时就停止。
如果不加上break退出循环,虽然结果可能是一致的,但逻辑并不相等。