Sorawithcat 发表于 2023-11-22 09:12:47

这个函数在传参的时候传错了吗?

我想传递的是一个数组,其中chucun和chucun1貌似错误
int chucun0;

int yuefen(int fenzi, int fenmu)//较简便的一个约分函数,功能并不完全
{
        double fenmujisuan;
        int i;
        int z;
        int y;
        int x;
        int fenmuchucun;
        int fenzichucun;
        int jiancha;

        fenmujisuan = fenmu / fenzi;
        if (fenmujisuan == (int)fenmujisuan)
        {
                fenzi = fenzi / fenmujisuan;
                fenmu = fenmu / fenmujisuan;
                goto end;
        }
        for (i = 1, z = 0;i <= (fenmu / 2); i++)//区分分母是否为质数
        {
                if (fenmu % i == 0)
                {
                        fenmuchucun = i;
                        z++;
                }
        }
        for (i = 1, z = 0;i <= (fenzi / 2); i++)//区分分子是否为质数
        {
                if (fenzi % i == 0)
                {
                        fenzichucun = i;
                        z++;
                }
        }
        for (i = 0, x = 0;i <= z;i++)
        {
                for (y = 0;y <= z;y++)
                {
                        if (fenmuchucun == fenzichucun)
                        {
                                jiancha = fenmuchucun;
                                x++;
                        }
                }
        }
        if(x==0)
        {
                goto end;
        }
        fenzi = fenzi / jiancha;
        fenmu = fenmu / jiancha;
end:
        //printf("%d/%d", fenzi, fenmu);
        chucun0 = fenzi;
        chucun0 = fenmu;
        return(*chucun0);
}

int tongfen_jia(int fenzi1, int fenmu1, int fenzi2, int fenmu2)
{
        int fenzi3;
        int fenzi4;
        int fenzi;
        int fenmu;
        fenmu = fenmu1 * fenmu2;
        fenzi3 = fenzi1 * fenmu2;
        fenzi4 = fenzi2 * fenmu1;
        fenzi = fenzi3 + fenzi4;
        return(yuefen(fenzi, fenmu));
}

int tongfen_jian(int fenzi1, int fenmu1, int fenzi2, int fenmu2)
{
        int fenzi3;
        int fenzi4;
        int fenzi;
        int fenmu;
        fenmu = fenmu1 * fenmu2;
        fenzi3 = fenzi1 * fenmu2;
        fenzi4 = fenzi2 * fenmu1;
        if (fenzi3 > fenzi4)
        {
                fenzi = fenzi3 - fenzi4;
        }
        else
        {
                fenzi = fenzi4 - fenzi3;
        }
        return(yuefen(fenzi, fenmu));
}
double jisuan(int* xuanze)
{
       
        int yangbenkongjian = 1;
        int switch1;
        int fenzi = { 0 };
        int fenmu = { 1,1,1,1,1 };
        double gailv = { 0 };
        int chucun;
        int chucun1;
//************这里要做的是检测知道的数量然后对不同情况进行计算*//////////////////////////
        //**********这里有想到一个更简单的办法,但是需要点技术力*///////
        if ((xuanze && xuanze && xuanze) == 1)
        {
                printf("输入你知道的P(A)的概率的分子和分母,格式为分子/分母\n");
                scanf_s("%d/%d", &fenzi, &fenmu);
                gailv = (double)fenzi / fenmu;
                printf("输入你知道的P(B)的概率的分子和分母,格式为分子/分母\n");
                scanf_s("%d/%d", &fenzi, &fenmu);
                gailv = (double)fenzi / fenmu;
                printf("输入你知道的P(A-B)的概率的分子和分母,格式为分子/分母\n");
                scanf_s("%d/%d", &fenzi, &fenmu);
                gailv = (double)fenzi / fenmu;
                gailv = gailv - gailv;//P(AB)
                gailv = gailv + gailv - gailv;//P(A+B)
                printf("P(A)的概率为 %d/%d,小数化为 %0.3f %%\n", fenzi, fenmu, gailv);
                printf("P(B)的概率为 %d/%d,小数化为 %0.3f %%\n", fenzi, fenmu, gailv);
                printf("P(A-B)的概率为 %d/%d,小数化为 %0.3f %%\n", fenzi, fenmu, gailv);
                *chucun = tongfen_jian(fenzi, fenmu, fenzi, fenmu);
                printf("P(AB)的概率为 %d/%d ,小数化为 %0.3f %%\n", chucun, chucun, gailv);//P(AB)
                *chucun = tongfen_jia(fenzi, fenmu, fenzi, fenmu);
                *chucun1 = tongfen_jian(chucun, chucun, fenzi, fenmu);
                printf("P(A+B)的概率为 %d/%d ,小数化为 %0.3f %%\n", chucun1, chucun1, gailv);//P(A+B)
        }
}
void main()
{
        int fenzi1 = 0;
        int fenmu1 = 1;
        int fenzi2 = 0;
        int fenmu2 = 1;
        int xuanze = { -1 };
        for (;;)
        {
                int switch1 = 0;
                printf("输入1进行模拟实验,输入2进入概率计算。\n");
                scanf_s("%d", &switch1);
                if (switch1 == 1)
                {
                        moni();
                }
                else
                {
                        printf("选择已知的数据。\n");
                        printf("1.P(A) 2.P(B) 3.P(A-B) 4.P(A+B) 5.P(AB)\n");
                        printf("已知则输入1,未知则输入-1即可。例如:1,-1,1,-1,1\n");
                        scanf_s("%d,%d,%d,%d,%d", &xuanze, &xuanze, &xuanze, &xuanze, &xuanze);
                        jisuan(xuanze);
                }
        }
}

isdkz 发表于 2023-11-22 09:12:52

这段代码存在一些问题。首先,数组 chucun 和 chucun1 没有被正确声明,应该使用 int chucun 和 int chucun1 来声明这两个数组。其次,在函数 jisuan 中, chucun 和 chucun1 被错误地赋值,应该使用 chucun 和 chucun 来赋值。

此外,代码中存在一些不规范的写法,比如使用 goto 语句和未初始化的变量。建议对代码进行重构和优化,以提高可读性和可维护性。
页: [1]
查看完整版本: 这个函数在传参的时候传错了吗?