zoukankan      html  css  js  c++  java
  • 20150401 作业2 结对 四则运算

    一、从第一次作业出发,将程序改装成一个单机带用户界面(不是控制台)的程序,这个程序最基本要达到:

    • 生成题目,单个题目最多不能超过4个运算符,操作数小于100。
    • 用户可以输入答案
    • 若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少。

    二、

    八个可扩展方向: 

    1. 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.67而非2.66,或保持分数形式:8/3
    2. 可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
    3. 用户答题结束以后,程序可以显示用户答题所用的时间
    4. 用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
    5. 用户在第一次答题时,需要用户输入用户名,用户下次启动后,程序需要记住用户前一次输入的用户名 
    6. 程序可以出单个整数阶乘的题目:如:4!=24
    7. 程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题。
    8. 程序可以设置皮肤功能,可以改变界面的颜色即可。

    实际用时:4天

    优点:进入系统需要输入用户姓名,随机生成算术题,自动验证答案是否正确,输出成绩,文档外输出成绩TXT。

    缺点:只能运用一种运算法则,不能混合运算。

    源程序:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <conio.h>
    #include <string.h>
    
    #define TIME_OUT 60000 //定义时间毫秒
    #define TOTAL 20       //总题数
    
    int total;//题目总数
    int yes = 0;//答对题数
    int start;//开始时间
    int stop;//结束时间
    int answer;//答案
    int user_answer;//用户答案寄存
    char user_name[20];//用户姓名
    
    int init();
    int main_body();//
    int print_math();//输出问题
    int do_question();//回答问题
    int random(int x);//返回0-x之间的随机数
    int see_grade();//查看成绩
    int copyRight();
    int getName();
    int writeEile();
    
    int main(){
        srand(clock());//随机函数初始化
        getName();
        while(1){
            int i;
            init();
            i = getch();
            fflush(stdin);//清除缓冲区
            if(i == '1') {
                yes = 0;
                main_body();see_grade();
            }
            else if(i == '2') see_grade();
            else if(i == '3') break;
        }
        copyRight();
        system("pause");
        return 0;
    }
    
    int main_body(){
        total = TOTAL;
        yes = 0;
        print_math();
        while(total >= 0 ){
            stop = clock();//获取当前时间
            if(total == 0){     //给最后一题等待时间
                if(do_question() || stop - start > TIME_OUT ) total--;
            }else if(stop - start > TIME_OUT) print_math();//如果时间超过,就输出下一题
            else if(do_question()) print_math();
        }
        return 1;
    }
    
    int print_math(){
        
        char c[] = {'+','-','*','/'};
        char *pc;
        int x;
        int y;
        int r;
    
        x = random(100);
        y = random(100);
        r = random(4);
        start = clock();//时间初始化
        user_answer = 0;//用户答案初始化
        pc = c;
        pc += r;
        switch(r){
        case 0:
            answer = x + y;
            if(answer > 100){
                x = x % 50;
                y = y % 50;
                answer = x + y;
            }
            break;
        case 1:
            answer = x - y;
            break;
        case 2:
            x = x % 10;
            answer = x * y;
            if(answer >100 ){
                y = y % 10;
                answer = x * y;
            }
            break;
        case 3:
            if(y == 0) y++;
            answer = x / y;
            x = answer * y;
            break;
        }
        system("cls");
        printf("第%d题
    ",TOTAL - total + 1);
        printf("输入数字后请用回车确认
    ");
        printf("结果保留整数
    ");
        printf("%d%c%d=
    ",x,*pc,y);
        total--;
        return 1;
    }
    
    int do_question(){
        if(kbhit()){
            int ch;
            ch = getch();
            putch(ch);
            if(ch >= '0' && ch <= '9') {
                user_answer = user_answer * 10 + ch - '0';
                return 0;
            }else if( ch == 13){
                if(user_answer == answer) yes++;//验证答案 
                return 1;
            }else if(ch == 45){
                answer = -answer;
            }else if(ch == 8){
                user_answer = 0;
                printf("
               
    ");
                return 0;
            }else {
                getchar();//丢弃其他字符
                return 0;
            }
        }
        return 0;
    }
    int random(int x){
        int i;
        i = rand();
        return (int)((float) i / RAND_MAX * x);
    }
    int init(){
        system("cls");
        printf("  学生四则运算考试模拟系统
    ");
        printf("            |             
    ");
        printf("            |             
    ");
        printf("   1.开始   |  2.查看分数 
    ");
        printf("            |             
    ");
        printf("------------+-------------
    ");
        printf("            |             
    ");
        printf("   3.退出   |             
    ");
        printf("            |             
    ");
        printf("            |             
    ");
        printf("请选择(输入数字):
    ");
        return 1;
    }
    
    int see_grade(){
        system("cls");
        printf("尊敬的%s
    ",user_name);
        printf("您的上一次答题情况
    ");
        printf("答对题数%d
    ",yes);
        printf("得分为:%d分
    ",yes * 100 / TOTAL);//百分制
        printf("满分为100分
    ");
        printf("按任意键返回
    ");
        writeFile();
        while(!kbhit());
        fflush(stdin);
        return 1;
    }
    
    int copyRight(){
        system("cls");
        printf("感谢您的使用!
    ");
        return 0;
    }
    
    int getName(){
        printf("欢迎您使用学生四则运算考试模拟系统
    ");
        printf("请输入您的姓名:
    ");
        scanf("%s",user_name);
        fflush(stdin);
        return 1;
    }
    
    int writeFile(){
        char ch[100];
        char num[10];
        FILE * write;
        write = fopen("data.txt","w");
        if(write == NULL){
            perror("data.txt");
            return 0;
        }
        strcpy(ch,user_name);
        strcat(ch,"
    您的成绩如下
    您共作对");
        itoa(yes,num,10);
        strcat(ch,num);
        strcat(ch,"道题
    您的得分为");
        itoa(yes * 100 / TOTAL , num, 10);
        strcat(ch,num);
        strcat(ch,"分
    满分为100分
    ");
        fputs(ch,write);
        fclose(write);
        return 1;
    }


    进入系统需要输入姓名:

    开始界面(菜单)

    按“1”后开始答题

    答题后输出结果

    退出时,界面

    导出成绩txt方便查看

    伙伴链接:http://www.cnblogs.com/Roc201306114311Roc/

  • 相关阅读:
    Redux API之compose
    Redux API之bindActionCreators
    Django组件-admin
    Django组件-分页器
    Django视图之FBV与CBV
    前端综合练习
    05-前端之jQuery
    关于DOM操作的案例
    04-再探JavaScript
    03-初识JavaScript
  • 原文地址:https://www.cnblogs.com/bobbywei/p/4409729.html
Copyright © 2011-2022 走看看