程序: 我必须制作一个程序,显示1到100之间的所有素数。
历史: 我制作了一个程序,要求用户输入一个数字,告诉他是否是素数,如果不是,程序会显示其因素。
混乱: 但我无法理解为什么这个程序(从1到100显示素数)不能正常运行。
非常感谢任何帮助。
//pre-processor directives
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
//global variables/declarations
int factors=0;
int checkifprime(int num);
//main function - start
int main()
{
//declaring loop variable
int c;
for (c=1;c<=100;c++)
{
if (c==1 ||c==2)
{
printf("\n%d is a prime number",c);
}
else
{
factors = 0;
printf("error ");
checkifprime(c);
printf("error ");
if (factors=0)
{
printf("\n%d is a prime number",&c);
}
else
{
printf("\n%d is NOT a prime number",&c);
}
}
}
}
int checkifprime(int num)
{
int i;
if (num>0 && num<2147483640)
{
i = num-1;
for (i;i>1;i--)
{
if (num%i==0)
{
factors=factors+1;
printf(" %d",i);
}
}
}
//program finished
getch();
return 0;
}
答案 0 :(得分:2)
你有一个小而重要的拼写错误。如果您已经打开了所有警告,那么下次一次:打开编译器提供的所有警告。经过一些额外的清理以摆脱仅限Windows的东西:
//pre-processor directives
#include <stdio.h>
#include <stdlib.h>
//global variables/declarations
int factors = 0;
int checkifprime(int num);
//main function - start
int main()
{
//declaring loop variable
int c;
puts("1 is NOT a prime number");
for (c = 2; c <= 100; c++) {
if (c == 2 || c == 3) {
printf("%d is a prime number\n", c);
} else {
factors = 0;
checkifprime(c);
fputc('\n',stdout);
// you had a typo here "=" instead of "=="
if (factors == 0) {
printf("%d is a prime number\n", c);
} else {
printf("%d is NOT a prime number\n", c);
}
}
}
exit(EXIT_SUCCESS);
}
int checkifprime(int num)
{
int i;
if (num > 0 && num < 2147483640) {
for (i = num - 1; i > 1; i--)
{
if (num % i == 0) {
factors = factors + 1;
printf(" %d", i);
}
}
}
//program finished
return 0;
}
它仍然不理想,但至少它是有效的,你可以在它上面构建。