《C和指针》第2章习题

2.7 问题

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

转义符含义
\a警告字符。他将奏响终端铃声或者产生其他一些可听见或者可看见的符号
\b退格符
\f进纸符号
\n换行符号
\r回车符
\t水平制表符
\v垂直制表符
\dddddd表示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;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值