首页 > 其他 > 详细

实验一 小学四则运算修改版

时间:2015-03-31 19:45:43      阅读:146      评论:0      收藏:0      [点我收藏+]

代码:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int n;//记录输入的题目个数
int a,b,c,da;//a,b分别代表第一,第二操作数,c代表得数,da代表输入的答案
int fenzi,fenmu;//fenzi是分子,fenmu是分母
//int score=0;
//进行加法运算
void jia()
{
    int i;
    printf("\t\t\n欢迎使用,以下是加法运算\n\n\n");
    printf("请输入题目数:");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        a=rand()%100;
        b=rand()%100;
        c=a+b;
        printf("%d+%d=?\n",a,b);
        printf("请输入你的答案:");
        scanf("%d",&da);
         if(da==c)                             //判断答案是否正确
            printf("\n恭喜你,答对了!\n");
        else
        {
            printf("\n抱歉,你答错了!你还有一次机会\n");
            printf("%d+%d=?\n",a,b);
            printf("请输入你的答案:");
            scanf("%d",&da);
            if(da==c)
                printf("\n恭喜你,答对了!\n");
            else  printf("\n抱歉,你又答错了\n");
        }
    }
}
//进行减法运算
void jian()
{
    int i,temp;//temp是中间变量
    printf("\t\t\n欢迎使用,以下是减法运算\n\n\n");
    printf("请输入题目数:");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        a=rand()%100;
        b=rand()%100;
        if(a<b)//保证得出的数不是负数
        {
            temp=a;
            a=b;
            b=temp;
        }
        c=a-b;
        printf("%d-%d=?\n",a,b);
        printf("请输入你的答案:");
        scanf("%d",&da);
        if(da==c)
            printf("\n恭喜你,答对了!\n");
        else
        {
            printf("\n抱歉,你答错了,你还有一次机会\n");
            printf("%d-%d=?\n",a,b);
            printf("请输入你的答案:");
            scanf("%d",&da);
            if(da==c)
                printf("\n恭喜你,答对了!\n");
            else  printf("\n抱歉,你又答错了\n");

        }
    }
}
//进行乘法运算
void chen()
{
    int i;
    printf("\t\t\n欢迎使用,以下是乘法题\n\n");
    printf("\n请输入题目数:");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        a=rand()%100;
        b=rand()%100;
        c=a*b;
        printf("%d*%d=?\n",a,b);
        printf("请输入答案:");
        scanf("%d",&da);
        if(da==c)
            printf("\n恭喜你,答对了!\n");
        else
        {
            printf("\n抱歉,你答错了,你还有一次机会!\n");
            printf("%d*%d=?\n",a,b);
            printf("请输入答案:");
            scanf("%d",&da);
            if(da==c)
                printf("\n恭喜你,答对了!\n");
            else  printf("\n抱歉,又答错了!\n");
        }
    }
}
//进行除法运算
void chu()
{
    int i;
    char dn;//用以保存除法运算符
    float an;//用以保存除法运算得出的答案
    printf("\t\t\n欢迎使用,以下是除法题\n\n");
    printf("请输入题数:");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        a=rand()%100;
        b=rand()%99+1;//使得随机出现的数不会有0,保证了除数不会出现0情况,即不会出现无意义的情况
        c=a/b;
        if(a%b==0)  //判断数能否除尽,若a对b求余为0,则说明除得尽,以整数形式输入,否则则为除不尽,提示以分数输入
        {
               printf("%d/%d=?\n",a,b);
               printf("\n请输入你的答案:");
               scanf("%f",&an);
            if(an==c) 
                printf("恭喜你,答对了!\n");
             else
            {
                   printf("抱歉,你答错了,你还有一次机会!\n");
                   printf("%d/%d=?\n",a,b);
                   printf("\n请输入你的答案:");
                   scanf("%f",&an);
                   if(an==c)  printf("恭喜你,答对了!\n");
                   else  printf("抱歉,你又答错了!\n");
            }
        }
        else
        {
            //dn=‘/‘;//dn保存除法运算符
            printf("%d/%d=?\n",a,b);
            printf("\n请输入你的答案(请以分数形式输入)\n");
            printf("\n请输入分子:");
            scanf("%d",&fenzi);
            printf("请输入分母:");
            scanf("%d",&fenmu);
            if(fenzi/fenmu==a/b)  
                printf("恭喜你,答对了!\n");
             
            else
                printf("抱歉,你答错了!\n");
        }
    }
}
int selectmenu()
{
    int choice;
    do
    {
    printf("\t1:加法运算\n");
    printf("\t2:减法运算\n");
    printf("\t3:乘法运算\n");
    printf("\t4:除法运算\n");
    printf("\t5:谢谢使用\n");
    printf("请选择(1-5):");
    scanf("%d",&choice);
    while(choice!=1&&choice!=2&&choice!=3&&choice!=4&&choice!=5)
    {
        printf("不存在该选项,请重新选择(1-5):");
        fflush(stdin);        //清空输入缓存区,否则字符会一直留在缓存区,使程序进入一个死循环
        scanf("%d",&choice);
    }
    }while((choice<0)||(choice>6));
    return choice;
}
void main()
{

    int choice;
    srand((unsigned)time(NULL));//随机产生0-99之间的随机数
    while(1)
    {
        switch(choice)
        {
        case 1:
            jia();                            
            break;
        case 2:
            jian();                                 
            break;
        case 3:
            chen();                             
            break;
        case 4:
            chu();
            break;
        case 5:    
            printf("谢谢使用");
            exit(0);

        }
        choice=selectmenu();
    }
}

 

总结:

1、解决了在菜单选择中如果输入的是字符的时候会提示出错,用的是fflush()函数,由于要清除的是存在缓冲区内的字符,因此用fflush(stdin),

stdin就是标准输入,一般就是指键盘输入到缓冲区里的东西,scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:

① 遇空格、“回车”、“跳格”键;

② 遇宽度结束;

③ 遇非法输入;

scanf()函数应该只是扫描stdin流,这个残存信息是在stdin中 解决就要在scanf()函数之后加个fflush(stdin)。

2、解决了上一回没有解决的问题:当出现结果除不尽的情况时,用户输入的数没有以分数形式输入时,不知如何设置提示输入错误,尝试用while语句来判断时,如果输入整型,无论结果是否对都会提示对了

解决办法:将分数分开来输入,依次提示输入分子与分母。

实验一 小学四则运算修改版

原文:http://www.cnblogs.com/LHYwin/p/4381603.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!