C语言中的素数或完全数程序
我做了一个程序,检查给定的正整数是素数还是完美数。我面临的问题是我创建了一个函数“readNumber”这就像一个检查循环,以确保输入是一个正整数。但如果我输入一个负值,然后输入一个可接受的值,它也会显示以前的值。我附加了一个命令提示文本的屏幕截图,以使自己更清楚 下面是我的代码C语言中的素数或完全数程序,c,C,我做了一个程序,检查给定的正整数是素数还是完美数。我面临的问题是我创建了一个函数“readNumber”这就像一个检查循环,以确保输入是一个正整数。但如果我输入一个负值,然后输入一个可接受的值,它也会显示以前的值。我附加了一个命令提示文本的屏幕截图,以使自己更清楚 下面是我的代码 #include<stdio.h> int checkperfectnumber(int); int checkprimenumber(int); int readNumber(int)
#include<stdio.h>
int checkperfectnumber(int);
int checkprimenumber(int);
int readNumber(int);
int main(){
int num, x, y, result;
printf("\nGive a positive integer number: \n");
scanf("%d",&num);
y = readNumber(num);
x = checkperfectnumber(num);
result = checkprimenumber(num);
if (num == 1)
printf("1 is nor a prime neither a perfect number");
else if (x == num)
printf("%d is a perfect number\n",num);
else if ( result == 1 )
printf("%d is a prime number.\n", num);
else
printf("%d is nor prime neither a perfect number.\n", num);
return 0;
}
//perfect number function
int checkperfectnumber(int numbr){
int a=1, sum=0;
while(a < numbr){
if(numbr % a == 0)
sum=sum+a;
a++;
}
return(sum);
}
//prime number function
int checkprimenumber(int a)
{
int c;
for ( c = 2 ; c <= a - 1 ; c++ )
{
if ( a%c == 0 )
return 0;
}
return 1;
}
//input check function
int readNumber(int b){
while (b < 0)
{
printf("Wrong input.\nPlease insert a positive integer.");
main();
break;
}
}
#包括
整数(int);
整数校验素数(int);
整数读入数(int);
int main(){
int num,x,y,result;
printf(“\n请输入一个正整数:\n”);
scanf(“%d”和&num);
y=读取编号(num);
x=检查完成数(num);
结果=检查素数(num);
如果(num==1)
printf(“1不是素数,也不是完全数”);
else if(x==num)
printf(“%d是一个完美的数字\n”,num);
else if(结果==1)
printf(“%d”是质数。\n“,num);
其他的
printf(“%d”不是素数,也不是完全数。\n“,num);
返回0;
}
//完全数函数
整数checkperfectnumber(整数编号){
int a=1,sum=0;
while(a 对于(c=2;c的快速修复方法是在执行readNumber()
中的main()
后退出程序。
为此,在函数readNumber()
中添加#包括并替换break;
,以退出(0);
更好的解决方案是让函数readNumber()
,而不是main()
,读取数字并停止递归调用main()
。
它将是这样的:
#include<stdio.h>
int checkperfectnumber(int);
int checkprimenumber(int);
int readNumber(void);
int main(){
int num, x, y, result;
printf("\nGive a positive integer number: \n");
num = readNumber();
x = checkperfectnumber(num);
result = checkprimenumber(num);
if (num == 1)
printf("1 is nor a prime neither a perfect number");
else if (x == num)
printf("%d is a perfect number\n",num);
else if ( result == 1 )
printf("%d is a prime number.\n", num);
else
printf("%d is nor prime neither a perfect number.\n", num);
return 0;
}
//perfect number function
int checkperfectnumber(int numbr){
int a=1, sum=0;
while(a < numbr){
if(numbr % a == 0)
sum=sum+a;
a++;
}
return(sum);
}
//prime number function
int checkprimenumber(int a)
{
int c;
for ( c = 2 ; c <= a - 1 ; c++ )
{
if ( a%c == 0 )
return 0;
}
return 1;
}
//input check function
int readNumber(void){
for (;;)
{
int b;
scanf("%d",&b);
if (b >= 0) return b; /* 0 is not positive, but this condition is !(b < 0) */
printf("Wrong input.\nPlease insert a positive integer.");
}
}
#包括
整数(int);
整数校验素数(int);
int readNumber(无效);
int main(){
int num,x,y,result;
printf(“\n请输入一个正整数:\n”);
num=readNumber();
x=检查完成数(num);
结果=检查素数(num);
如果(num==1)
printf(“1不是素数,也不是完全数”);
else if(x==num)
printf(“%d是一个完美的数字\n”,num);
else if(结果==1)
printf(“%d”是质数。\n“,num);
其他的
printf(“%d”不是素数,也不是完全数。\n“,num);
返回0;
}
//完全数函数
整数checkperfectnumber(整数编号){
int a=1,sum=0;
while(a
您的屏幕截图是文本的,它应该是文本的。@Danielvarrell您说得对谢谢main
递归调用main
看起来不对……您可以使用edit
按钮将纯文本的屏幕截图替换为纯文本。您能解释一下“;”的用途吗inside for?@EvangelosNikolopoulos,这是一个正常的for
循环,没有任何初始化、条件或循环后操作。它只是无休止地运行,除非您中断/返回它。