/************************************************************
*Copyright (C), 2012, RedCity.
*Project: 17st.函数[素数项目重写].vcxproj
*FileName: 17st.函数[素数项目重写].c
*Author:AmyCc
*Description: 函数调用练习
*Version:1.0
*Function List: ErgodicAndPrint(); IsPrime()
*History:
* AmyCc 2012/11/05 22:07 v1.0 创建项目
* 关于素数:
* 如果M不是素数(除1和本身)外:
* 1. 一定存在两个相等的数乘积等于它,这两个数就是根号M;
* 2. 如果两个数都在根号M以下,乘起来小于M;
* 3. 如果两个数都在根号M以上,乘起来一定大于M;
* 综上,两个数分布于根号M两边,那么只要找到其中一半即可。
************************************************************/
# include
# include
# include
# include /*第一处修改:这句要加上,不然system(“puse”);会出错*/
int IsPrime(int val);
int ErgodicAndPrint(int Val);
int main(void)
{
int EndVal,result;
//int t = ErgodicAndPrint(EndVal);//并不能获取返回值,需要怎么才能获取到这个函数里 return SuShuCnt;的值?
printf("\n请输入您需要查找的范围内末尾整数:");
scanf("%d", &EndVal);
result=ErgodicAndPrint(EndVal); //函数调用(内含输出格式); printf("\n共计%d个素数,列表完毕!\n\n\7", result);/*修改第二处:得到函数结果了*/
system("pause");
return 213;
}
int IsPrime(int val)
{
int i;
int t = (int)sqrt((float)(val)) + 1; /*修改第三处:进行显示类型转换,不然又警告*///筛选素数只判断根号val左边的整数即可,+1防止精确度可能存在误差,(开方:sqrt(x); 幂:pow(x,y);)//if (val == -858993460) return -1;//判断非法字符以整数类型传递到函数内(VS2012中,scanf接受到不匹配类型会置变量为该值
for (i=2; i
{
if (val%i == 0) //余数为0,则表示val有其他因数 {
return 0;
}
}
return 1;
}
int ErgodicAndPrint(int Val)
{
int i, SuShuCnt; //SuShuCnt计数素数的个数
printf("\n经遍历计算,在1至%d范围内的素数(含首尾)列表如下:\n\n", Val);
for (i=1,SuShuCnt=0; i<=Val; i++)
{
if (IsPrime(i) == 1)
{
printf("%d;\n",i);
SuShuCnt++;
}
}
return SuShuCnt;
}