(續一)
調整方案:增加函數,實現批量加法運算。
這裏有些細節需要討論一下:
(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個函數,增加永遠比修改要容易!圓滿完成設計了......嗎?
(未完待續)