当前位置:首页 > 《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
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
共分享92篇相关文档