内容正文:
项目八 指针──模拟彩票开奖
学习目标
熟悉和掌握数组的定义和使用。
熟悉常用的算法。
掌握使用随机函数生成一组不重复的随机数的方法。
了解指针的概念。
本项目编写一个能够模拟29选7彩票开奖的程序
程序运行后,请用户输入自己选择的7个号码,
随机生成7个正选号码和一个特别号码,
输出用户选择号码和中奖号码
判断用户是否中奖,输出中奖情况。
项目八 指针──模拟彩票开奖
项目八 指针──模拟彩票开奖
任务一 设计开始界面,输入自选号码
任务二 随机生成一组中奖号码
任务三 统计并输出彩票获奖结果
任务四 了解指针
任务五 使用函数,简化程序
任务一设计开始界面,输入自选号码
开始界面
#include<stdio.h>
main()
{int your_num[8];
int win_num[8];
int i;
clrscr();
printf("****** Welcome to the lottery simulator system! ******
");
printf("\tPlease input your numbers:
");
for(i=1;i<=7;i++)
{ printf("No.%d is :",i);
scanf("%d",&your_num[i]);
printf("
");
}
int min,tem;
for(i=1;i<7;i++)
{min=i;
for(j=i+1;j<8;j++)
if(your_num[min]>your_num[j]) min=j;
tem=your_num[i];
your_num[i]=your_num[min];
your_num[min]=tem;
}
printf("Your numbers are:
");
for(i=1;i<=7;i++)
printf("\t%d",your_num[i]);
}
任务二 随机生成一组中奖号码
srand(time(0)); /*初始化随机数生成器种子 */
for(i=1;i<=7;i++)/* 利用循环生成7个中奖号码*/
{
win_num[i]=rand()%29+1;
/* 将生成的7个1~29之间的任意整数存放在数组元素win_num[1]~ win_num[7]中 */
}
随机生成1~29之间的任意整数,使用公式:“rand()%29+1”。
使用“srand(time(0));”语句初始化随机数生成器种子,并在程序开始部分加载相应的头函数。
#include<time.h>
#include<stdlib.h>
随机产生7个1~29之间的整数:(可能会有重复)
任务二 随机生成一组中奖号码
生成一组不重复的中奖号码
方法一、使用嵌套的循环程序。
定义“i=1”。
生成第1个随机数。
如果“i<=7”成立,执行第4步;否则,执行第7步。
生成第“i+1”个随机数。
将第“i+1”个随机数与第1个到第i个随机数进行比较,如果第“i+1”个随机数与某个之前生成的随机数相等,执行第6步,如果第“i+1”个随机数与之前生成的随机数都不等,则执行第7步。
重新生成第“i+1”个随机数。
定义“i=i+1”,生成下一个随机数,执行第4步。
程序结束。
任务二 随机生成一组中奖号码
生成一组不重复的中奖号码
方法二、使用随机交换法
将1~29的29个数字存放在数组元素win1[1]~ win1[29]。
随机交换数组win1[]中任意两个元素,将数组win1[]中所有元素打乱。
将数组win1[]的win1[1]~win1[7]7个元素作为中奖号码。
将数组win1[]中元素win1[8]作为特别号码。
将数组win_num[]的win_num [1]~ win_num [7]7个元素进行排序。
程序结束。
for(i=1;i<30;i++)
{
win1[i]=i;
}
srand(time(0)); /*初始化随机数生成器*/
for(i=0;i<1000;i++) /*将数组win1[]中任意两个元素的操作执行1000次*/
{
a=rand()%28+1; /*随机生成第1个数组元素下标*/
b=rand()%28+1; /*随机生成第2个数组元素下标*/
repeat=win1[a];
win1[a]=win1[b];
win1[b]=repeat; /*随机地将两个元素交换*/
}
/* 将数组win1[]的1-7个元素作为中奖号码*/