昨天学习了函数调用,今天继续深入学习敲函数调用的内容。一方面了解了被调函数和主函数的位置关系及如何声明,另一方面学习了递归函数的使用方法。
练习一道函数调用的题
首先了解题目要求。在主函数内实现输入数的功能,交由被调函数进行运算输出结果。
#include <stdio.h>
void p(int x);
int main()
{
int a;
printf("请输入一个数:\n");
scanf("%d",&a);
p(a);
return 0;
}
void p(int x)
{
int y;
for(y=2;y<x;y++)
{
if(x%y!=0)
{
printf("这个数是素数。\n");
break;
}
else
{
printf("这个数不是素数。\n");
break;
}
}
}
这是我最开始写的内容,主函数直接调用无返回值的被调函数,实现主函数输入,被调函数输出的功能。然而这段代码运行的结果是偶数都是合数,奇数都是素数。经过printf的打印排查,是判断条件出现了问题。
#include <stdio.h>
void p(int x);
int main()
{
int a;
printf("请输入一个数:\n");
scanf("%d",&a);
p(a);
return 0;
}
void p(int x)
{
int y;
for(y=2;y<x;y++)
{
if(x%y==0)
break;
}
if(y<x)
printf("这个数不是素数。\n");
else
printf("这个数是素数。\n");
}
素数的判断条件是因数只有1和它本身,那么在循环内先进行合数判断,如果x%y==0,那么意味着从1-x的范围内,有一个数y可以被x整除。所以在for循环内如果出现了一个数y能被x整除,那么就会跳出循环此时,y是<x的,所以在判断语句中当y<x时,输入的数不是素数。跳出循环的第二个条件是,当y++无法满足y<x这个条件时,也会终止循环。所以当y>=x时,循环结束。也意味着循环内没有一个数能被x整除,所以此时的x就是素数。