当前位置:文档之家› 实验4 选择结构程序设计

实验4 选择结构程序设计

实验四 选择结构程序设计(4学时)实验前必须做的操作.........——..新建文件夹:......首先在各自对应的计算机ncre(k:)盘上对应座位号文件夹内新建一个文件夹,文件夹的名字为“班级+学号的后两位+姓名”,如座位号为K02,航海1111班、学号后两位是02的、姓名为“张强”的同学,则其对应的文件夹名字是:航海111102张强。

然后在刚才建好的文件夹里面再建立一个文件夹,文件夹为“实验4”。

【实验目的】1、 理解C 语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。

2、 进一步巩固printf()和scanf()函数的使用方法。

3、 学会正确使用关系运算符和关系表达式、逻辑运算符和逻辑表达式。

4、 掌握if 语句三种形式的用法。

5、 掌握switch 、break 语句的用法。

6、 熟悉选择结构程序段中语句的执行过程。

7、 学会设计分支结构的程序,结合程序掌握一些基本的算法。

8、 巩固利用VC++对C 程序的查错方法,进一步提高修改程序错误的能力。

9、 学习跟踪调试程序,掌握简单的单步调试方法。

【实验内容】[实验任务一]:程序的跟踪调试和变量值的监视练习(可不上交、但必须操作、理解,掌握其方法) 程序跟踪调试实例4-1:程序跟踪调试和变量值的监视示例(请仔细按以下各步骤进行操作):输入x ,计算并输出下列分段函数 f(x) 的值(保留1位小数)。

(需要存盘)⎪⎩⎪⎨⎧=≠=0001)(x x x x f10.0f(10.00) = 0.1【操作步骤】:(1)输入源程序,并以error4_1.c 文件名最终保存在实验4文件夹里,然后执行“编译/Build ”—>“编译/Compile ”,出现第一个编译错误是:双击该出错信息,箭头指向else 所在行,出错信息指出在else 前缺少分号。

在y = 1 / x 后面补上分号后,重新编译,新出现的第一个出错信息(警告信息):双击该错误信息,箭头指向scanf("%f", x);所在行,出错原因是x 的前面少了&。

在x 前面补上&后,重新编译并连接,均正确。

(2)执行“工具”—>“定制”,选择“调试”(如图4.1所示),出现调试工具栏(如图4.2所示),然后关闭“定制”对话框。

图 4.1 选择工具栏图4.2调试工具栏(3)调试开始,单击调试工具栏中的单步执行(Step Over(F10)),每次执行一行(如图4.3所示),编辑窗口中的箭头指向行表示程序将要运行该行。

图4.3中列出了变量窗口(Variables Window) 和观察窗口(Watch Window ),在Watch 窗口中还可以改变变量的值。

图4.3 程序调试开始(4)鼠标单击三次,程序执行到输入这一行(如图4.4所示),同时运行窗口(如图4.5所示)显示提示符“input x:”(注意:此时将要执行但还没有执行scanf(“%f ”, &x);语句),继续单击,就可以在运行窗口输入x 的值10(如图4.6所示),按回车键Enter 后,箭头指向了“if(x!=0)”这一行(如图4.7所示),在变量窗口可以看到变量x 的值是10.0000,变量x 的地址(&x)是0x0012ff7c 。

图4.4 程序单步调试变量窗口 观察窗口显示或隐藏观察窗口 显示或隐藏变量窗口图4.5 运行窗口图4.6 在运行窗口输入变量x的值10图4.7 程序单步调试,显示变量x的值和变量x的地址(5)继续单击二次,箭头指向了“else”这一行(如图4.8所示),在变量窗口可以看到变量y的值是0.100000。

图4.8 程序单步调试,显示变量y的值(6)继续单击二次(如图4.9所示),运行窗口显示运行结果(如图4.10所示),符合题目的要求。

图4.9 程序单步调试到最后一行图4.10 在运行窗口显示调试后的最后结果(7)单击终止调试按钮(Stop Debugging(Shaft+F5)),程序调试结束。

程序跟踪调试实例4-2:单步跟踪下面的程序,每执行完一条语句就观察各变量的值。

将程序以debug4_1.c文件名最终保存在实验4文件夹里。

(需要存盘)程序跟踪调试实例4-3:单步跟踪下面的程序,每执行完一条语句就观察各变量的值,调试完后分析程序的执行过程及功能。

将程序以debug4_2.c文件名最终保存在实验4文件夹里。

(需要存盘)?(1)先直接编译、连接、运行程序,若输入123,则输出什么?输入987、702呢?你能根据输出分析出程序的功能吗??(2)知道程序的功能后,请分析x1、x2、x3代表什么?为什么?通过单步跟踪程序来找出x1、x2、x3的值,是否可以分析出它们代表什么?如何利用运算符“/”和“%”来求整数各位上的数字?程序跟踪调试实例4-4:)以下程序实现:判断用户输入的数是奇数还是偶数,并输出相应的信息。

通过跟踪程序、分析程序是如何完成此功能的?将程序以debug4_3.c文件名最终保存在实验4文件夹里。

(注:单词中文对照 remainder—余数、even—偶数、odd—奇数)运行时,在提示:Enter your number to be tested.下输入:2455输出什么?再次运行时,在提示:Enter your number to be tested. 下输入:1210输出什么?同学们不妨再输入一些数据试一试!程序跟踪调试实例4-5:通过跟踪程序、分析程序执行过程和执行结果。

将程序以debug4_4.c文件名最终保存在实验4文件夹里。

