统计输入的行数

标准库保证输入文本流以行序列的形式出现,每一行均以换行符结束。因此,统计行数等价于统计换行符的个数。

#include

/* count lines in input */

main()

{

int c, nl;

nl = 0;

while ((c = getchar()) != EOF)

if (c == '\n')

++nl;

printf("%d\n", nl);

}

在该程序中,while 循环语句的循环体是一个 if 语句,它控制自增语句++nl。if 语句先测试圆括号中的条件,如果该条件为真,则执行其后的语句(或括在花括号中的一组语句)。这里再次用缩进方式表明语句之间的控制关系。

双等于号==是 C 语言中表示“等于”关系的运算符(类似于 Pascal 中的单等于号=及 Fortran 中的.EQ.)。由于 C 语言将单等于号=作为赋值运算符,因此使用双等于号==表示相等的逻辑关系,以示区分。这里提醒注意,在表示“等于”逻辑关系的时候(应该用==),C 语言初学者有时会错误地写成单等于号=。在后面我们将看到,即使这样误用了,其结果通常仍然是合法的表达式,因此系统不会给出警告信息。

单引号中的字符表示一个整型值,该值等于此字符在机器字符集中对应的数值,我们称之为字符常量。但是,它只不过是小的整型数的另一种写法而已。例如,'A'是一个字符常量;在 ASCII 字符集中其值为 65(即字符 A 的内部表示值为 65)。当然,用'A'要比用 65 好,因为。'A'的意义更清楚,且与特定的字符集无关。

字符串常量中使用的转义字符序列也是合法的字符常量,比如,'\n'代表换行符的值,在 ASCII 字符集中其值为 10。我们应当注意到,'\n'是单个字符,在表达式中它不过是一个整型数而已;而"\n"是一个仅包含一个字符的字符串常量。

下面编写一个统计空格、制表符与换行符个数的程序。

#include

main()

{

/* blanks, tabs, and newlines */

int c, nb, nt, nl;

nb = 0;

nt = 0;

nl = 0;

while( (c = getchar()) != EOF)

{

if(c == ' ')

++nb;

if(c == '\t')

++nt;

if(c == '\n')

++nl;

}

printf("%d %d %d \n", nb, nt, nl);

}

统计输入的单词个数

这里对单词的定义比较宽松,它是任何其中不包含空格、制表符或换行符的字符序列。下面这段程序是 UNIX 系统中 wc 程序的骨干部分:

#include

#define IN 1 /* inside a word */

#define OUT 0 /* outside a word */

/* count lines, words, and characters in input */

main()

{

int c, nl, nw, nc, state;

state = OUT;

nl = nw = nc = 0;

while ((c = getchar()) != EOF)

{

++nc;

if (c == '\n')

++nl;

if (c == ' ' || c == '\n' || c == '\t')

state = OUT;

else if (state == OUT) {

state = IN;

++nw;

}

}

printf("%d %d %d\n", nl, nw, nc);

}

程序执行时,每当遇到单词的第一个字符,它就作为一个新单词加以统计。state 变量记录程序当前是否正位于一个单词之中,它的初值是“不在单词中”,即初值被赋为 OUT。我们在这里使用了符号常量 IN 与 OUT,而没有使用其对应的数值 1 与 0,这样程序更易读。在较小的程序中,这种做法也许看不出有什么优势,但在较大的程序中,如果从一开始就这样做,因此而增加的一点工作量与提高程序可读性带来的好处相比是值得的。读者也会发现,如果程序中的幻数都以符号常量的形式出现,对程序进行大量修改就会相对容易得多。

下列语句 nl = nw = nc = 0; 将把其中的 3 个变量 nl、nw 与 nc 都设置为 0。这种用法很常见,但要注意这样一个事实:在兼有值与赋值两种功能的表达式中,赋值结合次序是由右至左。所以上面这条语句等同于 n1 = (nw = (nc = 0));

运算符||代表 OR(逻辑或),所以下列语句 if (c == ' ' || c== '\n' || c == '\t') 的意义是“如果 c 是空格,或 c 是换行符,或 c 是制表符”(前面讲过,转义字符序列\t 是制表符的可见表示形式)。相应地,运算符&&代表 AND(逻辑与),它仅比||高一个优先级。由&&或||连接的表达式由左至右求值,并保证在求值过程中只要能够判断最终的结果为真或假,求值就立即终止。如果 c 是空格,则没有必要再测试它是否为换行符或制表符,这样就不必执行后面两个测试。在这里,这一点并不特别重要,但在某些更复杂的情况下这样做就有必要了,不久我们将会看到这种例子。

这段程序中还包括一个 else 部分,它指定当 if 语句中的条件部分为假时所要执行的动作。其一般形式为:

if (表述式)

语句 1

else

语句 2

其中,if-else 中的两条语句有且仅有一条语句被执行。如果表达式的值为真,则执行语句 1,否则执行语句 2。这两条语句都既可以是单条语句,也可以是括在花括号内的语句序列。在单词计数程序中,else 之后的语句仍是一个 if 语句,该 if 语句控制了包含在花括号内的两条语句。

