C , обучение, базовые возвращаемые простые числа

#c #boolean #primes

#c #логическое значение #простые числа

Вопрос:

Моя цель состоит в том, что: программа возвращает список чисел в векторе, который я создал, которые являются простыми числами, код неверен,

 #include <iostream>
#include <vector>
#include <math.h>
using namespace std;

vector < int > L;
bool mark[10];
void colador()
{
    fill(mark,mark 10, false);
    for(int i=2; i*i <=10; i  )
    {
        if(!mark[i])
        {
            L.push_back(i); 
            for(int j=i*i; j<=10; j =i)
            {
                mark[j]=true;
            }
        }
    }
    for(int e=sqrt(10) 1; e<=10; e  )
    {
        if(!mark[e])
        {
            L.push_back(e);
        }
    }
}



int main()
{
    for( int i=0; i<=9; i  )
    {
        cout << L[i] << endl ;
    }
    return 0;
}
 

Когда я его компилирую, программа мне ничего не показывает. Что не так?

Ответ №1:

Во-первых, общие функции не выполняются автоматически только путем определения. Вы должны вызвать их, чтобы выполнить их.

Во-вторых, цикл в main() неверен. Он может считывать вне диапазона без проверки.

Также ваша colador() функция неверна. Массив mark содержит только 10 элементов ( mark[0] to mark[9] ), но вы обращаетесь к выходу за пределы диапазона mark[10] .

Попробуйте это:

 #include <iostream>
#include <vector>
#include <cmath>
#include <algorithm> // for std::fill()
using namespace std;

vector < int > L;
bool mark[10];
void colador(){
    fill(mark,mark 10, false);
    for(int i=2; i*i <=10; i  )
    {
        if(!mark[i]){
            L.push_back(i);
            for(int j=i*i; j<10; j =i){mark[j]=true;} // use j<10, not j<=10
        }


    }
    for(int e=sqrt(10) 1; e<10; e  ){ // use e<10, not e<=10
        if(!mark[e]){L.push_back(e);}

    }
}

int main(){
    colador(); // call the function

#if 1
    // for modern compiler (C  11 or later)
    for( int e : L ){cout << e << endl ;}
#else
    // for old compiler
    for( size_t i=0; i<L.size(); i  ){cout << L[i] << endl ;}
#endif

    return 0;
}
 

Комментарии:

1. почему бы не заставить colador возвращать вектор или передавать его по ссылке

Ответ №2:

Пара проблем в вашем коде,

наиболее важным из них является то, что ваша функция void colador() не будет вызываться сама по себе…

вам нужно вызвать это, ПРЕЖДЕ чем выполнять for( int i=0; i<=9; i )