answer.西北工业大学考试题纸B卷-编译原理20120619.final
- 格式:doc
- 大小:78.50 KB
- 文档页数:3
西北民族大学计算机科学与信息工程学院期末考试编译原理试卷(B卷)专业:计算机科学技术课程代码: 15002171学号: 姓名:一、单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其代码填入题后的括号内。
每小空1分,共 10 分)1、一般程序设计语言的定义都涉及 B 三个方面。
(1)语法 (2)语义 (3)语用 (4)程序基本符号的确定供选答案:A. (1)(2)(3) B. (1)(2)(4)C. (1)(3)(4)D. (2)(3)(4)[能力层次:记忆] [难易度:B]2、程序语言一般分为(A)和(C)两大类,其中(C)通常又称为面向机器的语言。
面向机器语言指的是(B),其特点是(D),在此基础上产生了与人类自然语言比较接近的(D)(1)(2)(3)(6)A. 高级语言B. 专用语言C. 低级语言D. 通用程序语言(4)A. 用于解决机器硬件设计问题的语言B. 特定计算机系统所固有的语言C. 各种计算机系统都通用的语言D.只能在一台计算机上使用的语言(5) A. 程序的执行效率低,编制效率低,可读性差B. 程序的执行效率高,编制效率高,可读性强C. 程序的执行效率低,编制效率高,可读性强D. 程序的执行效率高,编制效率低,可读性差[能力层次:记忆] [难易度:C]3、高级语言编译程序常用的语法分析方法中,递归下降分析法属于 B 分析方法。
A.自左至右B.自顶向下C.自底向上D.自右向左[能力层次:记忆] [难易度:A]4、文法 G 产生的 D 的全体是该文法描述的语言。
A .句型 B. 终结符集 C. 非终结符集 D. 句子[能力层次:记忆] [难易度:A]5、下列属于三性文法的是: CA.G1:S→AbB S→AAS A→Bab B→bB.G2: S→A ASA→abbSa bSA→ABB AS→aabbb A→baC.G3: S→aB S→aA A→bA B→bD.G4: S→Aa S→Babb A→Cc A→Bb B→Bb B→a C→D C→Bab D→d[能力层次:简单运用] [难易度:C]二、判断题(认为对的,在题后的括号内打“√”,认为错的打“×”。
西北工业大学智慧树知到“计算机科学与技术”《编译原理》网课测试题答案(图片大小可自由调整)第1卷一.综合考核(共10题)1.词法分析器用于识别()。
A.语句B.标识符C.字符串D.单词2.编译过程中,语法分析器的任务就是()。
(1)分析单词是怎样构成的 (2)分析单词串是如何构成语句和说明的 (3)分析语句和说明是如何构成程序的 (4)分析程序的结构A.(2)(3)(4)B.(2)(3)C.(1)(2)(3)(4)D.(1)(2)(3)3.下列哪一项不是与机器有关的代码优化()。
A.特殊的指令优化B.有用的指令消除C.寄存器优化D.多处理优化4.表达式-(a+b)*(c+d)-(a+b+c)表示成三元式为:100 (+,a,b),101 (+,c,d),102 (*,(1),(2))。
(当前序号为100)。
()A.正确B.错误5.一个文法是递归的,则它产生的语言的句子个数()。
A.说不准B.必定有限C.必定无穷D.可能无穷,也可能有限6.如果活动记录中没有DISPLAY表,则说明()。
A.程序中既允许有嵌套定义的过程,也允许有递归定义的过程B.程序中既不允许有嵌套定义的过程,也不允许有递归定义的过程C.程序中不允许有递归定义的过程D.程序中不允许有嵌套定义的过程7.语法分析器可以发现源程序中的()。
A.错误并校正B.语法错误C.语法和语义错误D.语义错误8.线性表的构造时,应该按照关键字()顺序填写各个项。
A.随机B.按照关键字的多少C.后来者先填,先来者最后填D.先来者先填9.四元式之间的联系是通过()实现的。
A.符号表B.程序变量C.指示器D.临时变量10.文法分为四种类型,即0型、1型、2型、3型。
其中3型文法是()。
A.短语文法B.正则文法C.上下文有关文法D.上下文无关文法第1卷参考答案一.综合考核1.参考答案:D2.参考答案:A3.参考答案:B4.参考答案:A5.参考答案:C6.参考答案:D7.参考答案:B8.参考答案:D9.参考答案:D10.参考答案:B。
一、单选题(共27道试题,共54分)1.35.简单优先分析法每次都是对()进行归约。
A.短语B.直接短语C.句柄D.最左素短语正确答案:C2.3.下而哪个工具用来自动生成词法分析程序()。
A.LEXB.YACCC.OCCSD 丄 Iama正确答案:A3.34.把髙级语言程序翻译成机器可执行的目标程序的工作是由()完成的。
A.编译程序B.汇编程序C.解释程序D.预处理程序正确答案:202, 690, 78974•两个有穷自动机等价是指它们的()。
A.状态数相等B.有向弧数相等C.所识别的语言相等D •状态数和有向弧数相等5・33・算符优先分析法每次都是对()进行归约。
A.直接短语B.句柄C.素短语D •最左素短语6.3&已知文法G:SfWZWfXIYXfalaXYfblbYZfC∣cZ, G左义的语言的相应正规式为 ()oA.aa* I bb* I cc*B.(aa* I bb*) cc*C.aa*(bb* ∣ cc*)D.{a I b I c)*7.27.设数组A[l∙∙20, 1-10]首地址偏移量为6并且数组是按列存放的,每个元素占一个字节,存储器按字节编址,则偏移地址为()。
A.(i-l) *10+ (j-l)B.(M) *20+ (J-I)C.(M) + (j-l) *10D.(M) + (j-l) *208・词法分析器用于识别()。
A •句子B.产生式C •单词D •句型9.11.把髙级语言程序翻译成机器可执行的目标程序的工作是由()完成的。
A.编译程序B.汇编程序C.解释程序D •预处理程序Un8・LR (K)分析方法是()。
A.从左到右每次走K步的分析法B.从左到右共经过K步的分析法C.从左到右每次向前预测K步的分析法D・从左到右每次向前看K个输入符号的分析法口・39・一个文法是递归的,则它产生的语言的句子个数()。
A.必定无穷B.必建有限C.可能无穷,也可能有限D・说不准12.12. 一个3型语言是无穷的,则识别它的FA ()。
编译原理西北⼯业⼤学考试试题(2003-2004学年第⼆学期)⼀、简答题(15分)1. 编译程序与解释程序有何区别?2. 何谓素短语?3. 过程调⽤时,主调程序与被调程序之间的信息传递有哪些⽅式?4. 何谓语法制导翻译?5. 何谓算符⽂法?⼆、选择题(10分)1. 描述⼀个语⾔的⽂法是()A.唯⼀的B.不唯⼀的C.可能唯⼀,也可能不唯⼀2. 若⽂法G定义的语⾔是⽆限集,则⽂法必然是()A.前后⽂⽆关⽂法B.正规⽂法C.⼆义性⽂法D.递归⽂法3. 数组的内情向量中肯定不含数组的()信息A.维数B.类型C.各维的上下界D.各维的界差4. 简单优先分析每次归约的是()A. 最左直接短语B.直接短语C.最左素短语D.控制结点5. 最适合动态建⽴数据实体的内存分配⽅式是()A. 栈式分配B.堆式分配C.编译时预先分配D.以上三种均可三、(10分)给定⽂法G=({S,L},{a,(,)},{S→(L)|a L→L,S|S},S)。
给出句型”(S,(a))”的推导和语法树并指出此句型的所有短语、直接短语、句柄和素短语。
四、(12分)设语⾔L是由奇数个a和偶数(可以是0)个b组成的符号串之集。
1.构造识别L的DFA;2. 给出定义L的正规⽂法;五、(10分)将⽂法G[S]:S→[A A→AS|B] B→Bi|i 改写为等价的LL(1)⽂法,并给出相应的LL(1)分析表。
六、(20分)给定⽂法G[S]:S→(S)|a1.构造识别⽂法G[S]活前缀的LR(1)项⽬的DFA;2. 构造LR(1)分析表;3. 合并同⼼集,构造LALR(1)分析表。
七、(8分)某语⾔算术表达式的⽂法定义为E→E+E|i| if B then E else E其中,第三个候选式称为条件算术表达式,B为布尔表达式,then及else后的E均为算术表达式(即简单算术表达式或条件表达式),其语义为,当B为真时,表达式的值取then后的E的值,否则取else的E的值。
西北工业大学 POJ答案绝对是史上最全版(不止100题哦,,按首字母排序)1.“ 1“的传奇2.A+B3.A+BⅡ4.AB5.ACKERMAN6.Arithmetic Progressions7.Bee8.Checksum algorithm9.Coin Test10.Dexter need help11.Double12.Easy problem13.Favorite number14.Graveyard15.Hailstone16.HanoiⅡ17.Houseboat18.Music Composer19.Redistribute wealth20.Road trip21.Scoring22.Specialized Numbers23.Sticks24.Sum of Consecutive25.Symmetric Sort26.The Clock27.The Ratio of gainers to losers28.VOL 大学乒乓球比赛29.毕业设计论文打印30.边沿与内芯的差31.不会吧,又是 A+B32.不屈的小蜗33.操场训练34.插入链表节点35.插入排序36.插入字符37.成绩表计算38.成绩转换39.出租车费40.除法41.创建与遍历职工链表42.大数乘法43.大数除法44.大数加法45.单词频次46.迭代求根47.多项式的猜想48.二分查找49.二分求根50.发工资的日子51.方差52.分离单词53.分数拆分54.分数化小数55.分数加减法56.复数57.高低交换58.公园喷水器59.韩信点兵60.行程编码压缩算法61.合并字符串62.猴子分桃63.火车站64.获取指定二进制位65.积分计算66.级数和67.计算 A+B68.计算 PI69.计算π70.计算成绩71.计算完全数72.检测位图长宽73.检查图像文件格式74.奖金发放75.阶乘合计76.解不等式77.精确幂乘78.恐怖水母79.快速排序80.粒子裂变81.链表动态增长或缩短82.链表节点删除83.两个整数之间所有的素数84.路痴85.冒泡排序86.你会存钱吗87.逆序整数88.排列89.排列分析90.平均值函数91.奇特的分数数列92.求建筑高度93.区间内素数94.三点顺序95.山迪的麻烦96.删除字符97.是该年的第几天98.是该年的第几天?99.数据加密100.搜索字符101.所有素数102.探索合数世纪103.特殊要求的字符串104.特殊整数105.完全数106.王的对抗107.危险的组合108.文件比较109.文章统计110.五猴分桃111.小型数据库112.幸运儿113.幸运数字” 7“114.选择排序115.寻找规律116.循环移位117.延伸的卡片118.羊羊聚会119.一维数组”赋值“120.一维数组”加法“121.勇闯天涯122.右上角123.右下角124.圆及圆球等的相关计算125.圆及圆球等相关计算126.程序员添加行号127.找出数字128.找幸运数129.找最大数130.整数位数131.重组字符串132.子序列的和133.子字符串替换134.自然数立方的乐趣135.字符串比较136.字符串复制137.字符串加密编码138.字符串逆序139.字符串排序140.字符串替换141.字符串左中右142.组合数143.最次方数144.最大乘积145.最大整数146.最小整数147.最长回文子串148.左上角149.左下角1.“ 1“的传奇#include <stdio.h>#include <stdlib.h>#include <math.h>int main(){int n,i,j,k=0,x=1,y,z,m,p,q,a,s=0;scanf("%d",&n);m=n;for(i=1;i<12;i++){m=m/10;k++;if(m==0)break;}q=n;k=k-1;for(a=1;a<=k;a++){x=x*10;}y=q%x;z=q/x;p=q-y;if(z>=2)s=s+x+z*k*(x/10); elses=s+z*k*(x/10); for(j=p;j<=n;j++){m=j;for(i=1;i<12;i++){x=m%10;if(x==1)s++;m=m/10;if(m==0)break;}}printf("%d",s);return 0;}2.A+B#include <stdio.h>int doubi(int n,int m){n=n+m;n=n%100;return n;}int main(){int t,i,a[100],n,m; scanf("%d",&t);for (i=0;i<=(t-1);i++){scanf("%d%d",&n,&m);a[i]=doubi(n,m);}for (i=0;i<=(t-1);i++)printf("%d\n",a[i]); return 0;}3.A+BⅡ#include <stdio.h>int main(){int A,B,sum;scanf("%d%d",&A,&B);sum=A+B;printf("%d\n",sum);return 0;}4.AB#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){char s[100],q[100];double a,b,c;int n=0,i;scanf("%lf%lf",&a,&b);c=a*b;sprintf(s,"%.0lf",c);for(i=0;i<strlen(s);i++){ n=n+s[i]-48;}while(n>=10){sprintf(q,"%d",n);n=0;for(i=0;i<strlen(q);i++)n=n+q[i]-48;}printf("%d",n);return 0;}5.ACKERMAN#include <stdio.h>#include <stdlib.h>int ack(int x,int y){int n;if (x==0) {n=y+1;return n;}else if (y==0) n=ack(x-1,1);else n=ack(x-1,ack(x,y-1));return n;}int main(){int m,b;scanf("%d%d",&m,&b);m=ack(m,b);printf("%d",m);return 0;}6.Arithmetic Progressions #include <stdio.h>#include <math.h>int g(int n){int i;if(n==1) return 0;if(n==2) return 1;if(n==3) return 1;for(i=2;i<=sqrt(n);i++) if(n%i==0) return 0;return 1;}int f(int a,int b,int c){int i=0,s=a-b;if(c==1&&g(a)==1) return a;if(b==0&&g(a)!=1) return -1;while(1){s=s+b;if(g(s)) i++;if(i>=c) break;}return s;int main(){int a,b,c,d[100],i=0,n;while(1){scanf("%d%d%d",&a,&b,&c);if(a==0&&b==0&&c==0) break;d[i]=f(a,b,c);i++;}n=i;for(i=0;i<n;i++)printf("%d\n",d[i]);return 0;}7.Bee#include <stdio.h>#include <stdlib.h>int main()int A[100],i=0,j,k,female=0,male=1,x;for(;;i++){scanf("%d",&A[i]);if(A[i]==-1)break;}for(j=0;j<i;j++){female=0,male=1;for(k=1;k<A[j];k++){x=female;female=male;male=x+male+1;}printf("%d %d\n",male,female+male+1);}return 0;}8.Checksum algorithm #include <stdio.h>#include <stdlib.h>#include <string.h>int main(){int i,n,t,j;char s[100][100];for(i=0;;i++){gets(s[i]);if(s[i][0]=='#') break;}n=i;for(i=0;i<n;i++){t=0;for(j=0;j<strlen(s[i]);j++)if(s[i][j]==32) t=t;else t=t+(j+1)*(s[i][j]-64);printf("%d\n",t);}return 0;}9.Coin Test#include <stdio.h>#include <stdlib.h>int main(){char A[100000];int n,i=0,a=0,b=0,j;double x;while(1){scanf("%c",&A[i]);if(A[i]=='\n')break;i++;}for(j=0;j<i;j++){if(A[j]=='S'){printf("WA");goto OH;}if(A[j]=='U')a++;if(A[j]=='D')b++;}x=a*1.0/(a+b)*1.0;if(x-0.5>0.003||x-0.5<-0.003) printf("Fail");elseprintf("%d/%d",a,a+b);OH:return 0;}10.Dexter need help#include <stdio.h>int fun(int a){if(a==1) return 1;elsereturn fun(a/2)+1; }int main(){int a,b[100],i=0,j; while(1){scanf("%d",&a);if(a==0)break;b[i]=fun(a);i++;}for(j=0;j<i;j++){printf("%d\n",b[j]); }return 0;}11.Double#include <stdio.h> #include <stdlib.h>int main(){int a[100],b[100],i,j,n,t=0;for(i=0;;i++){scanf("%d",&a[i]);if(a[i]==0) break;}n=i;for(i=0;i<n;i++)b[i]=2*a[i];for(i=0;i<n;i++)for(j=0;j<n;j++)if(a[i]==b[j]) t++;printf("%d",t);return 0;}12.Easy problem#include <stdio.h>#include <math.h>int main(){int N,i,n,j=0;scanf("%d",&N);for(i=2;i<N+1;i++){if((N+1)%i==0)j++;}printf("%d",j/2);return 0;}13.Favorite number #include <stdio.h>#include <string.h>#define MAXNUM 100000int prime_number = 0;int prime_list[MAXNUM]; bool is_prime[MAXNUM]; int ans[MAXNUM + 2];int dp[MAXNUM + 2];void set_prime() {int i, j;memset(is_prime, 0, sizeof(is_prime));for (i = 2; i < MAXNUM; i++) {if (is_prime[i] == 0) {prime_list[prime_number++] = i;if (i >= MAXNUM / i) continue;for (j = i * i; j < MAXNUM; j+=i) {is_prime[j] = 1;}}}}int main() {int i, j, k,o=0,d[100];memset(dp, -1, sizeof(dp));set_prime();ans[0] = 0;dp[1] = 0;for (i = 1; i <= MAXNUM; i++) {ans[i] = ans[i - 1] + dp[i];if (dp[i + 1] == -1 || dp[i + 1] > dp[i] + 1){dp[i + 1] = dp[i] + 1;}for (j = 0; j < prime_number; j++) {if (i > MAXNUM / prime_list[j]) break;k = i * prime_list[j];if (dp[k] == -1 || dp[k] > dp[i] + 1) {dp[k] = dp[i] + 1;}}}while (scanf("%d%d", &i, &j) == 2 && (i || j)) { d[o]=ans[j] - ans[i - 1];o++;}for(i=0;i<o;i++)printf("%d\n",d[i]);}14.Graveyard#include <stdio.h>#include <stdlib.h>#include <math.h>int main(){int a[100],b[100],n,i,j;double s,p,l,t;for(i=0;;i++){scanf("%d%d",&a[i],&b[i]);if(a[i]==0&&b[i]==0) break;}n=i;for(i=0;i<n;i++){p=10000;if(b[i]%a[i]==0){printf("0.0000\n");continue;};t=10000/((double)a[i]);for(j=1;j<a[i]+b[i];j++){l=10000/((double)(a[i]+b[i]));l=t-j*l;l=fabs(l);if(l<p) p=l;}s=(a[i]-1)*p;printf("%.4lf\n",s);}return 0;}15.Hailstone#include <stdio.h>#include <stdlib.h>#include <string.h>int f(int n){int s=1;while(1){if(n==1) return s;else if(n%2==0) n=n/2,s++;else n=3*n+1,s++;}}int main(){int n,m,i,j=0,t;scanf("%d%d",&m,&n);printf("%d %d",m,n);if(m>n) t=m,m=n,n=t;for(i=m;i<=n;i++)if(f(i)>j) j=f(i);printf(" %d",j);return 0;}16.HanoiⅡ#include <stdio.h>#include <stdlib.h>#define M 70int start[M], targe[M];long long f(int *p, int k, int fina) {if(k==0) return 0;if(p[k]==fina) return f(p,k-1,fina);return f(p,k-1,6-fina-p[k])+(1LL<<(k-1));}int main (){long long ans;int n;while(scanf("%d",&n),n){int i;for(i=1;i<=n;i++) scanf("%d",&start[i]);for(i=1;i<=n;i++) scanf("%d",&targe[i]);int c=n;for(;c>=1&&start[c]==targe[c];c--);if(c==0){printf("0\n"); continue;}int other=6-start[c]-targe[c]; ans=f(start,c-1,other)+f(targe,c-1,other)+1;printf("%lld\n",ans);}return 0;}17.Houseboat#include <stdio.h>#include <stdlib.h>#include <math.h>#define pi 3.1415926int f(float x,float y){int i;for(i=0;;i++)if(50*i>sqrt(x*x+y*y)*sqrt(x*x+y*y)*pi/2) break;return i;}int main(){int n,i,a[100];float x,y;scanf("%d",&n);for(i=0;i<n;i++){scanf("%f%f",&x,&y);a[i]=f(x,y);}for(i=0;i<n;i++)printf("%d %d\n",i+1,a[i]);return 0;}18.Music Composer19.Redistribute wealth#include <stdio.h>#include <stdlib.h>#include <math.h>int main(){inta[1000],b[1000],n,i,j,s,sum,t,m,mid,c[100],k=0;while(1){scanf("%d",&n);if(n==0) break;{s=0;for(i=1;i<=n;i++){scanf("%d",&a[i]);s=s+a[i];}m=s/n;b[1]=a[1]-m;b[0]=0;for(i=2;i<n;++i)b[i]=b[i-1]+a[i]-m;for(i=0;i<n;i++)for(j=0;j<n-1-i;j++)if(b[j]>b[j+1])t=b[j],b[j]=b[j+1],b[j+1]=t;mid=b[n/2];sum=0;for(i=0;i<=n-1;++i) sum=sum+fabs(mid-b[i]);c[k]=sum;k++;}}for(i=0;i<k;i++) printf("%d\n",c[i]);return 0;}20.Road trip#include <stdio.h>#include <stdlib.h>#include <math.h>int f(int n){int a[100],b[100],i,s;for(i=0;i<n;i++)scanf("%d%d",&a[i],&b[i]);s=a[0]*b[0];for(i=1;i<n;i++)s=s+a[i]*(b[i]-b[i-1]);return s;}int main(){int n,c[100],i=0;while(1){scanf("%d",&n);if(n==-1) break;c[i]=f(n);i++;}n=i;for(i=0;i<n;i++)printf("%d\n",c[i]);return 0;}21.Scoring#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){int i,j,sum,min,c,count,n,a,b; char s1[50],s2[50];scanf("%d",&n);for(i=0;i<n;i++){count=sum=0;scanf("%s",s2);for(j=0;j<4;j++){scanf("%d%d",&a,&b);if(b!=0){sum+=(a-1)*20+b;count++;}}if(i==0){c=count,min=sum;strcpy(s1,s2);}else if(count>c||(count==c&&sum<min)) {min=sum;c=count;strcpy(s1,s2);}}printf("%s %d %d\n",s1,c,min); return 0;}22.Specialized Numbers#include <stdio.h>#include <stdlib.h>int main(){int i,n,sum10,sum12,sum16;for(i=2992;i<3000;i++){n=i;sum10=0;while(n){sum10+=n%10;n/=10;}n=i;sum12=0;while(n){sum12+=n%12;n/=12;}n=i;sum16=0;while(n){sum16+=n%16;n/=16;}if(sum10==sum12&&sum12==sum16) printf("%d\n",i);}return 0;}23.Sticks#include <stdio.h>#include <string.h>#include <stdlib.h>int len[64], n, minlen, get;bool b[64];int cmp(const void *a, const void *b){return *(int *)a < *(int *)b ? 1 : -1;}bool dfs(int nowlen, int nowget, int cnt) {if(cnt >= n) return false;if(get == nowget) return true;int i;bool f = false;if(nowlen == 0) f = true;for(i = cnt; i < n; i++){if(!b[i]){if(len[i] + nowlen == minlen){b[i] = true;if(dfs(0, nowget+1, nowget))return true;b[i] = false;return false;}else if(len[i] + nowlen < minlen){b[i] = true;if(dfs(nowlen+len[i], nowget, i+1))return true;b[i] = false;if(f) return false;while(i+ 1 < n && len[i]== len[i+1]) i++;}}}return false;}int main(){int i, tollen;while(scanf("%d", &n), n){tollen = 0;int j = 0, p;for(i = 0; i < n; i++){scanf("%d", &p);if(p <= 50){len[j] = p;tollen += len[j];j++;}}n = j;if(n == 0){printf("0\n");continue;}qsort(len, n, sizeof(int), cmp);for(minlen = len[0]; ; minlen++){if(tollen % minlen) continue;memset(b, 0, sizeof(b));get = tollen / minlen;if(dfs(0, 0, 0)){printf("%d\n", minlen);break;}}}return 0;}24.Sum of Consecutive#include <stdio.h>#include <stdlib.h>#include <string.h>int len[64],n,minlen,get;int b[64];int cmp(const void *a,const void *b) {return *(int *)a<*(int *)b?1:-1;}int dfs(int nowlen,int nowget,int cnt){if(cnt>=n) return 0;if(get==nowget) return 1;int i,f=0;if(nowlen==0) f=1;for(i=cnt;i<n;i++){if(len[i]+nowlen==minlen){b[i]=1;if(dfs(0,nowget+1,nowget)) return 1;b[i]=0;return 0;}else if(len[i]+nowlen<minlen){b[i]=1;if(dfs(nowlen+len[i],nowget,i+1)) return 1;b[i]=0;if(f) return 0;while(i+1<n&&len[i]==len[i+1]) i++;}}return 0;}int main(){int i,tollen,q=0,c[100];while(scanf("%d",&n),n){tollen=0;int j=0,p;for(i=0;i<n;i++){scanf("%d",&p);if(p<=50){len[j]=p;tollen+=len[j];j++;}}n=j;if(n==0){printf("0\n");continue;}qsort(len,n,sizeof(int),cmp);for(minlen=len[0];;minlen++){if(tollen%minlen) continue;memset(b,0,sizeof(b));get=tollen/minlen;if(dfs(0,0,0)){c[q]=minlen;q++;break;}}}for(i=0;i<q;i++)printf("%d\n",c[i]);return 0;}25.Symmetric Sort#include <stdio.h>#include <stdlib.h>#include <math.h>int main(){double A[100];int i=0,j=0,k=0,l=0,sum=0;while(1){scanf("%lf",&A[i]);if(A[i]==0)break;i++;}for(j=0;j<i;j++){if(A[j]==2)printf("1\n");else{int B[10000],m=1,number=0;double n;B[0]=2;for(k=3;k<=A[j];k+=2){n=(double)k;for(l=2;l<=sqrt(n);l++){if(k%l==0)goto ai;}B[m]=k;m++;ai:;}for(k=0;k<m;k++){sum=0;for(l=k;l<m;l++){sum+=B[l];if(sum==A[j]){number++;break;}}}printf("%d\n",number);}}return 0;}26.The Clock#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){char s[100][100],a[100];int i,j,n;scanf("%d",&n);for(i=0;i<n;i++) scanf("%s",s[i]);for(i=0;i<n-1;i++)for(j=0;j<n-1-i;j++)if(strlen(s[i])>strlen(s[i+1]))strcpy(a,s[i]),strcpy(s[i],s[i+1]),strcpy(s[i+1],a) ;if(n%2==0){for(i=0;i<n-1;i=i+2) printf("%s ",s[i]);printf("%s ",s[n-1]);for(i=i-3;i>0;i=i-2) printf("%s ",s[i]);}else{for(i=0;i<n-1;i=i+2) printf("%s ",s[i]);printf("%s ",s[n-1]);for(i=i-1;i>0;i=i-2) printf("%s ",s[i]);}return 0;}27.The Ratio of gainers to losers #include<stdio.h>int main(){char s[5];int i,sum=0;gets(s);for(i=0;s[i]!='\0';i++){switch(s[i]){case'I': sum+=1;break; case'V': sum=5-sum;break; case'X':sum=10-sum;break; }}printf("%d\n",sum);return 0;}28.VOL大学乒乓球比赛#include <stdio.h>#include <stdlib.h>int main(){printf("A=Z\nB=X\nC=Y\n");return 0;}29.毕业设计论文打印#include <stdio.h>#include <stdlib.h>int main(){int a[100],j=1,i,n,m;scanf("%d%d",&n,&m);for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n;i++)if(a[i]>a[m]) j++;printf("%d",j++);return 0;}30.边沿与内芯的差#include <stdio.h>#include <stdlib.h>int main(){int A[100][100],i,j,m,n,s=0,t=0;scanf("%d%d",&n,&m);for(i=1;i<=n;i++){for(j=1;j<=m;j++){scanf("%d",&A[i][j]);。
西工大20春《编译原理》在线作业答案
西工大19秋《编译原理》在线作业
试卷总分:100 得分:100
一、单选题(共20 道试题,共50 分)
1.一个文法是递归的,则它产生的语言的句子个数()。
A.必定无穷
B.必定有限
C.可能无穷,也可能有限
D.说不准
答案:A
2.如果活动记录中没有DISPLAY表,则说明()。
A.程序中不允许有递归定义的过程
B.程序中不允许有嵌套定义的过程
C.程序中既不允许有嵌套定义的过程,也不允许有递归定义的过程
D.程序中既允许有嵌套定义的过程,也允许有递归定义的过程
答案:B
3.语法分析器可以发现源程序中的()。
A.语义错误
B.语法和语义错误
C.错误并校正
D.语法错误
答案:D
4.给定文法G[E]:E→E+T∣T T→T*F∣F F→(E)∣i, 则以下()全都不是规范句型的活前缀①T+ ②T* ③ε④T*F ⑤E+E ⑥E* ⑦E+ T* ⑧i ⑨(E+T)⑩(i)
A.②④⑥
B.⑤⑥⑩
C.①②③④
D.⑦⑧⑨
答案:A
5.词法分析器用于识别()。
A.字符串
B.语句
C.单词
D.标识符
答案:C
6.在整理和查找操作时,下列哪项的效果最高()。
A.杂凑
B.二叉树
C.线性表
D.图。