标题:c语言问题,求助:用结构体做:百钱百鸡问题的变形,求二次方程的根
只看楼主
hhr
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2021-12-10
结帖率:0
已结贴  问题点数:20 回复次数:3 
c语言问题,求助:用结构体做:百钱百鸡问题的变形,求二次方程的根
1.
函数求百钱百鸡问题的变形:
原百钱百鸡问题如下:
一只公鸡值5钱,
一只母鸡值3钱,
三只小鸡值1钱,
现在用百钱买百鸡,
请问公鸡、母鸡、小鸡各多少只?
现修改要求,实现下面的函数:
int howMany(int money,int m,int cockMoney,int henMoney,int chickenMoney,int *cockNum,int *henNum,int *chickenNum);
函数功能:根据输入的总的价钱money,
总的鸡的数量m,每种鸡的价格,
求满足要求的各种鸡的数量。
如果函数有解,只需要求出其中一个解即可。
输入参数:
int money: 总共花的钱数
int m:总的鸡的数量
int cockMoney:1只公鸡的价格
int henMoney:1只母鸡的价格
int chickenMoney:一只小鸡的价格
 输出参数:
 int *cockNum:公鸡数量
 int *henNum:母鸡数量
 int *chickenNum:小鸡数量
 函数返回值:有解返回1,无解返回0,输入参数不合法,返回-1



2.
求方程 ax^2 + bx + c = 0 的根(小数点后保留2位),其中 a,b,c 由键盘输入。有以下几种情况:
(a) a = 0,不是二次方程;
(b) b2  4ac = 0,有两个相等的实根;
(c) b2  4ac > 0,有两个不等的实根;
(d) b2  4ac < 0,有两个共轭复根。


输入样例:
3 4 5
输出样例:
x1=-0.67+1.11i,x2=-0.67-1.11i

输入:
1 2 1
输出:
x1=x2=-1.00

输入:
2 11 1
输出:
x1=-0.09,x2=-5.41

输入:
0 10 2
输出:
x=-0.20

输入:
a b c
输出:
error
搜索更多相关主题的帖子:  百钱 int 输入 数量 
2021-12-10 21:52
hhr
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2021-12-10
得分:0 
求各位了,
2021-12-10 21:55
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:20 
刚开始学C写的一个代码,注意,与你的第二个题目的代码要求更多一点,自己删。
然后代码是写给自己用的,加之英文不行,所以函数名是随手敲的字母,自己改去。最后废代码什么都在里面。


程序代码:
// 引入标准输入输出库
#include<stdio.h>

// 引入数学库 
#include<math.h>

//定义了一个函数,该函数有三个参数,均为浮点型,此处定义可以不写出参数名来 
int p(float,float,float);

int main(void)
{
    /*
    解一元二次方程,通过键盘输入 a,b,c 的值, 
    使用标准解公式输出结果
    会首先判断一下方程会不会降级为一元一次方程或方程不成立 
    */
    
    // 数据类型都定义为 单精度浮点类型 
    float a,b,c ,d ;
    float x1,x2;
    
    //输出提示 
    printf("解一元二次方程\n");
    printf("请输入方程参数:aX^2+bX+c=0\n a,b,c?(输入时每个数字之间用空格分隔)");
    
    //输入参数 
    scanf("%f%f%f",&a,&b,&c);
    
    if(a==0)    //是否降为一元一次方程 
    {
        if (b==0)     //是否方程不成立 
            printf("输入数据错误,方程不成立!\n") ;
        else
        {       // 使用公式直解一元一次方程 
            x1= -c/b;
            //%+g 会强制正数显示前导的+号,不需要自己再判断 
            printf("方程为一元一次方程\n%gX%+g=0 方程唯一解:x=%g\n",b,c,x1);
        }
    }
    else
    {
        // 计算 Δ=b^2-4ac ,其中b^2可以直接写成 b*b 
        d=b*b-4*a*c;
        if (d>0)
        {
            x1=(-b+sqrt(d))/(2*a);
            x2=(-b-sqrt(d))/(2*a);
            p(a,b,c);               //这里调用函数 p 输出方程完整形式 
            printf("方程有二个解:\nx1=%g\nx2=%g\n",x1,x2);
            
            //printf("%gX^2+%gX+%g=0 方程有二个解:\nx1=%g\nx2=%g\n",a,b,c, x1,x2);
        }
        else if(d==0)
             {
                x1=-b/(2*a);
                p(a,b,c);               //这里调用函数 p 输出方程完整形式 
                printf("方程唯一解:x=%g\n", x1);
            }
            else if(d<0)
            {
                 p(a,b,c);               //这里调用函数 p 输出方程完整形式 
                 printf("方程无解!\n");
            }
    }     
    return 0;
}

int p(float a ,float b ,float c)
{
//根据 b ,c 是否等于0,有4种组合输出方程 

if (b==0) 
{
     if (c!=0) 
        printf("%gX^2%+g=0 ",a,c);
    else
        printf("%gX^2=0 ",a);
}
else
     if (c!=0) 
        printf("%gX^2%+gX%+g=0 ",a,b,c);
    else
        printf("%gX^2%+gX=0 ",a,b);

/*    
因%+g会直接输出符号位,所以以下代码都是废代码 
//输出方程样式,并且需要根据每个参数是否小于0来确定需不需要输出+号 
    if(b>=0)
    {
        if (c>=0)
            printf("%gX^2+%gX+%g=0 ",a,b,c);
        else
             printf("%gX^2+%gX%g=0 ",a,b,c);
     } 
    else
    {
        if (c>=0)
            printf("%gX^2%gX+%g=0 ",a,b,c);
        else
             printf("%gX^2%gX%g=0 ",a,b,c);
    }
*/
    return 0;
}

授人于鱼,不如授人于渔
早已停用QQ了
2021-12-10 22:33
hhr
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2021-12-10
得分:0 
谢谢大佬
2021-12-11 17:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-507830-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.074757 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved