SOS 见下文见下文 SOS

近似求PI (15 分)
本题要求编写程序,根据下式求π的近似值,直到最后一项小于给定精度eps。

2
π

=1+
3
1!

  • 3×5
    2!
  • 3×5×7
    3!
  • ⋯+
    3×5×⋯×(2×i+1)
    i!

输入格式:
输入在一行中给出精度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;
}