点名系统分为两种,一种为重复点名,一种为不重复点名
重复点名:顾名思义,随机点到后,下次也许还会点到
重复点名
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
#include
#define N 57 //同学人数
int main()
{
int num = 0;
void menu();
scanf("%d", &num);
switch (num)
{
case 1:
void chongfu();
break;
case 2:
void buchongfu();
break;
default:
}
return 0;
}
void menu()
{
printf("请输入数字,进入不同模式");
printf("1.重复点名");
printf("2.不重复点名");
}
void chongfu()
{
int list[N], i, j, r, k;
const char* s[N] = { “aa".......57个同学名字,define定义数相同,否则报错
};//人名单
printf(" 随机点名,输入'0'退出。\n");
while (1) {
printf("请问想点几个:");
scanf("%d", &k); //输入人数
if (k == 0)
break;
if (k > N)
{
printf("输入错误\n");
continue;
}
else
{
srand(time(NULL));
for (i = 0; i < k; i++) //生成不重复的随机数组
{
while (1) {
r = rand() % N;
for (j = 0; j < i; j++)
{
if (list[j] == r)
break;
}
if (j == i)
{
list[i] = r;
break;
}
}
}
//输出人名
for (i = 0; i < k; i++) {
printf("%s\n", s[list[i]]);
}
}
}
return;
}
不重复点名
//随机点名系统 不重复
#include
#include
#define STUDENT_NUM 57 // 定义学生总数
void Exchange(int* a, int* b) //交换两个int值
{
int n = *a;
*a = *b;
*b = n;
}
int main()
{
const char* name[STUDENT_NUM] =
{
与宏定义数量一致即可
};
srand((unsigned int)time(NULL));// 设置随机种子
int Index[STUDENT_NUM] = { 0 };//定义索引数组
for (int i = 0; i != STUDENT_NUM; i++) // 初始化索引数组
{
Index[i] = i;
}
for (int i = 0; i != STUDENT_NUM; i++)// 打乱索引数组中的值
{
Exchange(&(Index[i]), &(Index[rand() % STUDENT_NUM]));
}
printf("请按回车开始点名\n");
for (int i = 0; i != STUDENT_NUM; i++)// 输出打乱值的索引对应的字符串
{
getch();
printf("%s\n", name[Index[i]]);
}
return 0;
}