近似求PI (15 分)
本题要求编写程序,根据下式求π的近似值,直到最后一项小于给定精度eps。
2
π
=1+
3
1!
输入格式:
输入在一行中给出精度eps,可以使用以下语句来读输入:
scanf("%le", &eps);
输出格式:
在一行内,按照以下格式输出π的近似值(保留小数点后5位):
PI = 近似值
输入样例:
1E-5
结尾无空行
输出样例:
PI = 3.14158
结尾无空行
如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//生成3个位不重复的十六进制数,以字符形式返回每个位上的数
void getrand(char *aa,char *bb,char *cc)
{
int a,b,c;
//int s=0;
a = rand()%15+1; //生成1-15的随机数
while(1)
{
b = rand()%15; //生成0-15的随机数
if(b != a)
break; //避免b跟a重复
}
//生成c
while(1)
{
c = rand()%15; //生成0-15的随机数
if(c != a && c != b)
break;
}
//s = a*16*16+b*16+c;
//printf("三个位置上的数分别是:%d %d %d\n",a,b,c);
//printf("生成的三位数十六进制分别是:%X %X %X\n",a,b,c);
if(a<10)
*aa = '0'+ a;
else
*aa = 'A'+a-10;
if(b<10)
*bb = '0'+ b;
else
*bb = 'A'+b-10;
if(c<10)
*cc = '0'+ c;
else
*cc = 'A'+c-10;
}
int main()
{
char a,b,c;
char a1,b1,c1;
int times = 8;
srand((unsigned int)time(NULL));
getrand(&a,&b,&c);
while(times)
{
printf("请输入3个位上的数字(0-F):");
scanf("%c%c%c",&a1,&b1,&c1);
getchar();
if(a1==a && b1==b && c1==c)
{
printf("猜对了\n");
break;
}else
{
if(a1==a)
printf("数字 1 位置正确数字正确;");
else
{
if(a1 ==b || a1==c)
printf("数字1 位置不正确数字正确;");
}
if(b1==b)
printf("数字 2 位置正确数字正确;");
else
{
if(b1 ==a || b1==c)
printf("数字2位置不正确数字正确;");
}
if(c1==c)
printf("数字 3 位置正确数字正确。");
else
{
if(c1==a ||c1==b)
printf("数字 3 位置不正确数字正确。");
}
times--;
//printf("请重新输入:");
}
}
if(times==0)
printf("8次没猜对,游戏结束");
return 0;
}
#include <stdio.h>
#include <string.h>
#include <stdio.h>
#include <time.h>
int main()
{
int i=0,j,d,t=8;
char c;
char s[4] = {0};
char a[4] = {0};
srand(time(NULL));
for(i=0;i<3;i++)
{
d = rand()%16;
if(d<10)
c = d+48;
else
c = d+55;
for(j=0;j<i;j++)
if(s[i] == c)
break;
if(j==i)
s[i] = c;
else
i--;
}
while(t>0)
{
printf("第%d次猜:",9-t);
scanf("%s",a);
if(strcmp(a,s)==0)
break;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if(a[j] == s[i])
{
if(i==j)
printf("数字%c位置正确数字正确\n",s[i]);
else
printf("数字%c位置不正确但数字正确\n",s[i]);
}
}
}
t--;
}
if(t==0)
printf("很遗憾,8次没猜对");
else
printf("恭喜第%d次猜对了",9-t);
return 0;
}