1、沈阳理工大学机械工程学院计 算 机 程 序 训 练 任 务 书 姓名 崔晓光 班级 08010131 学号 18 日期:2010/06/15目 录一 设计题目. .3 二 设计要求.3三 技术要求.3(1)题目内容的描述.3(2)应用程序详细说明.3(3)输入数据类型、格式和内容限制.4(4)主要模块的算法描述.4(5) 结束语.6(6) 程序的源代码清单.6一 设计题目 求3次方程的根二 设计要求 已知有一方程ax3+bx2+cx+d=0,方程系数a,b,c,d由键盘输入(要求a,b,c,d都不能等于零,如果有零从新输入),求其3个根。三 技术要求 1 按照给定题目,独自设计程序,上机调试通
2、过。 2 设计报告(1)题目内容描述:设计一程序算出一元三次方程的根(2)应用程序功能详细说明 #include : 把使用数学库函数时所需的信息包含进来; #include :控制台的输入输出; float a, b, c, d : 定义外部变量,是全局都可以使用; float f(float) : 定义f函数,以实现f(x)=ax3+bx2+cx+d ; float xpoint(float x1 ,float x2) :定义xpoint函数,求出弦与x轴的交点; float root :定义roop函数,求近似根; do. While : 循环; void main() :主函数; fa
3、bs :求绝对值的函数,对实数型求绝对值的标准函数; while(fabs(y)= ) : 设定精度; if() : 判定所给定的条件是否满足根据判断的结果(真或假)决定执行给出两种操作之一; while() :用来实现“当型”循环结构; printf() :printf 的一般形式为printf(格式控制,输出列表) 例如:printf(“%d,%cn”,i,c),括号内包括两部分: a格式控制”是用双撇号括起来的字符串,也称“转换控制字符串”,它包括两种信息:a:格式说明。格式说明由“%d”和格式字符组成,如%d,%f等。他的作用是将输出的数据转换为制定的格式输出。格式说明总是由“%”字符
4、开始的。b:普通字符。普通字符即需要鸳鸯输出的字符。例如上面printf幻术中双撇号没的逗号,空格和换行符。 b“输出列表”是需要输入的一些数据,可以用表达式。 scanf() : 一般形式:scanf(格式控制,地址列表) “格式控制”的含义同printf函数;“地址列表”是由若干个地址组成的列表,可以是变量的地址,或字符串的首地址。格式说明:于printf函数中的格式说明相似,以%开始,以一个格式字符结束,中间可插入附加的字符; getch() : 字符输入函数(3)输入数据类型、格式和内容限制 a.输入数据类型:浮点型数据float 格式:比特(位)数32 4字节 内容限制:7位有效数字
5、 b.输入数据类型:字符型数据 n格式:以开头内容限制:换行符,在屏幕上不显示(4)主要模块的算法描述 a.程序N-S流程图输入a, b, c, d,确定一元三次方程标准形式 b.语言描述 原理 1. 取两个不同点x1,x2,如果f(x1)和f(x2)符号相反,则(x1,x2)区间内必有一个根。如果f(x1)与f(x2)同符号,则应改变x1,x2,直到f(x1)、f(x2)异号为止。注意x1、x2的值不应差太大,以保证(x1,x2)区间内只有一个根。 2. 连接(x1,f(x1)和(x2,f(x2)两点,此线(即弦)交x轴于x。 3. 若f(x)与f(x1)同符号,则根必在(x,x2)区间内,
6、此时将x作为新的x1。如果f(x)与f(x2)同符号,则表示根在(x1,x)区间内,将x作为新的x2。 4. 重复步骤 (2) 和 (3) , 直到 f(x) 为止, 为一个很小的数, 例如 10-6. 此时认为 f(x)0 。 函数来实现个部分的功能 1. 用函数f(x)代表x的函数:ax3+bx2+cx+d=0 2. 程序从main函数开始执行。先执行一个do.while循环,其作用是输入x1和x2,判别f(x1)和f(x2)是否异号。如果不是异号,则重新输入x1和x2,知道满足f(x1)和f(x2)异号为止。 3. 用函数调用xpoint (x1,x2)来求(x1,f(x1)和(x2,f
7、(x2)的连线与x轴的交点x的坐标。 4. 用函数调用root (x1,x2)来求(x1,x2)区间的 那个实根。显然,执行root函数过程中要用到函数xpoint,而执行xpoint函数过程中要用到f函数。 Main函数 root函数 xpoint函数 f函数 调用root函数 调用xpoint函数 调用f函数 输出根x结束 (5) 结束语 通过此次程序设计,更深的体会到了c程序的强大的功能,和这门语言的重要性,在编程中遇到好多困难,也才更深的认识到自己学习力度不够。通过查资料,对指针的使用才有了更深刻的了解,还有对的应用有了新的认识。 (6) 程序的源代码清单 #include #incl
8、ude int a,b,c,d; /定义外部变量,使全局可以调用,生成函数f(x)就是生成方程y=ax3+bx2+cx+d float f(float x) /x函数 float y; y=a*x*x*x+b*x*x+c*x+d; return(y); /生成浮点数y 计算式 y=(x1*f(x2)-x2*f(x1)/(f(x2)-f(x1) float xpoint(float x1,float x2) /求弦与x轴交点坐标 float y; y=(x1*f(x2)-x2*f(x1)/(f(x2)-f(x1); return y; /求根当y的绝对值小于0.0001时返回x float ro
9、ot(float x1,float x2) /求根函数 float x,y,y1; y1=f(x1); /y1为x1纵坐标 do x=xpoint(x1,x2); /求x1与x2之间弦与x轴交点赋值于x y=f(x); /代入方程中求得y if(y*y10) /判断y与y1是否同号 x1=x; y1=y; else x2=x; while(fabs(y)=0.0001); /设定精度 return(x); void main() /主函数 float x1,x2,f1,f2,x; scanf(%d,%d,%d,%d,&a,&b,&c,&d);/定义变量,获取abcd常量值 do printf (input x1,x2:n); scanf(%f %f,&x1,&x2); /获取x1,x2值 f1=f(x1); f2=f(x2); while(f1*f2=0); /do.while函数为了得到x1与x2的函数值为异号,当f1*f20时跳出循环,这样x1 x2中才有根 x=root(x1,x2); /将x1 x2送到求根函数中返回值赋到x中, 得出根 printf(A root of equalation is %8.4fn,x);