300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > -成信大-C语言程序设计-1学期《C语言程序设计B》C-trainingExercises05

-成信大-C语言程序设计-1学期《C语言程序设计B》C-trainingExercises05

时间:2020-02-19 08:11:17

相关推荐

-成信大-C语言程序设计-1学期《C语言程序设计B》C-trainingExercises05

文章目录

-成信大-C语言程序设计-1学期《C语言程序设计B》C-trainingExercises05P270P723P737P111P703P113

-成信大-C语言程序设计-1学期《C语言程序设计B》C-trainingExercises05

P270

题解和分析

第一种方式,直接判断

/*编写一程序P270.C实现以下功能从键盘读入3个实数,按由大到小的顺序输出这3个数。编程可用素材:printf("请输入3个数:")、printf("\n这三个数由大到小为: %.2f %.2f %.2f\n"…。程序的运行效果应类似地如图1所示,图1中的红色部分是从键盘输入的内容。请输入3个数:200.35 1056.1 72.132这三个数由大到小为: 1056.10 200.35 72.13解题思路1. 直接判断,给出结果2. 要注意考虑到所有情况*/#include <stdio.h>int main(void){double data1, data2, data3;printf("请输入3个数:");scanf("%lf %lf %lf", &data1, &data2, &data3);if (data1 >= data2 && data1 >= data3){if (data2 >= data3){printf("\n这三个数由大到小为: %.2lf %.2lf %.2lf\n", data1, data2, data3);}else{printf("\n这三个数由大到小为: %.2lf %.2lf %.2lf\n", data1, data3, data2);}}if (data2 >= data1 && data2 >= data3){if (data1 >= data3){printf("\n这三个数由大到小为: %.2lf %.2lf %.2lf\n", data2, data1, data3);}else{printf("\n这三个数由大到小为: %.2lf %.2lf %.2lf\n", data2, data3, data1);}}if (data3 >= data1 && data3 >= data2){if (data1 >= data2){printf("\n这三个数由大到小为: %.2lf %.2lf %.2lf\n", data3, data1, data2);}else{printf("\n这三个数由大到小为: %.2lf %.2lf %.2lf\n", data3, data2, data1);}}return 0;}

第二种方式,节省判断,直接排序

/*编写一程序P270.C实现以下功能从键盘读入3个实数,按由大到小的顺序输出这3个数。编程可用素材:printf("请输入3个数:")、printf("\n这三个数由大到小为: %.2f %.2f %.2f\n"…。程序的运行效果应类似地如图1所示,图1中的红色部分是从键盘输入的内容。请输入3个数:200.35 1056.1 72.132这三个数由大到小为: 1056.10 200.35 72.13解题1. 可以采用交换的思路2. 最大端和最小端位置固定即可 */#include <stdio.h>int main(void){double data1, data2, data3;double tmp;printf("请输入3个数:");scanf("%lf %lf %lf", &data1, &data2, &data3);// 始终让data1最大, data2中,则data3最小if (data1 < data2){tmp = data1;data1 = data2;data2 = tmp;}if (data1 < data3){tmp = data1;data1 = data3;data3 = tmp;}if (data2 < data3){tmp = data2;data2 = data3;data3 = tmp;}printf("\n这三个数由大到小为: %.2lf %.2lf %.2lf\n", data1, data2, data3); //由大到小return 0;}/*分析:1. 注意其中的交换两个数的实现,其实,这里可以抽取出来,重构程序,生成交换函数2. 这个程序更简洁,是因为进行了数据交换,也就是算法上有了变化3. 任何一个问题,都可能会有多种解决思路和算法*/

P723

题解和分析

/*编写一程序P723.C实现以下功能输入三角形的三边长a、b、c(边长可以是小数),求三角形面积area,并输出。如果输入的三边构不成三角形,应给出“data error”的信息提示。注:根据“海伦-秦九韶”公式,area=√p(p-a)(p-b)(p-c),其中p=(a+b+c)/2。编程可用素材:printf("please input triange sides: ")、printf("\ndata error\n")、printf("\narea=…\n"…。程序的运行效果应类似地如图1和图2所示,图中的红色部分是从键盘输入的内容。please input triange sides: 3, 4, 5area=6.00图1 程序运行效果示例please input triange sides: 3, 4, 8data error*/#include <stdio.h>#include <math.h>int main(void){double edgeA, edgeB, edgeC;double circle,semi_circle;double area;printf("please input triange sides: ");scanf("%lf, %lf, %lf", &edgeA, &edgeB, &edgeC);// 如果不能构成三角形if(((edgeA+ edgeB)<=edgeC) || ((edgeA+ edgeC)<=edgeB) || ((edgeC+ edgeB)<=edgeA)) {printf("\ndata error\n");}else{// 可以构成三角形circle = edgeA + edgeB + edgeC;semi_circle = circle / 2;area = sqrt(semi_circle * (semi_circle - edgeA) * (semi_circle - edgeB) * (semi_circle - edgeC));printf("area=%.2lf", area);}return 0;}/*分析:1. 在以后的程序中,有很多程序动作, 是有前提条件的,当条件不满足时,做这个动作是没有意义的比如这里的三角形求面积,如果都已经不能构成三角形了,面积本身也就没有意义了无意义的事情,计算机是无法完成的2. 程序是为了解决问题而编写的,是依赖于合理的算法写出来的,算法不合理时,程序肯定会有问题3. if作为一个开关,试先置于程序开头或是检查节点部分,是以后设计程序时的一种常用思路*/