(需要存盘)(运行5次,分别输入:1、2、3、4、8。

分析每次程序的执行过程(执行路线))[实验任务二]:通过编写简单的程序达到进一步巩固printf( )函数使用方法的目的。

编程实例4-0:若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=ˊaˊ,c2=ˊbˊ,想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出)。

要求输出的结果如下,同时以文件名output.c最终保存在实验4文件夹里。

(需要存盘)【说明】:①如上所示的每一个带颜色的下划线,即每一个蓝色的或红色的下划线均代表一个空格;②该题主要考察printf()函数的使用方法;printf()函数括号里面由两部分组成:其中一部分是由一对双引号括起来的格式化符号串.............;另一部分是参量表...。

其中格式化符号串又由两部分组成:即不以%开头的普通字符串和以%开头后跟类似d、c 等的规定字符串。

printf()函数括号里面是否有参量表取决于双引号括起来的格式化符号串部分是否有以%开头后跟类似d、c(除%以外,因为printf(“%%”)的含义是输出一个%)等的规定字符串,并且参量表的个数必须与格式化符号串中%的个数一致。

③根据题意,程序中所涉及到的变量应定义成如下形式:④输出结果为c1='a'or97(ASCII)的printf()语句格式为:在该条语句中:(1)双引号括起来的格式化符号串中,属于正常字符的有c1=\'\' or (ASCII)\n,其中\’和\n属于转义字符;(2)%c和%d是两个规定的符号串,所以参量表有两个;(3)若有c1=ˊaˊ;则printf(“c1=%c”,c1)的输出结果是 c1=a而不是c1=’a’;[实验任务三]:通过编写简单的程序达到掌握if三种基本结构的目的。

编程实例4-1:简单if语句的用法编写并调试程序:从键盘输入一个任意大小的实数x,如果满足如下条件:-29.5≤x≤29.5则输出x及其绝对值。

并以文件名simple_if.c最终保存在实验4文件夹里。

(需要存盘)【提示】:为正确表示条件,C语言中将数学不等式-29.5≤x≤29.5表示为如下逻辑表达式:x>=-29.5&&x<=29.5 或 (x>=-29.5)&&(x<=29.5)也可以使用x的绝对值形式表示,即 fabs(x)<=29.5注意:要使用fabs(x)函数,必须在程序的前面加上#include <math.h>预处理包含命令。

fabs(x)函数的含义是:对浮点数x求绝对值。

编程实例4-2:if-else语句的用法修改练习1的程序,使得x满足-29.5≤x≤29.5时输出x及其绝对值,否则只输出x。

并以文件名if_else.c最终保存在实验4文件夹里。

(需要存盘)编程实例4-3:if-else if 语句的用法编写一个能够进行加减法运算的程序,要求:从键盘任意输入两个实数,然后输入一个运算符,当运算符为“+”时对两个数进行加法运算,为“-”时对两个数进行减法运算,其它符号时,只显示输入的符号不进行运算。

并以文件名if_else_if.c最终保存在实验4文件夹里。

(需要存盘)[实验任务四]:补充完整程序,了解如何用if语句实现对若干个任意数进行排序。

程序填空实例4-1:本程序用来输入4个整数,按从大到小的顺序输出。

(需要存盘)将完整的程序以文件名sort.c保存在实验4文件夹里。

[实验任务五]:学会设计分支结构的程序,结合程序掌握一些基本的算法。

设计程序实例4-1:1900年元旦是星期一,问1900年7月1日是星期几,将编写好的程序以文件名week.c 最终保存在实验4文件夹里。

(需要存盘)【提示】:①程序中应首先判断1900年是闰年还是平年;②想要求出1900年7月1日是星期几,应该计算出1900年1月1日到1900年7月1日之间相差了多少天;然后再用相差的天数对7进行模运算,即days%7。

设计程序实例4-2:从键盘输入一个不多于5位的正整数,要求:①求出它是几位数;②分别输出每一位数字;③按逆序输出各位数字,例如原数为321,应输出123。

并将编写好的程序以文件名fivenum.c 最终保存在实验4文件夹里。

(需要存盘)【说明】:应准备以下测试数据:(1)要处理的数为1位正整数;(2)要处理的数为2位正整数;(3)要处理的数为3位正整数;(4)要处理的数为4位正整数;(5)要处理的数为5位正整数;除此之外,程序还应当对不合法的输入作必要的处理,例如:(1)输入负数;(2)输入的数超过5位(如123456)。

【提示】:①因为从键盘输入的数(假设是num)可能是五位数,而五位数的最大值为99999,它超过了无符号整数的最大值65535,所以应该定义num的类型为long int;②可以利用if … GOTO语句来检查输入的数字是否为5位。

参考代码如下:loop: printf("please input a num form 0-99999:\n");scanf("%ld", &num);if(num<0||num>99999){printf("the number is error ");goto loop; /*利用GOTO语句来检查输入的数字是否为5位*/}③将一个五位数num拆分成每一位数字的方法是:a=(int)(m/10000); /* a 代表万位数字 */b=(int)(m/1000%10); /* b 代表千位数字 */c=(int)(m/100%10); /* c 代表百位数字 */d=(int)(m/10%10); /* d 代表十位数字 */e=(int)(m%10); /* e 代表个位数字 */设计程序实例4-3:编写程序,输入三角形三边a、b、c,判断a、b、c能否构成三角形,若不能,则输出相应的信息,若能则判断组成的是等边、等腰、直角还是普通三角形。

相关主题