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

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

5.1 实验目的

1. 掌握嵌套if ……else……语句的使用; 2. 掌握switch语句的使用。

5.2 实验内容及步骤

1.用单步运行程序的方法调试案例程序,准备好多组数据,保证每个分支至少执行一次。 程序:

编译结果: 修改记录: 输入数据1:

第一次按F7键,score= ,语句: 第二次按F7键,score= ,语句: 第三次按F7键,score= ,语句: ?? 输入数据2:

第一次按F7键,score= ,语句:

第二次按F7键,score= ,语句: 第三次按F7键,score= ,语句: ??

2.用单步运行程序的方法调试用switch语句修改后的案例程序,准备好多组数据,保证每个case入口至少进入一次。

程序:

编译结果: 修改记录: 输入数据1:

第一次按F7键,score= ,语句: 第二次按F7键,score= ,语句: 第三次按F7键,score= ,语句: ??

输入数据2:

第一次按F7键,score= ,语句:

第二次按F7键,score= ,语句: 第三次按F7键,score= ,语句: ??

3.用单步运行程序的方法调试【例5-1】的两种程序,准备好多组数据,保证每条语句至少执行一次。自己设计记录格式。

4. 调试习题1、2、3,自己设计记录格式。

5.3 思考题

(1)switch和嵌套的if??else??语句所实现的程序是不是任何情况下都可以相互改写?比较两种实现多分支结构的优缺点。

(2)if??else??还可怎样嵌套?

(3)什么时候需要在switch语句中使用break语句?

37

案例六 求1~100的和

教学目的:

1. 熟悉循环结构程序;

2. 掌握实现循环结构的for(;;)语句。

在日常工作或生活中,我们经常碰到需要重复进行某种操作,如求1+2+3+??+100的和,或者是求1*2*3*??*n=n!,需要重复进行加法乘法操作。我们以求1~100的和为例来看如何编写这种需要重复完成某项操作的程序。程序如下 :

#include #include main() {

int i,sum; clrscr();

sum=0; /*存放和值的变量赋初值0*/ for(i=1;i<=100;i++)

sum=sum+i; /*循环体*/ printf(“%d\\n”,sum); }

一、案例分析

上述程序中出现了一个新的语句for,其作用是实现某些语句按需要的次数重复运行。 1. for语句格式

for([表达式1];[表达式2];[表达式3]) 重复执行的循环体语句组;

2. for语句执行过程

1) 计算表达式1;

2) 计算表达式2;若表达式2的值为非0(真)表示循环的条件成立,则转3)执行循环体;若表达式2 的值为0(假)表示循环条件不满足,则结束循环,转5);

3) 执行循环体语句组;

4) 计算表达式3;然后转2);

5) 结束循环,执行for循环之后的语句。 3. for语句执行过程图解(图6.1)

38

?? 计算表达式1 0(假) 计算表达式2 for之后的语句 循环体 非0(真) 计算表达式3 图6.1 for语句执行图解

4. 案例程序执行演示

本案例中有这样一条语句“i++;”其作用等价于“i=i+1;”。运算符“++”称为自增运算符,与其对应的是“--”自减运算符,自增运算符的作用是使变量的值增加1,自减运算符的作用是使变量的值减1。例设变量a的值为6,执行a++后,a的值为7,设变量b的值为5,执行--b后,b的值为4。

自增与自减的前置和后置效果的区别,自增与自减运算符是用于单个变量的运算符,因此是单目运算符,在表达式中,这两个运算符前置和后置时,对于整个表达式值的影响是不同的。如:设变量a的值为6,变量b的值为5,请计算表达式6+(++b)-(a--)的值及a、b的值。由于++b是前置,在表达式的运算中,要先对变量进行自增运算,即b的值先加1,为7,而a--是后置,先取a的值进行表达式的运算,完了之后再使a的值减1,为4,整个表达式的值为6。平时使用时要注意自增自减运算符的前置与后置的问题,单目运算符的优先级高于双目运算符及三目运算符,双目运算符是指一个运算符的运算对象为两个,三目运算符的运算对象为三个。

根据for语句的执行过程图解,可以把案例的for语句执行也用图来表示,见图6.2。

根据for语句执行过程,i从1起,然后判断i是否小于等于100,第1 次i=1当然满足条件,因此执行“sum=sum+i;”语句,接下来计算i++,即表达式3,然后判断i是否小于等于100,当然这次i=2还满足条件,再次重复刚才的过程,直到i++后,i=100,再次判断i是否小于等于100,还是满足条件的,再次执行“sum=sum+i;”语句后,i++后,i=101时,判断i是否小于等于100,这次不满足条件了,因此退出循环,执行for之后的语句。从而完成了求1~100的和。

对于循环结构的程序,需要注意这样的概念:循环体,循环初始化,循环的条件和循环条件控制。在本例中,循环体就是“sum=sum+i;”语句,是重复执行的部分;循环初始化是“sum=0;”和“表达式1,即i=1”;循环的条件是“表达式2 ,即i<=100”;循环控制是使循环的条件趋向不满足,使循环最终能结束,本例是“表达式3,即i++”。

本例循环体共执行了100次。

39

?? i=1 0(假) i<=100 for之后的语句 sum=sum+i i++ 非0(真) 图6.2 本案例for语句执行图解

5. for语句注意点

1) for后的三个表达式都可省略,但“;”不可省略;

2) 当表达式2省略时,表示无条件循环,即条件永远为真,这时需要注意循环体内要有相应的终止循环的命令;注意下面for语句的执行:

for(j=0;j;j++); for(j=1;j;j++);

二、应用举例

【例6-1】编程求正整数n的阶乘n!。其中n由键盘输入。

分析:在本课一开始,我们就见过了求5!的程序。其实求阶乘和求1~100和的程序差不多,只需要将sum的初值改为1,i<=100改为i<=n,将sum=sum+i中“+”改为“*”。并添加一条输入n值的语句。考虑到阶乘的结果比较大,因此sum的类型定义为float,修改后的程序如下:

【例6-2】编程求1+1/2+1/4+1/6+??+1/50的值。

分析:该例同案例相似,也是求和,求的是1除以偶数的和,因此i值的改变每次是加2,并且其初值为2,到50为止,另外存放和值变量的类型是应该定义为实型。程序如下:

40

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