第3题
选择适当的语句填入空白处完成程序。 以下程序的功能是:从个位开始依次取整数 x 奇数位上的数字,组成一新 数 y, 如 x=7651234 时, y=7524。 将程序补充完整。 void odd(int x, int *y){ int r, t; _______16_______; r = 1; //位权 while (x){ t = _______17_______; *y = *y + t*r; r = _______18_______; x =_______19_______; } } int main(){ int x, y; scanf("%d", &x); _______20_______; printf("%d", y); return 0; } 16. A. t=0; B. t=1; C.*y=0; D. x=0; 17. A. t+1 B.x%10 C. x/r D. x/10 18. A. r+1 B.r%10 C. r*10 D. r/10 19. A. t+1 B.x++ C. x/10 D. x/100 20. A. odd(x, &y) B. odd(x, y) C. odd(x, *y) D. odd(&x, y) 请将这5题的答案填空,中间不用有空格或任何分隔符。
第4题
下面程序的功能是将一个字符串s2插入到字符串s1中,其起始插入位置为n。 程序运行示例如下: main string:hello,world! sub string:cc site of begining:(<=12)5 after instert:hellocc,world! 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include> #include <string.h> #define N 100 int main() { int n, i, j, k, len; char s1[N], s2[N], s3[2 * N]; printf("main string:"); gets(s1); printf("sub string:"); gets(s2); len = strlen(s1); do { printf("site of begining:(<=%d)", len); scanf("%d", &n); }while (__________); for (i="0;" i n; i++) { s3[i]="s1[i];" } (j="0;" s2[j] !="\0" ; j++) __________________; (________; s1[k] k++) ________________; s3[j + k]="\0" printf("after instert:%s\n", s3); return 0;> A、第17行: n > len 第25行: s3[i + j] = s2[j] 第27行: k = n 第29行: s3[j + k] = s1[k]
B、第17行: n < len 第25行: s3[i] = s2[j] 第27行: k = n 第29行: s3[j] = s1[k]
C、第17行: n <= len 第25行: s2[j]="s3[i" + j] 第27行: k="0" 第29行: s3[j]="s1[k]"> D、第17行: n >= len 第25行: s3[j] = s2[j] 第27行: k = 0 第29行: s1[k] = s3[j + k]
第5题
词法语法分析程序设计与实现 【实验目的】 (1)理解词法分析、语法分析在编译程序中的作用 (2)加深对有穷自动机模型的理解 (3)掌握词法、语法分析程序的实现方法和技术 【实验内容】 对一个简单语言的子集编制一个一遍扫描的词法语法分析程序。 【实验要求】 (1)待分析的简单语言的词法 1) 关键字 begin end 2) 运算符和界符 := + - * / < <=> >= <> = ; ( ) # 3) 其他单词是标识符(ID)和整形常数(NUM),通过以下正规式定义: ID=letter(letter|digit)* NUM=digitdigit* 4) 空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM、运算符、界符和关键字,词法分析阶段通常被忽略。 (2)各种单词符号对应的种别编码 单词符号 种别码 单词符号 种别码 begin 1 ; 17 end 2 = 18 < 19 letter(letter|digit)* 10 <> 20 digitdigit* 11 <= 21> 22 + 13 >= 23 - 14 ( 24 * 15 ) 25 / 16 # 0 (3)完成赋值语句的词法、语法分析,语法分析程序采用递归下降分析程序的实现。 (4)词法、语法分析程序的输入和输出 输入:所给文法的源程序字符串 输出:(1)词法分析阶段的输出二元组序列;(2)语法分析阶段的输出:分析是否成功的说明。 (5)程序设计前需定义词法分析和语法分析所使用的正规文法和上下文无关文法。 【实验提交要求】 (1)实验报告(实验报告模板见附件) (2)程序源码及实现结果截图
第6题
词法分析程序设计与实现 【开发语言及实现平台或实验环境】 C/C++/C#,JAVA Microsoft Visual Studio 6.0/ Microsoft Visual Studio .NET, Eclipse 【实验目的】 (1)理解词法分析在编译程序中的作用 (2)加深对有穷自动机模型的理解 (3)掌握词法分析程序的实现方法和技术 【实验内容】 对一个简单语言的子集编制一个一遍扫描的词法分析程序。 【实验要求】 (1)待分析的简单语言的词法 1) 关键字 begin if then while do end 2) 运算符和界符 := + - * / < <=> >= <> = ; ( ) # 3) 其他单词是标识符(ID)和整形常数(NUM),通过以下正规式定义: ID=letter(letter|digit)* NUM=digitdigit* 4) 空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM、运算符、界符和关键字,词法分析阶段通常被忽略。 (2)各种单词符号对应的种别编码 单词符号 种别码 单词符号 种别码 begin 1 : 17 if 2 := 18 then 3 < 20 while 4 <> 21 do 5 <= 6 22 end> 23 letter(letter|digit)* 10 >= 24 digitdigit* 11 = 25 + 13 ; 26 - 14 ( 27 * 15 ) 28 / 16 # 0 (3)词法分析程序的功能 输入:所给文法的源程序字符串 输出:二元组(syn,token或sum)构成的序列。 syn为单词种别码; token为存放的单词自身字符串; sum为整形常数。 例如:对源程序begin x:=9;if x>0 then x:=2*x+1/3;end# 经词法分析后输出如下序列:(1,begin)(10,’x’) (18,:=) (11,9) (26,;) (2,if)…… 【实验步骤】 (1)程序总体结构 代码提示: main() { p=0; printf(“\n please input string:\n”); do{ 输入源程序字符串,送到缓冲区prog[p++]中 } while(ch!=’#’); p=0; do { scanner();//调用扫描子程序 switch(syn) { case 11:输出(数的二元组);break; case –1:输出(错误);break; default:输出(其他单词二元组); } } while(syn!=0); } (2)关键字表置初值 关键字作为特殊标识符处理,把它们预先安排在一张表格中(关键字表),当扫描程序识别标识符时,查关键字表。如能查到匹配的单词,则为关键字,否则为一般标识符。 (3)编写扫描子程序 代码提示: scanner() { ……. 读下一个字符送入ch; while(ch= =’ ’) 读下一个字符; if(ch是字母或数字) { while((ch是字母或数字)) { ch=>token; 读下一个字符; } token与关键字表进行比较,确定syn的值; } else if(ch是数字) { ………….. syn=11; } else swith(ch)//其他字符情况 { case’<’: ………… case’>’: ………… ……………………………. Default:syn=-1; } } (4)调试程序,验证输出结果。 【思考题】 (1)在编程过程中遇到了哪些问题,你是如何解决的。 (2)源程序若存在注释,如何实现词法分析,在现有程序基础上进行扩充。 【参考文献】 1. 张素琴等,编译原理(第2版),清华大学出版社,2012.03 2. 胡伦骏、徐兰芳等,编译原理(第3版),电子工业出版社, 2010.7
第7题
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.
试题程序:
include <string.h>
include <stdio.h>
include <ctype.h>
fun(char *p)
{ int !i, t; char c[80];
for(i=0,t=0;p[i];i++)
if(!isspace(*(p+i))) c[t++]=p[i];
/**********************************/
c[t]='\0';
strcpy(p,c);
}
main()
{char c,s[80];
int i=0;
printf("Input a string: ");
c=getchar();
while(c!='')
( s[i]=c;i++;c=getchar();}
s[i]="\0";
fun(s);
puts(s);
}
第8题
在字符串中删除与某字符相同的字符,要求用字符数组作函数参数。程序运行结果如下: Input a string: hello, my friend!↙ Input a character: !↙ Results:hello, my friend 在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h> void Squeeze(char s[], char c); int main() { char str[20], ch; printf("Input a string:\n"); gets(str); printf("Input a character:\n"); ch = getchar(); Squeeze(str, ch); printf("Results:%s\n", str); return 0; } void Squeeze(char s[], char c) { int i, j; for (i=j=0; ________; i++) { if (_________) { ___________; j++; } } s[j] = '\0'; /* 在字符串s的末尾添加字符串结束标志 */ }
A、第18行: s[i]!='\0' 第20行: s[i] != c 第22行: s[j] = s[i]
B、第18行: s[i]!= '\n' 第20行: s[i] = c 第22行: s[i] = s[j]
C、第18行: s[i]= '\0' 第20行: s[i] == c 第22行: s[j] = s[i]
D、第18行: s[i]=='\0' 第20行: s[i] = c 第22行: s[i] = s[j]
第9题
第10题
A、str = str.replaceAll("\\s*", "");
B、str = str.replaceAll("\\s{1,}", "");
C、str = str.replaceAll("\\s+", "");
D、str = str.replaceAll("\\s", "");
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!