《c程序设计语言》练习1-12

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. }  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/546184.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在Java中对Collection对象进行排序?

排序集合的对象 (Sorting objects of the Collection) This concept is related to sorting and here we will see how to sort objects on the Collection? 这个概念与排序有关&#xff0c;在这里我们将看到如何对Collection上的对象进行排序&#xff1f; In java, we have u…

CFD分析过程(CFD Analysis Process)

2019独角兽企业重金招聘Python工程师标准>>> CFD分析过程 进行CFD分析的一般过程如下所示&#xff1a; 1、将流动问题表示为表达式 2、建立几何与流域的模型 3、设置边界条件和初始条件 4、生成网格 5、设置求解策略 6、设置输入参数与文件 7、进行仿真 8、监视仿真…

《数据结构与算法分析-C语言描述》习题2.6

《数据结构与算法分析-C语言描述》&#xff08;[urlhttp://users.cis.fiu.edu/~weiss/#dsaac2e]Data Structures and Algorithm Analysis in C[/url])习题2.6 该题要求计算几个循环的复杂度&#xff0c;并用程序计算出程序的执行时间。我在linux下的c程序如下&#xff1a;/* ex…

Redis 6.0 正式版终于发布了!除了多线程还有什么新功能?

这是我的第 56 篇原创文章Redis 6.0.1 于 2020 年 5 月 2 日正式发布了&#xff0c;如 Redis 作者 antirez 所说&#xff0c;这是迄今为止最“企业”化的版本&#xff0c;也是有史以来改动最大的一个 Redis 版本&#xff0c;同时也是参与开发人数最多的一个版本。所以在使用此版…

在Java中从字符串转换为双精度

Given a string value and we have to convert it into a double. 给定一个字符串值&#xff0c;我们必须将其转换为双精度型。 Java conversion from String to Double Java从String转换为Double To convert a String to Double, we can use the following methods of Doubl…

如何优雅地「蜗居」?

如果我们把「蜗居」理解为小户型、小空间居住&#xff0c;包括合租、大开间等&#xff0c;如何才能让「蜗居」丝毫不尴尬&#xff0c;所谓「优雅」&#xff0c;就是排除客观限制&#xff0c;最大限度的提升居住品质。王珦&#xff0c;室内设计师&#xff0c;文字编辑 蜗居要看“…

计算程序的执行时间

在windows下计算一段程序的执行时间&#xff0c;有以下方法&#xff1a; &#xff08;1&#xff09;&#xff1a;使用[urlhttp://msdn.microsoft.com/en-us/library/4e2ess30%28VS.71%29.aspx]clock()[/url]函数&#xff08;需包含头文件time.h) 我的c程序代码如下&#xff1a;…

一文带你看完ZooKeeper!

作者 | FrancisQ来源 | JavaGuide“文章很长&#xff0c;先赞后看&#xff0c;养成习惯。❤️ ???? ???? ???? ???? ????”什么是ZooKeeperZooKeeper 由 Yahoo 开发&#xff0c;后来捐赠给了 Apache &#xff0c;现已成为 Apache 顶级项目。ZooKeeper 是一…

c# uri.host_C#| Uri.HostNameType属性与示例

c# uri.hostUri.HostNameType属性 (Uri.HostNameType Property) Uri.HostNameType Property is the instance property of Uri class which used to get the type of hostname specified in the given URI. This property returns a string value. This property may generate …

Struts里面的配置笔记

xml配置 package 用来区分重名 namespace 必须/开头 里面写的内容 前台反问的时候就加上 如果不写的话 只要你在url里面敲action都可以访问的到 result 默认的是SUCCESS 拷贝一个工程的时候要注意修改web里面的 context-root 转载于:https://www.cnblogs.com/yuzhengdong/p/394…

2023年底和2024年节假日及补班日期

holiday:#节假日- 2023-12-30- 2023-12-31- 2024-01-01- 2024-02-10- 2024-02-11- 2024-02-12- 2024-02-13- 2024-02-14- 2024-02-15- 2024-02-16- 2024-02-17- 2024-04-04- 2024-04-05- 2024-04-06- 2024-05-01- 2024-05-02- 2024-05-03- 2024-05-04- 2024-05-05- 2024-06-10-…

一些书评网站

http://c2.com/cgi/wiki?CategoryBook 计算机方面的书籍推荐 http://bookshelved.org/cgi-bin/wiki.pl?backBookOnTheBookshelf 各种书籍推荐 http://accu.org/index.php?modulebookreviews&funcsearch accu书评 http://www.softpanorama.org/Bookshelf/classic.s…

HashMap 的 7 种遍历方式与性能分析!「修正篇」

这是我的第 57 篇原创文章首先&#xff0c;给大家说声抱歉~事情经过是这样子的&#xff0c;五一节前我发布了一篇文章《HashMap 的 7 种遍历方式与性能分析&#xff01;》&#xff0c;但是好心的网友却发现了一个问题&#xff0c;他说 “测试时使用了 sout 打印信息会导致测试的…

c# uri.host_C#| Uri.EscapeUriString()方法与示例

c# uri.hostUri.EscapeUriString()方法 (Uri.EscapeUriString() Method) Uri.EscapeUriString() method is a static method that is used to convert specified Uri string in escaped representation. Uri.EscapeUriString()方法是一个静态方法&#xff0c;用于转换转义表示形…

今天是 OSChina 上线 6 周年!

2019独角兽企业重金招聘Python工程师标准>>> 没什么想说的&#xff0c;除了感谢和继续努力外&#xff0c;感谢所有的 oscers 们、感谢 OSC 曾经和现在的小伙伴、感谢我们的合作伙伴。 今年还有4个月&#xff0c;主要工作安排包括&#xff1a; TeamOSC 上线 PaaSO…

coroutine资源索引

coroutine (通常被译为“协作程序”或"共行程序“&#xff09;是程序设计中一个非常重要的概念&#xff0c;通常可用于多任务协作处理、迭代器和管道中。它最早出现于”Design of a Separable . Transition -Diagram Compiler “这篇论文中,taocp (the art of computer p…

操作系统大内核和微内核_操作系统中的内核I / O子系统

操作系统大内核和微内核内核输入/输出子系统 (Kernel Input / Output subsystem) Input and output (I/O) devices permit us to communicate with the computer system. I/O is the transfer of data between RAM and various I/O peripherals. By using Input devices such a…

StackOverflow 上面最流行的 7 个 Java 问题!

StackOverflow发展到目前&#xff0c;已经成为了全球开发者的金矿。它能够帮助我们找到在各个领域遇到的问题的最有用的解决方案&#xff0c;同时我们也会从中学习到很多新的东西。这篇文章是在我们审阅了StackOverflow上最流行的Java问题以及答案后从中挑出来的。即使你是一个…

UbuntuKylin安装SUN JDK1.7

1.下载jdk1.7.0_67并且解压&#xff0c;放知道/usr/local/lib/jvm目录下tar zxvf jdk1.7.0_67.tar.gzsudo mv jdk1.7.0_67 /usr/local/lib/jvm2.编辑~/.bashrc文件&#xff0c;添加如下内容。JAVA_HOME后的内容为你自定义的JDK存放目录export JAVA_HOME/usr/local/lib/jvm/jdk1…

程序设计竞赛资源索引

如果想提高编程能力&#xff0c;最重要的就是多练多学&#xff0c;现在网络上提供了大量的习题库&#xff0c;可以很方便的练习编程。 ACM/ICPC题库(支持c,c,java,pascal)&#xff1a; 台州学院acm :有不少习题使用中文描述&#xff0c;分类清晰&#xff0c;适合初学者。题目…