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++改一下,然后学一下界面。

 

posted @ 2016-03-12 12:01  suisx  阅读(737)  评论(3编辑  收藏  举报