文档库 最新最全的文档下载
当前位置:文档库 › 实验六模块化设计

实验六模块化设计

实验六模块化设计
实验六模块化设计

实验六模块化设计

实验目的

(1)体验结构化程序设计方法要点,理解模块化设计的思想,划分子模块的原则

(2)掌握is函数的定义和调用

实验内容

任务一改错求PI值error02_02.cpp

打开程序文件error02_02.cpp改正程序中的错误。根据下式求PI值,直到某一项小于10-6 PI/2=1+1!/3 +2!/(3*5)+…… +n!/(3*5*…*(2n-1))

正确运行结果

PI=3.14159

#include

#include

double fact(int n);

double multi(int n);

int main(void)

{

int i;

double sum, item, eps;

eps =1e-6;

sum = 1.0;

item = 1.0;

for(i = 1;item>=1e-6;i++)

{

item = fact(i) / multi(2*i + 1);

sum = sum + item;

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

printf("PI=%0.5lf\n", sum * 2);

system("pause");

return 0;

}

double fact(int n)

{

int i;

double res;

res = 1;

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

{

res = res * i;

}

return res; /* 调试时设置断点*/

}

double multi(int n)

{

int i;

double res;

res = 1;

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

{

res = res * i;

}

return res; /* 调试时设置断点*/

}

任务二改错输出逆序数error02_03.cpp

打开程序文件error02_03.cpp改正程序中的错误。输入2个整数,分别将其逆向输出,要求定义并调用函数fun(n),它的功能是返回n的逆向值

正确运行结果

123 -910

123的逆向是321

-910的逆向是-19

#include

#include

int fun(int n);

int main(void )

{

int m1,m2;

scanf("%d%d", &m1, &m2);

printf("%d的逆向是%d\t", m1, fun(m1));

printf("%d的逆向是%d\n", m2, fun(m2));

system("pause");

return 0;

}

int fun(int n)

{

int m,y;

y = 0;

if(n<0)

{

m =-n;

}

else

{

m=n;

}

while(m!=0)

{

y = y* 10 + m%10;

m =(m-m%10)/10;

}

if(n>=0)

return y;

else

return -y;

}

任务三改写输出m-n之间所有的素数(ex6_1.cpp)

改写(sample02_07.cpp )保存为ex6_1.cpp:输出m-n之间所有的素数,调用int isprime(int n)函数,每行输出10个素数。

1.源程序清单:ex6_1.cpp

#include

#include

#include

int isprime(int n);

int main(void)

{

int count, a, b,m,n;

printf("输入m=");

scanf("%d",&m);

printf("输入n=");

scanf("%d",&n);

count = 0; /* count记录素数的个数,用于控制输出格式*/ for(a =m; a <=n; a++)

{

b=isprime(a) ;

if(b==1) /* 如果是素数*/

{

printf("%6d", a); /* 输出*/

count++; /* 累加已经输出的素数个数*/

if(count % 10 == 0) /* 如果是10的倍数换行*/

printf("\n");

}

}

printf("\n");

system("pause");

return 0;

}

int isprime(int n)

{

int i;

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

if(n % i == 0) break;

if (i

else {return 1;}

}

2。实现算法(自然语言描述)

1.输入m,n

2.调用函数判断a是否为素数

若a是素数:输出a,累加已经输出的素数个数若a不是素数:不做处理

3.每输出10个素数换行

任务四改写打印表格ex6_2.cpp

改写实验五任务四ex5_3.cpp,保存为ex02_07.cpp

(1)增加函数void PrtLine(int bottom,int height),已知底长和高,输出一行表格数据。(2)增加函数void PrtBody(void) 打印表格除表头和标题以外的主体内容部分,调用PrtLine 实现。

(3)在main函数中输出表头和标题,调用PrtBody打印表格主体。

源程序清单:ex6_2.cpp

#include

#include

void PrtLine(double bottom,double height);

void PrtBody(void);

void main()

{int i,j ;

double F,K,h,l,S;

printf("木材尺寸横截面积惯性力矩截面系数\n");

PrtBody();

system("pause");

}

void PrtBody(void)

{

int i,j ;

double h,l;

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

{

l=i*2;

for(j=1;j<=6;j++)

{

h=j*2;

PrtLine(l,h);

}

}

}

void PrtLine(double bottom,double height)

{

double F,K,S;

S=bottom*height;

F=height*height*height*bottom/12;

K=bottom*height*height/6;

printf("%2.f*%4.f %5.f %8.2f %8.2f\n",bottom,height,S,F,K);

}

任务五编程给小学生出加法考试题ex6_3.cpp

编写一个程序,给学生出一道加法运算题,然后判断学生输入的答案对错与否,按下列要求以循序渐进的方式编程。

程序1 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,

否则显示“Not correct! Try again!”,程序结束。(ex6_3_1.cpp)

程序2 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct! Try again!”,直到做对为止。(ex6_3_2.cpp)

程序3 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则提示重做,显示“Not correct! Try again!”,最多给三次机会,如果三次仍未做对,则显示“Not correct! You have tried three times! Test over!”,程序结束。(ex6_3_3.cpp)

程序4 连续做10道题,通过计算机随机产生两个1~10之间的加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct!”,不给机会重做,10道题做完后,按每题10分统计总得分,然后打印出总分和做错的题数。(ex6_3_4.cpp)

程序5 通过计算机随机产生10道四则运算题,两个操作数为1~10之间的随机数,运算类型为随机产生的加、减、乘、整除中的任意一种,如果输入答案正确,则显示“Right!”,否则显示“Not correct!”,不给机会重做,10道题做完后,按每题10分统计总得分,然后打印出总分和做错题数。(ex6_3_5.cpp)

【思考题】如果要求将整数之间的四则运算题改为实数之间的四则运算题,那么程序该如何修改呢?请修改程序,并上机测试程序运行结果。

1、将int型修改为double型

2、在整数的后面再随机的取2个数!!!!!!!

源程序清单:(ex6_3_5.cpp)

程序一

#include

#include

int main()

{

int m,n,y;

printf("输入m,n:");

scanf("%d,%d",&m,&n);

printf("m+n=");

scanf("%d",&y);

if(y==m+n)

{

printf("Right!");

}

else

{

printf("Not correct! Try again!");

}

system("pause");

return 0;

}

程序二:

#include

#include

void correct(int m,int n );

int main()

{

int m,n;

printf("输o?入¨?m,n:");

scanf("%d,%d",&m,&n);

correct(m,n);

system("pause");

return 0;

}

void correct(int m,int n)

{

int y;

printf("m+n=");

scanf("%d",&y);

if(y==m+n)

{

printf("Right!");

}

else

{

printf("Not correct! Try again!\n");

while(y!=m+n)

{

correct(m,n);

}

}

}

程序三:

#include

#include

int main()

{

int m,n,sum,i=0;

printf("输入m,n:");

scanf("%d,%d",&m,&n);

printf("m+n=");

scanf("%d",&sum);

for(i=0;i<3;i++)

{

if(sum==m+n)

{

printf("right");

break;

}

else

{

printf("input again:m+n=");

scanf("%d",&sum);

}

}

if(i>=3)

printf("Not correct! You have tried three times! Test over!");

}

system("pause");

return 0;

}

程序四:

#include

#include

#include

void main()

{

int m,n,x,i,k;

k=0;

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

{ srand(time(0));

m=rand()%10+1;

n=rand()%10+1;

printf("%d+%d=",m,n);

scanf("%d",&x);

if(x==m+n)

printf("Righr!\n");

k=k+1;

}

else

{

printf("Not corret!\n");

}

}

printf("总分=%d\n总共10题,做对%d题,做错%d题",k*10,k,10-k);

system("pause");

}

