C或者C++,从键盘中输入10个正整数到一个一维数组,将数组中的素数按从小到大的顺序排列后输出
先提取素数,然后再排序
//从键盘中输入10个正整数到一个一维数组,将数组中的素数按从小到大的顺序排列后输出
#include <stdio.h>
int isprime(int n)
{
int i;
if(n<2)
return 0;
for(i=2;i*i<=n;i++)
if(n%i==0)
return 0;
return 1;
}
int main()
{
int a[10];
int i,j=0,n=0,t;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
if(isprime(a[i]))
a[n++] = a[i];
if(n==0)
printf("Not Found");
else
{
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(a[j] > a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
}
return 0;
}
运行结果及代码如下:
代码:
#include <stdio.h>
int prime(int n)
{
int i;
if(n<2) return 0;
for(i=2;i<n;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int a[10];
int b[10],index[10],i,j,n,t;
printf("请输入10个数:");
n=0;
for (i=0;i<10;i++)
{
scanf("%d",&a[i]);
if(prime(a[i]))
{
b[n]=a[i];
index[n] = i; //记录所在位置的下标
n++;
}
}
//将所有素数排序
for (i=0;i<n-1;i++)
{
for (j=0;j<n-i-1;j++)
{
if (b[j]>b[j+1])
{
t = b[j];
b[j]=b[j+1];
b[j+1]=t;
}
}
}
//更新位置
for (i=0;i<n;i++)
{
t = index[i];
a[t] = b[i];
}
//输出排序后的数组
for(i=0;i<10;i++)
printf("%d ",a[i]);
return 0;
}