#include <stdlibh>
#include <windowsh>
#include <timeh>
#define man 50
typedef struct
{
char name[20];
int No;
int tickets;
}CANDIDATE;
CANDIDATE cand=NULL;
int timer_id;
int person_count=0;
int cand_count=0;
int tickets_count=0;
int bad_count=0;
void CALLBACK TimerProc(HWND,UINT,UINT,DWORD);
//设置CMD窗口光标位置
void setxy(int x, int y)
{
COORD coord = {y, x};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
int main()
{
srand((unsigned)time(0));
int n,i;
printf("请输入候选人总个数:");
scanf("%d",&cand_count);
cand=(CANDIDATE)malloc(sizeof(CANDIDATE)cand_count);
for(i=0;i<cand_count;i++)
{
printf("\n请输入第%d个候选人姓名:",i+1);
fflush(stdin);
scanf("%s",cand[i]name);
cand[i]No=rand()%1000+1;
cand[i]tickets=0;
}
printf("\n请输入要选举的人数:");
fflush(stdin);
scanf("%d",&person_count);
printf("\n\n按任意键开始统计得票数!\n");
fflush(stdin);
getchar();
system("cls");
for(i=0;i<cand_count;i++)
{
printf("\n%s(%d): ",cand[i]name,cand[i]No);
}
printf("\n\n废票 : 0 已统计 : 0\n\n");
MSG msg;
timer_id=SetTimer(NULL,0,1000,TimerProc);
while(GetMessage(&msg,NULL,0,0))
{
DispatchMessage(&msg);
}
return 0;
}
void CALLBACK TimerProc(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTimer)
{
int n;
n=rand()%cand_count+1;
char s=NULL;
s=(char)malloc(sizeof(char)n);
int i,j=0,a;
for(i=0;i<n;i++)
{
(s+i)=(char)malloc(sizeof(char)20);
}
for(i=0;i<n;i++)
{
a=rand()%cand_count;
int k;
int find=0;
for(k=0;k<j;k++)
{
if(strcmp(s[k],cand[a]name)==0)
{
find=1;
break;
}
}
if(find==0)
{
strcpy(s[j++],cand[a]name);
}
else
{
i--;
}
}
setxy(cand_count+5,0);
printf(" ");
setxy(cand_count+4,0);
printf("本张票共有%d个候选人:\n",n);
for(i=0;i<n;i++)
{
printf("%s ",s[i]);
}
setxy(cand_count+8,0);
printf(" ");
setxy(cand_count+8,0);
if(n>person_count)
{
printf("超出要选举的人数, 此票作废!");
bad_count++;
setxy(cand_count+2,7);
printf("%d",bad_count);
}
else
{
for(i=0;i<n;i++)
{
for(j=0;j<cand_count;j++)
{
if(strcmp(s[i],cand[j]name)==0)
{
cand[j]tickets++;
setxy(j+1,18);
printf("%d",cand[j]tickets);
break;
}
}
}
}
setxy(cand_count+2,20);
tickets_count++;
printf("%d",tickets_count);
if(tickets_count>=man)
{
KillTimer(NULL,timer_id);
setxy(cand_count+10,0);
printf("\n\n计票统计已结束, 共有%d张废票!",bad_count);
}
}你是说要产生随机序列吗?
#include<stdioh>
#include<stdlibh>
#include<timeh>
main()
{int i;
int[M];(m的值自己定)
for(i=0;i<M;i++)
srand( (unsigned)time( NULL ) );
int[i]=rand();
}
以上这个函数可以实现了
这里给你扩展学习下 用random也可以产生
还告诉你srand( (unsigned)time( NULL ) ); 是干什么用的。
#include <stdlibh>
main()
{
int a[100],i; /定义数组存放100个数/
for(i=0;i<100;i++)
a[i]=random(100); /产生100以内的数/
for(i=0;i<100;i++)
printf("%d ",a[i]); /打印输入/
getch();
}
在C语言函数库中包含了一个产生随机数的函数:
int rand( void );
函数int rand( void );返回的是一个界于0~32767(0x7FFF)之
间的伪随机数,包括0和32767。注意,这里产生的是伪随机数,不是真正意
义上的随机数,看下面的程序:
#include "stdlibh"
#include "stdioh"
void main( void )
{
/ Display a number /
printf( " %6d\n", rand() );
getchar();
}
程序运行的结果是:
346
多次运行这个程序,发现每次产生的结果都是346(不同的机器可能产生
的结果不一样),这就是所谓的伪随机数。伪随机数是通过一个公式来运算
出来的,所以,每次产生的伪随机数都一样。那么,如何才能产生真正意义
上的随机数呢?这就有一个随机种子的问题。在C语言标准函数库中,有这
么一个函数:
void srand( unsigned int seed );
要产生真正意义上的随机数,那么就要求每次提供的种子不一样,一
般情况下,都设置时间为随机函数的种子。看下面的一段程序:
#include "stdlibh"
#include "stdioh"
#include "timeh"
void main( void )
{
int i;
/ Seed the random-number generator with current time so that
the numbers will be different every time we run
将当前时间设置成随机函数的种子,所以每次产生的数都不一样
/
srand( (unsigned)time( NULL ) );
/ Display 10 numbers /
for( i = 0; i < 10;i++ )
printf( “ %6d\n”, rand() );
}
Output
6929
8026
21987
30734
20587
6699
22034
25051
7988
10104
每次运行这个程序,产生的随机数都不一样,这样就达到了随机数的要求了
rand函数功能为获取一个伪随机数(伪随机数的概念下面会有介绍)。
一、函数名:
rand();
二、声明:
int rand();
三、所在头文件:
stdlibh
四、功能:
返回一个伪随机数。之所以说是伪随机数,是因为在没有其它 *** 作下,每次执行同一个程序,调用rand得到的随机数序列是固定的(不是真正的“随机”)。
五、为了使rand的结果更“真”一些,也就是令其返回值更具有随机性(不确定性),C语言在stdlibh中还提供了srand函数,通过该函数可以设置一个随机数种子,一般用当前时间的毫秒数来做参数。通过time(NULL)可以获取到当前时间的毫秒值(该函数位于timeh)中。
六、使用rand的流程可以总结为:
1 调用srand(time(NULL))设置随机数种子。
2 调用rand函数获取一个或一系列随机数。
需要注意的是,srand只需要在所有rand调用前,被调用一次即可,没必要调用多次。
七、以下是随机获取10个整型值并输出的例子,辅助理解。
#include <stdioh>#include <stdlibh>
#include <timeh>
int main()
{
int i;
srand(time(NULL));//设置随机数种子。
for(i = 0; i < 10; i ++)//运行10次。
printf("%d\n", rand());//每次获取一个随机数并输出。
return 0;
}源代码文件可以用任意文本编辑
目标文件由编译器生成具体的生成方法在不同的开发环境上是不同的
gcc的例子:
gcc -o target_file testc
编译testc生成可执行文件target_file
gcc -c testc
编译testc ,生成目标文件testo,但不进行link1、学号奇偶性你可以这样 if(学号%2 == 0)为偶,else 为奇;
2、比如说w代表女性,m代表男性,你可以char sex;if(sex == ‘w’)女性else 男性;
3、四舍五入是小数部分还是还是整数部分?
4、根据成绩输出成绩所属成绩点可以用if语句,或者switch语句,我觉得用if语句比较不错,3、4你可以写在一起。希望可你帮助到你~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)