计算机二级C语言与专升本编程题(入门级),用函数isprime(x)判断[n,m](n<m)之间所有的素数,并求其和
题目很明确的已经告诉我们要用函数isprime(x)来判断[n,m]之间的素数。那么我们再重复一遍素数的定义,素数:除了1和他本身以外,不能被任何数整除的数,例如2,3,5,7,11......换言之,就是说素数只有两个因数,一个是1一个是它本身。
明白了素数的定义,也明白了题目的意思,现在我们来写代码:
#include<stdio.h>
int isprime(int x){if(x<=1){return 0;}for(int i=2;i<x;i++){if(x%i == 0){return 0;}}return 1;
}int main()
{int m,n,sum = 0;scanf("%d%d",&m,&n);for(int x=m;x<=n;x++){if(isprime(x)){sum = sum + x;}}printf("%d",sum);return 0;
}
这段代码,没有任何的取巧成分,笔者认为对于萌新来说非常的简单易懂。下面我们来对代码进行深入刨析:
一开始我们根据题意将代码设定为调用函数式的代码,定义一个函数isprime();它的作用只有一个帮我们判断这个数是不是素数。
if(x<=1){return 0;}
我们来看函数里面的方法,当x<=1的时候有两种可能一种他小于等于0不满足题目条件,一种它等于1,1在数学定义中不是一个质数所以我们要将其排除在外。如果这个if成立了那么就让return返回一个0,函数结束。
我们跟随返回值来到主函数:
for(int x=m;x<=n;x++){if(isprime(x)){sum = sum + x;}}
主函数中调用isprime()函数的是for循环中的条件语句if,当if中的条件不为0时if都成立,但是我们前面的return 0给我们返回了一个0,因此if不成立,for循环继续。紧接着下一次if再次调用函数isprime(),我们再次跟随调用函数来到isprime()函数:
for(int i=2;i<x;i++){if(x%i == 0){return 0;}}
此次形参x接收的值不在小于等于1,因此本次我们进入for循环,在这个for循环中我们能够看到i的初始值被定义为2,为什么不是0或者1呢?因为i=0时,任何数除以它都为0,没有意义。当i=1时,虽然正好符合了我们前面对素数的定义,只有1和它本身才能够整除它,但是无论1除以任何数都余0,所以从1和0开始都是在浪费内存加剧计算量。那为什么i<x呢?因为当i等于x的时候,其余数一定为0,这和i为什么不从1开始的道理是一样的,本质上都是在浪费计算。i大于x的原因是素数的定义是素数/任何数,而不是任何数/素数。因此当任何数大于素数x的时候都违背了这一原理。
既然原理解释完了,那么当if中的条件语句成立的时候return会返回一个0,结果与前面的那个if一样,而当条件不成立的时候就会进入下一次循环。直到满足条件或者循环结束,假如没有满足if的条件那么这个数就经过层层选拔进入了本函数的最后一个语句了:
return 1;
最外层的return 1;跟随本次返回值的视角我们再次来到主函数:
int main()
{int m,n,sum = 0;scanf("%d%d",&m,&n);for(int x=m;x<=n;x++){if(isprime(x)){sum = sum + x;}}printf("%d",sum);return 0;
}
这里可以看到调用其的if得到的布尔值为1,那么我们说过,只要不为0,if都会成立,此时if条件成立,我们便让sum = sum + x;这里的x就是我们的实参也是我们要判断的数。反观主函数中的循环,我们令x从m开始自增,结束条件按是x<=n,为什么从m开始呢?因为m是我这次要循环遍历的范围的最小值min边界,为什么x<=n呢?因为n是我们本次循环范围的最大值max边界,并且我们要将这个max边界包含其中。
至此,我们的整个程序都已经梳理完成,我们得到了素数的总和sum,在主函数循环结束以后我们将其打印出来,但要注意题目交代的打印格式,按照题目要求来才有分。
计算机二级C语言与专升本编程题(入门级),用函数isprime(x)判断[n,m](n<m)之间所有的素数,并求其和相关推荐
- 计算机二级c语言作弊的东西,计算机二级C全部考试题库[作弊必备]编程题.txt
计算机二级C全部考试题库[作弊必备]编程题.txt *funhpC 磬A*BC*DEF*GABCDEFGC prog.c mainfun void funchar *a,char *h,char *p ...
- 语言 山东专升本 真题_专升本英语真题
以上是2019专升本英语真题卷,供2020年山东专升本考生参考,后期会增加其他科目真题,请同学们持续关注.
- C语言专升本编程题复习
1.求100以内的素数 int main( ) { int i,j,count=0;for(i=1;i<100;i++){for(j=2;j<i;j++){if(i%j==0)break; ...
- c语言掌上通,计算机二级C语言掌上通在哪下载安装?计算机掌上通好用吗?
计算机二级C语言掌上通在哪下载安装?计算机二级C语言掌上通好用吗?相信很多想要考计算机二级C语言的学生都在努力的复习背题库,而现在只要使用计算机二级C语言掌上通就能够随时随地刷题了. 一.计算机二级C ...
- 二级c语言笔试试卷题型,计算机二级c语言题型
计算机二级C语言考试内容单项选择题,40 题,40 分(含公共基础知识部分 10 分);程序填空题,3 小空,18 分;程序改错题,2 个错误,18 分;程序设计题,24 分.计算机二级c语言试题1. ...
- 计算机二级C语言笔记
计算机二级C语言笔记 这里写目录标题 计算机二级C语言笔记 一.公共基础题 1.存储结构 2.求结点数性质 3.三种遍历方法 4.笛卡尔积等运算 5.范式 6.关系数据模型 7.时间复杂度和最坏情况比 ...
- 浙江省二级c语言试题答案,浙江省计算机二级C语言上机题库
<浙江省计算机二级C语言上机题库>由会员分享,可在线阅读,更多相关<浙江省计算机二级C语言上机题库(41页珍藏版)>请在人人文库网上搜索. 1.第二部分c工艺设计上的操作问题2 ...
- 江苏省计算机二级c语言考试范围,江苏省计算机二级C语言考试大纲.doc
文档介绍: EvaluationWarning:ThedocumentwascreatedwithSpire..点媚藻谗牢乐涵舜像掐备淬去酵去泼慧内粱翟傅汛髓签蜡费虐洋情务抠宦豫卉颧涡汀享丽膀赂餐谣勋 ...
- 大学计算机基础专升本模拟题
大学计算机基础专升本模拟题 大学计算机基础专升本模拟题 1.Windows 的主要特点是___. A.32位.多用户.多功能和窗口图形界面 B.32位.单用户.多处理器和窗口图形界 面 C.32位.单 ...
最新文章
- pandas使用dropna函数删除dataframe中列非缺失值的个数小于某一比例阈值的数据列
- ftime()函数的用法----算函数运行时间
- 关于 There is no getter for property named ‘id‘ in ‘class java.lang.Integer‘
- mysql的count报错_Mysql报错注入原理分析(count()、rand()、group by)
- import导入模块
- Npm常用命令有哪些
- Ubuntu 安装Wireshark
- NOIP模拟测试25
- 吴恩达机器学习作业Python实现(二):logistic回归
- java递归看回文,如何使用正则表达式实现递归回文检查器? [关闭]
- 好程序员技术分析JavaScript闭包特性详解
- 2021/4/2听宫老师演讲有感。
- java armeabi_Android中的armeabi、armeabi-v7a、arm64-v8a及x86的详解
- 【简单python爬虫】爬取豆瓣电影Top250的基本信息
- 4场直播丨Oracle、openGauss、易鲸捷EsgynDB
- javaweb网上购物系统,jsp网页线上购物,mysql(源码+报告)
- doc 问卷调查模板表_调查问卷模板.doc
- 双系统开机 进入grub resource,并且进不bios
- 在火狐浏览器上安装Tampermonkey和Greasy Fork和使用iciba划词翻译
- 人有多大胆,地有多大产