First page of the C语言艺术 archive.

C程序设计语言笔记2

Posted by WOK_0day on 2010-08-09 with No Comments
in C语言艺术

继续昨天的课程,貌似今天才看了一点,就继续忙别的了,好吧,我就慢慢看吧.

对于while 循环以及getchar 和putchar有了更深入的理解,嗯,今天就放上来三题吧.

1-8 .  编写一个统计空格、制表符与换行符个数的程序

#include “stdio.h”

int main()

{

int   c , h , k , z  ;

h=0,k=0,z=0 ;

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

{

if (c ==’ ‘)

++k ;

if (c ==’\n’)

++h ;

if (c ==’\t’)

++z ;

}

printf(“%d %d %d”,k z h);

}

此题比较简单,但是本人在做的时候还是错了,因为单引号和双引号的混淆了.

以为一直用双引号就可以了,现在发现错了,先整理下2者的区别

1、含义不同。

用单引号引起的一个字符实际上代表一个整数,整数值对应于该字符在编译器采用的字符集中的序列值。而一般我们的编译器采用的都是ASCII字符集。因此’s'的含义其实和十进制数115的含义是一致的。

而用双引号引起的字符串,代表的是一个指向无名数组起始字符的指针。

2、大小不同。

用单引号引起的一个字符大小就是一个字节。

而用双引号引起的字符串大小是字符的总大小+1,因为用双引号引起的字符串会在字符串末尾添加一个二进制为0的字符’\0′。

1-9 .编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格替代.

#include “stdio.h”

int main()

{

int c , pc ;

pc = 0 ;

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

{

if (c !=’ ‘)

putchar(c) ;

if (c ==’ ‘)

if (pc !=’ ‘)

putchar(c);

pc = c;

}

return 0 ;

}

刚开始对于如何确定输入的是连续空格,思考很久,无果,于是,我可耻的看了答案,又经过对代码的分析,终于有了收获.

对于

if (c ==’ ‘)

if (pc !=’ ‘)

putchar(c);

pc = c   这四行是本题的关键,理解就好 ;;

1-10.编写一个将输入复制到输出的程序,并将其中的制表符替换为\t,把退格符替换为\b,把反斜杠替换为\\,使它们以可见的形式显示出来.

#include “stdio.h”

int main()

{

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

{

if (c ==’\t’)

printf(“\\t”);

if (c ==’\b’)

printf(“\\b”);

if (c ==’\\’ )

printf(“\\\\”);

if (c ==’\t’)

if (c ==’\b’)

if (c ==’\\’ )

putchar(c) ;

}

return 0 ;

}

此题关键还是单双引号的应用,今天就这三题.

ps : 未完,待续..

C程序设计语言笔记1

Posted by WOK_0day on 2010-08-08 with No Comments
in C语言艺术

今天开始读了 c语言程序设计,很多人都说是经典,于是..我也跟风了 ;;

阅读后发现本书果然和国内的书本不一样,没有教条式的讲解,没有一味的讲基础.

下面我把自己做的题发上来,算是见证自己的学习.代码都是用GCC编译

1-6 .验证表达式 getchar != EOF 的值是0还是1 .

#include “stdio.h”

int main()

{

int c ;

c =( getchar() != EOF ) ;

printf(“%d”,c);

return 0;

}

此题网上很多人和我做的不一样,他们都用的是循环;估计是受到了题目前面文章的影响..

1-7 .编写一个打印EOF值的程序

#include “stdio.h”

int main()

{

printf(“EOF is %d”,EOF);

return 0;

}

没错,就这么简单,因为EOF是定义在头文件 “stdio.h”中的一个整数值..

ps : 未完,待续..

Free Web Hosting