一、我的程序没有用到函数,所有的代码全部在主函数里,所以在这里只能用写过的部分程序进行测试。
二、源代码
#include "stdafx.h" #include<iostream.h> #include<stdlib.h> #include<time.h> int main(int argc, char* argv[]) { srand(time(NULL)); int ph[10]; //建立捕获数组,用以存放输入的选则 int Pway,num1,num2; //用来表示打印方式 int i,j; printf("以下均用0表示输入“否”,用1表示输入“是” "); printf("请输入要打印的题目数量:"); scanf("%d",&ph[0]); //a[0]存放打印题的数量 printf("请输入打印的方式(列数):"); scanf("%d",&ph[1]); //a[1]代表输入的列数 printf("请输入是否有乘除法:"); scanf("%d",&ph[2]); //a[2]代表有无乘除法 printf("请输入数值范围:"); scanf("%d",&ph[3]); for(i=0; i<ph[0]; i++) { num1 = rand()%(ph[3]+1); num2 = rand()%(ph[3]+1); switch(ph[2]) { case 0: //如果没有乘除法 Pway = rand()%2; //构造随机函数,输出只有加减法的运算 if(Pway == 0) //加法 { printf("<%d>%d+%d= ",i+1,num1,num2); if((i+1)%ph[1] == 0) { printf(" "); } } else { printf("<%d>%d-%d= ",i+1,num1,num2); if((i+1)%ph[1] == 0) //判断是否换行 { printf(" "); } } break; case 1: //有乘除法的输出 Pway = rand()%4; switch(Pway) { case 0: //加法 printf("<%d>%d+%d= ",i+1,num1,num2); if((i+1)%ph[1] == 0) { printf(" "); } break; case 1: if(ph[4] == 0) { if(num1<num2) //确定被减数大于减数,其他的控制如上述减法的控制 { i = i-1; } else { printf("<%d>%d-%d= ",i+1,num1,num2); if((i+1)%ph[1] == 0) { printf(" "); } } } else { printf("<%d>%d-%d= ",i+1,num1,num2); if((i+1)%ph[1] == 0) { printf(" "); } } break; case 2: //乘法 printf("<%d>%d×%d= ",i+1,num1,num2); if((i+1)%ph[1] == 0) { printf(" "); } break; case 3: //除法 if(num2 == 0) //除数不能为零 { i = i - 1; } else { printf("<%d>%d÷%d= ",i+1,num1,num2); if((i+1)%ph[1] == 0) { printf(" "); } } break; default: printf("出错! "); break; } break; default: printf("出错! "); break; } } return 0; }
三、测试数据及结果截图
1.测试数据:1,2,0,10,即题目数量1,打印方式是2列,没有乘除法,数值范围是10以内的非负数。
2.测试数据:30,4,0,20,即题目数量30,打印方式是4列,没有乘除法,数值范围是20以内的非负数。
3.测试数据:30,5,1,40,即题目数量30,打印方式是5列,有乘除法,数值范围是40以内的非负数。
四、说明
在本程序的测试结果中,并没有出现错误,对于边缘数据的输入如上图片所示。但代码对于处理异常的功能并没有实现,
比如说当输入的不是数字而是字符时,所以在这方面并没有做相应的测试。