网友您好, 请在下方输入框内输入要搜索的题目:

题目内容 (请给出正确答案)

对以下四元式程序,对其中循环进行优化,可采取的循环优化措施有 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、P1、P2和Kl、K2B、L1、L2和Kl、K2C、L1、L2和Sl、S2D、P1、P2和Sl、S2

考题 电流互感器通常一次绕组的端子用字母L1、L2表示,二次绕组端子用字母K1、K2表示,则L1与K1、L2与K2分别为同极性端。

考题 下面程序段不是死循环的是()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;

考题 电流互感器通常原绕组的端子用字母L1、L2表示,副绕组端子用字母K1、K2表示,则L1与K1、L2与K2分别为同极性端。

考题 一般电流互感器上一次测标有L1、L2,二次测标有K1、K2,则下列组合属同名端的是()。A、L1、K1B、L1、K2C、L2、K1D、L2、K2

考题 电流互感器同极性端采用L1、L2、K1、K2标识时,以下表述正确的是()。A、L1、L2为同极性端B、K1、K2为同极性端C、L2、K2为同极性端D、L1、K1为同极性端

考题 电流互感器通常原绕组的端子用字母L1、L2或S1、S2表示,副绕组端子用字母K1、K2表示,则L1与K1、L2与K2分别为同极性端。

考题 电流互感器通常一次绕组的端子用字母L1、L2(或S1、S2)表示,二次绕组端子用字母K1、K2表示,则L1与K1、L2与K2分别为同极性端。

考题 单选题有以下程序:#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