学习C,从书中寻找对该项目的澄清
发布时间:2020-12-16 09:44:38 所属栏目:百科 来源:网络整理
导读:这里的目标是创建一个程序,找到并输出1到100之间的所有素数.我注意到我倾向于复杂化并创建低效的代码,我很确定我也在这里做过.初始代码是我的,我在注释标记之间放置的所有内容都是本书中给出的代码作为解决方案. // Find all prime numbers between 1 and 10
这里的目标是创建一个程序,找到并输出1到100之间的所有素数.我注意到我倾向于复杂化并创建低效的代码,我很确定我也在这里做过.初始代码是我的,我在注释标记之间放置的所有内容都是本书中给出的代码作为解决方案.
// Find all prime numbers between 1 and 100 #include <iostream> #include <cmath> using namespace std; int main() { int counter; // loop counter int count_two; // counter for second loop int val; // equals the number of count,used in division to check for primes bool check; check = true; for(counter = 1; counter <= 100; counter++){ val = counter; for(count_two = 2; count_two <= 9; count_two++){ if((val % count_two) == !(check)){ cout << val << " is a prime number.n"; } } } return 0; } // program didn't work properly because of needless complication; all that needs to be checked for is whether a number is divisible by two /* *********correct code*********** #include <iostream> using namespace std; int main() { int i,j; bool isprime; for(i=1; i < 100; i++) { isprime = true; // see if the number is evenly divisible for(j=2; j <= i/2; j++) // if it is,then it is not prime if((i%j) == 0) isprime = false; if(isprime) cout << i << " is prime.n"; } return 0; } ******************************** */ 从我可以收集的信息来看,我在这里是一条相当正确的道路.我认为我使用双循环和过度使用变量使事情变得复杂,这可能导致程序工作不正确 – 如果需要我可以发布输出,但这肯定是错误的. 我的问题基本上是这样的:我到底出错了什么地方?我不需要有人来重做这个,因为我想自己更正代码,但我已经看了一段时间,并且无法弄清楚为什么我的工作不起作用.此外,由于我对此不熟悉,因此任何有关语法/可读性的输入都会有所帮助.提前致谢. 解决方法
事实上,你的代码说如果一个数字可以被2到9中的任何数字整除,那么它就是素数.你需要一个bool变量来要求它是全部而不是任何,你还需要改变这一行:
if((val % count_two) == !(check)){ 由于check = true,因此解析如下: if ((val % count_two) == !true){ 和 if ((val % count_two) == false){ 和 if ((val % count_two) == 0){ (注意false值是如何转换为0.有些语言会在这里产生编译错误.C将其转换为整数). 事实上,这与你想要的相反.相反,写下这个,这是正确和清晰的: if (val % count_two != 0) { 最后,为了可读性(和方便!),你可以做的一件事是写i,j和k而不是counter,count_two和count_three.这三个字母被程序员普遍认为是循环计数器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |