四则运算

/*
**file: .c
**by: 李炫宗
**time: 2015.03.27
**function: 小学生四则运算考试模拟系统
**华南师范大学增城学院
*/

#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题\n",TOTAL - total + 1);
printf("输入数字后请用回车确认\n");
printf("结果保留整数\n");
printf("%d%c%d=\n",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("\r \r");
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("小学生四则运算考试模拟系统\n");
printf(" | \n");
printf(" | \n");
printf(" 1.开始 | 2.查看分数 \n");
printf(" | \n");
printf("------------+-------------\n");
printf(" | \n");
printf(" 3.退出 | \n");
printf(" | \n");
printf(" | \n");
printf("请选择(输入数字):\n");
return 1;
}

int see_grade(){
system("cls");
printf("天才的%s\n",user_name);
printf("您的上一次答题情况\n");
printf("答对题数%d\n",yes);
printf("得分为:%d分\n",yes * 100 / TOTAL);//百分制
printf("满分为100分\n");
printf("按任意键返回\n");
writeFile();
while(!kbhit());
fflush(stdin);
return 1;
}

int copyRight(){
system("cls");
printf("本软件天才嗟启凵编写\n");
printf("感谢您的使用!\n");
return 0;
}

int getName(){
printf("欢迎您使用小学生四则运算考试模拟系统\n");
printf("请输入您的姓名:\n");
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,"\n您的成绩如下\n您共作对");
itoa(yes,num,10);
strcat(ch,num);
strcat(ch,"道题\n您的得分为");
itoa(yes * 100 / TOTAL , num, 10);
strcat(ch,num);
strcat(ch,"分\n满分为100分\n");
fputs(ch,write);
fclose(write);
return 1;
}

原文地址:https://www.cnblogs.com/lixuanzong/p/4368184.html