c程序设计语言练习1-12:编写一个程序,以每行一个单词的形式打印其输入。

此处单词是指除空格,TAB键,换行字符和文件结束符号(EOF)之外的其他字符。
我的代码如下:
而《the c answer book》中的代码如下:

   1. #include 《stdio.h>  2.   3. #define IN 1  4. #define OUT 0  5.   6. /* print input one word perl line*/  7. main()  8. {  9.   int c,state;  10.     11.   state = OUT;  12.   while((c = getchar()) !=EOF){  13.     if(c == ' '||c == '\n' || c == '\t'){  14.        if(state == IN){  15.          putchar('\n');  16.          state = OUT;  17.        }  18.     } else if (state == OUT){  19.         state = IN;  20.          putchar(c);  21.     }else  22.          putchar(c);  23.     }  24. }  

这个程序能够解决这个习题,但是整个程序看起来却有点冗余(毕竟这本书是1988年出版的)。因为最后的两种情况完全可以合并。
所以另一个网站 给出的答案如下:

   1. #include <stdio.h>  2. int main(void)  3. {  4.   int c;  5.   int inspace;  6.   7.   inspace = 0;  8.   while((c = getchar()) != EOF)  9.   {  10.     if(c == ' ' || c == '\t' || c == '\n')  11.     {  12.       if(inspace == 0)  13.       {  14.         inspace = 1;  15.         putchar('\n');  16.       }  17.       /* else, don't print anything */  18.     }  19.     else  20.     {  21.       inspace = 0;  22.       putchar(c);  23.     }  24.   }  25.   return 0;  26. }  

这样看起来好一些,但是还显得不够简练,不过c程序设计语言中给出的程序(课本1.5.4单词计数的程序,跟这个程序以及习题1-9其实都是同一类问题)简练。这个程序虽然表面上看起来很简单,但是以我的笨脑子,最先想到的是找个字符数组来存储每个单词并将之输出。后来仔细想了想,直接用putchar就可以了。这个算法根据前一个字符和当前字符的值(每个值都可能是空白字符或者单词字符)分成四种情况。而根据其值的特殊性有些情况下是不需要做任何操作,所以可以合并成两种情况就可以了,这样看起来逻辑也更清晰一些。
我写的代码如下:

   1. #include <stdio.h>  2.   3. #define TRUE 1  4. #define FALSE 0  5.   6. int main()  7. {  8.   int c; /* a character variable */  9.   int b; /* a bool variable whose value is TRUE or FALSE  10.       which indicates current character is in a word or out of a word*/  11.   12.   b = FALSE;  13.   while( (c = getchar()) != EOF)  14.     if( c != ' ' && c != '\t' && c != '\n')  15.       {  16.         putchar(c);  17.         b = TRUE;  18.       }  19.     else if(b == TRUE)  20.       {  21.         printf("\n");  22.         b = FALSE;  23.       }  24.   return 0;  25. }  