P737

题解和分析

/*编写一程序P737.C实现以下功能从键盘输入3个整数,输出绝对值最大的数。编程可用素材:printf("Input 3 numbers: ")、printf("\nThe number with maximum absolute value is ….\n"…。程序的运行效果应类似地如图1所示,图1中的红色部分是从键盘输入的内容。Input 3 numbers: 1, -362, 300The number with maximum absolute value is -362.*/#include <math.h>#include <stdio.h>int main(void){int data1, data2, data3;int myMax = 0;printf("Input 3 numbers: ");scanf("%d, %d, %d", &data1, &data2, &data3);if (abs(data1) > abs(data2) && abs(data1) > abs(data3)){myMax = data1;}if (abs(data2) > abs(data1) && abs(data2) > abs(data3)){myMax = data2;}if (abs(data3) > abs(data1) && abs(data3) > abs(data2)){myMax = data3;}printf("\nThe number with maximum absolute value is %d.\n", myMax);return 0;}/*分析:1. 使用库函数2. 判断三个数的最大值,算法很多,这只是一种3. 计算顺序:先取绝对值,再判断*/

P111

题解和分析

/*编写一程序P111.C实现以下功能x(x只考虑整数int且必须定义为int、但F(x)完全可能超过int的表示范围)通过键盘输入(输入前给出提示Please input x:),然后计算并在屏幕上输出函数值。编程可用素材:printf("Please input x: ")、printf("\nF(…) = …。┌-5x+27 (x<0)F(x)= ├7909(x=0)└2x-1(x>0)程序的运行效果应类似地如图1所示,图中的红色部分是从键盘输入的内容。Please input x: 3F(3) = 5*/#include <stdio.h>int main(void){int data;printf("Please input x: ");scanf("%d", &data);if(data < 0){printf("F(%d) = %lu", data, (unsigned long )(-5 * (unsigned long )data + 27));} else if(data > 0){printf("F(%d) = %lu", data, (unsigned long )(2 * (unsigned long )data -1));}else{printf("F(%d) = 7909", data);}return 0;}/*分析:1. 在一开始合理的数据表示范围里,即允许的值域里,表达数据没有问题,但运算过后的结果,可能超出值域范围,这就需要扩大值域范围来保证精度2. 这个程序,可以分析出,结果是正数,可以使用无符号数,来扩大表示范围,保证结果表示的正确性3. 要先转换,再计算*/

P703

题解和分析

/*编写一程序P703.C实现以下功能已知某公司员工的保底薪水为500,某月所接工程的利润profit(整数)与利润提成的关系如下(计量单位:元):profit≤1000 没有提成;1000<profit≤2000 提成10%;2000<profit≤5000 提成15%;5000<profit≤10000提成20%;10000<profit提成25%。请根据输入的利润计算员工的薪水。编程可用素材:printf("Input profit: ")、printf("\nsalary=…\n"…。程序的运行效果应类似地如图1所示,图中的红色部分是从键盘输入的内容。Input profit: 2000salary=700.00*/#include <stdio.h>int main(void){double profit;double salary = 500.00;printf("Input profit: ");scanf("%lf", &profit);if(profit > 10000){salary += profit * 0.25;} else if (profit > 5000 && profit <= 10000){salary += profit * 0.20;}else if (profit > 2000 && profit <= 5000){salary += profit * 0.15;}else if (profit > 1000 && profit <= 2000){salary += profit * 0.10;}printf("\nsalary=%.2lf\n", salary);return 0;}/*分析:1. a<b<c这样的数学书上的表达方式,在这里,其实是一个并且的关系,需要使用逻辑运算符来表达2. 要特别注意这个条件范围 ,用数学集来表示,是左开区间,右闭区间,要特别注意取值的端点3. 复合赋值运算符的使用4. if...else...的嵌套使用,连续的if判断,要特别注意else与if的匹配*/

P113

题解和分析

/*编写一程序P113.C实现以下功能已知某银行整存整取存款不同期限的年息利率分别为:3.15%期限一年,3.63%期限二年, 4.02%期限三年,4.69%期限五年,5.36%期限八年。从键盘上输入存钱的本金(以元为单位,必须定义为int且应考虑金额很大的情况)和存款期限(只考虑1,2,3,5,8),求到期时能从银行得到的利息(以元为单位,应考虑有小数,不计复利)。编程可用素材:printf("Please input benjin,cunqi: ")、printf("\nlixi = … yuan"…。程序的运行效果应类似地如图1所示,图中的红色部分是从键盘输入的内容。Please input benjin,cunqi: 10000,8lixi = 4288.00 yuan*/#include <stdio.h>int main(void){int benjin, cunqi;double lixi = 0.0;printf("Please input benjin,cunqi: ");scanf("%d,%d", &benjin, &cunqi);if ( cunqi == 1 ){lixi = benjin * 0.0315;}if ( cunqi == 2 ){lixi = benjin * 0.0363 * 2;}if ( cunqi == 3 ){lixi = benjin * 0.0402 * 3; }if ( cunqi == 5 ){lixi = benjin * 0.0469 * 5;}if ( cunqi == 8 ){lixi = benjin * 0.0536 * 8;}printf("\nlixi = %.2lf yuan\n", lixi);return 0;}/*分析1. 只考虑1,2,3,5,8,可以直接使用if判断后处理2. 如果不是,则需要仔细分析和思考,确定相应的条件,再使用if语句来完成3. 注意程序编辑上的缩进*/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。