小学生测验

最近比较忙,就拿前几天做的课设项目水一水。

内容

  面向小学1~2年级学生,随机选择两个整数和加减法形成算式要求学生解答。

功能要求:

(1)电脑随机出10道题,每题10分,程序结束时显示学生得分;

(2)确保算式没有超出12年级的水平,只允许进行50以内的加减法,不允许两数之和或之差超出050的范围,负数更是不允许的;

(3)每道题学生有三次机会输入答案,当学生输入错误答案时,提醒学生重新输入,如果三次机会结束则输出正确答案;

(4)对于每道题,学生第一次输入正确答案得10分,第二次输入正确答案得7分,第三次输入正确答案得5分,否则不得分;

(5)总成绩90以上显示“SMART”,80-90显示“GOOD”,70-80显示“OK”,60-70显示“PASS”,60以下“TRY AGAIN”

思路

  这个项目的重点在于随机的十道加法或减法题目,所以我选择结构体数组来完成题目的构建与保存,虽然题目并未要求保存题目,有对应分数即可。但是我认为如果以后增加功能,比如列出做错的题目的话。用结构体数组可以更加便捷的完成方法的构建,而不用重新构建数组。

  在随机生成运算符与运算数时,因为种类较多,所以我构建了新的随机数函数。如下:

  

int ran(int n,int m) {
srand((unsigned)time( NULL ));
return rand()%(m-n+1);
}

  这样可以很方便的生成指定区间内的随机数。

代码

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <conio.h>
#define a 0
#define b 50 // 算式范围为0-50
#define k 10 // 算式个数为10 struct questions {
int x;
int y;
int result;
int score;
char op;
} que[11]={0}; int ran(int n,int m) {
srand( (unsigned)time( NULL ) );
return rand()%(m-n+1);
} int main() {
int i,j,c,r,s=0;
printf("下面开始测验,请做好准备。按任意键开始。 \n") ;
getch();
for (i=0;i<k;i++) {
c = ran(0,1); if (c == 0) {
que[i].result = ran(a,b);
que[i].x = ran(a,que[i].result);
que[i].y = que[i].result - que[i].x;
que[i].op = '+';
} else {
que[i].x = ran(a,b);
que[i].y = ran(a,que[i].x);
que[i].result = que[i].x - que[i].y;
que[i].op = '-';
} for (j=0;j<3;j++) {
printf("%d: %d%c%d = ",i+1,que[i].x,que[i].op,que[i].y);
scanf("%d",&r); if (r != que[i].result && j<2) {
printf("输入错误,请重新输入,你还有%d次机会!加油!\n",2-j);
continue;
} else if (r != que[i].result && j==2) {
printf("很遗憾,三次机会已用完,正确答案为%d,继续努力!加油!\n",que[i].result);
break;
} if (j == 0)
que[i].score = 10;
else if (j == 1)
que[i].score = 7;
else
que[i].score = 5; printf("恭喜你,回答正确,加%d分。",que[i].score); if (i < k-1) {
printf("请开始下一题\n");
} else {
printf("\n");
}
break;
}
}
for (i=0;i<k;i++) {
s += que[i].score;
}
printf("\n答题结束,按任意键可得到结果。\n");
getch();
printf("\n结果为:"); if (s > 90) {
printf("SMART!\n");
} else if (s > 80) {
printf("GOOD!\n");
} else if (s > 70) {
printf("OK!\n");
} else if (s >= 60) {
printf("PASS!\n");
} else {
printf("TRY AGAIN!\n");
}
// printf("本次得分为:%d分\n",s);
printf("\n测验结束,按任意键退出");
getch();
return 0;
}

总结

  第一次做课设,一开始想的有些简单。起初想一口气生成十道题,再解答。但是同时生成十道题就会有一个很尴尬的问题:题目无论是运算符还是运算数都几乎相同(十道题目一样,最多两种样子。。。)。所以我只好将其设计成:一题答对后再生成下一题,直到十道题目都解答完毕。题目几乎相同的原因是随机数函数为伪随机数函数,它的生成与随机数种子有关,一般我们将随机数种子用当前时间毫秒数构成。所以,同一时间生成的随机算式,几乎相同。(不知道我说清没有,有不懂的欢迎大家提问 哈)

  

附:图

ps:不是我照的,是我一个好朋友,他的版权哈!

以上

