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

代码:

#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语句来判断时,如果输入整型,无论结果是否对都会提示对了

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

时间: 2024-10-01 03:34:21

实验一 小学四则运算修改版的相关文章

四则运算修改版

public class TEST { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub YUNSUAN a=new YUNSUAN(); a.abc(); } } import java.util.*;import java.math.*;import java.util.Scanner; public class YUNSUAN { public v

题目一小学四则运算

a.需求分析 从<构建之法>第一章的 "程序" 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 "软件",满足以下需求: 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24 运算符为 +, ?, ×, ÷ 并且要求能处理用户的输入,并判断对错,打分统计正确率. 要求能处理用户输入的真分数, 如 1/2, 5/12 等 使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目M

个人作业1:小学四则运算——基于控制台

源代码地址:http://git.oschina.net/junge212/25eubiqm170p3nzgj4yrh36.code.git a.需求分析: 自动生成小学四则运算题目的命令行 "软件",满足以下需求: 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24 运算符为 +, ?, ×, ÷ 并且要求能处理用户的输入,并判断对错,打分统计正确率. 要求能处理用户输入的真分数, 如 1/2, 5/12 等 使用 -n 参数控制生成题目的个

201571030335/201571030320《小学四则运算练习软件》结对项目报告

源码链接地址:  https://github.com/woaichimangguo(我的201571030335) https://github.com/mashifang(小伙伴的201571030320) 一. 需求分析: (1)由计算机从题库文件中随机选择20道加减乘除混合算式,用户输入算式答案,程序检查答案是否正确,每道题正确计5分,错误不计分,20道题测试结束后给出测试总分. (2)题库文件可采用实验二的方式自动生成,也可以手工编辑生成,文本格式如下: (3)程序为用户提供三种进阶四

201571030121《小学四则运算练习软件软件需求说明》结对项目报告

201571030107/201571030121<小学四则运算练习软件软件需求说明>结对项目报告 结对小伙伴:冯晓(201571030107) 任务一 首先,我们进行了实例体验,把我们已经上线的<小学生四则运算网站>链接发给我们调研的人,在他们体验过我们的程序后在填写需求分析调查问卷,这样可以更好的得到一个反馈,让我们的需求分析更加清楚. 网站链接:http://123.56.24.117:8080/ 其次,我们主要采取了精准的问卷调查方式来进行需求分析,调查的主要对象为老师和有

201571030122/201571030129《小学四则运算练习软件软件需求说明》结对项目报告

<小学四则运算练习软件>博文链接:http://www.cnblogs.com/mzll/p/8709480.html GitHub的链接地址:https://github.com/13993013291/Shiyan3.git 任务一:        以实验二个人项目.实验三结对项目所开发的小学生四则运算练习软件作为原型,实施小学生四则运算练习软件用户调研活动. 1.调研对象:老师,学生以及家长: 2.调研方法:主要是问卷调查,其次通过即时通讯工具访谈了下当老师的同学: 3.问卷样本链接:h

java实现自动生成小学四则运算——朱庭震,詹祺豪

组员:朱庭震,詹祺豪 Github地址:https://github.com/ztz1998/second/tree/master 1题目:实现一个自动生成小学四则运算题目的命令行程序. 2说明: 自然数:0, 1, 2, -. 真分数:1/2, 1/3, 2/3, 1/4, 1'1/2, -. 运算符:+, ?, ×, ÷. 括号:(, ). 等号:=. 分隔符:空格(用于四则运算符和等号前后). 算术表达式:e = n | e1 + e2 | e1 ? e2 | e1 × e2 | e1 ÷

小学四则运算APP 第一个冲刺阶段 第六天

团队成员:陈淑筠.杨家安.陈曦 团队选题:小学四则运算APP 第一次冲刺阶段时间:11.17~11.27 本次发布的是重新排列整齐ResultActivity的布局代码activity_result.xml 代码如下: activity_result.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.and

小学四则运算APP 第一个冲刺阶段 第五天

团队成员:陈淑筠.杨家安.陈曦 团队选题:小学四则运算APP 第一次冲刺阶段时间:11.17~11.27 本次发布的是实现练习功能的成功 代码: public class CalculatorActivity extends Activity { private final Random num1=new Random(); private final Random num2=new Random(); private final Random r = new Random(); private