c语言实现点名系统

发布时间:2023-01-06 14:30

点名系统分为两种,一种为重复点名,一种为不重复点名
重复点名:顾名思义,随机点到后,下次也许还会点到

重复点名

#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;
}

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号