这次老师又要对四则运算题目提出了新的要求,要求用户能够输入答案并判断对错,这已经是一个小型的答题系统了,而且是结对开发。
一 功能要求:
1、乘除可控
2、随机添加括号
3、输入结果判断正误
4、统计正确数量
5、正负,余数可控
6、去除连除误区
二 设计思路
判断对错就是将用户输入的数和正确的值相比较,正确输出√,错误输出×;
统计个数就是设置两个全局变量,让它去统计对错的个数。
至于其他的要求同以前编写的四则运算相同方法。
三 代码
//石家庄铁道大学 //2016.3.18 #include "stdio.h" #include "stdlib.h" #include "time.h" int correct = 0;//声明全局变量correct int wrong = 0;//声明全局变量wrong int Add(int num1, int num2) { int uresult, cresult; scanf_s("%d", &uresult); cresult = num1 + num2; if (cresult == uresult) { printf(" √"); correct++; } else { printf(" ×"); wrong++; } return 0; } int Sub(int num1, int num2) { int uresult, cresult; scanf_s("%d", &uresult); cresult = num1 - num2; if (cresult == uresult) { printf(" √"); correct++; } else { printf(" ×"); wrong++; } return 0; } int Mult(int num1, int num2) { int uresult, cresult; scanf_s("%d", &uresult); cresult = num1*num2; if (cresult == uresult) { printf(" √"); correct++; } else { printf(" ×"); wrong++; } return 0; } int Divi(int num1, int num2) { double uresult, cresult; scanf_s("%g", &uresult); cresult = num1 / num2; //取整 if (cresult == uresult) { printf(" √"); correct++; } else { printf(" ×"); wrong++; } return 0; } int SetQuestion(int cheng, int number, int line, int plural, int scope, int konghang) { int num1, num2, oper, i; srand(time(NULL)); //i为循环次数 printf("我们提供一下功能: "); printf(" 1.题目的数值范围(暂不支持小数) "); printf(" 2.题目的数量 "); printf(" 3.打印时每行题的数量 "); printf(" 4.答案中会不会出现负数的结果 "); printf(" 5.题目中是否会出现乘除运算 "); printf(" 6.打印时每行的间隔 "); printf("请输入数值范围:"); scanf_s("%d", &scope); printf("请选择出题数量:"); scanf_s("%d", &number); //oper为题目数量 printf("请输入每行题的数量:"); scanf_s("%d", &line); //line为每行题的数量 printf("答案是否有负数(1为有,0为没有):"); scanf_s("%d", &plural); //plural是否是负数 while (plural != 0 && plural != 1) //判断用户是否按要求输入 { printf("sorry!输入错误,请按要求输入:"); scanf_s("%d", &plural); } printf("是否有乘除运算(1为有,0为没有):"); scanf_s("%d", &cheng); while (cheng != 0 && cheng != 1) //判断用户是否按要求输入 { printf("sorry!输入错误,请按要求输入:"); scanf_s("%d", &cheng); } printf("中间有几个空行:"); scanf_s("%d", &konghang); if (cheng == 1) { if (plural == 0) { for (i = 1; i <= number; i++) { num1 = rand() % scope; num2 = rand() % scope; oper = rand() % 4; printf("(%d)", i); switch (oper) { case 0: printf("%d+%d= ", num1, num2); break; case 1: if (num1 >= num2) printf("%d-%d= ", num1, num2); else printf("%d-%d= ", num2, num1); break; case 2: printf("%d*%d= ", num1, num2); break; case 3: if (num2 == 0) printf("%d/%d= ", num2, num1); else printf("%d/%d= ", num1, num2); break; default: { printf("出错啦~~~"); } } if (i%line == 0) { for (int p = 1; p <= konghang; p++) { printf(" "); } } } } else { for (i = 1; i <= number; i++) { num1 = rand() % scope; num2 = rand() % scope; oper = rand() % 4; printf("(%d)", i); switch (oper) { case 0: printf("%d+%d= ", num1, num2); break; case 1: printf("%d-%d= ", num1, num2); break; case 2: printf("%d*%d= ", num1, num2); break; case 3: if (num2 == 0) printf("%d/%d= ", num2, num1); else printf("%d/%d= ", num1, num2); break; default: { printf("出错啦~~~"); } } if (i%line == 0) { for (int p = 1; p <= konghang; p++) { printf(" "); } } } } } else { if (plural == 0) { for (i = 1; i <= number; i++) { num1 = rand() % scope; num2 = rand() % scope; oper = rand() % 2; printf("(%d)", i); switch (oper) { case 0: printf("%d+%d= ", num1, num2); break; case 1: if (num1 >= num2) printf("%d-%d= ", num1, num2); else printf("%d-%d= ", num2, num1); break; default: { printf("出错啦~~~"); } } if (i%line == 0) { for (int p = 1; p <= konghang; p++) { printf(" "); } } } } else { for (i = 1; i <= number; i++) { num1 = rand() % scope; num2 = rand() % scope; oper = rand() % 2; printf("(%d)", i); switch (oper) { case 0: printf("%d+%d= ", num1, num2); break; case 1: printf("%d-%d= ", num1, num2); break; default: { printf("出错啦~~~"); } } if (i%line == 0) { for (int p = 1; p <= konghang; p++) { printf(" "); } } } } } printf(" "); return 0; } int AnswerQuestion(int cheng, int number, int line, int plural, int scope, int konghang) { int num1, num2, oper, i; srand(time(NULL)); //a,b为运算数,c为选择哪个运算符,i为循环次数 printf("我们提供一下功能: "); printf(" 1.题目的数值范围(暂不支持小数) "); printf(" 2.题目的数量 "); printf(" 3.答案中会不会出现负数的结果 "); printf(" 4.题目中是否会出现乘除运算 "); printf(" 5.打印时每行的间隔 "); printf("请输入数值范围:"); scanf_s("%d", &scope); printf("请选择出题数量:"); scanf_s("%d", &number); printf("答案是否有负数(1为有,0为没有):"); scanf_s("%d", &plural); //plural是否是负数 while (plural != 0 && plural != 1) //判断用户是否按要求输入 { printf("sorry!输入错误,请按要求输入:"); scanf_s("%d", &plural); } printf("是否有乘除运算(1为有,0为没有):"); scanf_s("%d", &cheng); while (cheng != 0 && cheng != 1) //判断用户是否按要求输入 { printf("sorry!输入错误,请按要求输入:"); scanf_s("%d", &cheng); } printf("中间有几个空行:"); scanf_s("%d", &konghang); if (cheng == 1) { if (plural == 0) { for (i = 1; i <= number; i++) { num1 = rand() % scope; num2 = rand() % scope; oper = rand() % 4; printf("(%d)", i); switch (oper) { case 0: printf("%d+%d=", num1, num2); Add(num1, num2); break; case 1: if (num1 >= num2) { printf("%d-%d=", num1, num2); Sub(num1, num2); } else { printf("%d-%d=", num2, num1); Sub(num2, num1); } break; case 2: printf("%d*%d=", num1, num2); Mult(num1, num2); break; case 3: if (num2 == 0) { printf("%d/%d=", num2, num1); Divi(num2, num1); } else { printf("%d/%d=", num1, num2); Divi(num1, num2); } break; default: { printf("出错啦~~~"); } } for (int p = 1; p <= konghang; p++) { printf(" "); } } } else { for (i = 1; i <= number; i++) { num1 = rand() % scope; num2 = rand() % scope; oper = rand() % 4; printf("(%d)", i); switch (oper) { case 0: printf("%d+%d=", num1, num2); Add(num1, num2); break; case 1: printf("%d-%d=", num1, num2); Sub(num1, num2); break; case 2: printf("%d*%d=", num1, num2); Mult(num1, num2); break; case 3: if (num2 == 0) { printf("%d/%d=", num2, num1); Divi(num2, num1); } else { printf("%d/%d=", num1, num2); Divi(num2, num1); } break; default: { printf("出错啦~~~"); } } for (int p = 1; p <= konghang; p++) { printf(" "); } } } } else { if (plural == 0) { for (i = 1; i <= number; i++) { num1 = rand() % scope; num2 = rand() % scope; oper = rand() % 2; printf("(%d)", i); switch (oper) { case 0: printf("%d+%d=", num1, num2); Add(num1, num2); break; case 1: if (num1 >= num2) { printf("%d-%d=", num1, num2); Sub(num1, num2); } else { printf("%d-%d=", num2, num1); Sub(num2, num1); } break; default: { printf("出错啦~~~"); } } for (int p = 1; p <= konghang; p++) { printf(" "); } } } else { for (i = 1; i <= number; i++) { num1 = rand() % scope; num2 = rand() % scope; oper = rand() % 2; printf("(%d)", i); switch (oper) { case 0: printf("%d+%d=", num1, num2); Add(num1, num2); break; case 1: printf("%d-%d=", num1, num2); Sub(num1, num2); break; default: { printf("出错啦~~~"); } } for (int p = 1; p <= konghang; p++) { printf(" "); } } } } printf(" "); return 0; } void menu() { printf(" 欢迎使用四则运算出题系统 "); printf(" 1. 开始出题 "); printf(" 2. 开始答题 "); printf(" 0. 退出系统 "); } int main() { int cheng = 0, number = 0, line = 0, plural = 0; int scope = 0, konghang = 0, percent, a, num; l1: menu(); printf("请选择(0-2):"); scanf_s("%d", &a); switch (a) { case 1: SetQuestion(cheng, number, line, plural, scope, konghang); printf("是否继续(1为继续,0为不继续):"); scanf_s("%d", &num); if (num == 1) goto l1; else printf("欢迎下次使用! "); break; case 2: AnswerQuestion(cheng, number, line, plural, scope, konghang); printf("做对了%d道题 ", correct); printf("做错了%d道题 ", wrong); percent = correct / (correct + wrong); if (percent >= 6 / 10) { printf("你太棒了!! "); } else { printf("不及格,你要加油啦~~~ "); } printf("是否继续(1为继续,0为不继续):"); scanf_s("%d", &num); if (num == 1) goto l1; else printf("欢迎下次使用! "); break; case 0: printf("欢迎下次使用! "); break; } return 0; }
四、运行结果
五、合作伙伴
张江鹏
http://home.cnblogs.com/u/gaara-zhang/feed/blog/
六 总结
项目计划总结:
日期任务 | 听课 | 编写程序 | 查阅资料 | 日总计 |
星期一 | 2 | 1 | 3 | |
星期二 | 1 | 1 | 4 | |
星期三 | 3 | 3 | ||
星期四 | 2 | 1 | 1 | |
星期五 | 2 | 2 | ||
星期六 | ||||
星期日 | ||||
周总计 | 4 | 7 | 2 | 13 |
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间(分钟) | 活动 | 备注 |
3月14日 | 14:00 | 15:50 | 10 | 100 | 听课 | |
19:00 | 20:00 | 60 | 查阅资料 | 和搭档一起讨论,着手改变程序与计划 | ||
3月15日 | 18:45 | 20:00 | 95 | 编写程序 | ||
20:00 | 21:00 | 15 | 45 | 讨论和查阅资料 | ||
3月16日 | 13:00 | 16:00 | 180 | 编写代码 | ||
3月17日 | 14:00 | 15:50 | 10 | 100 | 听课 | |
19:00 | 20:00 | 60 | 编写程序 | |||
3月18日 | 19:00 | 21:15 | 10 | 125 | 编写代码与测试 |
日期 | 编号 | 引入阶段 | 排除阶段 | 修复时间&问题描述 |
3月16日 | 3 | 编码 | 编译 |
1h,逻辑错误,数组的题不能出现正确答案,循环搞错了 |
3月17日 | 4 | 编码 | 编译 |
30min:全局变量的定义放在了主函数中,导致系统不能识别; 30min:转换成vs2015中的scan语句不识别等语句错误 |
3月18日 | 5 | 编码 | 执行 调试 | 2h:个别特殊的临界情况未予顾及到,完善程序。 |
程序大体上的功能还可以,但改进的空间还很大。