《C和指针》一1.8 编程练习

简介:

本节书摘来自异步社区《C和指针》一书中的第1章,第1.8节,作者 【美】Kenneth A.Reek,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.8 编程练习

1.“Hello world!”程序常常是C编程新手所编写的第1个程序。它在标准输出中打印Hello world!,并在后面添加一个换行符。当你希望摸索出如何在自己的系统中运行C编译器时,这个小程序往往是一个很好的测试例。

1112.编写一个程序,从标准输入读取几行输入。每行输入都要打印到标准输出上,前面要加上行号。在编写这个程序时要试图让程序能够处理的输入行的长度没有限制。

3.编写一个程序,从标准输入读取一些字符,并把它们写到标准输出上。它同时应该计算checksum值,并写在字符的后面。

checksum(检验和)用一个singed char类型的变量进行计算,它初始为-1。当每个字符从标准输入读取时,它的值就被加到checksum中。如果checksum变量产出了溢出,那么这些溢出就会被忽略。当所有的字符均被写入后,程序以十进制整数的形式打印出checksum的值,它有可能是负值。注意在checksum后面要添加一个换行符。

在使用ASCII码的计算机中,在包含“Hello world!”这几个词并以换行符结尾的文件上运行这个程序应该产生下列输出:

  Hello world!
 102

4.编写一个程序,一行行地读取输入行,直至到达文件尾。算出每行输入行的长度,然后把最长的那行打印出来。为了简单起见,你可以假定所有的输入行均不超过1000个字符。

1115.rearrange程序中的下列语句

    if( columns[col] >= len ... )
         break;

当字符的列范围超出输入行的末尾时就停止复制。这条语句只有当列范围以递增顺序出现时才是正确的,但事实上并不一定如此。请修改这条语句,即使列范围不是按顺序读取时也能正确完成任务。

6.修改rearrange程序,去除输入中列标号的个数必须是偶数的限制。如果读入的列标号为奇数个,函数就会把最后一个列范围设置为最后一个列标号所指定的列到行尾之间的范围。从最后一个列标号直至行尾的所有字符都将被复制到输出字符串。

[1] NUL是ASCII字符集中‘0’字符的名字,它的字节模式为全0。NULL指一个其值为0的指针。它们都是整型值,其值也相同,所以它们可以互换使用。然而,你还是应该使用适当的常量,因为它能告诉阅读程序的人不仅使用0这个值,而且告诉他使用这个值的目的。

[2]符号NULL在头文件stdio.h中定义。另一方面,并不存在预定义的符号NUL,所以如果你想使用它而不是字符常量‘0’,你必须自行定义。

[3]但是,即使你在它前面加上一个“&”也没有什么不对,所以如果你喜欢,也可以加上它。

[4]“循环终止(the loop break)”这句话的意思是循环结束而不是它突然出现了毛病。这句话源于break语句,我们将在第4章讨论它。

[5]有些较新的编译器在发现if和while表达式中使用赋值符时会发出警告信息,其理论是在这样的上下文环境中,用户需要使用比较操作的可能性要远大于赋值操作。

[6]加上前缀和后缀++操作符,事实上共有4种方法增加一个变量的值。

[7]精明的读者会注意到,如果遇到特别长的输入行,我们并没有办法防止gets函数溢出。这个漏洞确实是gets函数的缺陷,所以应该换用fgets(将在第15章描述)。

[8]如果源字符串的字符数少于第3个参数指定的复制数量,目标字符串中剩余的字节将用NUL字节填充。

[9] 但预处理指令则有较严格的规则。

相关文章
|
1月前
C进阶:指针的练习(1)
C进阶:指针的练习(1)
|
2月前
|
C++
【编码狂想】指针航行,链表魔法,解锁结构体和类的编程幻境
【编码狂想】指针航行,链表魔法,解锁结构体和类的编程幻境
58 1
|
6月前
|
C++
关于指针,你不可以错过的练习(c/c++)
关于指针,你不可以错过的练习(c/c++)
47 0
|
1月前
|
存储 编译器 程序员
【C/C++ this指针 20240105更新】探索C++编程之旅:深入理解this指针的魅力与应用
【C/C++ this指针 20240105更新】探索C++编程之旅:深入理解this指针的魅力与应用
28 0
|
2月前
|
存储 搜索推荐
【C/PTA】指针专项练习(二)
【C/PTA】指针专项练习(二)
51 0
|
2月前
【C/PTA】指针专项练习(一)
【C/PTA】指针专项练习(一)
34 0
|
3月前
|
存储 C++
【指针三:穿越编程边界的超能力】(下)
【指针三:穿越编程边界的超能力】
|
3月前
【指针三:穿越编程边界的超能力】(上)
【指针三:穿越编程边界的超能力】
|
3月前
|
存储
【指针二:穿越编程边界的超能力】
【指针二:穿越编程边界的超能力】
|
3月前
|
存储 编译器 C语言
【指针一:穿越编程边界的超能力】
【指针一:穿越编程边界的超能力】