20194605-自动生成四则运算题第一版报告

一、需求分析

因为使用程序来出题可以为用户带来很大的便捷,使老师在给同学出题时更加方便、快捷、简单。

二、功能设计

基本功能:

自动生成10道100以内的2个操作数的四则运算算式(+ - *  /),要求运算结果也在100以内。

扩展功能:

    -(1)剔除重复算式。2 + 3 =    和2 + 3 =     是重复算式 2 + 3 =   和3 + 2 =  不属于重复算式
    -(2)题目数量可定制
    -(3)以下相关参数可控制
         是否包含乘法和除法
        操作数数值范围可控(如操作数 在100以内   还是1000以内)
        操作数是否含负数    
    -(4)生成的运算题存储到外部文件result.txt中

三、设计实现

我仅使用了主函数来控制整体程序的运行,通过使用循环语句、判断语句,来使自动生成的随机数进行运算以及判断条件是否成立。

四、测试运行

五、代码片段

-1.题目数量可定制;且判断定制数目是否超过10,超过规定范围显示输入错误。

            printf("请输入你要定制的题目数量(最大数量为10):"); 
	        scanf("%d",&d); 
		    if(d>10){	//判断输入是否超额 
                        printf("输入错误\n");
                        return 0;
                        }

-2.进行是否可以出现包含正负号的随机数

    for(i=0;i<d;i++){
		if(zf==1){
			a[i]=rand()%(2*max+1)-100;
			b[i]=rand()%(2*max+1)-100;
		}	
		else{
			a[i]=rand()%max; 
			b[i]=rand()%max;
		}
            f[i]=rand()%4;
            erze[i]=rand()%2;

-3.四则运算输出代码

            switch(f[i]){
			case 0:c[i]=a[i]+b[i];
				if(c[i]<max){
					fprintf(fp,"%d+%d=%d\n",a[i],b[i],c[i]);break;}
			case 1:c[i]=a[i]-b[i];
				if(c[i]<max){
					fprintf(fp,"%d-%d=%d\n",a[i],b[i],c[i]);break;}
				 
			case 2:c[i]=a[i]*b[i];
				if(c[i]<max){
					fprintf(fp,"%d*%d=%d\n",a[i],b[i],c[i]);break;}
				
			case 3:c[i]=a[i]/b[i];
				if(c[i]<max){
				fprintf(fp,"%d/%d=%d\n",a[i],b[i],c[i]);break;}
							
		}

-4.将输出数据导入文本中

            FILE *fp;
            fp=fopen("result.txt","w");

-5.剔除重复模式

        for(j=0;j<i;j++){//剔除重复算式 
		if(a[i]==a[j]&&b[i]==b[j]&&(f[i]==f[j]||erze[i]==erze[j])){
		return 0; 
            }

六、总结

在完成的过程中,我总是看一个要求完成一项功能,没有事先将整体构思好,以至于后期改动整个程序完成相关功能的时候很麻烦。此次程序意识到了自己的问题,下次我会努力改进。

七、撰写PSP

||||
|:--|:--|:--|:--|
|PSP2.1|任务内容|计划共完成需要的时间(min)|实际完成需要的时间(min)|
|Planning|计划|170|300|
|Estimate|估计这个任务需要多少时间,并规划大致工作步骤|10|10|
|Development|开发|60|100|
| Analysis| 需求分析 (包括学习新技术)|5|5|
| Design|具体设计|15|20|
|Coding|具体编码|60|120|
|Test|测试(自我测试,修改代码,提交修改)|10|10|
|reporting|报告|10|20|

posted @ 2019-09-11 21:21  孙毓惟  阅读(179)  评论(1)    收藏  举报