【发布时间】:2022-01-16 15:48:57
【问题描述】:
编写一个程序,一个一个地从用户那里获取 10 个输入,并将该输入传递给一个名为 IsPrime() 的函数,然后该函数检查该数字是否为素数,并返回 1(表示素数)或 0(表示合成的)。在main() 中,基于返回值,输入值存储在一个大小为 10 个元素的数组中,从开始到结束(对于素数)和从结束到开始(对于
合成的)。该程序应如下运行:
Enter Value: 19
Enter Value: 22
Enter Value: 51
Enter Value: 11
Enter Value: 28
Enter Value: 36
Enter Value: 29
Enter Value: 16
Enter Value: 23
Enter Value: 12
按某种顺序排列的元素……。 19 51 11 29 23 12 16 36 28 22
#include<stdio.h>
void IsPrime(int x,int *flag);
int main()
{
int x1, x2, x3, x4, x5, x6, x7, x8, x9, x10;
int p[10];
int flag=1;
int prime[10];
int i;
printf("Enter Value: ");
scanf("%d",&x1);
IsPrime(x1,&flag);
p[0]=flag;
prime[0]=x1;
printf("Enter Value: ");
scanf("%d",&x2);
IsPrime(x2,&flag);
p[1]=flag;
prime[1]=x2;
printf("Enter Value: ");
scanf("%d",&x3);
IsPrime(x3,&flag);
p[2]=flag;
prime[2]=x3;
printf("Enter Value: ");
scanf("%d",&x4);
IsPrime(x4,&flag);
p[3]=flag;
prime[3]=x4;
printf("Enter Value: ");
scanf("%d",&x5);
IsPrime(x5,&flag);
p[4]=flag;
prime[4]=x5;
printf("Enter Value: ");
scanf("%d",&x6);
IsPrime(x6,&flag);
p[5]=flag;
prime[5]=x6;
printf("Enter Value: ");
scanf("%d",&x7);
IsPrime(x7,&flag);
p[6]=flag;
prime[6]=x7;
printf("Enter Value: ");
scanf("%d",&x8);
IsPrime(x8,&flag);
p[7]=flag;
prime[7]=x8;
printf("Enter Value: ");
scanf("%d",&x9);
IsPrime(x9,&flag);
p[8]=flag;
prime[8]=x9;
printf("Enter Value: ");
scanf("%d",&x10);
IsPrime(x10,&flag);
p[9]=flag;
prime[9]=x10;
for(i=0;i<10;i++)
{
if(p[i]==1)
{
prime[i]=prime[i];
}
else if(p[i]==0)
{
prime[9-i]=prime[i];
}
}
printf("Elements in some order:\n");
for(i=0;i<10;i++)
{
printf("%d ",prime[i]);
}
return 0;
}
void IsPrime(int x, int *flag)
{
int i;
for(i=2;i<x;i++)
{
if(x%i==0)
{
*flag=0;
break;
}
else
*flag=1;
}
}
【问题讨论】:
-
建议您先返回并更改代码以使用循环,而不是将本质上相同的代码重复 10 次。
-
为了帮助您解决上述问题:如果您仅将它们用作传递存储,那么定义 10 个版本的“x”是没有意义的。您可以重复使用单个
x就可以了。 -
好的,我试试,谢谢。对于问题的从头到尾(素数)和从头到尾(复合)部分,我该怎么做?我很确定我在这里做错了
-
只存储两个索引:
int next_prime = 0, next_composite = 9;-- 然后,当您读取一个值时,调用IsPrime或者:p[next_prime++] = x;或p[next_composite--] = x;保证填充数组的所有元素,然后您可以按顺序打印出来。整个程序几乎可以用几行代码编写。 -
这行得通,耶!非常感谢您的帮助。