用户给出一个由 8 个整数组成的数组, 程序应该打印出输入的每个素数。 输入一些数字后程序停止,我不知道为什么。 你能告诉我我做错了什么吗? 代码:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main()
{
const int N=8;
int i, j, count, x;
int arr[N];
int prime[N];
j = 2;
for(i = 0; i < N; i++)
{
printf("Enter a number %d:", i + 1);
scanf("%d", &arr[i]);
if (arr[i] == 1)
{
prime[i] = arr[i];
count++;
}
else
{
do
{
x=arr[i] % j;
if (x != 0)
j++;
else
break;
}
while(true);
if(arr[i] == j)
{
prime[i] = arr[i];
count++;
}
}
}
for (i = 0; i < count; i++)
printf("%dth prime number:%d\n", i + 1, prime[i]);
getch();
return 0;
}
如果用户输入的整数小于前一个整数,则程序将陷入无限循环。您可能想在 else 子句中、在 do-while 循环之前初始化 j。
另请注意,您应该检查 scanf 的返回值,以确保实际输入的是整数。
我使用布尔函数来检查数组中的元素是否为素数,然后我像这样填充素数数组:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
bool Prime(int);
int main()
{
int N;
do
{
printf("Give me the number of numbers :");
scanf("%d",&N);
}while(N<1);//in your array must be minimum 1 element
int prime[N];
int arr[N];
int j=0;
for(int i=0;i<N;i++)
{
do
{
printf("Enter a number %d:",i+1);
scanf("%d", &arr[i]);
}while(arr[i]<0); //you can write while(arr[i]>1) and you just write if(Prime(arr[i])==true)
if(arr[i]!=1&&arr[i]!=0&&Prime(arr[i])==true)
{
prime[j]=arr[i];
j++;
}
}
printf("\n\n");
for(int p=0;p<j;p++)
{
printf("%d th prime number:%d\n",p+1,prime[p]);
}
return 0;
}
bool Prime(int n)
{
for(int i=2;i<=(n/2);i++)
{
if(n%i==0)
{
return false;
}
}
return true;
}
您可以通过这个 bool 函数检查它是否是素数:
bool isPrime(int n) {
if (n < 2) {
return false;
}
if (n == 2) {
return true;
}
if (n % 2 == 0) {
return false;
}
for (int i = 3; i <= sqrt(n); i += 2) {
if (n % i == 0) {
return false;
}
}
return true;
}
当你循环每个数字时,忽略循环中的偶数,因为除了
2
之外,没有质数是偶数。