任务五:

#include

#include

#include

void add(void);

void red(void);

void mul(void);

void di(void);

void main()

{

int i,m

srand(time(NULL));

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

for(j=0;j<2;j++)

{

b[i][j]=1+10*rand()/(RAND_MAX+1);

}

while(m)

{

srand(time(NULL));

t=1+rand()%3+1;

switch(t)

{

case 1:add();n++;break;

case 2:red();n++;break;

case 3:mul();n++;break;

case 4:di();n++;break;

}

m=m-1;

}

printf("总分:%d\n做对%d题\n做错%d题\n",10*k,k,10-k);

system("pause");

}

void add(void)

{

int j,s,x;

s=0;

for(j=0;j<2;j++)

printf("%d+",b[n][j]);

printf("\b \n");

printf("请输入答案:");

scanf("%d",&x);

for(j=0;j<2;j++)

s+=b[n][j];

if(x==s)

{

printf("正确!\n");

k=k+1;

}

else

printf("不正确!\n"); }

void red(void)

{

int j,s,x;

s=0;

for(j=0;j<2;j++)

printf("%d-",b[n][j]);

printf("\b \n");

printf("请输入答案:");

scanf("%d",&x);

s=b[n][0]-b[n][1];

if(x==s)

{

printf("正确!\n");

k=k+1;

}

else

printf("不正确!\n"); }

void mul(void)

{

int j,s,x;

s=0;

for(j=0;j<2;j++)

{

printf("%d*",b[n][j]);

}

printf("\b \n");

printf("请输入答案:");

scanf("%d",&x);

s=b[n][0]*b[n][1];

if(x==s)

{

printf("正确!\n");

k=k+1;

}

else

printf("不正确!\n");

}

void di(void)

{

int j,x,s;

s=0;

for(j=0;j<2;j++)

printf("%d/",b[n][j]);

printf("\b \n");

printf("请输入答案(整数):");

scanf("%d",&x);

s=b[n][0]/b[n][1];

if(x==s)

{

printf("正确!\n");

k=k+1;

}

else

printf("不正确!\n");

}

或者:

#include

#include

#include

void main()

{

int i,m,n,sum,y,x;

sum=0;

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

{

srand(time(0));

m=rand()%10+1;

n=rand()%10+1;

x=rand()%4;

if(x==0)

{

printf("%d+%d=",m,n);

scanf("%d",&y);

if(y==m+n)

{

printf("Right!\n");

sum=sum+1;

}

else

{

printf("Not corret!\n");

}

}

if(x==1)

{

printf("%d-%d=",m,n);

scanf("%d",&y);

if(y==m-n)

{

printf("Right!\n");

sum=sum+1;

}

else

{

printf("Not corret!\n");

}

}

if(x==2)

{

printf("%d*%d=",m,n);

scanf("%d",&y);

if(y==m*n)

{

printf("Right!\n");

sum=sum+1;

}

else

{

printf("Not corret!\n");

}

}

if(x==3)

{

printf("%d/%d(整数)=",m,n);

scanf("%d",&y);

if(y==m/n)

{

printf("Right!\n");

sum=sum+1;

相关文档