用c语言随机抽取连续不重复的学号
时间: 2024-05-03 19:23:25 浏览: 226
以下是一个用C语言编写的随机抽取连续不重复的学号程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int start_num, end_num, num_count, i, j, random_num;
int *num_array;
time_t t;
// 输入起始学号、终止学号和需要抽取的学号个数
printf("请输入起始学号:");
scanf("%d", &start_num);
printf("请输入终止学号:");
scanf("%d", &end_num);
printf("请输入需要抽取的学号个数:");
scanf("%d", &num_count);
// 计算学号总数
int total_num = end_num - start_num + 1;
// 如果需要抽取的学号个数大于总数,输出错误提示并退出程序
if (num_count > total_num)
{
printf("需要抽取的学号个数不能大于总数!\n");
return 1;
}
// 为学号数组分配内存空间
num_array = (int *)malloc(total_num * sizeof(int));
if (num_array == NULL)
{
printf("内存分配失败!\n");
return 1;
}
// 初始化学号数组
for (i = 0; i < total_num; i++)
{
num_array[i] = start_num + i;
}
// 随机抽取学号
srand((unsigned)time(&t));
for (i = 0; i < num_count; i++)
{
// 生成随机数
random_num = rand() % (total_num - i);
// 输出抽取到的学号
printf("%d ", num_array[random_num]);
// 将抽取到的学号从数组中删除
for (j = random_num; j < total_num - i - 1; j++)
{
num_array[j] = num_array[j + 1];
}
}
// 释放学号数组的内存空间
free(num_array);
return 0;
}
```
该程序首先要求用户输入起始学号、终止学号和需要抽取的学号个数,然后计算出学号总数。如果需要抽取的学号个数大于总数,则输出错误提示并退出程序。接着,程序为学号数组分配内存空间,并初始化该数组。随后,程序用time()函数获取当前时间,然后用该时间值作为随机数生成器的种子,使用rand()函数生成随机数,并从学号数组中随机抽取学号,输出抽取到的学号,并将抽取到的学号从数组中删除。最后,程序释放学号数组的内存空间,结束运行。
阅读全文