Goto语句的实用性,教你突出重重包围!

基本上所有学过c语言编程的都会发现,编程书上对goto的描述基本是一笔带过,有的甚至直接指出不建议在程序里使用goto语句来进行编程。而让许多人奇怪的是goto语句从字义表面上看似乎是“非常好用的”。这常让许多新手编程者摸不着头脑。

Goto语句的实用性,教你突出重重包围!

记得以前曾有人问过阳哥(头条号:阳哥说IT),说:记得编程书上都不推荐用goto语句的,但是看很多源代码,goto也用的很多。有时候自己写一个模块,也觉得此时用goto是最方便的一种方式。那么,又是从什么方面,使得goto语句不被鼓励使用呢?是维护性,或编译器的角度等等?

在这里阳哥(头条号:阳哥说IT)就简单的说下这“奇怪的”goto语句的两个用途:

  1. 与if语句一起构成循环结构。
  2. 从多层循环的内层循环跳到外层循环。

可能到这,大家有些不够了解含义,那现在咱们用一个实例来更加清晰的了解一下这个用法。

用goto语句求解平方和

实例说明:任意给出一个自然数k,数k不为0,计算其各位数字的平方和k1,再计算k1的各位数字的平方和k2,......,如此重复,最终得到数1或145,此时再做数的平方和运算,他最终的结果是1或145.编程效果如下图:


Goto语句的实用性,教你突出重重包围!


编程如下:

#include

/*引用预处理命令,预处理包含stdio.h的头文件*/

main()

/*定义一个主函数,所有程序在执行前都开始于主函数,且结束于主函数*/

{

long a[10],n,i;

/*定义长整型变量n和i,长整型数组[10],其包含10个元素*/

p:printf("please input a number:\n");

/*对于p循环:请输入一个数*/

scanf("%ld",&n);

/*输入这个数n*/

if(n==0)

/*如果n等于0*/

goto p;

/*则跳出这个循环,重新输入*/

while(n!=1&&n!=145)

/*当n值不等于1和不等于145时*/

{

printf("n=%ld->",n);

/*输出 n->,其中,%ld指的是长整型标识*/

i=1;

/*i值赋1*/

while(n>0)

/*当n大于0时*/

{

a[i++]=n%10;

/*将n的个位数字存放到a的数组之中*/

n/=10;

/*取n除10后的数值,并继续循环*/

}

n=0;

/*n值赋0*/

i--;

/*i值累减*/

while(i>=1)

/*当i>=1时*/

{

printf("%ld*%ld",a[i],a[i]);

/*输出两个相同元素的乘积*/

if(i>1)

/*如果i>1*/

printf("+");

/*输出+*/

n+=a[i]*[i];

/*n等于两元素相乘的累加*/

i--;

/*i值继续累减*/

}

printf("=%ld\n",n);

/*输出长整型值,其含义是将最终求得的平方和n输出*/

}

return 0;

/*返回空值,0指空,没有,即将0返回给主函数main,其目的是告诉给main函数此程序执行完了*/

}


Goto语句的实用性,教你突出重重包围!


如果大家有问题,欢迎大家留言讨论,我都会一一解答呦,欢迎关注,给你不一样的自己!


分享到:


相關文章: