《C语言程序设计》案例讲义 - 完整版 联系客服

发布时间 : 星期日 文章《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 #include main() {

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 ”行,其作用是把math.h头文件

n

包含进行来,目的是在程序中需要调用pow函数,来计算(1+rate)值。

/*计算整存整取的本利*/ #include #include #include main() {

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 #include #include main() {

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