实验11 循环结构程序设计(二)

  • 格式:doc
  • 大小:47.50 KB
  • 文档页数:7

实验十一循环结构程序设计(二)实验要点在循环语句执行的过程中,注意要实现循环必须要保证的五个条件:循环初值、循环终值,循环体、循环增量和进行循环的条件。

循环体重可以是单语句,也可以是多个语句,甚至可以是空语句。

若循环体包含多个语句(语句是以分号结束的),这多个语句必须用大括号括起来,构成复合语句。

for语句的使用比较灵活,for语句的格式为:for循环结构的执行过程:首先进行表达式1的运算,然后计算表达式2的值,若结果为真(非零),则执行循环体语句,最后进行表达式3的运算。

再次计算表达式2的值,若结果为“真”(非零),再执行循环体语句,最后再进行表达式3的运算。

如此循环重复下去,直到计算表达式2的结果为“假”(零)时,循环结束,流程控制转到循环结构的下一语句。

除了掌握for语句的格式外,还必须注意以下几点:1)用for循环结构也具有“先判断,后执行”的特点。

for循环结构相当如下形式的while结构:表达式1;while(表达式2){循环体;表达式3;}2)从语法上看,for的三个成分都是表达式,它们之间都以分号“;”隔开。

3)表达式1和表达式3常常是赋值表达式或函数调用,有时也可以是逗号表达式,一般用来实现对循环控制变量初始化和循环控制变量增(减)值。

表达式2常常是关系表达式或逻辑表达式,但也可以是其它类型的表达式,它是用来表示循环继续的条件,只要其值为非零,就可执行循环体,否则推出循环。

例如:for (i=1,sum=0;i<=100;i++,i++)sum+=i;关键字for的三个表达式允许部分或全部省略,但其中的两个分号不能省略,否则,系统将报错。

4)当省略表达式1时,在进入for循环之前应该有给循环控制变量赋初始值的语句;5)当省略表达式3时,应该在循环体内有修改循环控制变量的值的语句,以保证循环能够正常结束。

例如:for(i=1,s=1;i<=n; ){ s=s*i;i++; /*i++是控制循环变量值的语句*/}6)当表达式2或三个表达式全部省略时,应该在循环体内设置相应的语句来结束循环,否则程序始终认为判断条件成立,循环将无终止地执行下去,即形成了所谓的死循环。

7)如果循环体语句为一语句组,则必须用一对花括号“{}”括起来。

8)由于for循环结构书写形式灵活多样,如果在三个表达式中过多的加入与循环控制无关的内容,容易降低可读性。

因此,通常使用一种简单明了的for 循环结构形式:9) 循环体可以是空语句。

循环语句可以嵌套,使用嵌套循环结构时,外层的循环结构一定要完全包含在内层循环,即循环只能嵌套,不能交叉。

一、实验名称:循环结构程序设计二二、实验目的:1、能够熟练运用for语句编写程序。

2、在1的基础上,掌握for的循环嵌套。

3、灵活运用三种循环程序结构及其辅助语句。

三、实验内容:(一)程序分析1,源程序1#include<stdio.h>main(){int num=0;while(num++<=2)printf("%d\n",num);}2,源程序2#include<stdio.h>main(){int i;for(i=1;i<5;++i)if(i%2)printf("*");elsecontinue;printf("#");printf("$");}要求:①) 输入并调试源程序②) 将源程序1中的while(num++<=2) 改为 while(++num<=2)将源程序2中的continue语句去掉。

的值由键盘输入。

要求分别用三种循环语句实现。

方法一:用for语句实现#include<stdio.h>main(){ long s,n,k,i;scanf(“”,&n);k=2*n-1 ;;for(i=1 ;i<=k ;i+=2 )s+=i ;printf(“1+3+……+%ld=%ld\n”,k,s) ;}方法二:用while语句实现#include<stdio.h>main(){ long s ,n,i=1;scanf(“%ld”,&n);while( ){ s+=i ;printf(“1+3+……+%ld=%ld\n”,2*n-1,s) ;}方法三:用do…while语句实现#include<stdio.h>main(){ long s=0,n,i= ;scanf(“%ld”,&n);do{ s+=i ;i++;}while()printf(“1+3+……+%ld=%ld\n”,2*n-1,s) ;}要求:将程序填写完整,并对源程序进行调试运行。

4、从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t 中。

例如,当s中的数为:7654321时,t中的数为:7531。

main(){ long s,sl=10,t;scanf("%ld",&s);t =___________;while ( s > 0){s = s/100;t =____________;sl=sl*10; }printf("%ld",t);}(二)程序设计1、用for语句的循环嵌套,输出一个九九乘法表。

要求:(1)、输出时每个数据占4列,即以“%4d”格式输出。

(2)、输出格式如下图所示。

*****************************************1 2 3 4 5 6 7 8 92 4 6 8 10 12 14 16 183 6 9 12 15 16 21 24 274 8 12 16 20 24 28 32 365 10 15 20 25 30 35 40 456 12 18 24 30 36 42 48 547 14 21 28 35 42 49 56 638 16 24 32 40 48 56 64 729 18 27 36 45 54 63 72 81*****************************************2、编程。

打印如下图形。

(根据自已情况,任写一个程序)** ** * ** * * * * * * * * * * * * * * ** **** * ** * * * * * * * * * * * * * * * ** * **3、打印输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。

例如,153是一水仙花数,因为153=13+53+33。

4、求1!+2!+……+n! 。

(n要求从键盘输入。

)5、输入两个正整数m和n,求它们的最大公约数和最小公倍数。

6、求解百鸡问题:已知公鸡每只5元、母鸡每只3元、小鸡1元3只。

用1001、以下程序中“/***** N ***** /”的下一行中有错误,请改正(注意:不得加行、减行、加句、减句)。

该程序功能:输入m、n(要求输入数均大于0,且m>=n),输出它们的最小公倍数。

#include <stdio.h>void main(){ int m,n,k;/******** 1 *********/while(scanf("%d%d",&m,&n),m<0 && n<0);for(k=m; k%n!=0;)/******** 2 ********/k=k+n;printf("%d\n",k);}2、以下程序中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句)。

该程序功能:输入m、n(要求输入数均大于0),输出它们的最大公约数。

#include <stdio.h>void main(){ int m,n,k;while(scanf("%d%d",&m,&n), _______1______ );for( ____2____; n%k!=0||m%k!=0; k--);printf("%d\n",k);}3、以下程序中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句)。

该程序功能:对x=1,2,...,10,求f(x)=x*x-5*x+sin(x)的最大值。

#include <stdio.h>#include <math.h>#define f(x) x*x-5*x+sin(x)void main(){ int x; float max;______1______for(x=2;x<=10;x++)______2______printf("%f\n",max);}。