第一次 C语言课程设计的更多相关文章

  1. C语言课程设计—图书管理系统

    这是本人大一第二学期初C语言课程设计的作品,嘿嘿,本来以为已经找不到原稿了,今天无意中居然在QQ网络硬盘中找到了当初的teta版,公布于此,以作纪念. C源码例如以下: #include<std ...

  2. C语言课程设计

    目录 实现目的 游戏玩法介绍 实现流程与作品架构 任务列表及贡献度 总结感想 作品源码与仓库地址(附页) 资料引用与出处(附页) 实现目的 2048,作为一款极其经典的游戏,从发行到现在,已经有了极多 ...

  3. 学生管理系统-火车订票系统 c语言课程设计

    概要: C 语言课程设计一---学生管理系统 使使用 C 语言实现学生管理系统.系统实现对学生的基本信息和考试成绩的 管理.采用终端命令界面,作为系统的输入输出界面.采用文件作为信息存储介质. 功能描 ...

  4. Java语言课程设计——博客作业教学数据分析系统(201521123107 张翔)

    #Java语言课程设计--博客作业教学数据分析系统(个人博客) 1.团队课程设计博客链接 [博客作业教学数据分析系统(From:网络五条狗)](http://www.cnblogs.com/fanta ...

  5. C语言课程设计(成绩管理系统)

    C语言课程设计(成绩管理系统) 翻到了大学写的C语言课程设计,缅怀一下 内容: 增加学生成绩 查询学生成绩 删除 按照学生成绩进行排序 等 #include <stdio.h> #incl ...

  6. 大一C语言课程设计——班级档案管理系统

    记录我在大一第二学期期末做的C语言课程毕业设计 1. 班级档案管理系统运用到的主要结构体 typedef struct birthday //出生日期{int year;int month;int d ...

  7. C语言课程设计大整数运算

    该大整数运算系统用于对有符号的位数不超过500位的大整数进行加.减.乘.除四则运算和计算N(0<=N<=10000)的阶乘.注意事项 :    1.操作期间,进行四则运算时若大整数为正数请 ...

  8. C语言课程设计——电影院订票系统

    1. 课题简介 大家都爱看电影,现请参考一个熟悉电影票预订系统,实现C语言版的订票系统.了解订票如何实现的.系统主要有2类用户:管理员用户和顾客用户. 管理员用户登录系统后,实现电影放映厅信息管理和电 ...

  9. C语言课程设计 Win32应用程序

    问题描述: 请设计一个职工信息管理程序,以方便人事部门对本单位职工的管理,该程序应该具有以下功 能: (1)能从键盘输入职工的信息 . (2)给定职工号,显示职工的信息. (3)给定工作部门,显示该部 ...

随机推荐

  1. P1051复数乘法

    P1051复数乘法 转跳点:

  2. checkbox checked属性值

    记住我1<input type='checkbox' /> 记住我2<input type='checkbox' /> <button onclick='hehe();' ...

  3. JQuery 动画实现

    $(this.div_wrong).show().css({width:"0px", height:"0px"})    .animate({width:&qu ...

  4. 小程序开发顶部TAB栏和侧边分类点击

    先上一个效果图: 根据这个效果图我来说内容. 首先是顶部tab栏 效果实现依靠的是一个组件scroll-view.这个组件很有意思,可以多层嵌套,当然它的属性也很多. 这里主要用的是scroll-x, ...

  5. oracle11g更改字符集

    一.查看服务器字符集编码三种方式:1)select userenv('language') from dual; -- 推荐2)select * from V$NLS_PARAMETERS;3)sel ...

  6. 四十六、SAP的Message中E和W区别

    一.如果写的是E,则报红色的信息,如图 效果如下 二.如果是写的是W,则报黄色的信息 效果如下

  7. 通过GlobalAddAtom,GlobalGetAtomName方式发送字符串

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  8. Python MySQL Join

    章节 Python MySQL 入门 Python MySQL 创建数据库 Python MySQL 创建表 Python MySQL 插入表 Python MySQL Select Python M ...

  9. Bulma CSS - 简介

    Bulma CSS框架教程 Bulma CSS – 简介 Bulma CSS – 开始 Bulma CSS – CSS类 Bulma CSS – 模块化 Bulma CSS – 响应式 Bulma是什 ...

  10. ROS2学习日志:QoS学习日志

    QoS学习日志 参考:ROS2API 及 https://index.ros.org/doc/ros2/Concepts/About-Quality-of-Service-Settings 1.概述 ...