我有一个简单的c程序,它接受两个整数,给出平均值,并检查它们是否是素数。当我运行它并给用户输入时,程序会停止运行,直到我点击esc才会执行任何操作。一旦我点击了esc,它就会给我正确的结果。这是服务器或我的代码的问题吗?
这是我的代码:
#include <stdio.h>
2 #include "prime.h"
3
4 int main()
5 {
6 int x, y;
7 float avg;
8
9 /* Get integers x and y from user */
10 printf("Please enter two positive integers\n");
11 scanf("%d %d", &x, &y);
12 scanf("%d", &x, &y);
13 printf("You typed in %d and %d\n", x, y);
14 avg = (x+y)/2;
15 printf("The average is: %f\n", avg);
16
17 /* Test if x and y are prime */
18 if(prime(x) == 1)
19 printf("%d is prime\n", x);
20 else
21 printf("%d is not prime\n", x);
22 if(prime(y) == 1)
23 printf("%d is prime\n", y);
24 else
25 printf("%d is not prime\n", y);
26
27 return 0;
28 }
prime.c:
1 #include "prime.h"
2
3 int prime(int x)
4 {
5 int isprime;
6 int i;
7
8 for(i = sqrt(x); i > 1; i--)
9 {
10 if(x % i == 0)
11
12 /* isprime is false*/
13 isprime = 0;
14 else{
15
16 /* isprime is true*/
17 isprime = 1;
18 }
19 }
20 return isprime;
21 }
〜
谢谢!
答案 0 :(得分:1)
第12行你有一个额外的scanf,摆脱它:
12 //scanf("%d", &x, &y);
这就是你必须点击逃生或再次进入的原因。
最重要的是,你的素数逻辑中有一个错误,因为第17行,任何不能被2整除的东西都会被称为素数:
isprime = 1;
这表示即使您找到了另一个可分割的数字,该值也是非常重要的。因此,如果你想象通过数字15,它会发现i = 5并且说isprime = 0;但是它会到2并说isprime = 1;不好。
要解决这个问题,请在isprime = 0之后添加一个中断;像这样:
isprime = 0;
break;
此外,你可以摆脱其他人,我们不需要它,我们将开始假设它是素数。如果你击中任何除数,你就知道它不是素数:
7 isprime = 1;
8 for(i = sqrt(x); i > 1; i--)
9 {
10 if(x % i == 0)
11
12 /* isprime is false*/
13 isprime = 0;
14 break;
15 }
答案 1 :(得分:0)
prime.c将不会执行缩进的操作。 。以下代码更好。
#include<math.h>
int prime(int x)
{
int i;
for(i=sqrt(x);i>1;--i)
{
if(x%i==0)
return 0;
}
return 1;
}