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

发布时间 : 星期日 文章《C语言程序设计》案例讲义 - 完整版更新完毕开始阅读

2. 什么情况下选择断点调试程序的方法。

3. 如何设置断点?一般选择什么位置来设置断点。

案例七 求π=4*(1/1-1/3+1/5-1/7+??)的值

教学目的:

1. 进一步熟悉循环的结构;

2. 掌握用while和do ……while语句实现循环结构。

C语言中设计了for、while和do ??while三种语句来实现循环结构,前面已经知道for语句的格式,这次课我们要学习while和do ??while语句的结构。用while和do ??while语句实现计算π=4*(1/1-1/3+1/5-1/7+??)值的程序如下:

/*do??while实现的循环结构*/ /*while实现的循环结构*/

#include “stdio.h” #include “stdio.h”

#include “conio.h” #include “conio.h”

main() main()

{ {

int j,k; int j,k;

float pi,; float pi,;

clrscr(); clrscr();

k=1;pi=0;j=1; /*循环初始化*/ k=1;pi=0;j=1; /*循环初始化*/

do while(1.0/j>0.0001) /*循环条件*/

{ {

pi=pi+k*1.0/j; /*循环体*/ pi=pi+k*1.0/j; /*循环体*/

k=-k; k=-k;

j=j+2; /*循环控制变量值的改变*/ j=j+2; /*循环控制变量值的改变*/

} while(1.0/j>0.0001); /*循环条件*/ }

pi=pi*4; pi=pi*4;

printf(“π=%f\\n”,pi); printf(“π=%f\\n”,pi);

} }

一、案例分析

1. do??while和while语句的格式 do

{

循环体语句组; }while(条件表达式); 2. 两种语句的执行过程

do??while语句的执行过程

1) 执行do后的循环体语句组;

2) 计算while后面条件表达式的值; 3) 如果条件表达式的值为非0(真),则转1)继续执行循环体语句组;如果条件表达式为0(假),则结束循环的执行,继续执行while下面的语句。

3. 两种语句执行过程图解(图7.1)

45

while(条件表达式);

{

循环体语句组; }

while语句的执行过程

1) 计算while后面条件表达式的值; 2) 如果条件表达式的值为非0(真),则执

行循环体语句组;然后转1)继续重复上面的过程;

3) 如果条件表达式为0(假),则结束循环

的执行,继续执行while下面的语句。

从图解和上述的执行过程描述可知,do??while和while语句的主要区别在于while语句先进行条件表达式的计算,满足条件才执行循环体,如果第一次条件就为0(假),则循环体一次也不执行就结束循环语句执行;而do??while语句则先执行循环体,然后才计算条件表达式的值,并判断条件是否满足,因此不管怎样,循环体至少执行一次。

4.程序分析

“k=1;pi=0;j=1;”行是循环的初始化部分,给变量赋相应的初值,变量k是用来在计算中改符号位的,第一项是符号位是正,所以k赋为1;pi是用来存放和值的,所以其初值赋为0;j是表示某项

?? ?? 执行循环体语句组 0(假) 计算条件表达式的值 ?? 非0(真) 执行循环体语句组 0(假) 计算条件表达式的值 非0(真) ??

图7.1 b)do??while语句执行图解

图7.1 a)while语句执行图解

的分母值,第一项的分母是1,所以赋其初值为1。

“1.0/j>0.0001”为循环的条件,表示当前项的绝对值大于0.0001时,还需要把此项添加到和值中。

“pi=pi+k*1.0/j; k=-k;”两条语句是循环体,分别完成求和及下一项符号的改变。 “j=j+2;”计算下一项的分母。

在此例中,关键的一个问题是循环条件的确定,本例是当前项的绝对值大于0.0001;第二个问题是每项前的符号的确定,本例用一个整型变量k,使其交替的改为1和-1,以实现当前项符号的确定;由于k,j都是整型,相除时,其值将会为0,因此需要用k*1.0/j这种形式将运算对象值的类型转换为实型。

二、三种实现循环语句的比较

1. 初始化部分 for语句可以将初始化部分的语句放入表达式1中,而while和do??while语句的初始化则需要放在while和do??while语句之前;

