c语言函数,素数作分母求数列的和


/*
函数fun是根据输入n,求下面分母为n以内(包含n)的素数构成的数列的和s=1/2-2/3+3/5-4/7+5/11…… ,例如,输入10,输出:-0.138095。
要求在fun函数的注释语句之间编写程序,其它部分不得增删语句。
*/
#include<stdio.h>
#include<stdlib.h>
/*************************Begin*********************/
int zf=-1;
double sum=0.0;
int i,j=0;
    for(i=2;i<=n;i++)
    {
        if(ss(i)==0)
        {
            j++;
            zf=zf*(-1);
            sum+=zf*((double)j/(double)i);
        }
    } 
    return sum;
/**************************End**********************/
}
int main()
{
    int n;
    double s,x;
    FILE *in,*out;
    printf("输入n:");
    scanf("%d",&n);
    s=fun(n);
    printf("%lf\n",s);
    /*****************/
    in=fopen("in2019-2-1-2.dat","r");
    out=fopen("out2019-2-1-2.dat","w");
    while(!feof(in))
    {
        fscanf(in,"%d",&n);
        fprintf(out,"%lf\n",fun(n));
    }
            fclose(in);
            fclose(out);
    system("pause");
    return 0;    
}

#include<stdio.h>
#include<stdlib.h>

int ss(int n)//判断是否为素数
{
    if(n<=1)
    {
        return 1;
    }
    for(int i=2;i*i<=n;i++)
    {
        if(n%i==0)
        {
            return 1;
        }
    }
    return 0;
}

double fun(int n)//计算公式
{
    int zf=-1;
    double sum=0.0;
    int i,j=0;
    for(i=2;i<=n;i++)
    {
        if(ss(i)==0)
        {
            j++;
            zf=zf*(-1);
            sum+=zf*((double)j/(double)i);
        }
    } 
    return sum;
}

int main()
{
    int n;
    double s,x;
    FILE *in,*out;
    printf("输入n:");
    scanf("%d",&n);
    s=fun(n);
    printf("%lf\n",s);
    /*****************/
    in=fopen("in2019-2-1-2.dat","r");
    out=fopen("out2019-2-1-2.dat","w");
    while(!feof(in))
    {
        fscanf(in,"%d",&n);
        fprintf(out,"%lf\n",fun(n));
    }
    fclose(in);
    fclose(out);
    system("pause");
    return 0;    
}

修改如下,供参考:

/*
函数fun是根据输入n,求下面分母为n以内(包含n)的素数构成的数列的和s=1/2-2/3+3/5-4/7+5/11…… ,例如,输入10,输出:-0.138095。
要求在fun函数的注释语句之间编写程序,其它部分不得增删语句。
*/
#include<stdio.h>
#include<stdlib.h>
/*************************Begin*********************/
double fun(int n)
{
    int flg, i, j, k = 0;
    double sum = 0.0;
    for (i = 1; i <= n; i++)
    {
        for (j = 2, flg = 1; flg && j * j <= i; j++)
            if (i % j == 0)  flg = 0;
        if (flg && i != 1) {
            k++;
            k % 2 == 0 ? sum -= (double)k / i : sum += (double)k / i;
        }
    }
    return sum;
/**************************End**********************/
}
int main()
{
    int n;
    double s, x;
    FILE* in, * out;
    printf("输入n:");
    scanf("%d", &n);
    s = fun(n);
    printf("%lf\n", s);
    /*****************/
    in = fopen("in2019-2-1-2.dat", "r");
    out = fopen("out2019-2-1-2.dat", "w");
    while (!feof(in))
    {
        fscanf(in, "%d", &n);
        fprintf(out, "%lf\n", fun(n));
    }
    fclose(in);
    fclose(out);
    system("pause");
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7605709
  • 你也可以参考下这篇文章:【c语言】偶数分解素数和
  • 同时,你还可以查看手册:c语言-函数定义 中的内容
  • 除此之外, 这篇博客: C语言当中的数据类型分析中的 数据类型的封装 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    一、 void * 代表无类型指针,void * 可以指向任意类型数据

    1、void可以用来做数据类型的封装
    典型的如内存操作函数memcpy和memset的函数原型分别为

        void * memcpy(void * dest, const void * src, size_t len);
        void * memset ( void * buffer, int c, size_t num );  

    2、void修饰函数返回值和参数,仅表示无
    如果函数没有返回值,那么应该将其声明为void型
    如果函数没有参数,应该声明其参数为void

        int function(void)
        {
            return 1;
        }

    二、 void指针的意义
    C语言中规定只有相同类型的指针才可以相互赋值
    Void * 指针作为左值可以用来接收任意类型的数据
    Void * 指针作为右值赋给其他类型指针时需要强制类型转换

    三、 不存在void类型变量
    C语言中没有规定void是多大内存的变量

  • 您还可以看一下 龙芯专家老师的龙芯生态应用开发基础:C语言精要课程中的 C指针定义小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
#include<stdio.h>
#include<stdlib.h>

int ss(int n) // 判断素数的函数
{
    int i;
    if(n<=1)    return 1;
    for(i=2;i*i<=n;i++)
    {
        if(n%i==0)  return 1;
    }
    return 0;
}

/*************************Begin*********************/
float fun(int n)
{
    if(n<2) return 0; // 判断边界情况
    int zf=-1;
    float sum=0.0;
    int i,j=0;
    for(i=2;i<=n;i++)
    {
        if(ss(i)==0)
        {
            j++;
            zf=zf*(-1); 
            sum+=zf*((float)j/(float)i);
        }
    } 
    return sum;
/**************************End**********************/
}

int main()
{
    int n;
    float s;
    FILE *in,*out;
    printf("输入n:");
    scanf("%d",&n);
    s=fun(n);
    printf("%f",s);
    /*****************/
    in=fopen("in2019-2-1-2.dat","r");
    out=fopen("out2019-2-1-2.dat","w");
    while(!feof(in))
    {
        fscanf(in,"%d",&n);
        fprintf(out,"%f",fun(n));
    }
    fclose(in);
    fclose(out);
    system("pause");
    return 0;    
}