《C和指针》第2章习题

2.7 问题

4 \40 的值是多少?\100、\x40、\x100、\0123、\x0123的值又分别是多少?
知识点:

转义符 含义
\a 警告字符。他将奏响终端铃声或者产生其他一些可听见或者可看见的符号
\b 退格符
\f 进纸符号
\n 换行符号
\r 回车符
\t 水平制表符
\v 垂直制表符
\ddd ddd表示1~3个八进制数字。这个转义符表示的字符就是给定的八进制数值所代表的字符。
\xddd 与上例相同,只是八进制换成十六进制

答: 假定使用的是ASCII字符集,存在下面相等关系。
\40 = 32 = 空格字符
\100 = 64 = ‘@’
\x40 = 64 = ‘@’
\x100 占据12位(尽管前三位为零)。在绝大多数机器上,这个值过于庞大,无法存储于一个字符内,所以它的结果因编译器而异。
\0123 由两个字符组成,‘\012’和‘3’。其结果因编译器而异。
\x0123 过于庞大,无法存储于一个字符内,其结果因编译器而异。

7 是非题:因为C(除了预处理指令外)是一种自由形式的语言,唯一规定程序应如何编写的规则就是语法规则,所以程序实际看上去的样子无关紧要。
答:有对有错。对:除了预处理指令之外,语言并没有对程序应该出现的外观施加任何规则。错:风格恶劣的程序难以维护或无法维护,所以除了极为简单的程序之外,绝大多数程序的编写风格是非常重要的。

2.8 编程练习

2 编写一个程序,它从标准输入读取C源代码,并验证所有花括号都正确地成对出现。注意:你不必担心注释内部、字符串常量内部和字符常量形式的花括号。
思路:简单的设置一个变量,初始化为0,出现左括号加一,出现右括号减一,最后判断如果为0表示成对出现,非零则是不成对出现。对于注释,如果出现“/”,“/”不对中间出现的进行计数。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int count=0;
    int flag = 1;


    char ch;
    while( (ch = getchar()) != EOF){
        if(flag ==1 && ch == '/'){
            flag = 0;
        }else if(flag == 0 && ch == '/'){
            flag = 1;
        }
        //左花括号始终是合法的。
        if(flag == 1 && ch == '{'){
            count ++;
        }else if(flag == 1 && ch == '}'){
            //右花括号只有当它和一个左花括号匹配时才是合法的。
            if(count == 0){
                printf("Extra closing brace!\n");
            }else{
                count --;
            }
        }

    }

    if(count == 0){
        printf("成对");
    }else{
        printf("不成对(多出右括号)");
    }

    return EXIT_SUCCESS;
}

猜你喜欢

转载自blog.csdn.net/lanzijingshizi/article/details/83539449