实验四 结构化程序设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四结构化程序设计

一、实验目的

1.掌握结构化程序设计思想和算法设计方法

2.掌握各类语句的用途和使用方法

3.掌握条件的表示方法

4.掌握表示条件结构的几种语句形式

5.掌握表示循环结构的几种语句形式

6.掌握break语句和continue语句的功能和使用

7.了解goto语句的适用范围及使用

二、实验相关知识

本次实验涉及如何根据一个问题来设计算法,采用“自顶向下,逐步细化”的结构化程序设计方法,以及如何将算法用C语言描述出来。掌握C语言中三种程序控制结构:顺序、选择和循环及对应的各类语句。如表达式语句、复合语句、空语句、条件语句、循环语句和跳转语句,以及表示条件的关系运算符(<、<=、>、>=、==、!=)和逻辑运算符(!、&&、||)的使用。

基本的顺序结构语句有表达式语句、空遇句、复合语句等,选择结构语句有if语句和switch语句等,循环结构语句有while语句、do-while语句和for语句以及跳转语句break和continue等。

1.表示选择结构的语句形式

●if(表达式)语句

●if(表达式)

语句1

else

语句2

●if(表达式1)

语句1

else if(表达式2)

语句2

else if(表达式n-1)

语句n-1

else

语句n

●if (表达式1)

if (表达式2)语句1

else 语句2

else

if (表达式3)语句3

else 语句4

●switch (表达式) {

case 常量表达式1: 语句列1

case 常量表达式2: 语句列2 …

case 常量表达式n: 语句列n

default: 语句列n+1

}

2.表示循环结构的语句

●while (表达式) 语句

●do

语句

while (表达式);

●for (表达式1;表达式2;表达式3)

语句

3.表示跳转的语句

●break语句可用来跳出switch语句或循环结构,其一般形式为:

break;

要注意的是,break语句仅用于跳出所在的switch语句或循环语句。例如:

for(i=1;i<10;i++)

for(j=1;j<10;j++){

if(i*j%3==0) break;

}

在i=1,j=3时条件满足执行break语句,此处的break语句并不会导致程序跳出两重for 循环语句,实际的执行效果是break语句跳出第二个for循环,执行i++,然后再继续判断第一个for语句的条件i<10是否满足。

●continue语句用于跳过循环体内余下的语句,并继续执行下一次循环,其一般形式为:

continue;

三、实验要求

1.程序均需在编译器中进行试验

2.实验完成后只需要上交源程序文件

3.源程序文件名均使用“4_题号.c”作为文件名,如4_1.c.

四、实验内容

1.已知2009年1月1号是星期四,给定2009年的任何一天(月日),求这天是星期几(输出最后结果要求用switch语句实现)。一周七天用以下标识:

Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday 例如:输入3.30 时应输出Monday,输入 6.19 时应输出Friday

2.编写程序,实现从键盘输入一个正整数,输出该正整数的位数。例如输入1234输出4 ,输入123456输出6。

3.验证命题:如果一个三位整数是37的倍数,则这个整数循环左移后得到的另两个3位数也是37的倍数。例如,148是37的倍数,481和814也是37的倍数。若命题正确输出所有符合命题的3位整数,否则输出“wrong”。

4.编程求1+2!+3!+...+10!的和。

5.编程找出1000之内的所有完数。所谓完数是指一个数与其除本身以外所有因子之和相等。例如6除本身以外的因子有1、2、3,而6=1+2+3,所以6是一个完数。

6.验证命题:任何各位数字不全相同的三位正整数经以下变换后均能变为495,称495为三位整数的黑洞数。

变换步骤:对于任意一个各位数字不全相同三位正整数,将组成该整数的3个数字重新组合分别生成一个最大数和最小数,用最大数减去最小数得到一个新的三位数;再对新的三位数重复上述操作,最多重复7次。

编写程序,接收键盘输入的一个三位正整数,判断各位数字是否不全相同,若不全相同则实施以上变换(不超过7次),输出每步变换后得到的三位整数。

【测试数据】

输入486时应输出:486 396 594 495

输入591时应输出:591 792 693 594 495

输入其他任意的三位数再做验证。

7.输入一个100以内的正整数,将其分解质因数后输出。如输入60,输出60=2*2*3*5。

五、难点提示

1.要计算2009年某月某日是星期几,首先要计算该日子是2009年的第几天,第几天可以利用天数和月份间的关系进行计算。计算出该日子是第几天后需要计算其是星期几,由于2009年1月1日是星期四,所以该日子是星期(第几天+4-1)%7。本题可以扩展到任意年份。

2.求一个整数x的位数只要将x不断除以10直到该值为0,同时设一个变量记录循环次数即为整数的位数。在计算时注意初值与循环条件之间的关系和设置。对于遇到本题类似的问题时还要注意一点,对整数进行除以10之前应该用另外一个变量将该数保存起来,因为处理结束后该整数已经变成了0,不这样做的话对于要将原数输出或再进行后续处理的问题会较麻烦。

3.运行结果:

111, 148, 185, 222, 259, 296, 333, 370, 407, 444, 481, 518, 555, 592, 629, 666, 703,740, 777, 814, 851, 888, 925, 962, 999

按照“自顶向下,逐步细化”的设计原则首先设计验证这一类“命题是否成立问题”的一般框架:

for(循环变量赋初值;循环终止条件;循环变量变化) {

对于每个值进行处理

相关文档
最新文档