声明:这些内容主要是面向C语言的初学者,尤其是正在学习C语言的学生。
在C语言中,break语句有两个作用:一是终止switch语句,二是终止循环语句。return语句也是两个作用:一是返回值,二是终止函数的执行。在上课的过程中,发现有些同学对这两个语句的使用还不是很熟练。本文以求两个正整数的最小公倍数为例,学习break和return语句的使用。
例:编写求两个正整数的最小公倍数的函数,在主函数中调用该函数。
下面是一位同学写的程序:
#include "stdio.h"
int lowestCommonMultiple( int m,int n)
{
int i,result;
for(i=1;i<=m*n;i++)
{
if(i%m==0 && i%n==0)
{
result=i;
}
}
return result;
}
int main()
{
int num1,num2,result;
printf("please input two numbers:");
scanf("%d%d",&num1,&num2);
result=lowestCommonMultiple(num1,num2);
printf("the number is %d",result);
return 0;
}
这个程序运行结果有错误。不管num1和num2的值为多少,每次结果都是num1和num2的乘积。我们分析一下错误的原因,两个正整数的公倍数可能有很多个,用穷举法从1到n*m去测试,当找到第一个能同时被n和m整除的数时,该数即为n和m的最小公倍数,这时候就应该停止测试。上面的程序就错在没有停止测试,虽然可能已经找到了最小公倍数,并且赋值给了result,但是后面发现的公倍数会覆盖已经找到的最小公倍数。在1到n*m之间,最后一个公倍数一定是n*m,它会覆盖前面发现的公倍数,所以,每次的结果都是n*m。
穷举测试时用for循环来实现的,要停止测试,就应该在发现第一个能同时被n和m整除的数时,终止for循环的执行,这可以用break来实现。下面的程序是修改后的程序,在if语句中加上了break。
#include "stdio.h"
int lowestCommonMultiple( int m,int n)
{
int i,result;
for(i=1;i<=m*n;i++)
{
if(i%m==0 && i%n==0)
{
result=i;
break;
}
}
return result;
}
int main()
{
int num1,num2,result;
printf("please input two numbers:");
scanf("%d%d",&num1,&num2);
result=lowestCommonMultiple(num1,num2);
printf("the number is %d",result);
return 0;
}
在这个例子中,当我们找到了最小公倍数以后,需要终止for循环,然后返回这个数,这时函数也结束执行。for循环终止后,除了return语句也没有别的语句要执行。这种情况下,我们完全可以用return语句来替代break的功能。下面的程序是对学生写的程序的第二种修改:
#include "stdio.h"
int lowestCommonMultiple( int m,int n)
{
int i,result;
for(i=1;i<=m*n;i++)
{
if(i%m==0 && i%n==0)
return i;
}
}
int main()
{
int num1,num2,result;
printf("please input two numbers:");
scanf("%d%d",&num1,&num2);
result=lowestCommonMultiple(num1,num2);
printf("the number is %d",result);
return 0;
}
lowestCommonMultiple函数中的return语句返回最小公倍数,同时终止函数的执行,当然也就终止了for循环,也就是说return语句也涵盖了break的作用。在编写函数时,return语句的这种用法是很常见的。