点名零碎分为两种,一种为反复点名,一种为不反复点名
反复点名:顾名思义,随机点到后,下次兴许还会点到
反复点名
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include<string.h>#include <stdlib.h>#include <time.h>#include<conio.h>#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 <stdio.h>#include <time.h>#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;}