哪位C语言,计算机大神帮忙讲下这个题啊,感激不尽!!真的是不会做啊!!!设计程序帮助小学生练习数学

C语言程序设计题目 (算式必须是整除,不能有小数点)
正文设计一个程序帮助小学生练习数学。
a) 程序首先让使用者输入ID号(包含两个字母和四个数字),例如:
Please input your four digit ID no: AB1234
程序应该有输入验证功能。ID正确输入完毕后,程序提示两个选项:
(1) Start a test
(2) Check score
(3) Exit
b) Test: 程序给出10个数学题目,例如:
12 * 3 = 36
48 + 32 = 80

56 / 28 = 2
注意:
i) 学生需要在下一道题给出前,回答当前问题。
ii) 数学题应包含加、减、乘、除运算,每题的运算类型随机产生。
iii) 每个题目的操作数随机生成,操作数的值不能超过100,除数不能为0。
iv) 在屏幕上输出下列信息:
Prob. | Correct Answ. | Ur(用户) Answ
v) 将学生ID和成绩记录在文本文件“score.txt”中
c) Check score:通过学生ID在“score.txt”文件中,查询历史成绩,并显示。
d) Exit:退出程序。

一开始是输入字符串(包括验证正确性,不正确重新输入)之后就switch case语句,让用户选择1,2,3.
选1就产生开始随机数,范围在0~100。先随机产生两个数,再随机产生一个运算符(+,-,*,/这个可以是用产生一个整数,模4的方式得到是进行什么运算)。如果是加、减、乘时直接拿来用。比如以加法为例,产生的数a,b放在数组里,用一个变量c保存结果,c=a+b,然后scanf,让用户输入,输入的值和c比较,看对不对。如果是除法要先判断1.除数是否为0,2能否整除,如果不满足条件重新生成随机数。如此循环10次,每次循环结束给出当前题目答案。
选2就是文件读取相关,用文件操作读取即可,随便说下之前生成出的题目都需要写入文件score.txt

选3的话直接exit(0)退出即可追问

谢谢,我不会写,你别打我

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-12-11
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

int* readFile(int a[],const char* ID){
    char path[]="score.txt";
    int j=0;
    bool flag=false;
    FILE* f=fopen(path,"rt");
    if(f==NULL){
        printf("读取文件错误\n");
        exit(0);
    }
    char line[100];
    while(!feof(f)){
        fgets(line,sizeof(line)-1,f);
        if(strstr(line,ID)){
            char *r=line+strlen(ID)+1;
            int score=atoi(r);
            a[j++]=score;
            flag=true;
        }
    }
    fclose(f);
    if(flag)
        return a;
    else{
        printf("没有找到该用户或读取文件出错");
        exit(0);
    }
        
}

int test(){
    char fuhao[]="+*-/";
    int a,b,c;
    srand(time(NULL));
    int i=rand()%4;
    a=rand()%100;
    if(i==3){    
        b=rand()%10+1;
        c=a*b;
        printf("%d/%d=",c,a);
        return b;
    }else if(i==2){
        b=rand()%100;
        int max=a>b?a:b;
        int min=a>b?b:a;
        printf("%d-%d=",max,min);
        return max-min;
    }else{
        b=rand()%100;
        printf("%d%c%d=",a,fuhao[i],b);
        if(fuhao[i]=='+')
            return a+b;
        else
            return a*b;
    }
}

void writeFile(const char *id,int score){
    FILE* f=fopen("score.txt","a+");
    if(f==NULL){
        printf("文件打开失败\n");
        exit(0);
    }
    char line[100];
    memset(line,0,100);
    sprintf(line,"%s %d\r\n",id,score);
    fwrite(line,1,strlen(line),f);
    fclose(f);
}

int main()
{
    char ID[10];
    int select,scores[100];
    printf("Please input your four digit ID no: ");
    scanf("%s",&ID);
    memset(scores,-1,100);
    readFile(scores,ID);
    while(1){
        printf("(1) Start a test\n(2) Check score\n(3) Exit\n请输入:");
        scanf("%d",&select);
        if(select==1){
            int count=0;
            for(int i=0;i<10;i++){
                int right=test();
                int ui;
                scanf("%d",&ui);
                printf("%d | %d | %d \n",i+1,right,ui);
                if(right==ui){
                    count++;
                }
            }
            printf("\n\n答对%d,得分%d\n\n",count,count*10);
            writeFile(ID,count*10);
        }else if(select==2){
            int i=-1;
            while(scores[++i]!=-1){
                printf("%d ",scores[i]);
                
            }
            printf("\n");
        }else{
            break;
            exit(0);
        }
    }
    
}

本回答被网友采纳
第2个回答  2014-06-25
必须用C? 命令行程序行吗? C++ MFC可以吗?追问

要用c啊

追答

你让小学生玩命令行?呆掉了吧 这个时代写个图形界面不是很难吧。

追问

我们老师布置的作业,C语言学渣,学的不是很好,而且已经好久没接触完全不会了

相似回答