20道简单加减法随机生成程序扩展版体会
看了别人的博客感觉自己还是不够认真,认识到了他们的努力,这个平台应该是记录自己成长的地方,总结自己的失败与错误,得到正确结果中间的过程才是重要的,这中间让我学到了很多之前只听课体会不到的东西。
这次的作业题目是在之前的程序上添加一些功能,回来尝试了一番,感觉之前写的函数有些简单了扩展起来需要改写很多东西,基本上等于重新编程另外一个程序,感觉到了自己的不足。然后看了别人的程序,添加功能很方便,然后尝试改写自己的函数。这次代码加入了一部分简单的要求,加入括号的需要在研究一下。。乘除法按照之前的flag随机取值可以加入,数值范围通过:1.减法和除法使被减数(被除数)与减数(除数)互换;2.乘法是把结果大于500的乘法算式中乘数大于20的除以5,把结果控制到500以内更加贴近小学题目。
除法这个要求得出小数点并保留,把之前的int类型改成了float类型,并在输出位置保留2位小数,运行之后显示的很好,也没看出问题来。突然想到了输入的问题,试着输入一个正确结果,程序就死机了。。
case 4: { if(a<b) { t=a; a=b; b=t; } printf("%d %.0f/%.0f= \n",n,a,b); x[n]=a/b;/*这里有错误!*/ n++; }break; } } printf("输入结果!\n"); for(n=0;n<30;n++) { printf("%d, %.2f ",n,x[n]); } printf("\n"); for(n=0;n<30;n++) { scanf("%.2f",&y[n]);
问题出在电脑做运算的时候没有保留,在网上百度了一下做出修改后的程序代码
// 1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "stdlib.h" #include "time.h" #define N 30 int *func() { static float x[N],y[N]; int n=0,flag,t; float a,b; srand((unsigned)time(NULL)); while(n<N) { a=rand()%99+1; b=rand()%99+1; flag=rand()%4+1; switch(flag){ case 1: { printf("%d %.0f+%.0f= ",n,a,b); x[n]=a+b; printf("%.0f\n",x[n]); n++; }break; case 2: { if(a<b) { t=a; a=b; b=t; } printf("%d %.0f-%.0f= ",n,a,b); x[n]=a-b; printf("%.0f\n",x[n]); n++; }break; case 3: { if(a*b>=500) { if(a>20) { a=a/5; } if(b>20) { b=b/5; } } else { printf("%d %.0f*%.0f= ",n,a,b); x[n]=float(a*b*1)/1; printf("%.0f\n",x[n]); n++; } }break; case 4: { if(a<b) { t=a; a=b; b=t; } printf("%d %.0f/%.0f= ",n,a,b); x[n]=float((int)(a/b*100))/100;/*这里改正之后*/ printf("%.2f\n",x[n]); n++; }break; } } printf("输入结果!\n"); for(n=0;n<N;n++) { scanf("%f",&y[n]); if(y[n]==x[n]) { printf("正确!\n"); } else { printf("错误!正确结果为%.2f\n",x[n]); } } return 0; } int main(int argc, char* argv[]) { func(); return 0; }
剩下最难改的加括号的多项算式,准备用C++改一下,然后学一下界面。