输入一个大于二的整数n,输出最接近n的素数不包括n

不知道咋思考,C程序应该用什么循环结构做还是啥的,感觉我只会判断是否是素数,不会这个45的素数有两个啊!有特殊的数有两个不会搞


#include <stdio.h>
int isprime(int n)
{
    for(int i=2;i*i<=n;i++)
          if(n%i==0)
               return 0;
    return 1;
}
int main()
{
    int n;
    int d = 1;
    int left=0,right=0;
    scanf("%d",&n);
    for(int i=n;d<n-2;d++){
           if(isprime(i-d) == 1){
             left = i-d;                
             
        }
        if(isprime(i+d) == 1){
            right = i+d;
        }
        if(left && right){
             printf("%d %d",left,right);
            break;
        }else if(left){
            printf("%d",left);
            break;
        }else if(right){
            printf("%d",right);
            break;
        }
    }
    
    
    
}

用while循环

#include <stdio.h>
int isprime(int n)
{
    for(int i=2;i*i<=n;i++)
          if(n%i==0)
               return 0;
    return 1;
}
int main()
{
    int n;
    scanf("%d",&n);
    while(1)
    {
        if(isprime(n) == 1)
            break;
        n++;
    }
    printf("%d",n);
}

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7414701
  • 你也可以参考下这篇文章:【已解决】C语言从n个不同的元素中,每次取出k个不同的元素
  • 除此之外, 这篇博客: 输入n个整数并排序输出;调用冒泡排序法进行排序的函数(C)中的 调用冒泡排序法进行排序的函数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    1. 包含递增排序
    2. 包含递减排序
    3. 排序算法中对于两个数据的交换,使用的是数组,可以理解为对引用的运用(实际与指针一样,都是对地址进行操作)
    #include<stdio.h>
    #define N 5 //决定比较数的数量 
    int main()
    {
    	int bubblesort1(int a[]);
    	int bubblesort2(int a[]); 
    	int a[N], i;
    	printf("please input 5 digits:");
    	for(i = 0; i < N; i++) scanf("%d", &a[i]);
    	bubblesort1(a);
    	bubblesort2(a);
    	return 0;
     } 
     
     int bubblesort1(int a[]){//递增 
     	int i, j, temp;
    	for(i= N-1; i >= 1; i--)
    		for(j = 0;j <= i-1; j++)
    			if(a[j] > a[j+1]){
    				temp = a[j];
    				a[j] = a[j+1];
    				a[j+1] = temp; 
    			}
    	printf("\nthe sorted numbers:");
    	for(i = 0; i < N; i++) printf("%d ", a[i]);
    	printf("\n\n");
     }
     
    int bubblesort2(int a[]){//递减 
    	int i, j, temp;
    	for(i= N-1; i >= 1; i--)
    		for(j = 0;j <= i-1; j++)
    			if(a[j] < a[j+1]){
    				temp = a[j];
    				a[j] = a[j+1];
    				a[j+1] = temp; 
    			}
    	printf("\nthe sorted numbers:");
    	for(i = 0; i < N; i++) printf("%d ", a[i]);
    	printf("\n\n");
    } 
    

    以递增的冒泡排序法来分析:
    数组长度:5
    外层循环i : [4, 1],减
    内存循环j : [0, i),增
    当 i 为 4 时,内层循环中的条件交换,将最大值像冒泡泡一样(j:从下标小处向下标大处),冒到下标最大的位置
    当 i 为 3 时,将第二大值像冒泡泡一样,冒到下标第二大的位置
    依此类推

#include<stdio.h>
int s(int a)//定义一个方法求是否是素数 
{
    int i;
    for(i=2;i<a;i++)
    {
        if(a%i==0)
        break;
    }
    if(i==a)
    return a;
    else
    return 0;
}
int main()
{
    int x,y,x1,x2,i=0,j=0;
    scanf("%d",&x);
    y=x;
    while(1)
    {
        x--;
        if(s(x)!=0)
        break;
        i++;
    }
    x1=s(x);
    while(1)
    {
        y++;
        if(s(y)!=0)
        break;
        j++;
    }
    x2=s(y);
    if(i<j)
    printf("%d",x1);
    if(i>j)
    printf("%d",x2);
    if(i==j)
    printf("%d,%d",x1,x2);
}