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

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

实验三循环结构程序设计

一、实验目的

(1) 掌握while、do~while、for语句的使用。

(2) 掌握循环体内使用break、continue语句的作用。

(3) 掌握循环及嵌套循环结构的程序设计方法。

二、实验准备

1.C语言实现循环的方法

①goto 和if 构成的循环:由于goto是无条件转向,不符合结构化程序设计思想,所以不建议使用。

②while循环:实现“当型”循环,首先判断循环条件,当条件为真,执行循环体,再判断循环条件……此种循环有可能一次也不执行循环体。

③do~while循环:实现“直到型”循环,与while循环的区别是先执行循环体,再判断循环条件,当循环条件为真,再执行循环体……此种循环至少执行一次循环体。

④for循环:与while循环类似,一般用于知道循环变量初值、终值及步长值的循环。

2.break 和continue 语句

①break 语句:可用在循环体或switch语句中,作用是跳出其所在的控制结构。若是在循环体中,则是跳出其所在的循环,使得循环不止一个出口。

②continue语句:只能用在循环体中,其作用是结束本层本次循环,注意不是退出循环。

3.阅读以下程序,并分析其功能,调试运行程序后再分析其运行结果。

①掌握三种方法求1到100的累加和。

文件名为ex3-1-1.c,内容如下:

# include

main()

{ int sum=0,i=1;

while(i<=100)

sum+=i++; // 等价于:{ sum=sum+i; i++; }

printf("sum is %d\n",sum);

}

文件名为ex3-1-2.c,内容如下:

# include

main()

{ int sum=0,i=1;

do

sum+=i++;

while(i<=100);

printf("sum is %d\n",sum);

}

文件名为ex3-1-3.c,内容如下:

# include

main()

{ int sum=0,i;

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

sum+=i;

printf("sum is %d\n",sum);

}

②程序二,程序文件名为ex3-2.c。(掌握递推算法(求 值))

# include

# include

void main()

{ int s=1;

float n=1,t=1,pi=0;

while(fabs(t)>1e-6) //当前项实数t的绝对值大于1*10-6则执行循环体

{ pi=pi+t; //累加当前项

n=n+2; //推算下一项的分母

s=-s; //推算下一项的符号

t=s/n; //计算下一项的值

}

pi=pi*4;

printf("pi= %f\n",pi);

}

③程序三,程序文件名为ex3-3.c。(掌握迭代算法(处理fibonacci数列前40项))

# include

void main()

{ long f1=1,f2=1;

int i;

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

{ printf("%12ld %12ld",f1,f2); //输出当前的两项

if(i%2==0) //循环2次后输出回车换行,即一行输出4个数

printf("\n");

f1=f1+f2; //推算之后的第一项

f2=f1+f2; //推算之后的第二项

}

}

④程序四,程序文件名为ex3-4.c 。(掌握穷举算法(判素数))

# include

# include

void main()

{ int m,i,k;

printf("Input m: ");

scanf("%d",&m);

k=sqrt(m); //可以改为:k=m-1; 或k=m/2;

for(i=2;i<=k;i++) //穷举2~k之间的数作为除数判断和m能否整除

if(m%i==0) //若其中之一能够整除,则确定m不是素数,不再循环,此时i<=k

break;

if(i>k) //若i>k则说明以上循环中m不能被所有的i整除则确定m是素数

printf("%d 是素数!\n",m);

else

printf("%d 不是素数!\n",m);

}

三、实验内容(按要求设计以下程序,并调试分析运行结果,此部分完成在实验报告上)

(1) 设计程序sy3-1.c,要求打印小学九九乘法表。

(2) 设计程序sy3-2.c,要求编程计算x n,其中x和n均由键盘输入。

(3) 设计程序sy3-3.c,已知祖父年龄70岁,长孙20岁,次孙15岁,幼孙5岁,问要过多少年,三个孙子的年龄之和同祖父的年龄相等,试用单重循环结构编程实现。

(4) 设计程序sy3-4.c,有一数列:2/1,3/2,5/3,8/5,…求出这个数列的前10项之和。

(5) 设计程序sy3-5.c,一球从200米高度自由落下,每次落地后反跳回原高度的四分之一,再落下。编程求它第10次落地时共经过的路程及第10次落地后反弹的高度。

分析:该题也是进行多次加操作、求最终和的问题。在这里要定义一个变量(sum)记录小球反复落地总共经历的高度,还要定义一个变量(high)表示小球每次反弹起来的高度。需要注意的一点是,小球第一次落地时经历的路程为初始高度,即sum初值为200,在第一次落地后,sum中每次累加的是两倍的high值(弹起和再落下),这个过程只需再重复九次即可。

正确答案:共经过333.33米,第10次反弹了0.000191米

(6) 设计程序sy3-6.c ,要求求出满足“百位减去十位等于个位”的所有三位整数,并按一行5个数输出结果。

(7) 设计程序sy3-7.c ,要求从键盘上输入整数m和k,输出大于且紧靠m的k个素数。

(8) 中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?请编程解决该问题。(文件名存为sy3-8.c)

分析:设鸡翁、鸡母、鸡雏的个数分别为x,y,z,题意给定共100钱要买百鸡,若全买公鸡最多买20只,显然x的值在0~20之间;同理,y的取值范围在0~33之间,可得到下面的不定方程:5x+3y+z/3=100

x+y+z=100

所以此问题可归结为求这个不定方程的整数解。由程序设计实现不定方程的求解与手工计算不同。在分析确定方程中未知数变化范围的前提下,可通过对未知数可变范围的穷举,验证方程在什么情况下成立,从而得到相应的解。

(9) 编写程序sy3-9.c ,输入一个正整数,计算并显示该整数的各位数字之和,例如,整型数1987的各位数字之和是1+9+8+7,等于25。

(10) 编写程序sy3-10.c,功能是找出1至99之间的全部同构数。所谓同构数是这样的一组数:它出现在它平方数的右边。(例如:5是25右边的数,25是625右边的数,5和25都是同构数。)

(11) 编写程序sy3-11.c,在1-500中找出能同时满足用3除余2,用5除余3,用7余2的所有整数输出并计数。

(12) 编写程序sy3-12.c试用单重循环结构编程实现,求出10个“韩信点兵数”。该数除以3余2,除以5余3,除以7余4(如53,158,263)。

四、实验要求:

此次实验内容设置得比较多,请各位同学在课堂上至少选做其中5道题,其余的请在下次上课前利用课外时间完成。

五、实验报告填写要求:

1、第一页用《攀枝花学院实验报告》纸,其后用《实验报告附页》纸。

相关文档
最新文档