2018年3月计算机二级考试C语言考点解析:循环语句和循环函数

  (三)、goto语句

  goto语句是一种无条件转移语句,与BASIC中的goto语句相似。goto语句的使用格式为:

  goto 标号;

  其中标号是Turbo C 2.0中一个有效的标识符,这个标识符加上一个:一起出现在函数内某处,执行goto语句后,程序将跳转到该标号处并执行其后的语句。标号既然是一个标识符,也就要满足标识符的命名规则。另外标号必须与goto语句同处于一个函数中,但可以不在一个循环层中。通常goto语句与if条件语句连用,当满足某一条件时,程序跳到标号处运行。goto语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套退出时,用goto语句则比较合理。

  main()

  {

  int sn=0,i;

  for(i=1;i<=100;i++)

  {

  if(i==51) goto loop; /*如果i等于51,则跳出循环*/

  sn+=i; /*1+2+……+50*/

  }

  loop: ;

  printf(%d\n,sn);

  }

  可以看出,这儿的goto语句和break作用很类似。

  这儿的loop: ;

  printf(%d\n,sn);

  也可以写成loop: printf(%d\n,sn);

  main()

  {

  int sn=0,i;

  for(i=1;i<=100;i++)

  {

  if(i==51) goto loop; /*如果i等于51,则跳出本次循环*/

  sn+=i; /*1+2+……+50+52+……+100*/

  loop: ;

  }

  printf(%d\n,sn);

  }

  可以看出这儿的loop语句和continue的作用类似。

  但是某些情况下又必须使用goto语句,否则会让程序大大臃肿。如:

  main()

  {

  int i,j,k;

  printf(i j k\n);

  for(i=0;i<2;i++)

  for(j=0;j<3;j++)

  for(k=0;k<3;k++)

  {

  if(k==2) goto loop;

  printf(%d %d %d\n,i,j,k);

  }

  loop: ;

  }

  输出结果为:

  i j k

  0 0 0

  0 0 1

  如果不使用goto语句,而使用break,continue语句,应该这样

  main()

  {

  int i,j,k;

  printf(i j\n);

  for(i=0;i<2;i++)

  {

  for(j=0;j<3;j++)

  {

  for(k=0;k<3;k++)

  {

  if(k==2) break;

  printf(%d %d %d\n,i,j,k);

  }

  if(k==2) break;

  }

  if(k==2) break;

  }

  }

  输出结果为:

  i j k

  0 0 0

  0 0 1

  所以在同时跳出多层循环时,应该使用goto语句。记住,所有的goto语句其实都是可以用break,continue代替的。

  下面举几个例子:

  1.求两个整数的最大公约数。例如10和15的最大公约数是5。

  分析:最大公约数一定小于等于最小的那个数一半,同时能被两数整除。

  main()

  {

  int num1,num2,i,min;

  scanf(%d%d,&num1,&num2);

  min=num1

  for(i=min/2;i>0;i--)

  if(num1%i==0&&num2%i==0) break;

  printf(最大公约数为%d\n,i);

  }

  2.求1!+2!+……+n!(n<10)

  main()

  {

  int n,i;

  long temp=1,sn=0; /*从9!以后,所得的值就超过了int范围*/

  scanf(%d,&n);

  for(i=1;i<=n;i++)

  {

  temp*=i;

  sn+=temp; /*如果没有这一步,求的就是n!*/

  }

  printf(%ld\n,sn);

  }

  那么想想,如果求1!+3!+5!+……+n!应该怎么办?

  3.判断一个整数是不是素数(素数就是只能被本身和1整除的数)。

  #include math.h

  main()

  {

  int num,i,flag=0;

  scanf(%d,&num);

  for(i=2;i

  {

  flag=0; /*标志变量复位*/

  if(num%i==0)

  {

  flag=1;

  break;

  }

  }

  if(flag==0) printf(是素数\n);

  else printf(不是素数\n);

  }

  可以说,在所有的C语言书上,都有判断素数的例题。它的编程思想是:把一个变量作为标志变量,用来标志是不是素数;循环体是从2到sqrt(num),因为如果一个数不是素数的话,一定能分解成num=num1*num2,它们中的最小值一定小于sqrt(num),所以循环的时候只要到sqrt(num)就可以了。同时要注意变量复位的问题。

  推荐阅读:

  2018年3月计算机二级考试C语言考点解析:初步知识

  2018年计算机二级考试《C语言》考点:循环结构

  2018年3月计算机二级考试C语言考点解析:运算符

  2018年3月计算机二级考试C语言考点解析:字符串

  2018年3月计算机二级考试C语言考点解析:编译预处理和动态存储分配

  出国留学网计算机等级考试 栏目推荐

  2018年计算机等级考试计划

  2018年计算机等级考试时间

  计算机等级考试动态

  计算机等级考试报名时间

  计算机等级考试时间

  计算机等级考试准考证打印时间

  计算机等级考试成绩查询时间

  计算机等级考试试题及答案

分享

热门关注

计算机二级考试时间多长

关于计算机二级

计算机二级考试时间一年几次呢

关于计算机二级

计算机二级考试时间分配

关于计算机二级

计算机二级考试内容考些什么

考试内容

计算机二级什么时候出成绩呢

计算机成绩

计算机二级考试c语言难不难

计算机二级考试

计算机二级考试重要考点归纳

二级考试重要考点归纳

计算机二级考试的内容和范围

计算机二级考试内容

计算机二级考试难不难

计算机二级考试

计算机二级考试内容难不难?有关计算机二级的考试内容

计算机二级考试内容难不难