实验5循环结构程序设计精选.doc
文本预览下载声明
循环结构程序设计
【实验目的】
掌握for、while和do-while三种基本的循环结构。
掌握循环结构的嵌套,重点是双重嵌套。
实验5.1 编写程序,计算10!。
这是一道累乘数字的题。一般的方法是:设s是保存结果的变量,n为乘数,步骤如下:
为s和n赋初值:s = 1,n=1。
将n与sum相乘,并把结果送回sum,即sum = sum * n。
将n增加1,重复(2)直至n为10。
这样就可以判断用循环结构来实现。由于循环次数也很确定,宜采用for循环。当然也可以用while或do-while循环实现。下面给出了while实现的参考代码。希望同学改用for循环和do-while循环再做一遍,看是否得到同样的结果。
另外要注意的是由于10!是一个很大的数,要意识到这个数是否超出整型数所能表示的范围,本题是可以的。假设要计算13!就超出了整型的范围,此时就要定义float型或double型的变量来存放计算结果。
【参考程序】
#include stdio.h
void main()
{
int n = 1, s = 1;
while(n =10)
{
s = s * n;
n += 1;
}
printf(“10! = %d\n ”, s);
}
答案:
#includestdio.h
main()
{int n=1,s=1;
for(n=1;n=10;n++)
{s=s*n;
printf(10!=%d,s);
}
}
实验5.2 请编写程序实现:从键盘输入若干个数字,直到输入0时结束,统计并输出正数和负数的个数。例如输入了12 -3 56 10 -120 0,这样就输出“共输入了5个数字,其中正数有3个,负数有2个”。
【指导】
要求从键盘接收若干个数字,并且将输入的0作为循环结束的条件。用while或do-while语句实现更方便一些,当然也可以用for循环实现的,能不能试一试?
用两个变量m和n分别保存正数的个数和负数的个数。每接收一个数字就判断是否大于零,若大于0,正数个数加1,否则负数个数加1。
实验5.3请编写程序实现:从键盘输入若干字符,直到输入回车键时结束,统计并输出英文字母(包括大写和小写,不包括最后输入的回车键)的个数。
【提示】
此题指明输入的字符,所以可以用getchar()函数来接收从键盘输入的符号。由于未指明输入多少个,还是可以用while或do-while实现。
第一要考虑如何判断输入的符号是英文大小写字母中的一个,这一问题课上讲过,请自行解决。
第二要考虑如何判断输入的是回车键?
答案:
#includestdio.h
main()
{ int m=0,n=0;
double a;
scanf(%lf,a);
while(a!=0)
{ if(a0)
{m++;}
if(a0)
{n++;}
scanf(%lf,a);
}
printf(%d %d %d,m+n,m,n);
}
实验5.4计算1-3+5-7+…-99+101的值,并输出结果。
【提示】
先考虑1+3+5+7+…+99+101,这样可以看出步长为2。
再考虑符号。将1-3+5-7+…-99+101看成1+(-3)+5+(-7)+…+(-99)+101,这样还可以归结到累加和。
接下来考虑是否可以用一个临时变量temp来存放符号,初值temp = 1,每经过一次循环temp变号,这样第二次循环temp = -1。也就是奇数次循环时temp = 1,偶数次循环temp = -1。这样,将temp与n相乘就能得到参与累加的每一项。 每次累加之前:temp = temp * (-1) 即可实现变号问题。
实验5.5计算π的近似值,π的计算公式为:
π=
实验5.6 编写程序,计算1!+ 2!+ 3!+ … + 10!。
【提示】
由实验5.1可以得到n!的求法,再实现累加即可。这里需要考虑双重循环结构。
(1) 外层循环i从1变化到10,内层循环j从1变化到i。
(2) 在内层循环中计算p=i!。
(3) 在外层循环中计算s=s+p。
#includestdio.h
void main()
{
int i,j,p,s=0;
for(i=1;i=10;i++)
{
p=1;
for(j=1;j=i;j++)
{
p=p*j;
}
s=s+p;
}
printf(%d\n,s);
}
答案:
#include stdio.h
void main()
{ i
显示全部