《c程序设计语言》练习1-12相关推荐

  1. C程序设计语言现代方法12:指针和数组

    目录 1. 指针的算术运算 1.1 概述 1.2 C语言支持的算术运算类型 2. 指针的比较 3. 指针用于数组处理 4. 数组名与指针 4.1 用数组名作指针 4.2 数组取下标操作 4.3 惯用法 ...

  2. 安徽省2012年下半年计算机水平考试(二级 c语言程序设计),安徽省计算机等级二级考试真题C语言2012年12月...

    安徽省计算机等级二级考试真题C语言2012年12月 2012年下半年全国高等学校(安徽考区) 计算机水平考试试卷 (二级 C语言程序设计) 一.单项选择题(每题1分,共40分) 1.微型机的中央处理器 ...

  3. 安徽省2012年下半年计算机水平考试(二级 c语言程序设计),安徽省计算机等级级考试真题C语言2012年12月.doc...

    安徽省计算机等级级考试真题C语言2012年12月,安徽省c语言二级考试,安徽省公务员考试真题,安徽省遴选考试真题,计算机等级二级c语言,c语言二级考试真题,江苏省计算机等级真题,安徽省二级c语言,计算 ...

  4. 201803考试批次2C 程序设计语言,201803考试批次2可视化程序设计(VB)D卷

    201803考试批次2可视化程序设计(VB)D卷 2018-12-15 903 201803考试批次2可视化程序设计(VB)D卷 可视化程序设计(VB) 一 .单项选择题 (共 10 题.0 / 20 ...

  5. 中国计算机学会CCF推荐国际学术会议和期刊目录-软件工程/系统软件/程序设计语言

    软件工程/系统软件/程序设计语言 中国计算机学会推荐国际学术期刊  (软件工程/系统软件/程序设计语言) 一.A类 序号 刊物简称 刊物全称 出版社 网址 1 TOPLAS ACM Transacti ...

  6. c#程序设计语言杜松江版_当前最流行的10款编程语言,你会哪种?

    现在市场上对计算机方面的人才需求量非常大,不过真正需要的是那些有技术的高端人才. 下面就是当前流行的编程语言,来看看都用了那些吧! (PS:排名仅代表作者观点,如有不同观点,请务必坚持自我哦~~~). ...

  7. 程序设计语言python语言概述

    程序设计语言 什么是程序设计语言 程序设计语言是人类与计算机交流和沟通的语言.人们通过使用程序语言,来书写计算机程序,以达到设计的程序满足需求的目的. 程序语言的发展历史 程序语言经历了从低级语言到高 ...

  8. [渝粤教育] 西南科技大学 程序设计语言VB 在线考试复习资料(1)

    程序设计语言VB--在线考试复习资料 一.单选题 1.列表项选择后得到的选中索引是指(). A.Value B.ListValue C.Index D.ListIndex 2.为了隐藏一个窗体,所使用 ...

  9. 《C程序设计语言》-第2章-习题

    本人写的代码可能与标准答案有出入,但运行是没问题的,欢迎大家相互参考学习. <C程序设计语言习题>2-1: 编写一个程序以确定分别由signed及unsigned限定的char.short ...

  10. 浅谈计算机程序设计语言,探讨计算机程序设计语言教学

    [文章摘要] 随着社会不断的发展与进步,计算机作为现代先进产物的代表,已经很快的进入到社会中的各行各业.而程序设计作为计算机的核心内容,也同样引起了大家的重视,同时计算机程序设计也是高校开设的一门重要 ...

最新文章

  1. jquery实现倒计时
  2. 语言坐标度分秒的换算_测量位置度说明
  3. php查真实地址,php教程:检查URL地址是否真实存在
  4. sentinel 时间窗口_Sentinel 实战-规则持久化
  5. 01-复杂度1 最大子列和问题(剑指offer和PAT)
  6. java 获得平台编码_关于Java平台的编码
  7. 计算机中十类指令寻址方式总结
  8. github java 性能,JavaGuide/手把手教你定位常见Java性能问题.md at master · Github-Programer/JavaGuide · GitHub...
  9. 2019年全国大学生电子设计竞赛赛题分享与浅析
  10. npm start 和 npm run start的关系以及npm run start传递参数
  11. carsim/trucksim获取轮胎侧偏刚度、纵向刚度
  12. webpack入门使用教程
  13. Andromeda 源码解析 (同步获取服务)
  14. 青龙-闪电世界(脚本更新)
  15. html ace编辑器,Springboot 集成 Ace editor前端编辑器
  16. ajax前端分页实现
  17. 怎样在tableau里做渐变柱状图
  18. 投资转型:实体店铺,投资经营复盘
  19. SCORM标准的LMS
  20. 2016级算法期末上机-I.难题·ModricWang's Fight with DDLs III

热门文章

  1. awk教程入门与实例练习(一)
  2. POJ1163 数字三角形
  3. 计数排序vs基数排序vs桶排序
  4. 【window】git安装教程
  5. 正则表达式知识详解(转自晴天碧日)
  6. android点滴27:R文件无法加载 R cannot be resolved to a v...
  7. asp.net网页中导出EXCEL,WORD的环境设置验证实例
  8. Spring tx:advice/
  9. 优化mysql数据库_MySQL数据库十大优化技巧
  10. Java中nextfloat怎么用,关于java的nextFloat()后面跟一个nextLine()