level 9
桑丛纵目
楼主
// 本程序有2个功能,一个是双色球随机生成,另一个是大乐透随机生成
#include <stdio.h>
#include <time.h> // time()函数
#include <stdlib.h> //srand() rand()
#define S_RED 6 //双色球中红色球个数
#define S_R_NO 34 //红色球范围,必须必实际的数字大1,才能产生出33这个数
#define S_BLUE 1 //双色球中蓝色去个数
#define S_B_NO 16 //蓝色去范围
#define S_Q 5 //双色球因子,这样才能在红球后接着打印篮球
#define D_RED 5 //大乐透中红色球个数
#define D_R_NO 36 // 大乐透中红球范围,必须必实际的数字大1,才能产生出35这个数
#define D_BLUE 2 //大乐透球中蓝色去个数
#define D_B_NO 12 //大乐透中红球的范围
#define D_Q 4 //双色球因子,这样才能在红球后接着打印篮球
#define MAX 100 //彩票注数最多100注
#define LEN 7 //彩票号码数
void show_menu ( void ); //显示菜单选项
char input_comfirm ( void ); //保证用户输入的字符符合程序要求,否则要求用户再次输入正确字符,
void header_al ( char *pch ); //只获取输入的第一个字符
int (*get_number ( int, int, int ))[LEN];
void s_s_q ( void ); //双色球
void d_l_t ( void ); //大乐透
void show_result ( int q, int pcs, int qian[][LEN],int q_n, int hou[][LEN], int h_n ); //将篮球和红球数组传递,并显示成一排
int main ( void )
{
char choice;
printf ( "请勿购买非法私彩,以免上当受骗!!!\n" );
show_menu ( );
choice = input_comfirm ( );
switch ( choice )
{
case 'a':
s_s_q ( ); //双色球
break;
case 'b':
d_l_t ( ); //大乐透
break;
case 'c':
default: //退出程序
break;
}
return 0;
}
void show_menu ( void )
{
printf ( "********************************************\n" );
printf ( " a. 双色球 b. 大乐透 \n" );
printf ( " c. 退出\n" );
printf ( "********************************************\n" );
printf ( "请选择你需要的彩票类型:" );
}
char input_comfirm ( void ) // 来确保用户输入的是
正确的
字符,不然就给出提示。
{
char ch; //用来存储用户输入的字符
char *p_ch = &ch;
header_al( &ch);
while ( (ch < 'a' || ch > 'c' ))
{
printf ( "输入错误,请重新输入正确的字符a, b, 或者 c 。\n" );
header_al( &ch);
}
return ch;
}
void header_al ( char *pch ) // 只读取用户输入的第一个字符,
{
*pch = getchar ();
while ( getchar () != '\n' )
continue; //将用户多输入的字符扔除掉
}
void s_s_q ( void )
{
int zhu_shu; //彩票注数
int front[MAX][LEN];
int behind[MAX][LEN];
int (* p_f)[LEN];
p_f = front;
int (* p_b)[LEN];
p_b = behind;
int i, j, n;
//int red[MAX][LEN];
// srand ( time ( NULL ));
printf ( "请输入你需要多少注双色球: " );
while( (scanf ("%d", &zhu_shu ) != 1 ) && zhu_shu <= 0 && zhu_shu > 100 )
{
printf ( "输入错误,请输入数字!\n" );
scanf ( "%d", &zhu_shu );
}
printf ( " 以下是你需要的%d注双色球号码。\n" , zhu_shu );
printf ( " 祝你好运!!!\n" );
p_f = get_number ( zhu_shu, S_RED, S_R_NO );
p_b = get_number ( zhu_shu, S_BLUE, S_B_NO );
show_result ( S_Q, zhu_shu, p_f, S_RED, p_b, S_BLUE );
}
void d_l_t ( void )
{
int zhu_shu; //彩票注数
int front[MAX][LEN];
int behind[MAX][LEN];
int (* p_f)[LEN];
p_f = front;
int (* p_b)[LEN];
p_b = behind;
int i, j, n;
printf ( "请输入你需要多少注大乐透: " );
while( (scanf ("%d", &zhu_shu ) != 1 ) && zhu_shu <= 0 && zhu_shu > 100 )
{
printf ( "输入错误,请输入数字!\n" );
scanf ( "%d", &zhu_shu );
}
printf ( " 以下是你需要的%d注大乐透号码。\n" , zhu_shu );
printf ( " 祝你好运!!!\n" );
p_f = get_number ( zhu_shu, D_RED, D_R_NO ); //前区红球
p_b = get_number ( zhu_shu, D_BLUE, D_B_NO ); //后区篮球
show_result ( D_Q, zhu_shu, p_f, D_RED, p_b, D_BLUE );
}
int (*get_number ( int z_s, int loop, int area ))[LEN] //本函数为号码生成,要返回一个二维数组
{
int i, j, n;
static int numbers[MAX][LEN]; //号码存储数组
int temp[area]; //临时转换数组
for ( i = 1; i < area; i++ ) //彩票号码不能等于0
temp[i] = i; //通过循环,将area(号码的范围)内的所有数字,赋值给临时数组
srand ( (int)time ( NULL )); //生成随机种子
for ( i = 0; i < z_s; i++ ) // 外循环,z_S是传递过来的用户输入的彩票注数
{
for ( j = 0; j < loop; j++ ) //内循环,loop是 彩票前区或者后区的号码个数
{
n = rand () % area; //得到0到(area - 1)的下标数
numbers[i][j] = temp[n]; //将该下标的值赋值给彩票号码数组
temp[n] = temp[--area];
}
}
return numbers;
}
/*int (*get_number ( int z_s,int loop, int area ))[LEN]
{
int i, j, n, m, k;
int tt[MAX][LEN];
static int temp[MAX][LEN];
srand ( time( NULL ));
for ( i = 0; i < z_s; i++ )
{
for ( j= 0; j < loop; j++ )
{
while ( (temp[i][j] = rand ( ) % area) == 0 )
{
temp[i][j] = rand ( ) % area;
if ( j > 0 )
{
for ( n = 0; n < j; n++ )
{
m = temp[i][n];
k = temp[i][j];
while ( m == k )
temp[i][j] = rand ( ) % area ;
}
}
}
}
}
return temp;
}
*/
void show_result (int q, int pcs, int qian[][LEN],int q_n, int hou[][LEN], int h_n )
{
int i, j, n;
for( i = 0; i < pcs; i++ )
{
for ( j = 0; j < q_n; j++ )
{
printf ("%4d ", qian[i][j]);
if ( j == q )
{
printf ( "**");
for (n = 0; n < h_n; n++ ) // printf ( "%d", p_b[i][0]); //每6次打一次篮球
printf ( "%3d", hou[i][n] );
}
}
printf ( "\n" );
}
}
2017年03月05日 05点03分
1
#include <stdio.h>
#include <time.h> // time()函数
#include <stdlib.h> //srand() rand()
#define S_RED 6 //双色球中红色球个数
#define S_R_NO 34 //红色球范围,必须必实际的数字大1,才能产生出33这个数
#define S_BLUE 1 //双色球中蓝色去个数
#define S_B_NO 16 //蓝色去范围
#define S_Q 5 //双色球因子,这样才能在红球后接着打印篮球
#define D_RED 5 //大乐透中红色球个数
#define D_R_NO 36 // 大乐透中红球范围,必须必实际的数字大1,才能产生出35这个数
#define D_BLUE 2 //大乐透球中蓝色去个数
#define D_B_NO 12 //大乐透中红球的范围
#define D_Q 4 //双色球因子,这样才能在红球后接着打印篮球
#define MAX 100 //彩票注数最多100注
#define LEN 7 //彩票号码数
void show_menu ( void ); //显示菜单选项
char input_comfirm ( void ); //保证用户输入的字符符合程序要求,否则要求用户再次输入正确字符,
void header_al ( char *pch ); //只获取输入的第一个字符
int (*get_number ( int, int, int ))[LEN];
void s_s_q ( void ); //双色球
void d_l_t ( void ); //大乐透
void show_result ( int q, int pcs, int qian[][LEN],int q_n, int hou[][LEN], int h_n ); //将篮球和红球数组传递,并显示成一排
int main ( void )
{
char choice;
printf ( "请勿购买非法私彩,以免上当受骗!!!\n" );
show_menu ( );
choice = input_comfirm ( );
switch ( choice )
{
case 'a':
s_s_q ( ); //双色球
break;
case 'b':
d_l_t ( ); //大乐透
break;
case 'c':
default: //退出程序
break;
}
return 0;
}
void show_menu ( void )
{
printf ( "********************************************\n" );
printf ( " a. 双色球 b. 大乐透 \n" );
printf ( " c. 退出\n" );
printf ( "********************************************\n" );
printf ( "请选择你需要的彩票类型:" );
}
char input_comfirm ( void ) // 来确保用户输入的是
正确的
字符,不然就给出提示。
{
char ch; //用来存储用户输入的字符
char *p_ch = &ch;
header_al( &ch);
while ( (ch < 'a' || ch > 'c' ))
{
printf ( "输入错误,请重新输入正确的字符a, b, 或者 c 。\n" );
header_al( &ch);
}
return ch;
}
void header_al ( char *pch ) // 只读取用户输入的第一个字符,
{
*pch = getchar ();
while ( getchar () != '\n' )
continue; //将用户多输入的字符扔除掉
}
void s_s_q ( void )
{
int zhu_shu; //彩票注数
int front[MAX][LEN];
int behind[MAX][LEN];
int (* p_f)[LEN];
p_f = front;
int (* p_b)[LEN];
p_b = behind;
int i, j, n;
//int red[MAX][LEN];
// srand ( time ( NULL ));
printf ( "请输入你需要多少注双色球: " );
while( (scanf ("%d", &zhu_shu ) != 1 ) && zhu_shu <= 0 && zhu_shu > 100 )
{
printf ( "输入错误,请输入数字!\n" );
scanf ( "%d", &zhu_shu );
}
printf ( " 以下是你需要的%d注双色球号码。\n" , zhu_shu );
printf ( " 祝你好运!!!\n" );
p_f = get_number ( zhu_shu, S_RED, S_R_NO );
p_b = get_number ( zhu_shu, S_BLUE, S_B_NO );
show_result ( S_Q, zhu_shu, p_f, S_RED, p_b, S_BLUE );
}
void d_l_t ( void )
{
int zhu_shu; //彩票注数
int front[MAX][LEN];
int behind[MAX][LEN];
int (* p_f)[LEN];
p_f = front;
int (* p_b)[LEN];
p_b = behind;
int i, j, n;
printf ( "请输入你需要多少注大乐透: " );
while( (scanf ("%d", &zhu_shu ) != 1 ) && zhu_shu <= 0 && zhu_shu > 100 )
{
printf ( "输入错误,请输入数字!\n" );
scanf ( "%d", &zhu_shu );
}
printf ( " 以下是你需要的%d注大乐透号码。\n" , zhu_shu );
printf ( " 祝你好运!!!\n" );
p_f = get_number ( zhu_shu, D_RED, D_R_NO ); //前区红球
p_b = get_number ( zhu_shu, D_BLUE, D_B_NO ); //后区篮球
show_result ( D_Q, zhu_shu, p_f, D_RED, p_b, D_BLUE );
}
int (*get_number ( int z_s, int loop, int area ))[LEN] //本函数为号码生成,要返回一个二维数组
{
int i, j, n;
static int numbers[MAX][LEN]; //号码存储数组
int temp[area]; //临时转换数组
for ( i = 1; i < area; i++ ) //彩票号码不能等于0
temp[i] = i; //通过循环,将area(号码的范围)内的所有数字,赋值给临时数组
srand ( (int)time ( NULL )); //生成随机种子
for ( i = 0; i < z_s; i++ ) // 外循环,z_S是传递过来的用户输入的彩票注数
{
for ( j = 0; j < loop; j++ ) //内循环,loop是 彩票前区或者后区的号码个数
{
n = rand () % area; //得到0到(area - 1)的下标数
numbers[i][j] = temp[n]; //将该下标的值赋值给彩票号码数组
temp[n] = temp[--area];
}
}
return numbers;
}
/*int (*get_number ( int z_s,int loop, int area ))[LEN]
{
int i, j, n, m, k;
int tt[MAX][LEN];
static int temp[MAX][LEN];
srand ( time( NULL ));
for ( i = 0; i < z_s; i++ )
{
for ( j= 0; j < loop; j++ )
{
while ( (temp[i][j] = rand ( ) % area) == 0 )
{
temp[i][j] = rand ( ) % area;
if ( j > 0 )
{
for ( n = 0; n < j; n++ )
{
m = temp[i][n];
k = temp[i][j];
while ( m == k )
temp[i][j] = rand ( ) % area ;
}
}
}
}
}
return temp;
}
*/
void show_result (int q, int pcs, int qian[][LEN],int q_n, int hou[][LEN], int h_n )
{
int i, j, n;
for( i = 0; i < pcs; i++ )
{
for ( j = 0; j < q_n; j++ )
{
printf ("%4d ", qian[i][j]);
if ( j == q )
{
printf ( "**");
for (n = 0; n < h_n; n++ ) // printf ( "%d", p_b[i][0]); //每6次打一次篮球
printf ( "%3d", hou[i][n] );
}
}
printf ( "\n" );
}
}