当前位置:网站首页>C语言初级—判断一个数是不是素数(函数封装)
C语言初级—判断一个数是不是素数(函数封装)
2022-08-02 14:03:00 【iccoke】
判断一个数是不是素数
基本思想:从键盘获取一个数字,判断其是不是素数并用函数形式封装
首先函数主题是判断一个数是不是素数和函数体调用
素数是指除了一和他本身之外不能被其他数整除的数
因此从二开始作为键盘输入数的除数
如果在二到键盘输入数之间的能有别的数将其整除说明该数不是素数
反之在遍历了二到键盘输入数之后依旧没有被整除的数即为素数
依此思想得到的初始代码如下
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
bool isprimer(int num) {
int i;
bool flag=false;
for (i = 2; i < num; i++)
{
if (num % i == 0)
break;
}
if (i == num)
{
flag = true;
}
return flag;
}
int main() {
int num;
scanf("%d", &num);
bool result = isprimer(num);
if (result == true)
{
printf("这是素数\n");
}
else {
printf("这不是素数\n");
}
return 0;
}代码体涉及的函数体及其调用
bool isprimer(int num) {
int i;
bool flag=false;
for (i = 2; i < num; i++)
{
if (num % i == 0)
break;
}
if (i == num)
{
flag = true;
}
return flag;
}
bool为函数返回值类型 Isprimer为函数名(函数名要做到见名知意)
其中false 和 true不需要进行额外定义
return的返回值需要与函数返回值类型相同
函数的调用
int main() {
int num;
scanf("%d", &num);
bool result = isprimer(num);
if (result == true)
{
printf("这是素数\n");
}
else {
printf("这不是素数\n");
}
return 0;
}函数的调用出现在
bool result = isprimer(num);
num为实际参数,而函数体内定义的为形式参数,两者在数值上相同,但在意义上不同,即实际参数和形式参数其中任一改变不会影响另一个参数
因为 isprimer()得到的值为bool类型,因此需要定义一个bool类型的result来接收isprimer()返回的值
其中涉及头文件#define _CRT_SECURE_NO_WARNINGS的使用
error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.(这是在不添加头文件#define _CRT_SECURE_NO_WARNINGS下使用scanf的错误)。
因此根据错误我们选择使用scanf_s代替scanf或者使用头文件
但scanf_s在vs上可以运行,但是换成其它编译器则会出现问题,因此为了方便搬运和代码复用,我们在使用scanf时应加头文件#define _CRT_SECURE_NO_WARNINGS。
代码优化
根据思想,我们发现代码中出现冗余,做如下修改
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
bool isprimer(int num) {
int i;
bool flag=false;
for (i = 2; i < num; i++)
{
if (num % i == 0)
break;
else {
flag = true;
}
}
return flag;
}
int main() {
int num;
scanf("%d", &num);
bool result = isprimer(num);
if (result == true)
{
printf("这是素数\n");
}
else {
printf("这不是素数\n");
}
return 0;
}边栏推荐
猜你喜欢
随机推荐
verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第九章)
8581 线性链表逆置
Unit 11 Serializers
第六单元 初识ORM
8581 Linear linked list inversion
c语言三子棋详解!!! (电脑智能下棋)(附上完整代码)
chapter7
window10下半自动标注
浅浅写一下PPOCRLabel的使用及体验
Flask-SQLAlchemy
8576 Basic operations of sequential linear tables
【c】大学生在校学习c语言常见代码
[ROS] (06) ROS Communication - Topic Communication
Flask-RESTful request response and SQLAlchemy foundation
Unit 13 Mixing in View Base Classes
Deep learning framework pytorch rapid development and actual combat chapter3
Network pruning (1)
深度学习框架pytorch快速开发与实战chapter4
【Camera2】由Camera2 特性想到的有关MED(多场景设备互动)的场景Idea
redis分布式锁和看门狗的实现








![[ROS] The difference between roscd and cd](/img/a8/a1347568170821e8f186091b93e52a.png)
