C语言 利用杨辉三角进行二项式展开,返回动态一维数组

#include<stdio.h>
int *printYangHuiByNLine(int rows);
void main()
{
    int exponent;
    int again=1;
    printf("-------------------------二项式展开-----------------------------\n");
    while(again==1)
    {
         printf("输入(x+y)^exponent:的exponent(指数):");
        scanf("%d",&exponent);
        int element_num=exponent+1;//系数的个数比指数多一个
        int *yanghui=printYangHuiByNLine(exponent);//返回指数为exponent的杨辉三角的哪一行的动态数组

        int i;//循环变量
        int flag=0;//控制第一个加号不输出
        printf("(x+y)^%d=",exponent);
        for(i=0;i<element_num;i++)
        {
            //第一个加号不输出
            if(flag)
                printf(" + ");
            flag=1;//后面的加号都输出

            //输出系数,利用杨辉三角
            if(yanghui[i]!=1)//如果系数不是1才打印,是1就不打印这系数1
                printf("%d",yanghui[i]);//从动态数组中输出每一项的系数
            //输出x的幂
            if((exponent-i)!=0)
            {
                if((exponent-i)==1)
                    printf("x");
                else
                    printf("x^%d",(exponent-i));
            }
            //输出y的幂
            if(i!=0)
            {
                if(i==1)//如果是指数就省略
                    printf("y");
                else
                    printf("y^%d",i);
            }
        }
        free(yanghui);//释放空间
        printf("\n继续[1/0]?:");
        scanf("%d",&again);
    }
}
int *printYangHuiByNLine(int rows)//打印第n行的杨辉三角
{
    int coef = 1,j;
    int *yanghui=(int*)malloc(sizeof(int)*(rows+1));//动态一位数组
    for(j=0; j <= rows; j++)//第n行的数字有n项,所以j<=i
    {
        if(j==0)
        {
            coef = 1;
            yanghui[j]=coef;//
        }
        else
        {
            coef = coef*(rows-j+1)/j;//最后一个每一行i=j,倒数第二行(coef=j)等于列数,
            yanghui[j]=coef;
        }
    }
    return yanghui;//返回动态数组
}

测试:

-------------------------二项式展开-----------------------------
输入(x+y)^exponent:的exponent(指数):1
(x+y)^1=x + y
继续[1/0]?:1
输入(x+y)^exponent:的exponent(指数):2
(x+y)^2=x^2 + 2xy + y^2
继续[1/0]?:1
输入(x+y)^exponent:的exponent(指数):3
(x+y)^3=x^3 + 3x^2y + 3xy^2 + y^3
继续[1/0]?:1
输入(x+y)^exponent:的exponent(指数):4
(x+y)^4=x^4 + 4x^3y + 6x^2y^2 + 4xy^3 + y^4
继续[1/0]?:1
输入(x+y)^exponent:的exponent(指数):5
(x+y)^5=x^5 + 5x^4y + 10x^3y^2 + 10x^2y^3 + 5xy^4 + y^5
继续[1/0]?:2


  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值