Chinaunix首页 | 论坛 | 博客
  • 博客访问: 407181
  • 博文数量: 128
  • 博客积分: 2247
  • 博客等级: 大尉
  • 技术积分: 767
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-17 09:30
文章分类

全部博文(128)

文章存档

2011年(4)

2010年(124)

我的朋友

分类: C/C++

2010-07-22 00:06:52

第一章:
1、编写一个将输入复制到输出和程序,并将其中的制表符替换为\t,把回退符替换成\b,把反斜杠替换为 \\,这样可以将制表符和回退符以可见的方式显示 出来。(1-10)

2、你准备如何测试单词计数程序?如果程序中存在某种错误,那么什么样的输入最可能发现这类错误呢?(1-11)

3、 编写一个程序,以每行一个单词的形式打印其输入。(1-12)
    int c, state;   //inside a word
    state = OUT;  //outside a word

    //pirnt input one word per line
    while((c = getchar()) != EOF)
    {
        if(c == ' ' || c == '\n' || c == '\t')
        {
            if(state == IN)
            {
                state = OUT;               
                putchar('\n');  //finish the word
            }           
        }
        else if(state == OUT)
        {
            state = IN;
            putchar(c);  //beginning of word
        }       
        else
            putchar(c);  //inside a word
    }
分析:整形变量state是一个布尔量,用于刻录程序的处理过程是否正处于某个单词的内部。在程序刚开始运行的暑假,变量state将被初始 化为OUT,表明尚未处理任何数据。
    第一个if语句: if(c == ' ' || c == '\n' || c == '\t') 判断变量c是否是一个单词分隔符。如果是,则第二条if语句 if(state == IN)将判断这个单词分隔符是否表示某个单词结束。如果是,就输出一个换行符并修改变量state的值;如果不是,则不进行任何操作。
    如果c不是一个单词分隔符,那么,它将或者是某单词的第一个字符、或者是一个单词中除第一个字符之外的其他字符。对于第一种情况(是某单词的第一个字 符),程序修改变量state的值并输出这个字符;对于第二种情况(是一个单词中除第一个字符之外的其他字符),程序直接输出这个字符。

4、 直方图的输出。(1-13)

5、修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文 本。(1-16)--------getline()   copy()

6、编写一个程序,删除每个输入行末尾的空格及制表符,关删除完全是空格的行。 (1-18) remove()

7、编写函数reverse(s)将字符串s中的字符顺序颠倒过来。使用该函数编写一个程序,每次颠倒一 个输入行中的字符顺序。(1-19) reverse()

8、请编写程序detab,将输入中的制表符替换成适当数目的空格,使空格充满 到下一个制表符终止的地方。假设制表符终止位的位置是固定的,比如每隔n列就会出现一个制表符终止位。n应该作为变量还是符号常量呢?(1-20)

9、 编写程序entab,将空格串替换为最少数量的制表符和空格,但要保持单词之间的间隔不变。假设制表符终止的位置与练习1-20的detab程序的情况相 同。当使用一个制表符或者一个空格都可以到达下一个制表符终止位时,选用哪种替换字符比较好?(1-21)

10、编写一个程序,把较长的 输入行“拆”成短一些的两行或多行,拆行的位置在输入行的第n列之前的最后一个非空格符之后。要保证程序能够智能地处理输入行很长以及在指定的列前没有空 格或制表符的情况。(1-22)

11、编写一个删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符串常量。在C语言程序 中,注释不允许嵌套。(1-23)

12、编写一个程序,查找C语言程序中的基本语法错误,如圆括号、方括号以及花括号不配对等。要正确处 理引号(包括单引号、双引号)、转义字符序列与注释。(1-24)
------------------------------------------------------------------------------------------------------------------------------------

第二章:
1、编写一个将输入复制到输出和程序,并将其中的制表符替换为\t,把回退符替换成\b,把反斜杠替换为\\,这样可 以将制表符和回退符以可见的方式显示 出来。(1-10)

2、你准备如何测试单词计数程序?如果程序中存在某种错误,那么什么样的输入最可能发现这类错误呢?(1-11)

