实验六模块化设计
实验目的
(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;