c++ - 学习C++,从一本书中寻找关于这个项目的说明

标签 c++ loops

这里的目标是创建一个程序来找到并输出 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 变量,要求它是all 而不是any,您还需要更改此行:

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) {

最后,为了可读性(和方便!),您可以做的一件事是编写 ijk 而不是 countercount_twocount_three。这三个字母被程序员普遍认为是循环计数器。

关于c++ - 学习C++,从一本书中寻找关于这个项目的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16391129/

相关文章:

java - 通过循环添加 JButton 导致最后一个 Button 过大

actionscript-3 - 无法使用 "continue <label>"

c++ - 使用适用于 iOS 的 openCV 拼接图像的问题

c++ - map 的开始迭代器不起作用 C++

c++ - 类中数组指针的赋值

c++ - 输出到文件给出错误的指针值

c++ - reinterpret_cast vs c style cast

algorithm - 遍历对象 2 值以查找它是否与对象 1 最小变量匹配

c++ - ifstream无限循环(它似乎永远找不到停止读取的标记)

结合for循环和if语句的Pythonic方式