/*
函数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;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:一、 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是多大内存的变量
#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;
}