文档库 最新最全的文档下载
当前位置:文档库 › 实验八 循环结构程序设计(二)

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

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

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

【实验目的】

1.熟练掌握循环程序设计,包括嵌套循环。

2.熟练掌握使用break、continue语句在循环程序设计中的实现。

3.继续掌握VC++的程序调试方法。

【实验内容】

8-1调试示例,输入正整数的个数n,再输入n个正整数,判断它们是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。

源程序(有错误的程序)error8_1.cpp

#include

#include

void main( )

{

int i, j, k, m, n;

printf("输入正整数的个数n: ");

scanf ("%d", &k);

printf("输入%d个正整数\n",k);

for(j = 0; j < k; j++){

scanf ("%d", &m);

n = sqrt(m);

for(i = 2; i <= n; i++)

if (m / i == 0) break;

if (i > n)

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

else

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

} /* 调试时设置断点*/

}

运行结果(改正后程序的运行结果)

输入正整数的个数n:3

输入3个正整数

11

11是一个素数

13

13是一个素数

15

15不是一个素数

(1)输入并保存上述程序后,再进行编译和连接,没有出现错误信息。

(2)调试程序开始,设置1个断点,具体位置见源程序的注释。

(3)单击go (F5),运行程序,输入1 和9,程序运行到断点暂停,输出9是素数,结果不对。在Watch窗口的Name栏分别输入n、i、m,它们的值分别为3、4、9,这也是while 循环结束时的值。从程序看,while循环有2个条件i <= n和m/i != 0,但是,当i<=n时,m/i == 0的值一直为假,即实际上只有一个条件i <= n起作用,但那就无法区分m是否为素数。根据素数的定义,要判断m能否被i整除,应该用m%i == 0表示,而不是程序中的m/i == 0。

(4)单击(Stop Debugging (Shaft F5))停止调试,把/ 改为% 后,重新编译和连接,没有错误和警告。

(5)单击(Rstart (Ctrl+Shaft+F5)),重新开始调试。单击go (F5),运行程序,输入1 和9,程序运行到断点暂停,输出9不是素数,正确,单击(Stop Debugging (Shaft+F5))停止调试。

(6)取消断点,再单击,运行程序,输入3 和11 13 15,输出结果和题目要求一致,程序调试结束。

8-2 输入1个正整数n,求下式的前n项之和(保留2位小数),要求使用嵌套循环。

111

e=++++

1.....

1!2!3!

8-3 输入2个正整数a和n,求a+aa+aaa+aa…a(n个a)之和。例如,输入2和3,输出246(2 + 22 + 222)。

8-4 输出100~200之间的所有素数,每行输出8个。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。

8-5 输入2个正整数m和n(1<=m,n<=500),统计并输出m 和n之间的素数的个数以及这些素数的和。要求定义并调用函数prime(m)判断m是否为素数。

8-6 改错,找出200以内的所有完数,并输出其因子。一个数如恰好等于它的因子之和,这个数称为完数,如6=1+2+3,其中1、2、3为因子,6为因子和。(源程序error8_2.cpp)输入输出示例:

1=1

6=1+2+3

28=1+2+4+7+14

源程序(有错误的程序)error8_2.cpp

#include "stdio.h"

void main()

{ int i, j, s=1;

for(i = 1; i <= 200; i++) {

for(j = 2; j <= i / 2; j++)

if(i / j == 0) s = s + j;

if(s == i) {

printf("%d=1", i);

for(j = 2; j <= i / 2; j++)

if(i / j == 0) printf("+%d", j);

printf("\n");

}

}

}

实验报告要求

将编程题(8-2~8-5)的程序流程图、源程序、运行结果和改错题(8-6)改正后的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,写在实验报告上。

相关文档
相关文档 最新文档