当前位置:首页 > 《C语言程序设计》案例讲义 - 完整版
输入数据: 运行结果: 3.分别调试【例2-2】、【例2-3】的程序,并做好记录。 编译结果: 修改记录: 输入数据: 运行结果:
4.调试【例2-4】的程序,输入讲义中的数据,观察并记录,自己再准备两组不能完全整除的数据,记录结果,并分析为什么结果不精确。 编译结果: 修改记录: 输入数据: 运行结果: 5.编程求两个整数的积,并调试。 程序:
编译结果: 修改记录: 输入数据1:12和18 输出结果:
输入数据2:56和87 输出结果:
输入数据3:32765和3245 输出结果:
4.3思考题:
(1) 请验证2.5的实验结果,是不是每组数据输入后,输出结果都正确,如果不正确,这是为什么?
(2) 把所有printf函数中的“%f ”改为“%e”,观察并记录输出数据,分析“%f”和“%e”的功能区别。
(3) 如果把printf函数中的“%d”改为“%u”,观察并记录输出数据,分析“%d”和“%u”的功能区别。(可以选做)
五、习题(所有程序必须上机调试通过)
1. 编程求三个整数的和。
2. 根据商品原价和折扣率,编程计算商品的实际售价。 3. 已知华氏温度,编程根据公式计算摄氏温度。
摄氏温度=(华氏温度-32)*5/9
21
案例三 求多个不同类型数的和(平均值等)
教学目的:
1. 掌握整型和实型数据之间的混合运算; 2. 进一步熟悉整型和实型变量的定义。
在实际应用和,经常会碰到整型和实型数据的混合运算,例如求两个整数的平均值,精确到小数点后两位,第三位进行四舍五入。程序如下:
/*求两个整数的平均值*/ #include
int num1,num2; /*定义两个整型变量*/ float ave;
clrscr(); /*清除屏幕*/
ave=0; /*平均值变量的初值置为0*/ printf(“Please input two integers:”); /*显示提示字符*/ scanf(“%d%%d”,&num1,&num2); /*输入两个整数*/ ave=(num1+num2)/2.0; /*求平均值,并存入变量ave中*/
ave=(int)((ave*100+0.5))/100.0; /*对平均值进行四舍五入精确到小数点后两位*/ printf(“average is: %f\\n”,ave); /*输出平均值*/ }
一、案例分析
根据实际需要,定义了两个整型变量,用于存放两个整数值,一个单精度变量ave,用于存放两个整数的平均值。
1.“ave=(num1+num2)/2.0;”行是计算两个整数的平均值,先计算num1+num2的和,和值仍为整数,然后计算num1+num2的平均值,注意此时的平均值是将和值除以2.0,而不是除以2,将计算的平均值赋给变量ave进行保存。
? 混合类型数据运算的类型转换规则 当不同类型的数据进行混合运算时,需要先把不同类型的数据转换成统一的类型,然后再进行运算。 数据类型之间的转换遵循的原则是“类型提升”,即在进行两个不同类型的量进行运算时,先将较低类型的数据转提升为较高的类型,然后在类型一致的基础上进行运算,运算结果是较高的类型。类型的高低是根据其数据所占用的存储空间大小来判断的,占用的空间赿多,类型赿高,反之赿低。具体转换规则见图2.1。
高
double float
long unsigned 低
int
22
char,short
图2.1 标准类型数据转换规则
图中横向向左的箭头表示必定发生的转换,如短整型(short)数据必须先转换成整型(int),单精度数据先转换成双精度型数据。纵向的箭头表示不同类型数据的转换方向。如“ave=(num1+num2)/2.0”表达式中,先进行的“num1+num2”运算,不需要进行类型转换,在进行“(num1+num2)/2.0”除法运算时,先将“num1+num2”和转换成double型,将2.0也转换成double型,然后进行运算,结果为double型,将结果赋给变量ave,这时请注意,由于ave变量是float,在赋值时,是以变量的类型为准,因此先将double类结果的转换为float类型,再赋给变量ave。
2.“ave=(int)((ave*100+0.5))/100.0;”行是实现小数点后第三位进行四舍五入的处理。处理过程如下,先把该数扩大100倍,然后加0.5,目的是进行四舍五入,第三步是对ave*100+0.5取整,取整操作是用C语言的强制类型转换符(int)进行转换,即(int)((ave*100+0.5)),实现取整运算,舍去小数部分,最后是将前面运算得到的整数缩小100倍,转换为实数,最终实现四舍五入,保留两位小数。
本案例的其余部分同前。
二、应用举例
【例3-1】假设银行定期存款的年利率rate为2.25%,并已知存款期限为n年,存款本金为capital元,试编程计算n年后可得到的本利之和deposit。(保留小数点后两位)
分析:本例存款额的计算公式为deposit=capital (1+rate)n。
pow函数:math.h头文件中的函数pow(x,y)的作用是求xy,即计算x的y次幂,其调用形式为pow(x,y),返回值为double型。对于本例(1+rate)n计算,调用pow(1+rate,n)进行计算。
程序如下:
本例中与其它程序有一个重要的区别是多了“#include
n
包含进行来,目的是在程序中需要调用pow函数,来计算(1+rate)值。
/*计算整存整取的本利*/ #include
int n; /*n用于存放存款年限*/ float rate, capital,deposit;
clrscr(); /*清除屏幕*/ rate=0.0225;
printf(“Please input capital and years:”); /*显示提示字符*/ scanf(“%f%%d”,&capital,&n); /*输入存款额和年限*/ deposit=capital*pow(1+rate,n);
deposit =(int)(( deposit *100+0.5))/100.0; /*对本利进行四舍五入精确到小数点后两位*/ printf(“deposit is: %f\\n”, deposit); /*输出本利值*/ }
三、习题
1.已知三角形的三条边a,b,c,请编程求三角形的面积。(需要调用math.h中的sqrt函数)
23
2.分析下列程序的执行结果。
#include
int a=1,b=2,c=2; float x=10.5,y=4.0,z; clrscr();
z=(a+b)/c+aqrt((int)(y))*1.2/x+x; printf(“z=%f\\n”, z); }
3.已知一元二次方程ax+bx+c=0的三个系数a,b,c,并且该方程存在实数根,请编程求实根。
2
四、实验四 不同类型数的混合运算
4.1实验目的
? 掌握整型、实型数据的混合运算;
? 熟悉pow和sqrt函数; ? 掌握四舍五入的处理方法。 4.2实验内容及步骤
1.运行案例程序,并记录相应过程。 程序:
编译结果: 修改记录: 输入数据: 运行结果:
2.将案例中的2.0换成2,重新运行程序,记录运行结果,并分析为什么与前面的结果不同。 3.运行【例3-1】的程序,并记录相关信息。 程序:
编译结果: 修改记录: 输入数据: 运行结果: 4.调试习题1的程序。 程序:
编译结果: 修改记录: 输入数据: 运行结果: 5.调试习题2的程序。
程序:
编译结果: 修改记录: 输入数据: 运行结果:
4.3思考题 (2) 数据混合运算的转换规则有什么规律没?请总结。
(3) 查阅附录,熟悉stdio.h,math.h两个头文件所包含的函数的定义。 (4) 如果要对已知的一个实数小数点后第三位起进行舍尾处理,应如何编程?(如234.56781)
24
共分享92篇相关文档