1.当1+2+3+...+x<1000,1+2+3+...+x+1>=1000,求出该x的值
代码如下:
int Fun()
{
int tmp = 0;
int i;
for(i=1; ;i++)
{
tmp += i;
if(tmp >= 1000)
{
break;
}
}
printf("%d\n",tmp);
return i-1;
}
2.用pi/4≈1-1/3+1/5-1/7+…公式求pi的近似值,直到发现某一项的绝对值小于10^-6为止,(该项不计累加)
代码如下:
double GetPi()
{
double sum = 0;
double n = 1;
double m = 1;
int flg = 1;
while(n/m > 0.000001)//m<1000000,1e-6
{
sum += flg*n/m;
m += 2;
flg *= -1;
}
return sum * 4;
}
int main()
{
printf("%f\n",GetPi());
return 0;
}
3.求1+2+3+…+n
在此我将提供for,while,do-while三种语句,代码如下:
int Sum(int n)
{
int tmp = 0;
for(int i=1;i<=n;i++)
{
tmp += i;
}
return tmp;
}
int Sum_while(int n)
{
int tmp = 0;
int i = 1;
while(i<=n)
{
tmp += i;
i++;
}
return tmp;
}
int Sum_dowhile(int n)
{
int tmp = 0;
int i = 1;
do
{
tmp += i;//tmp = tmp + i;//有副作用
i++;
}while(i<=n);
return tmp;
}
4.判断是否为素数
代码如下:
bool IsPrimer(int n)
{
//for(int i=2;i<n;i++)//n==9,i=2
for(int i=2;i<=sqrt((double)n);i++)
{
if(n%i == 0)
{
return false;
}
/*else
{
return true;
}*/
}
return true;
}
int main()
{
for(int i=2;i<100;i++)
{
if(IsPrimer(i))
{
printf("%d\n",i);
}
}
return 0;
}
5. 若#define EPS 0.0000001,求ax^2+bx+c=0方程的根。
#define EPS 0.0000001
void Fun1(double a,double b,double c)
{
double x1;
double x2;
double d = b*b-4*a*c;
if(-EPS<=a && a<=EPS)//a == 0
{
x1=x2 = -c/b;//bug
printf("%f,%f\n",x1,x2);
}
else//
{
if(d > EPS)//d > 0
{
x1 = (-b+sqrt(d))/(2*a);//1.25e3
x2 = (-b-sqrt(d))/(2*a);
printf("%f,%f\n",x1,x2);
}
else
{
if(-EPS<=d && d<=EPS)//d = 0
{
x1=x2 = (-b)/(2*a);
printf("%f,%f\n",x1,x2);
}
else//d<0
{
printf("无实根\n");
}
}
}
}
//该程序与下边的程序区别仅仅在于else if语句
void Fun2(double a,double b,double c)
{
double x1;
double x2;
double d = b*b-4*a*c;
if(-EPS<=a && a<=EPS)//a == 0
{
x1=x2 = -c/b;//bug
printf("%f,%f\n",x1,x2);
}
else if(d > EPS)//d > 0
{
x1 = (-b+sqrt(d))/(2*a);//1.25e3
x2 = (-b-sqrt(d))/(2*a);
printf("%f,%f\n",x1,x2);
}
else if(-EPS<=d && d<=EPS)//d = 0
{
x1=x2 = (-b)/(2*a);
printf("%f,%f\n",x1,x2);
}
else//d<0
{
printf("无实根\n");
}
}