题目:
实现isPrime()函数,参数为整数,要有异常处理。如果整数是素数,返回True,否则返回False。
输入格式:
输入一个数;
输出格式:
如果整数是素数,输出"是素数", 否则输出"不是素数";
如果输入不满足要求,输出"输入错误"。
输入样例:
11
输出样例:
在这里给出相应的输出。例如:
是素数
题目分析:
题目中的是否为素数判断,比较常规,网络上可以参考的代码有很多。
主要分析点是参数异常。
这里我理解的是,输入内容完全随机,他不取决于这道题让你输入什么,完全就是看你键盘上有什么键,各种符号数字字母随机排列组合。于是,我将输入内容称为“字符串”。判断该“字符串”每一个字符是否为数字,判断输入内容是否为整数,再判断该整数是否为正整数,判断完毕。
所以我将整个代码分为两个函数,bool参数正常函数和bool判断素数函数。
将判断的正确参数保存为num,传给isPrime函数,进而判断素数,输出结果。
完整代码如下:
#include <stdio.h>
#include <stdbool.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
bool isPrime(int num) {
if (num <= 1) {
return false;
}
for (int i = 2; i * i <= num; ++i) {
if (num % i == 0) {
return false;
}
}
return true;
}
bool isPositiveInteger(const char* str) {
if (str == NULL || *str == '\0') {
return false;
}
while (*str != '\0') {
if (!isdigit(*str)) {
return false;
}
str++;
}
return true;
}
int main() {
char str[100];
int num;
fgets(str, sizeof(str), stdin);
// 删除末尾的换行符
if (str[strlen(str) - 1] == '\n') {
str[strlen(str) - 1] = '\0';
}
if (isPositiveInteger(str)) {
num = atoi(str);
if(num <= 0) {
printf("输入错误");
}
bool result = isPrime(num);
if (result) {
printf("是素数");
} else {
printf("不是素数");
}
} else {
printf("输入错误");
}
return 0;
}