网友您好, 请在下方输入框内输入要搜索的题目:
题目内容
(请给出正确答案)
对以下四元式程序,对其中循环进行优化,可采取的循环优化措施有 S := 0 K := 1 L1: A := J+100 C := A * K S := S + C if K = 100 goto L2 K := K + 1 goto L1 L2: …
A.合并已知量
B.代码外提
C.强度消弱
D.删除归纳变量
参考答案和解析
根据给出的程序生成如图8—64所示的四元式代码序列。 根据划分基本块的步骤首先确定基本块的入口语句。如图8—65所示由入口语句定义的条件可以确认(1)为入口语句条件语句的跳转目标(4)、(12)、(16)和(19)为入口语句;紧跟在条件语句后面的(6)、(8)和(23)为入口语句。 根据基本块划分的第二步构造属于每个入口语句的基本块。如图8—66所示由基本块构造的规则可知语句(1)、(2)和(3)构成一个基本块;语句(4)和(5)构成一个基本块;语句(6)和(7)构成一个基本块;语句(8)、(9)、(10)和(11)构成一个基本块;语句(12)、(13)、(14)和(15)构成一个基本块;语句(16)、(17)和(18)构成一个基本块;语句(19)、(20)、(21)和(22)构成一个基本块;语句(23)构成一个基本块。该程序共有8个基本块。 程序的控制流图如图8—67所示。 由于n 2 是n 7 的必经结点因此n 7 →n 2 是一条回边由此回边确定的循环为L{234567}。 由于循环中N的定值点在循环外因此2*N为不变运算可以提至循环外优化后的代码如图8—68所示。 根据给出的程序生成如图8—64所示的四元式代码序列。 根据划分基本块的步骤,首先确定基本块的入口语句。如图8—65所示,由入口语句定义的条件可以确认(1)为入口语句,条件语句的跳转目标(4)、(12)、(16)和(19)为入口语句;紧跟在条件语句后面的(6)、(8)和(23)为入口语句。 根据基本块划分的第二步,构造属于每个入口语句的基本块。如图8—66所示,由基本块构造的规则可知,语句(1)、(2)和(3)构成一个基本块;语句(4)和(5)构成一个基本块;语句(6)和(7)构成一个基本块;语句(8)、(9)、(10)和(11)构成一个基本块;语句(12)、(13)、(14)和(15)构成一个基本块;语句(16)、(17)和(18)构成一个基本块;语句(19)、(20)、(21)和(22)构成一个基本块;语句(23)构成一个基本块。该程序共有8个基本块。 程序的控制流图如图8—67所示。 由于n2是n7的必经结点,因此n7→n2是一条回边,由此回边确定的循环为L{2,3,4,5,6,7}。由于循环中N的定值点在循环外,因此2*N为不变运算,可以提至循环外,优化后的代码如图8—68所示。
更多 “对以下四元式程序,对其中循环进行优化,可采取的循环优化措施有 S := 0 K := 1 L1: A := J+100 C := A * K S := S + C if K = 100 goto L2 K := K + 1 goto L1 L2: …A.合并已知量B.代码外提C.强度消弱D.删除归纳变量” 相关考题
考题
有以下程序段 , 且变量已正确定义和赋值for(s=1.0,k=1;k=n;k++) s=s+1.0/(k*(k+1));printf("s=%f\n\n",s);请填空 , 使下面程序段的功能为完全相同s=1.0;k=1;while( _[10]_______ ){ s=s+1.0/(k*(k+1)); _[11]_______ ;}printf("s=%f\n\n",s);
考题
(9)以下程序运行后的输出结果是【9】#include stdio.hmain( ){int k=1,s=0;do{if{((k2)!=0)continue;s+=k;k++;}while(k)10);printf(“s=d/n”,s);}
考题
以下程序运行后的输出结果是【 9 】#include stdio.hmain(){ int k=1,s=0;do{if((k%2)!=0) continue;s+=k;k++;}while(k10);printf("s=%d\n",s);}
考题
为计算1+3+5+……+99的值,某人编程如下k=1s=0While k=99k=k+2 : s=s+kWendPrint s在调试时发现运行结果有错误,需要修改。下列错误原因和修改方案中正确的是( )。A.While …Wend循环语句错误,应改为For k=1 To 99 …Next kB.循环条件错误,应改为Whlie k99C.循环前的赋值语句k=1错误,应改为k=0D.循环中两条赋值语句的顺序错误,应改为s=s+k : k=k+2
考题
为了计算1+3+5+…+99的值,某人编程如下: k=1 s=0 While k<=99 k=k+2:s=s+k Wend Print s 在调试时发现运行结果有错误,需要修改。下列错误原因和修改方案中正确的是______。A.WhilE...Wend循环语句错误,应修改为For k=-1 T0 99…Next kB.循环条件错误,应改为While k<99C.循环前的赋值语句K=1错误,应改为k=0D.循环中两条赋值语句的j顷序错误,应改为s=s+k:k=k+2
考题
以下程序运行后的输出结果是【】。includemain(){int k=1,s=0; do{ if((k%2)!=0)continue;
以下程序运行后的输出结果是【 】。include<stdio.h>main(){ int k=1,s=0;do{if((k%2)!=0) continue;s+=k; k++;}while(k>10);printf("s+%d\n",s);}
考题
有以下程序: main() { char nn[4][3]={"12","34","56","78"),*pn[4]; int k,s=0; for(k=0;k<4;k++)pn[k)=nn[k]; for(k=1;k<4;k+=2) s=s*10+pn[k][1]-'0'; printf("%d\n",s); } 程序的输出结果是( )A.48B.26C.3478D.576
考题
若有以下程序段,w和k都是整型变量。w=k;LB:if(w==0)goto LE; w--; printf("*"); goto LB;LE: M则不能与上面程序段等价的循环语句是A.for(w=k;w!=0;w--)printf("*");B.w=k;CRwhile(w--!=0)printf("*");w++;C.w=k;CRdo { w--;printf("*");}while(w!=0);D.for(w=k;w;--w)printf("*");
考题
下列程序是用来计算1+2+3……+10的程序段,请补充该程序。Dim i, s, k As Integers =0: k = 0For【 】To 1k=k+1s=s+ kNext iPrint s
考题
有以下程序: #includestdio.h main( ) { char*s="[2]34";int k=0,a=0; whil(s[k+1]!=\0) { k++; if(k%2=o){a=a+(s[k]-0+1);continue; } a=a+(s[k]-0); printf("k=%d a=%d\n",k,a); } 程序运行后的输出结果是( )。A.k=6 a=11B.k=3 a=14C.k=4 a=12D.k=5 a=15
考题
以下程序的输出结果是【】。 include viod main() {char sl[5]= "ABCD", s2=[5];int k
以下程序的输出结果是【 】。include<iostream. h>viod main() {char sl[5]= "ABCD", s2=[5];int k;for(k=0;k<4:k++)s2[k]=(sl[k]- '0' +1) + '0' ;s2[k]= '\0' ;cout<<s2;
考题
有以下程序段s=1.0;for(k =1;k=n;k++) s=s+1.0/(k*(k=1));printf("%f\n",s);请填空,使以下程序段的功能与上面的程序段完全相同。s=1.0; k=1;while( 【 9 】).{ s=s+1.0/(k*(k+1)); k=k+1;}printf( "%f\n",s);
考题
下列程序是用来计算1+2+3+…+10的程序段,请补充完整该程序。Dimi,s,k As Integers=0:k=0For______To-1k=k+1s=s+kNextiPrint S
考题
以下程序的输出结果是______。 main() { char*s="121"; int k=0,a=0,b=0; do {k++; if(k%2==0){a=a+s[k]-'\0';continue;} b=b+s[k]-'\0';a=a+s[k]-'\0'; }while(s[k+1]); printf("k=%d a=%d b=%d\n",k,a,b); }A.k=3 a=98 b=49B.k=3 a=99 b=50C.k=2 a=99 b=50D.k=2 a=98 b=49
考题
在下列选项中,没有构成死循环的程序段是( )。A.int i=100; for(;;) {i=i%10+1; if(i>10)break; }B.while(1);C.int k=0; do{++k;}while(k<=10);D.int s=12; while(s); --s;
考题
下列程序段中,不是死循环的是_______。A.int i=100;B.unsigned k=0; while(1) do { { i=i%100+1; ++k if(i>=100)break; } } while(k>=0);C.for(;;);D.int s=3379; while(s++%2+s%2)s++;
考题
.若有以下程序段,W和k都是整型变量,则不能与该程序段等价的循环语句是( )W= k;LB: if(w==0) gotO LE;w - -;printf(*);goto LB;LE:A. for(w=k;w!=0;W--)printf("*");B.w= k; While(W--!=0) Prinif(”* ”);C.w= k; do{w--; prinif(“*”); } while( W!= 0);D.for(w=k;W;--W) printf("*");
考题
下面程序段不是死循环的是()A、 int j=100; while(1){j=j%100+2;if(j100)break;}B、 for( ; ; );C、 int k=0; do{ ++k;}while(k=0);D、 int s=36; while(s);--s;
考题
单选题有以下程序:#include main(){ char s1[]=programe,s2[]=Language; char *p1=s1,*p2=s2; int k; for(k=0;k8;k++) if(*(p1+k)==*(p2+k)) printf(%s ,(p1+k));}程序的运行结果是( )。A
grame ame eB
g a eC
programeD
无输出字符
考题
问答题已知m个向量α(→)1,α(→)2,…,α(→)m线性相关,但其中任意m-1个都线性无关,证明: (1)如果存在等式k1α(→)1+…+kmα(→)m=0(→),则这些系数k1,…,km或者全为零,或者全不为零。 (2)如果存在两个等式k1α(→)1+…+kmα(→)m=0(→),l1α(→)1+…+lmα(→)m=0(→),其中l1≠0,则k1/l1=k2/l2=…=km/lm。
考题
单选题有以下程序:#includemain(){ char *s=12134; int k=0,a=0; while(s[k+1]!='\0') { k++; if(k%2==0) { a=a+s[k]-'0'+1; continue; } a=a+(s[k]-'0'); } printf(k=%d a=%d,k,a);}程序运行后的输出结果是( )。A
k=6 a=11B
k=3 a=14C
k=4 a=12D
k=5 a=15
热门标签
最新试卷