题目:编写函数,参数是个正整数n,如果它是个素数,返回1,否则返回0.
这种“判断一个事物是否具有某种性质”的函数还具有一个学术名称——谓词(predicate)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//#include<string.h>
#include<math.h>
int is_prime(int n) {if (n <= 1)return 0;int m = floor(sqrt(n) + 0.5);//通过四舍五入避免了浮点误差for (int i = 2; i < m; i++)//如果n不是一个素数,它可以被分解为两个因数a和b,使得a * b =n.如果a和b都大于n的平方根,那么它们的乘积将大于n,这是不可能的。因此,至少其中一个因数必须小于或等于n的平方根。if (n % i == 0) return 0;return 1;
}//应用一下:
int main() {int n = 5;scanf("%d", &n);if (is_prime(n))printf("%d是素数", n);elseprintf("%d不是素数", n);
}
函数名的取名是有迹可循的,“is_prime”取自英语“is it a prime?"(它是素数吗) 谓词一般命名成"is_×××"的形式,返回int值,非0表示真,0表示假。
————-——————————————————
占位符记得好好打:
今天不小心在输入中的占位符“%d”的百分号后面多了一个空格符,折腾了一会。实际上,这种情况下编译器会将百分号后面的空格符视为无效字符,因此它会将“%d”作为一个整体来处理。这意味着编译器会尝试将输入中的整数与“%d”匹配,但由于多了一个空格符,这可能会导致匹配失败,从而导致数据写入失败或产生意外的结果。
在C语言中,“%d”用作格式化字符串中的整数占位符。当使用“%d”作为占位符时,通常会在格式化字符串中留下一个位置,然后在运行时用一个整数来填充这个位置。如果在输入中的百分号后面多了一个空格符,这可能会导致编译器无法正确识别“%d”,从而影响数据的写入。