P26-P76结尾数组作业讲解

1.单选题

C 数组初始化只能使用{ }不能使用( )( )括起来就变成逗号表达式了
image.png

2.单选题

C 数组a[10],下标是09,a[10]表示第十一个,越阶了
image.png

3.单选题

B 下标从0开始
image.png

4.单选题

B arr[] = {1,2,(3,4),5}; (3,4)为逗号表达式,结果为最后一个,所以arr[] = {1,2,4,5}, sizeof运算4 * 4 = 16
image.png

5.单选题

A sizeof算数组算占空间的大小,要算\0,所以共十个元素,sizeof结果为10字节
strlen求字符串长度,原理是计算\0前有几个字符,所以strlen结果为9
image.png

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据教材 P76-78 4.5 预测分析程序的方法,我们可以按照以下步骤构造相关预测分析程序: 1. 构造预测分析表 根据教材 P76 表 4.1,我们可以构造出预测分析表如下: | | id | + | * | ( | ) | # | E | T | F | | -- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | | 0 | S | | | S->E | | | 1 | 2 | 3 | | 1 | | S->E+T| | | err | acc | | | | | 2 | | R3 | S->T | | R3 | R3 | | | | | 3 | | R6 | R6 | | R6 | R6 | | | | 其中,S 表示起始符号,# 表示输入串的结束符号,err 表示出错,acc 表示成功接受。 2. 编写预测分析程序 根据预测分析表,我们可以编写一个预测分析程序,程序的基本框架如下: ``` bool analyze(string input) { stack<int> stk; stk.push(0); // 初始状态为 0 int i = 0; // 输入串的指针 char X; // 栈顶符号 int state; // 状态编号 while (true) { X = stk.top(); // 取出栈顶符号 state = X - '0'; // 获取状态编号 char ch = input[i]; // 获取输入串的下一个字符 int col = getColumn(ch); // 获取输入字符对应的列号 char action = table[state][col]; // 查表获取动作 if (action == ' ') { // 出错 cout << "Error!" << endl; return false; } else if (action == 'acc') { // 成功接受 cout << "Accepted!" << endl; return true; } else if (action == 'S') { // 移进 stk.push(ch); // 将字符压入栈中 stk.push(action - '0'); // 将新状态压入栈中 i++; // 输入串指针后移 } else { // 规约 int len = getLength(action); // 获取规约所需弹出的符号数 for (int j = 0; j < 2 * len; j++) { // 弹出符号 stk.pop(); } X = stk.top(); // 取出新的栈顶符号 state = X - '0'; // 获取新的状态编号 int row = getRow(X); // 获取新的行号 char newSymbol = table[row][getColumn(X)]; // 查表获取新的动作 stk.push(X); // 将新符号压入栈中 stk.push(newSymbol - '0'); // 将新状态压入栈中 } } } ``` 其中,getColumn 和 getRow 函数分别用于获取输入字符对应的列号和栈顶符号对应的行号,getLength 函数用于获取规约所需弹出的符号数。这些函数的具体实现可以参考教材 P77-78。 3. 测试程序 我们可以编写一个简单的测试程序来测试预测分析程序,代码如下: ``` int main() { string input; cout << "Please enter a string: "; cin >> input; input += '#'; // 在输入串末尾加上结束符号 # bool result = analyze(input); return 0; } ``` 在运行测试程序时,我们需要手动输入一个待分析的符号串。例如,如果我们输入符号串 "id+id*id",程序应该输出 "Accepted!",表示该符号串是一个合法的符号串。如果输入不合法的符号串,程序会输出 "Error!"。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦里捡到一只猫丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值