[定稿](C语言)智力猜字游戏[定稿](C语言)智力猜字游戏
《C语言》考试A卷------36选6彩票抽奖系统
彩票抽奖系统简介:
在1-36个数字中,先人工选择6个数字,然后抽奖,由电脑生成6个随机数,比较人工选择的6个数字和电脑生成的6个随机数中,相同的个数。
系统功能分析
本系统由以下几个功能模块(函数)构成:
显示模块(函数):显示指定(已知)数组中的非0元素。
校验模块(函数):验证指定(已知)数组的合法性,数组中的数据是否有重复,是否有超出1-36范围的数据,
选号模块(函数):将输入的整数存入数组a1,并将a1作为本模块(函数...
[定稿](C语言)智力猜字游戏
《C语言》考试A卷------36选6彩票抽奖系统
彩票抽奖系统简介:
在1-36个数字中,先人工选择6个数字,然后抽奖,由电脑生成6个随机数,比较人工选择的6个数字和电脑生成的6个随机数中,相同的个数。
系统功能分析
本系统由以下几个功能模块(函数)构成:
显示模块(函数):显示指定(已知)数组中的非0元素。
校验模块(函数):验证指定(已知)数组的合法性,数组中的数据是否有重复,是否有超出1-36范围的数据,
选号模块(函数):将输入的整数存入数组a1,并将a1作为本模块(函数)的结果。
随机数产生模块(函数):产生随机数存入数组b1,并将b1作为本模块(函数)的结果。
兑奖模块(函数):将选号模块得到的数组a1与随机数产生模块得到的数组b1进行比对,看有多少个数组元素是相同的,相同的数据则为已中奖的数据,相同数据越多,中奖级别越大,并输出中奖信息。
目的:考察掌握(函数)的定义、调用、嵌套、递归、指针、循环等知识的综合应用
要求:各个子功能模块(函数)独立实现,并能够独立测试。
主要
:函数的定义、调用。数组的定义和使用
知识点补充:如果将指针作为函数返回值,那么该指针所指向的变量必须是静态的,否则,指针有效,但其所指向的变量已经被释放了
步骤前提:
1. 导入头文件
#include
#include
#include
2. 在所有函数的外部,定义一个全局常量
const int array_length=6; //表示数组的长度
模块1:显示模块(函数)(本模块20分) 模块功能:显示指定(已知)数组中的信息。 定义一个函数display,该函数的功能是将指定(已知)的数组中所有非0的元素,逐个输出。
相关的知识点:函数的定义、数组的使用、for循环的使用 函数的算法如图:
已知数组a, int i=0;
否 i<数组长度
是
取出数组中第i个元素 i++
是 元素是否为0
否
输出该元素
结束
分析:
函数头:该函数只是需要显示数组的元素,不需要任何结果,因此不需要返回值,即返回值类型为void,函数名称display,该函数需要显示的是指定(已知)的数组信息,即必须要知道显示的数组。因此函数参数为int a[]
函数体:
1.先使用printf语句,输出,号码为:
2.使用for循环,将已知数组a的各个元素取出,判断其是否为0,如果为0,则不输出;不为0,则将其输出。
3. 使用printf语句,换行
模块1(函数)的测试:
在完成了函数display的基础上,在main()函数中,定义一个数组int ceshi[]={9,8,7,6,5,4};
然后调用display函数,将数组ceshi的元素输出。
将数组元素改为ceshi={9,8,7,0,0,0},然后调用display函数,将数组ceshi的元素输出。比较前后两次调用的结果。
测试结果如图:
测试1,当ceshi={9,8,7,6,5,4}时,输出
测试2,当ceshi={9,8,7,0,0,0}时,输出
测试完成后,将mian()函数中的测试语句注释掉。
模块2,校验模块(函数)(本模块20分)
模块功能:验证指定(已知)数组的合法性,数组中的数据是否有重复,是否有超出1-36范围的数据,
如果数组合法,则返回1,否则返回0
相关的知识点:函数的定义
函数的大概流程如图:
已知数组a, int i=0;
Result=1;
否
i<数组长度
ngth
是
取出数组中第i个元素 i++
是 元素值是否合
法
否
Result=0;
返回result值
分析:(,,,号部分的内容,留给大家自己思考)
函数头:该函数的结果是数组是否合法,合法则返回1,不合法则返回0,那么返回值的类型应为,,,;函数名称check(也可以自拟函数名);该函数是验证指定(已知)数组的合法性,即必须要知道验证的数组。因此函数参数为,,,
函数体:
1.先定义一个int类型的临时变量result=1; //默认为结果合法
2.使用双重嵌套 for循环,第一层for循环用于取出已知数组a的某个元素a[i],第二层for循环用于取出数组的另一个元素a[j],比较两个元素,是否相同,如果相同,则证明数组中存在重复的数据,那么resule=0,说明该数组不合法。同时验证数组的数据范围是否在1-36范围内,若不在此范围内,则resule=0
步骤2的参考代码如下:
3.在完成所有循环后,将result作为本函数的结果返回。
模块2(函数)的测试:
1.在完成了check函数的基础上,在main()函数中,定义一个数组int ceshi[]={9,8,7,6,5,4};
2.定义一个判断变量int decide,并调用check函数验证数组ceshi的合法性,并将验证结果赋值给decide。
即decide = check(ceshi);
3.使用if语句,如果decide为1,则使用printf语句,输出“合法” 如果decide为0,则使用printf语句,输出“不合法”
修改数组ceshi的值为{9,8,7,6,5,5};和{9,8,7,6,5,37},分别测试其合法性 测试结果如图:
测试1,当ceshi={9,8,7,6,5,4}时 ,输出
测试2,当ceshi={9,8,7,6,5,5}或{9,8,7,6,5,37} 时,输出
测试完成后,将mian()函数中的测试语句注释掉。
模块3,选号模块(函数)(本模块20分)
模块功能:将输入的整数存入数组a1,并将a1作为本模块的结果。
相关的知识点:函数的定义
函数的大概流程如图:
开始
创建元素个数为6的数组a,
Int a [6]; i=0;
i< 数组长度
否 i=0;
是
提示输入数据 i++
数据存入数组中
否
调用check方法验
证数组是否合法
是
return数组a
分析:(,,,号部分的内容,留给大家自己思考)
函数头:该函数的结果是得到一个存放整数(数组首元素)的地址(指针),那么返回值的类型应为int* ;函数名称select_number (也可以自拟函数名);该函数用于创建一个数组,不需要已知条件,那么函数的参数应为,,,
函数体:
1.创建一个元素个数为6的静态整型数组a(因为是36选6,只需要6个数字即可)。static int a[6];
2.使用while循环,如果输入数据不合法,即要求重复输入,如果合法,则return数组a(在循环语句中,return除了可以返回结果以外,还具有break的作用,即可用于跳出循环) 3.使用for循环,提示用户从键盘输入数据,并将输入的数据存放至数组a中。 4.调用模块2,校验模块(函数)check,校验数组a。如果校验结果为0,说明数组a中的元素不合法,那么要求用户重新输入。
5.重复步骤2,3,直至校验结果为1。将数组a作为本函数的结果,返回。 步骤2-5参考代码如下:
模块3(函数)的测试:
在完成了select_number函数的基础上,在main()函数中,定义一个数组int ceshi[]; 调用select_number函数,并将他的结果,赋值给数组ceshi;
调用display函数(模块1的函数),将数组ceshi的信息输出。
测试1:当输入1,2,3,4,5,5,时输出。
测试2,当输入38,1,2,3,4,5时输出
测试3,当输入8,7,6,5,4,3,时输出
测试完成后,将mian()函数中的测试语句注释掉。
模块4,随机数产生模块(函数)(本模块20分)
模块功能:产生随机数存入数组b1,并将b1作为本模块的结果。
相关的知识点:函数的定义
函数的大概流程如图:
开始
创建元素个数为6的数组a,
Int a[6]; i=0;
i<6
否 i=0;
是
产生一个随机数 i++
将随机数存入数组中
否
调用check方法验
证数组是否合法
是
return数组a
分析:(,,,号部分的内容,留给大家自己思考)
函数头:该函数的结果是得到一个存放随机整数的数组首元素的地址,那么返回值的类型应为,,,;函数名称random_number (也可以自拟函数名);该函数用于创建一个数组,不需要已知条件,那么函数的参数应为,,,
函数体:
1.创建一个元素个数为6的整型静态数组a(因为是36选6,只需要6个数字即可)。static int a[6];
2.创建一个随机种子备用。 srand((int)time(NULL)); //随机数种子 3.使用while循环,如果产生的随机数不合法,即重复产生随机数,如果合法,则return数组a(在循环语句中,return除了可以返回结果以外,还具有break的作用,即可用于跳出循环) 4.使用for循环,使用随机rand函数,产生的介于1-37之间的随机数逐个存放至数组a中。
5.调用模块2,校验模块(函数)check,校验数组a,如果校验结果为0,说明数组a中的元素不合法,那么重新产生随机数。
6.重复步骤2,3,直至校验结果为1。将数组a作为本函数的结果,返回。 步骤2至步骤6的代码参考如下:
模块4(函数)的测试:
在完成了random_number函数的基础上,在main()函数中,定义一个数组int ceshi[6];
调用random_number函数,并将他的结果,赋值给数组ceshi; 调用display函数(模块1的函数),将数组ceshi的信息输出。 测试界面1:
测试界面2:
注意:因为产生的是随机数数组,因此每次的测试结果是不一样的。 测试完成后,将mian()函数中的测试语句注释掉。
模块5,兑奖模块(函数)(本模块20分)
模块功能:将选号模块得到的数组a1与随机数产生模块得到的数组b1进行比对,看有多少个数组元
素是相同的,相同的数据则为已中奖的数据,相同数据越多,中奖级别越大。
相关的知识点:函数的定义,switch多分支选择语句、for循环嵌套、数组基本用法
函数的大概流程如图:
已知数组a1,b1
创建元素个数为6的数组C,
Int c[6];定义变量i=0;num=0;j=0;
否 i<6 i++,j++
否 是 Num==0,
逐个取出数组a1中的否 是 调用display方法将数组c元素a[i]和数组b1中的输出,并输出中奖情况 元素b[j],比较取出的
元素是否相同,
输出没有中奖
是
a[i]存入数组C[num]中,
num++
结束
分析:(,,,号部分的内容,留给大家自己思考)
函数头:该函数的结果是使用printf语句输出中奖信息,不需要返回结果,那么返回值的类型应为,,,;函数名称open_lottery (也可以自拟函数名);该函数用于比对已知数组a和已经数组b中,相同元素的数量,那么前提条件是知道数组a和数组b,因此函数的参数应为,,, 函数体:
1. 创建一个元素个数为6的整型数组C,用于存放数组a和数组b中相同的元素,(因为是进行比对的数
组a和b都是6个元素的,因此数组C最多可能存放6个元素,即数组a与数组b所有元素都相同的
情况)。
int c[6]={0,0,0,0,0,0}; //此处需要对数组进行初始化
2.定义一个整型变量num,用于存储两个数组中相同元素的个数。 3.使用第一个for(int i=0;i
#include
#include
4. 在所有函数的外部,定义一个全局常量
const int array_length=4; //表示数组的长度
模块1:显示模块(函数)(本模块20分) 模块功能:显示指定(已知)数组中的信息。
定义一个函数display,该函数的功能是将指定(已知)的数组中所有元素,逐个输出。
相关的知识点:函数的定义(见或上课笔记)、数组的使用、for循环的使用
分析:
函数头:该函数只是需要显示数组的元素,不需要任何结果,因此不需要返回值,即返回值类型为void,函数名称display,该函数需要显示的是指定(已知)的数组信息,即必须要知道显示的数组。因此函数参数为int a[]
函数体:
1.先使用printf语句,输出,号码为:
2.使用for循环,将已知数组a的各个元素取出,将其输出。
3. 使用printf语句,换行
模块1(函数)的测试:
在完成了函数display的基础上,在main()函数中,定义一个数组int ceshi[] ={9,8,7,6 };
然后调用display函数,将数组ceshi的元素输出。
测试结果如图:
测试1,当ceshi={9,8,7,6}时,输出
测试完成后,将mian()函数中的测试语句删除。
模块2,校验模块(函数)(本模块20分)
模块功能:验证指定(已知)数组的合法性,数组中的数据是否有重复,是否有超出0-9范围的数据,
如果数组合法,则返回1,否则返回0
相关的知识点:函数的定义
函数的大概流程如图:
已知数组a, int i=0;
Result=1;
否 i< 数组长度
是
取出数组中第i个元素 i++
是 元素值是否合
法
否
Result=0;
返回result值
分析:(,,,号部分的内容,留给大家自己思考)
函数头:该函数的结果是数组是否合法,合法则返回1,不合法则返回0,那么返回值的类型应为,,,;函数名称check(也可以自拟函数名);该函数是验证指定(已知)数组的合法性,即必须要知道验证的数组。因此函数参数为,,,
函数体:
1.先定义一个int类型的临时变量result=1; //默认为结果合法
2.使用双重嵌套 for循环,第一层for循环用于取出已知数组a的某个元素a[i],第二层for循环用于取出数组的另一个元素a[j],比较两个元素,是否相同,如果相同,则证明数组中存在重复的数据,那么resule=0,说明该数组不合法。同时验证数组的数据范围是否在0-9范围内,若不在此范围内,则resule=0
For循环的参考代码如下:
3.在完成所有循环后,将result作为本函数的结果返回。
模块2(函数)的测试:
1.在完成了check函数的基础上,在main()函数中,定义一个数组int ceshi[]={9,0,7,6 };
2.定义一个判断变量int decide,并调用check函数验证数组ceshi的合法性,并将验证结果赋值给decide。
即decide = check(ceshi);
3.使用if语句,如果decide为1,则使用printf语句,输出“合法” 如果decide为0,则使用printf语句,输出“不合法”
修改数组ceshi的值为{9,8,5,5};和{9,8,5, 10},分别测试其合法性 测试结果如图:
测试1,当ceshi={9,8,7,6 }时 ,输出
测试2,当ceshi={9,8,5,5}或{9,8,7,10} 时,输出
测试完成后,将mian()函数中的测试语句删除。
模块3,选号模块(函数)(本模块20分)
模块功能:将输入的整数存入数组a1,并将a1作为本模块的结果。
相关的知识点:函数的定义
函数的大概流程如图:
开始
创建元素个数为4的数组a,
Int a [4]; i=0;
i<数组长度
否 i=0;
是
提示输入数据 i++
数据存入数组中
否
调用check方法验
证数组是否合法
是
return数组a
分析:(,,,号部分的内容,留给大家自己思考)
函数头:该函数的结果是得到一个存放整型数组的首元素地址,那么返回值的类型应为int *p;函数名称select_number (也可以自拟函数名);该函数用于创建一个数组,不需要已知条件,那么函数的参数应为,,,
函数体:
1.创建一个元素个数为4的整型静态数组a。 static int a [4]; 2.使用while循环,如果输入数据不合法,即要求重复输入,如果合法,则return数组a(在循环语句中,return除了可以返回结果以外,还具有break的作用,即可用于跳出循环) 3.使用for循环,提示用户从键盘输入数据,并将输入的数据存放至数组a中。 4.调用模块2,校验模块(函数)check,校验数组a。如果校验结果为0,说明数组a中的元素不合法,那么要求用户重新输入。
5.重复步骤2,3,直至校验结果为1。将数组a作为本函数的结果,返回。 步骤2-5部分代码参考如下:
模块3(函数)的测试:
在完成了select_number函数的基础上,在main()函数中,定义一个数组int ceshi[4];
调用select_number函数,并将他的结果,赋值给数组ceshi; 调用display函数(模块1的函数),将数组ceshi的信息输出。
测试1:当输入1,2,3,4,时输出。
测试2,当输入0,1,1,5时输出
试3,当输入1,7,6,11,时输出 测
测试完成后,将mian()函数中的测试语句删除。
模块4,随机数产生模块(函数)(本模块20分)
模块功能:产生随机数存入数组b1,并将b1作为本模块的结果。
相关的知识点:函数的定义
函数的大概流程如图:
开始
创建元素个数为4的数组a,
Static Int a[4]; i=0;
i <数组长度
否 i=0;
是
产生一个随机数 i++
将随机数存入数组中
否
调用check方法验
证数组是否合法
是
return数组a
分析:(,,,号部分的内容,留给大家自己思考)
函数头:该函数的结果是得到一个存放随机整数数组首元素的地址,那么返回值的类型应为,,,;函数名称random_number (也可以自拟函数名);该函数用于创建一个数组,不需要已知条件,那么函数的参数应为,,,
函数体:
1.创建一个元素个数为4的整型静态数组a. static int a[4]; 2.创建一个随机种子备用。 srand((int)time(NULL)); //随机数种子 3.使用while循环,如果产生的随机数不合法,即重复产生随机数,如果合法,则return数组a(在循环语句中,return除了可以返回结果以外,还具有break的作用,即可用于跳出循环) 4.使用for循环,使用随机函数rand(),产生的介于0-9之间的随机数逐个存放至数组a中。
5.调用模块2,校验模块(函数)check,校验数组a,如果校验结果为0,说明数组a中的元素不合法,那么重新产生随机数。
6.重复步骤2,3,直至校验结果为1。将数组a作为本函数的结果,返回。 步骤2至步骤6的参考代码参考如下:
模块4(函数)的测试:
在完成了random_number函数的基础上,在main()函数中,定义一个数组int ceshi[]; 调用random_number函数,并将他的结果,赋值给数组ceshi; 调用display函数(模块1的函数),将数组ceshi的信息输出。
: 测试界面1
测试界面2:
注意:因为产生的是随机数数组,因此每次的测试结果是不一样的。 测试完成后,将mian()函数中的测试语句删除。
模块5,比对模块(函数)(本模块20分) 模块功能:将选号模块得到的数组b与随机数产生模块得到的数组a进行比对,看有多少个数组元素是相同的,元素相同,再看他们的位置是否相同。
相关的知识点:函数的定义,if-else if多分支选择语句、for循环嵌套、数组基本用法
分析:(,,,号部分的内容,留给大家自己思考)
函数头:该函数的结果是使用printf语句输出中奖信息,不需要明确的结果,那么返回值的类型应为,,,;函数名称open_lottery (也可以自拟函数名);该函数内部产生数组,不需要参数。因此函数的参数应为,,,
函数体:
1. 定义两个整型指针变量a,b, 调用random_number函数,将生成的随机数组的首元素地址存放在a中
2.定义若干个整型变量x,y,num,并都初始化,设置为0
3.使用while循环,当x!=4时,继续循环。当x==4时,结束循环 4.在每次循环开始时,将x,y归零。调用select_number函数,要求玩家从键盘输入四个数字并存入数组首元素地址到b中,使num++。
5.使用双层for循环嵌套。比较a1和b1中的元素,如果元素相同且位置也相同,则x++;如果只是数字相同,位置不同,则y++
步骤5,For循环参考代码
6.使用printf输出x,y的值。如果x==4,则提前跳出while循环,并提示猜对了,游戏结束。如果x!=4则继续while循环
模块5(函数)的测试:
在open_lottery函数中,步骤1处,先将a1所指向的数组,使用display函数输出,即人为的显示出系统随机生成的四个数字,对着四个数字进行输入,看不同的输入下,输出的情况。 在主函数中调用open_lottery函数。
测试完毕后,删除open_lottery函数内的测试语句。
各模块功能的衔接 8. 在main()函数中,调用open_lottery函数.
系统流程如图:
开始
内部调用 内部调用 Check校验 random_number
生成随机数 open_lottery
内部调用 select_number Check校验 内部调用 输入数字
结束
本文档为【[定稿](C语言)智力猜字游戏】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。