“高级语言程序设计”习题三

来源:     时间:2007-09-05     浏览量:133
 8.下面的程序段所表示的数学函数关系是( )
  y=-l;
  if( x!= 0)if(x>0)y=l; else y=0 ;
  1(x<0) 1(x<0)
  ① y= { 0(x= 0) ② y={-l(X=0)
  1(X>0) 0(X>0)
  o(X< 0) -l(X< 0)
  ③ y= {-1(x= 0) ④ y={ 1(X= 0)
  1(X> 0) 0(X> 0)
  「解」程序段首先置变量y的值为一l,接着按变量x值的不同情况重置变量y的值。重置的首要条件是x!=0,若变量x的值为0,则不再重置变量y的值,所以在X值为0情况下,y的值是-l.在变量X的值不等于0的条件下,若X的值大于0,重置变量y的值为1;若变量X的值小于0,重置变量y的值为0.所以程序段实现当变量x的值为0时,变量y的值为-1;当变量X的值大于0时,置变量y的值为1;当变量X的值小于0时,置变量y的值为0.正确解答为③。
  9.下列语句中,句法错误的是(不考虑语义)( )
  ① while(x=y)5 ; ② do x++ while(x==10) ;
  ③while(0); ④do 2;while(a==b);
  「解」 while语句的一般形式是:
  while(表达式) 语句
  这里的表达式可以是任何合理的表达式,语句可以是任何语句,包括空语句,或表达式语句。可能书写的while语句没有任何意义,如供选择的①while(x=y)5;和③while(0);,但这两个语句的句法没有任何错误。do-While语句的一般形式是:
  do语句while(表达式);
  其中的成分语句也可以是任何语句,但供选择答案②do x++while(x==10) ;中的代码x++是一个表达式,不是语句,所以是错误的。正确解答是②。
  10,循环语句“for(x=0, y=0;(y!=123)||( x<4);x++);”的循环执行( )
  ①无限次 ②不确定次 ③4次 ④3次
  「解」for循环语句的初始化部分置变量x和y的初值为0,循环条件是(y!=123)||(x<4),每次循环后变量X的值增1.由于循环过程中变量y的值本被修改过,循环条件又是一个逻辑或,其左分量(y!=123)永远成立,也就是循环条件永远成立。所以该循环语句将循环执行无限次。正确解答是①。
  11.若i、j已定义为int类型,则以下程序段中的内循环体的执行次数是( )
  for( i=5; i; i——)
  for(j= 0; j<4;j++){……}
  ①20 ② 24 ③ 25 ④ 30
  「解」问题所给的程序段的外循环是一个阶循环语句,它的初始化部分置变量i的初值为5,循环条件简写成i,即i!=0,每次循环后变量i的值减1.所以外循环共控制5次循环。内循环也是一个for循环语句,它的初始化部分置变量j的初值为0,循环条件是j<4,每次循环后变量j的值增1.所以内循环共控制4次循环。这样,如内循环的体内未曾对变量i和j有修改,在内、外循环一起控制下,内循环的体共被重复执行20次。正确解答是①。
  12.假定a和b为int型变量,则执行以下语句后b的值为( )
  a=1; b=10;
  do b-=a; a++;
  }while<(b——<0);
  ①9 ②-2 ③-1 ④8
  「解」在这个程序段中,循环开始前变量a的值为1,b的值为10,每次循环从变量b减去a,并让a增1,并在循环条件判定时,又让b减去1.第一次循环后,变量b的值变成9,变量a的值变为2,循环判断时,因b的值大于0,循环条件不成立,结束循环。但在循环判断时,让b减去了1,所以循环结束时,变量b的值为8.正确的解答是④。
  13.设x和y为int型变量,则执行下面的循环后,y的值为( )
  for(y=l, x=l; y<=50; y++){
  if(x>=10) break;
  if(x%2==1){ x+=5; continue;}
  X -= 3;
  }
  ①2 ②4 ③6 ④8
  「解」 for循环语句的初始化部分置变量x和y的初值为1,循环条件是(y<=50),每次循环后变量y的值增1,控制循环最多执行50次。循环体有三个语句:首先在发现变量X的值大于等于10时,结束循环;接着是当变量X除2的余数为1(即变量X是奇数)时,让变量X值增5,让X变成偶数,并直接进入下一轮循环;如变量X是偶数,则从变量X减去3,让变量X变成奇数。由上述分析知,每两次循环使变量X的值增加2.第一次循环后,变量X的值变成6.第二次循环后,变量X的值变成3.第三次循环后,变量X的位变成8.第四次循环后,变量X的值变成5.第五次循环后,变量X的值变成 10.第六次循环时,因变量X的位大于等于 10,直接跳出循环,这次循环是非正常结束,对变量y的修正只执行了5次。所以循环结束后,变量y的值增至6.正确的解答是③。
  14.在C语言中,下列说法中正确的是( )
  ①不能使用“do语句while(条件)”的循环
  ②“do语句While(条件)”的循环中必须使用“break”语句退出循环
  ③“do语句while(条件)”的循环中,当条件非0时将结束循环
  ④“do语句while(条件)”的循环中,当条件为0时将结束循环
  「解」 do-while语句的一般形式是:
  do语句
  while(表达式);
  其语义是重复执行其成分语句,直至表示条件的表达式值为0时结束。do-while语句是正常使用的一种循环结构之一。do-while语句的循环结束条件由while后的表达式值为0所控制,并不一定要有break语句跳出循环来结束循环。do-while语句在条件值非0时,将继续循环,而不是结束循环。条件值为0时,才结束循环。所以正确的选择是④。
  15.若有以下程序段,W和k都是整型变量,则不能与该程序段等价的循环语句是( )
  W= k;
  LB: if(w==0) gotO LE;
  w - -;
  printf(“*”);
  goto LB;
  LE:
  ①for(w=k;w!=0;W——)printf(“*”);
  ② w= k;
  While(W——!=0) Prinif(“* ”);
  ③ w= k;
  do{w——; prinif(“*”);
  } while( W!= 0);
  ④ for(w=k;W;——W) printf(“*”);
  「解」问题所给出的程序段用goto语句构造一个循环控制结构,该循环结构的初值是让变量W的值为k的值,循环结束条件是W的情等于0,循环体是让变量W的值减1,并输出一个字符* .上述循环控制过程用for循环可描述如下:
  for=(w=k;W!=0; W——) printh(“*”);
  或写成:
  for(w=k ;w;——w) printf(“*”);
  若用while语句,可描述如下:
  W=k;
  while(w——!=0)printf(“*”);
  w++;/*在w等于0时,也执行了一次 w——,这里是对w最后减1的补尝*/
  或更直观地写成:
  W=k;
  while(w!=0){ w——;Printf(“*”);}
  若用do-while语句,可描述如下:
  W=k;
  if(W)
  do{
  w——; prinif(“*”);
  } while(w);
  若写成:
  W=k;
  do{
  W——; printf(“*”);
  } while(w!=0);
  是不正确的,因为原代码当k的值为0时,不输出字符*,而上面的改写,当k的值为0时,将输出许许多多的字符*.所以解答应是③。
  3.2 填充题
  1.结构化程序设计规定的三种基本结构是________结构,选择结构和_______结构。
  「解」结构化程序设计的三种基本控制结构是顺序结构、选择结构和循环结构。
  2.若有定义“int a=25,b=14, c=19;”,以下语句的执行结果是______.
  if a++<=25&&b——<=2&&c++)
  prinif(“***a=%d,b=%d,c=%d\n”, a,b,c);
  else printf(“###a=%d,b=%d,c=%d\n”, a, b,c);
  「解」问题所给的if语句中,条件a++<=25&&b——<=2&&c++是先求逻辑与的第一个运算分量,它是一个关系式,关系成立。接着判定第二个逻辑与运算分量,又是一个关系式,由于变量b的值是14,b不小于等于2,运算分量的关系式不成立,导致if语句的条件为假,执行else部分。在求且语句的条件时,计算了2个逻辑与分量,使变量a的值增了1,变量 b的值被减了1.所以输出内容是:###a=26,b=13,c=19.
  3.以下两条if语句可合并成一条if语句为_____________.
  if(a<=b) x=1;
  else y=2;
  if(a>b)printf(“****y=%d\n” ,y);
  else printf( “####x=%d\n” ,x);
  「解」在以上两条if语句中,两个条件刚巧相反。若将前一个if语句的第一个成分语句与第二个if语句的第二个成分语句合并;第一个if语句的第二个成分语句与第二个if语句的第一个成分语句合并,写成一条if语句如下:
  if(a<=b){x=1;printf(“####x=%d\d,x);}
  else{ y=2; printf(“****y=%d\n”,y);}
  4.设 i,j,k均为 int型变量,则执行完下面的for语句后,k的值为_______.
  for(i=0,j=10;i<=j;i++,j——)k=i+j;
  「解」该 for语句以i为0、j为10初始化,循环条件是 i<=j,每次循环后 i增 1、j减 1,循环体是将 i与j的和赋给 k.这样变量 k将保存的是最后一次赋给它的值。一次循环后 i为 l.j为 9,二次循环后 i为 2.j为 8,……,五次循环后 i为 5.j为 5,继续第六次循环,将 i与 j的和10存于 k后,i为 6、j为 4,结束循环。所以循环执行后 k为10.
  5.下列程序的功能是输入一个整数,判断是不是素数,若为素数输出1,否则输出0,请为程序填空。
  main()
  {int i,X,y=1;
  scanf(“%d”,&x);
  for(i=2;i<=x/2;i++)
  if________________ { y=0; break; }
  printf(“%d\n”,y);
  }
  「解」为判数x是否是素数,预置变量y的值为1(x可能是素数),然后用循环,用2至x/2的整数i测试对X的整除性,若能被其中的某个整数整除,则X是合数,置y的值为0(不是素数),结束测试循环。若都不能整除,则X为素数。i能否整除X,可用求余运算X%i等于0来判定。所以程序中的空框可填 X% i==0.测试 X为素数的代码可写成:
  y=l;
  for( i=2; i<=x/2; i++)
  if(x%i==0){ y=0; bleak; }
→ 查看关于“自考/工学”的全部考试资料
沈阳优网互联信息服务有限公司 版权所有 辽ICP备08007732号
Copyright ©2006-2007 Ueu5.com All Rights Reserved