3、 编写一个程序,以每行一个单词的形式打印其输入。(1-12)
    int c, state;   //inside a word
    state = OUT;  //outside a word

    //pirnt input one word per line
    while((c = getchar()) != EOF)
    {
        if(c == ' ' || c == '\n' || c == '\t')
        {
            if(state == IN)
            {
                state = OUT;               
                putchar('\n');  //finish the word
            }           
        }
        else if(state == OUT)
        {
            state = IN;
            putchar(c);  //beginning of word
        }       
        else
            putchar(c);  //inside a word
    }
分析:整形变量state是一个布尔量,用于刻录程序的处理过程是否正处于某个单词的内部。在程序刚开始运行的暑假,变量state将被初始 化为OUT,表明尚未处理任何数据。
    第一个if语句: if(c == ' ' || c == '\n' || c == '\t') 判断变量c是否是一个单词分隔符。如果是,则第二条if语句 if(state == IN)将判断这个单词分隔符是否表示某个单词结束。如果是,就输出一个换行符并修改变量state的值;如果不是,则不进行任何操作。
    如果c不是一个单词分隔符,那么,它将或者是某单词的第一个字符、或者是一个单词中除第一个字符之外的其他字符。对于第一种情况(是某单词的第一个字 符),程序修改变量state的值并输出这个字符;对于第二种情况(是一个单词中除第一个字符之外的其他字符),程序直接输出这个字符。

4、 直方图的输出。(1-13)

5、修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文 本。(1-16)--------getline()   copy()

6、编写一个程序,删除每个输入行末尾的空格及制表符,关删除完全是空格的行。 (1-18) remove()

7、编写函数reverse(s)将字符串s中的字符顺序颠倒过来。使用该函数编写一个程序,每次颠倒一 个输入行中的字符顺序。(1-19) reverse()

8、请编写程序detab,将输入中的制表符替换成适当数目的空格,使空格充满 到下一个制表符终止的地方。假设制表符终止位的位置是固定的,比如每隔n列就会出现一个制表符终止位。n应该作为变量还是符号常量呢?(1-20)

9、 编写程序entab,将空格串替换为最少数量的制表符和空格,但要保持单词之间的间隔不变。假设制表符终止的位置与练习1-20的detab程序的情况相 同。当使用一个制表符或者一个空格都可以到达下一个制表符终止位时,选用哪种替换字符比较好?(1-21)

10、编写一个程序,把较长的 输入行“拆”成短一些的两行或多行,拆行的位置在输入行的第n列之前的最后一个非空格符之后。要保证程序能够智能地处理输入行很长以及在指定的列前没有空 格或制表符的情况。(1-22)

11、编写一个删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符串常量。在C语言程序 中,注释不允许嵌套。(1-23)

12、编写一个程序,查找C语言程序中的基本语法错误,如圆括号、方括号以及花括号不配对等。要正确处 理引号(包括单引号、双引号)、转义字符序列与注释。(1-24)

------------------------------------------------------------------------------------------------------------------------------------

第三章:
1、折半查找 int binsearch(int x, int v[], int n)

2、编写 一个函数escape(s, t),将字符串t复制到字符串s中,并在复制过程中将换行符、制表符等不可显示字符分别转换为\n、\t等相应的可显示的转义字符序列。要求使用 switch语句。再编写一个具有相反功能的函数,在复制过程中将转义字符序列转换为实际字符。

3、编写函数 expand(s1,s2),将字符串s1中类似于a-z一类的速记符号在字符串s2中扩展为等价的完整列表abc.....xyz。该函数可以处理大小 写字母和数字,并可以处理a-b-c、a-z0-9与a-z等类似的情况。作为前导和尾随的字符原样复制。(3-3)

4、在数的对二的补 码表示中,我们编写的itoa函数不能处理最大的负数,即n等于-(2的(字长-1)次方)的情况。请解释其原因。修改该函数,使它在任何机器上运行时都 能打印出正确的值。

5、编写函数 itob(n, s, b),将整数n转换为以b为底的数,并将转换结果以字符的形式保存到字符串s中。(3-5)

6、修改 itoa 函数,使得该函数可以接收三个参数。其中,第三个参数为最小字段宽度。为了保证转换后所得的结果至少具有第三个参数指定的最小宽度,在必要时应在所得结果 的左边填充一定的空格。
阅读(3411) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~