c语言 统计数量用count_C语言编程中统计输入的行数以及单词个数的方法相关推荐

  1. c语言 统计数量用count_C语言编程学习之递归实现汉诺塔图解!还有零基础入门视频~...

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  2. c语言 统计数量用count_c语言中统计重复数字次数 c语言问题 统计不同数字的个数...

    请问c语言当中,如何统计数字各自出现的次数 请教一个问题: 在c语言当中,用数组的方法,统计输入的一串数字,统计实现代码: #include int main() { int num = 0, i = ...

  3. c语言gcb最小公倍数,C编序编程题目:输入两个正整数m和n,求其最大公约数和最小公倍...,C语言编程,输入两个正整数M和N(MN),计算M和N...

    问题标题 C编序编程题目:输入两个正整数m和n,求其最大公约数和最小公倍...,C语言编程,输入两个正整数M和N(M 2019-3-27来自ip:15.121.164.188的网友咨询 浏览量:228 ...

  4. c语言case后接printf,C编程中switch。case 问题

    int main() { int imonth; printf("请输入月份:\n"); scanf_s("%d",&imonth,2); switch ...

  5. 【C语言】取余%操作在编程中的重要作

    0.做个假设:有一个五位数:12345--> 第一类必知小知识点:除法/--去掉尾数(或:顺序取数) ①去掉最后4位数字(即取首数): 12345 /10000=1.×××× ②去掉最后3位数字 ...

  6. python输入一个英文句子 输出单词个数_编写程序,给出一个英文句子,统计单词个数。_学小易找答案...

    [简答题]叙述pass语句的作用. [简答题]吹风机不工作,可以用万用表检测吗?在网上搜索关键词,吹风机不工作怎么办? [单选题]以下代码运行结果正确的是哪一项?() x=2 if x:print(T ...

  7. 计算机统计字符数,如何在Word中统计相同字符(文字)出现的个数 -电脑资料

    大家都知道,在Word中我们可以统计一篇文章字符的总个数! 但是,却不知道是啥原因,不知道是Word觉得此功能太简单了,还是忽略了这一点;却没有统计相同字符个数的功能! 但这未提供的功能却广为大众所需 ...

  8. c语言 统计数量用count_C语言中count该怎么用

    展开全部 函数COUNT在计数时,将把数字.空值.逻辑值.日期或以文字代e5a48de588b662616964757a686964616f31333431353338表的数计算进去:但是错误值或其他 ...

  9. c语言整数幂怎么编译_c语言编程中如何输入幂次方

    展开全部 1.头文件:#include 2.原型: double pow(double x, double y); pow() 函数用来求 x 的 y 次幂(次方e69da5e6ba903231313 ...

最新文章

  1. NeurIPS 2020 接收率创史低,千篇论文被摘要拒稿,官方:错误率只有 6%
  2. jqueryui时间插件_jQueryUI Progressbar插件
  3. Python学习笔记-异常处理
  4. 用pygame实现打飞机游戏-2-检测键盘
  5. 如何用计算机制作统计图,统计图制作_ai的环形统计图怎么制作
  6. SPSS安装以及如何解决can not create java virtual machine问题
  7. 高中数学建模优秀论文_高中数学建模优秀论文大纲格式 高中数学建模优秀论文大纲怎么写...
  8. Godot简单的斜抛运动
  9. java知识点ppt背景图片_Java 给 PowerPoint 文档添加背景颜色和背景图片
  10. 2019开源BI软件排行榜
  11. BurpSuite2021 -- 目标模块(Target)
  12. 微信小程序海报功能(canvas)- - -附效果图
  13. NDK开发——FFmpeg实现视频转YUV、视频转RGB显示、音频转PCM、音频播放、音视频同步
  14. Measurement Studio 2019 for Visual Studio 2019
  15. arch linux笔记本安装kde桌面环境
  16. 新版标准日本语高级_第14课
  17. 厉害了!腾讯又一开源力作发布!
  18. 利用苏宁API接口获取北京时间授时
  19. 千寻位置服务器地址和端口,全球最大规模高精度定位路测,多场景力证千寻位置服务和算法...
  20. phpstorm ftp连不上 flashfxp 显示 PORT 模式连接成功

热门文章

  1. 阿里java规范_阿里Java规范
  2. 一分钟在云端快速创建MySQL数据库实例
  3. Qt connect parent widget 连接父控件的信号槽
  4. 【转】XP下OpenProcess( PROCESS_ALL_ACCESS...失败
  5. Perl多线程ping加端口扫描
  6. VB之Collection---Collection集合类
  7. RK3288的GTxx触摸屏驱动调试
  8. 【信息系统项目管理师】第8章-项目质量管理 知识点详细整理
  9. python遍历目录树 除文件_python遍历目录树删除指定后缀的文件
  10. Linux 中的旧扣簧键盘(Bucklespring 键盘)声音