(续一)
调整方案:增加函数,实现批量加法运算。
这里有些细节需要讨论一下:
(1)既然要做批量的加法运算,要怎么得到数据?我懒,不想手工输入,所以一个直接的办法就是用随机数rand()生成,再用srand()设置随机数种子,我只要输入有多少道加法就可以了。
(2)之前已经进行了IPO的分离,所以输入数据是要保存下来的,加法运算r=a+b涉及三个数,所以可以用一个3列MAXSIZE行的数组,这里MAXSIZE是多少?需要讨论一下,找出操作系统能够容忍的最大的MAXSIZE,在程序中,不妨设MAXSIZE为20。
设计3:
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#define MAXSIZE 20
/* 输入两个整数,计算其和 */
void inputData(int *pa, int *pb)
{
printf("请输入两个整数:");
scanf("%d%d", pa, pb);
}
int process(int a, int b)
{
return a+b;
}
void outputData(int a, int b, int r)
{
printf("%d+%d=%d\n", a,b,r);
}
/* 随机生成n个整数,计算其和 */
int randomNum(int low, int high)
{
return low+rand()%(high-low+1);
}
void inputBatch(int *pn)
{
do {
printf("请输入计算次数(1-%d):", MAXSIZE);
scanf("%d", pn);
}while(*pn<1 || *pn>MAXSIZE);
}
void processBatch(int (*pn)[3], int n)
{
int i;
for(i=0; i<n; ++i)
{
pn[i][0]=randomNum(0,100);
pn[i][1]=randomNum(0,100);
pn[i][2]=process(pn[i][0], pn[i][1]);
}
}
void outputBatch(int (*pn)[3], int n)
{
int i;
for(i=0; i<n; ++i)
outputData(pn[i][0], pn[i][1], pn[i][2]);
}
void showMenu()
{
int a, b, r;
int nums[MAXSIZE][3],n;
int in, exitFlag=0;
srand((unsigned)time(NULL)); /* 以当前时间做随机数种子 */
while(1)
{
system("cls");
printf("***************************************\n");
printf("*************** 欢迎使用 **************\n");
printf("***************************************\n");
printf("请选择:\n");
printf(" 1----输入两个整数A和B,计算A+B\n");
printf(" 2----输入多对整数,批量计算A+B\n");
printf(" 0----结束程序\n");
printf("请输入(1,2,0):");
scanf("%d", &in);
switch(in)
{
case 1:
inputData(&a, &b);
r=process(a,b);
outputData(a,b,r);
system("pause"); break;
case 2:
inputBatch(&n);
processBatch(nums,n);
outputBatch(nums,n);
system("pause"); break;
case 0: exitFlag=1; break;
}
if (exitFlag)
{
printf("***************************************\n");
printf("********* 感谢您的使用,再见!*********\n");
printf("***************************************\n");
break;
}
}
system("pause");
}
main()
{
showMenu();
}
现在应该对函数的好处有了一个直观的理解,这里增加了4个函数,只修改了1个函数,增加永远比修改要容易!圆满完成设计了......吗?
(未完待续)