2. 循环条件 for语句的循环条件由表达式2表示,而while和do??while语句则放在while后;

3. 循环控制部分 通常控制循环的变量值的改变对于for语句是由表达式3来实现,而while和do??while语句则需要放在循环体内;

4. do??while语句实现的循环,其循环体至少执行一次,所以在选择时应加以注意。 5. 三种语句实现的循环一般是可以相互转换的。

一般情况下,已知次数的循环用for来实现。循环结构程序编写时应特别注意循环初始部分、循环体部分、循环的条件以及循环控制部分。

三、应用举例

【例7-1】一张纸的厚度是0.1mm,珠穆郎玛峰的高度为8848.13m,假如纸张有足够大,将纸对折多少次后可以超过珠峰的高度?(分别用三种循环语句编写)

分析:该题主要是计算是每对折一次,其厚度就是前一次的厚度*2;其次是循环的条件,当厚度超过8848.13后,即停止对折,因此这个循环是不知道次数的,但是需要计算对折的次数,因此每循

46

环一次,需要将计次的变量加1。我们定义以下几个变量: int count;用于计算对折的次数,其初值为0;

float thickness;用于计算当前纸的厚度,其初值为0.0001;

程序如下:

/*while实现的程序*/ #include “stdio.h” #include “conio.h” main() {

int count;

float thickness; clrscr();

count=0;thickness=0.0001; /*循环初始化*/ while(thickness<8848.13) /*循环条件*/

{

thickness=thickness*2; /*循环体*/ count++; }

printf(“thickness=%f,count=%d\\n”,thickness,count); }

/*do??while实现的程序*/ #include “stdio.h” #include “conio.h” main() {

int count;

float thickness; clrscr();

count=0;thickness=0.0001; /*循环初始化*/ do

{

thickness=thickness*2; /*循环体*/ count++;

} while(thickness<8848.13); /*循环条件*/

printf(“thickness=%f,count=%d\\n”,thickness,count); }

/*for实现的程序*/ #include “stdio.h” #include “conio.h” main() {

int count;

float thickness; clrscr();

count=0;thickness=0.0001; /*循环初始化*/ for( ;thickness<8848.13; ) /*循环条件*/

{

thickness=thickness*2; /*循环体*/ count++; }

printf(“thickness=%f,count=%d\\n”,thickness,count); }

47

四、习题

1. 求Fibonacci数列前40个数。该数列的生成方法是:F1=1,F2=1,Fn=Fn-1+Fn-2(n>=3),即从第三个数开始,每个数等于前两个数的和。

2. 求数列的前10项的和。2/1+3/2+5/3+8/5+??

3. 给出一个正整数,编程实现:从低位到高位顺序输出每位数字及位数。 提示:要把一个整数的每一位取出来,需要用到一个新的算术运算符“%”,称之为求余运算,即两个整数相除的余数,如3%2=1,9%5=4,1%5=1,其运算优先级同“*、/”运算符。如取35的每一位,用35先取个位,然后k=35/10,将该数缩小10倍,再用k取出十位。当然不管整数是多少位的,始终重复黑斜体部分即可。

五、实验 实验八 while和do??while语句

5.1实验目的

1. 掌握while和do……while语句; 2. 熟悉三种实现循环结构语句的区别。

5.2实验内容及步骤

1.选择合适的程序调试方法调试案例的两种程序,并设计记录格式。 2.将案例程序改为用for语句实现,并调试程序。 3.调试【例7-1】的三种程序,并进行记录。

4.将【例7-1】用for语句实现的程序进行以下修改,并调试。

将原程序中的下列语句改成一条for语句。 count=0;thickness=0.0001; /*循环初始化*/ for( ;thickness<8848.13; ) /*循环条件*/

{

thickness=thickness*2; /*循环体*/ count++; }

for(count=0,thickness=0.0001; thickness<8848.13;thickness=thickness*2, count++); 5. 调试习题的程序,并做好记录。 5.3思考题

1.三种实现循环结构的语句应如何选用?

48

联系合同范文客服:xxxxx#qq.com(#替换为@)