利用C语言开发一个“小学生算术四则运算测试系统” 下载本文

内容发布更新时间 : 2024/5/6 13:32:34星期一 下面是文章的全部内容请认真阅读。

武汉理工大学华夏学院

课 程 设 计

课程名称 C语言程序设计

题 目 利用C语言开发一个“小学生算术四则运算测试系统”

专 业 ____电子商务_____ 班 级 ______1091_______ 学 号 _____20510809105_____ 姓 名 ______张宇_______ 成 绩 _________________ 指导教师 杨沙、王绪梅

2010年6月28日至2010年7月2日

课程设计任务书

设计题目:利用C语言开发一个“小学生算术四则运算测试系统” 设计目的

1. 2. 3. 4.

加深对《C语言程序设计》课程所学知识的理解; 掌握结构化程序设计的基本方法;

学会编制结构清晰、风格良好、数据结构选择恰当的C语言程序; 掌握多模块的C语言程序的调试方法。

设计任务 (在规定的时间内完成下列任务)

任务描述:利用C语言开发一个“小学生算术四则运算测试系统”

该系统是让计算机充当一位给小学生布置作业的算术老师,为学生出题、阅卷

该系统应具备以下功能:

1. 为小学生出题(分别进行+、-、*、÷等不同运算) 2. 学生做题后,进行评阅;

学生每做一题后,评阅时给出“答题正确,很好”或“答题错误,重做”等字样;

3. 加、减、乘、除运算功能可以自由选择实现;

4. 运算数值可以控制在两位(或三位)数的四则运算范围内。

具体要完成的任务是:

1 完成整个规定任务的设计及调试,得出正确结果,并经教师检查及答辩; 2. 写出规范的课程设计说明书;

3. 课程设计结束后交设计说明书等文档和设计内容。设计说明书的主要内容是详细

写出在设计过程中所用到的主要技术或方法;

4. 从6月28日起,学生每天至少要到设计教室半天以上;

5.课程设计报告按国际通用格式书写,具体格式要求请在网络上查阅

时间安排

6月28日 上午1-103教室动员全体学生,给学生下任务书; 下午查阅相关资料;

6月29日~7月1日 完成选题的设计及报告的书写; 7月2日 上午提交课程设计报告并答辩。

指 导 教 师 签 名: 2010年 6 月 27 日 教研室主任(或责任教师)签名:

2010年 6 月 27 日

1、问题描述

1.1在最开始设计此程序过程中,我定义的变量flag为字符型,当把原程序段中对应于下面的程序段的程序段改为: ??

scanf(\while(temp!=answer) {

printf(\答案错误,重做\\n\printf(\请输入正确的答案:\\n\scanf(\}

printf(\继续请按y,退出测试请按n \\n\scanf(\

while(flag!=y&&flag!=n) {

printf(\继续请按1,退出测试请按0 \\n\scanf(\} ??

我将会发现当我做完一题且做对了的时候,无论我输入的是y还是n或者是其他的字符,printf(\继续请按1,退出测试请按0 \\n\这个提示在屏幕上出现两次,说明了在第一个scanf(\语句中无论什么,flag!=y&&flag!=n都是成立的,这说明了在第一个scanf(\中输入的字符并没有赋给flag。

为了修改正确,我询问了指导老师,后来才知道执行语句scanf(\时候,小学生会输入一个数字,然后在按回车键,在执行语句scanf(\时这个是回车键被赋给了变量flag,而不是输入的字符给了变量flag,此时语句flag!=y&&flag!=n不成立,就会造成循环语句while(flag!=y&&flag!=n) 一定会执行一次,也就造成了上述结果。后来我将定义的字符型变量flag改成了整形,并且当输入1时继续做题,当输入0时退出系统,当输入的其他的数字时候,就会被提示输入错误,且要求重新输入。这样修改后就达到了上述目的。

1.2最开始我没有调用函数srand((unsigned)time(NULL))结果发现连续做两道相同算法的题目时,两次的题目完全一样,也就说明了此程序并不能随机的出题,后来使用了函数srand((unsigned)time(NULL))。srand((unsigned)time(NULL))这个函数调用中使用time(NULL)函数返回值(当前时间)作实参,初始化随机数发生器。rand()函数调用返回一个随机数,理论上说,rand()返回一个随机数,但是每次调用时,随机数发生器返回的随机数序列都是一样的,所以,用当前时间(time(NULL)返回值)作种子对随机数发生器进行初始化,由于每次当前时间不

一样,所以随机数发生器产生的随机数序列不一样,即rand()函数调用的返回值不一样,就达到了得到真随机数而不是伪随机数的目的,也就成功解决了这个问题。

1.3 其他的问题描述见附件1中的question_get()函数中注释中的问题分析部分。

2、详细设计

4.1 设计一个函数int question_get();,此函数的主要功能是为小学生出题(分别进行+,—,*,/等不同运算),并且保证给出的算式中的数字和结果均不超过三位数。系统自动计算出正确的答案,然后此正确的答案赋给变量answer。 4.2 通过调用函数srand((unsigned)time(NULL)); 初始化随机数发生器,使rand()函数调用的返回值不一样,这样就使连续做同一种算法时,系统两次给出的算式不相同。

4.3 程序中有一个while(1)和其循环体中的if(flag==0) break;语句,学生可以选择退出程序或者继续做题。

4.4 在main()函数外定义一个外部变量type,此变量表示小学生选择题目的类型,当选择1时候需要做加法运算,选择2时候做减法运算,选择3做乘法运算,选择4做除法运算,当选择的不是1 2 3 4中的一个数时,通过使用while语句要求小学生输入正确的题目类型代号。

4.5 提示要求小学生输入自己的答案,并将小学生输入的答案赋给变量temp,然后用while(temp!=answer)语句判断小学生输入的答案是否与正确答案相同,如果不同则通过此while的循环体提示答案错误,要求重新输入正确答案,直到输入的答案正确后提示答案正确;如果小学生一开始输入的答案是正确的则直接提示答案正确。

4.6 定义了一个变量flag,当给flag赋值1时可以继续做题,赋值为0时通过break语句退出整个循环while(1),此时也就退出了测试系统。

4.7 设计函数question_get(),首先在main()函数作函数声明,然后开始设计此函数,考虑到当小学生输入数字1需要做加法运算,输入2时候做减法运算,输入时3做乘法运算,输入4时做除法运算,所以通过条件if else语句分情况设计算法。

3.实验环境

Microsoft visual c++

4.程序调试

源程序:

#include #include

#include//用到了time()函数,所以要包含time.h头文件

//srand(time(NULL))中的time(NULL)就是time函数调用

int type; main() {

int question_get();//函数声明

int answer; int temp; int flag;