C语言的点名程序可以根据不同的需求和实现方式有多种,以下是一个简单的命令行运行的点名程序的实现示例:
程序描述
使用C语言编写。
命令行运行。
以指定txt文件作为“班级”花名册。
随机抽取名字并显示,速度由快到慢,逐渐定格到某一个名字上,保存到文件中,程序结束。
功能实现
文件形式保存和读取。
显示所有同学点名情况。
查询单个同学点名情况。
开始多个名字点名。
开始单个名字点名。
保存点名。
点名次数归零。
字体颜色变化。
详细实现过程
学生结构体声明和定义:
```c
struct Student {
char name; // 学生姓名
int num; // 学生编号
int frequency; // 点名次数
};
```
定义学生人数:
```c
define TOTAL 15 // 学生人数
```
菜单函数:
```c
void menu() {
printf("请输入数字,进入不同模式\n");
printf("1.重复点名\n");
printf("2.不重复点名\n");
}
```
随机点名函数:
```c
void chongfu() {
int list[N], i, j, r, k;
const char* s[N] = { "aa", "...", 57个同学名字" }; // 人名单
printf("随机点名,输入'0'退出.\n");
while (1) {
printf("请问想点几个:");
scanf("%d", &k); // 输入人数
if (k == 0) break;
if (k > N) {
printf("输入错误\n");
continue;
}
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]]);
}
}
}
```
不重复点名函数:
```c
void buchongfu() {
int list[N], i, j, r, k;
const char* s[N] = { "aa", "...", 57个同学名字" }; // 人名单
printf("随机点名,输入'0'退出.\n");
while (1) {
printf("请问想点几个:");
scanf("%d", &k); // 输入人数
if (k == 0) break;
if (k > N) {
printf("输入错误\n");
continue;
}
srand(time(NULL));
for (i = 0; i < k; i++) {
r = rand() % N;
list[i] = r;
}
// 输出人名
for (i = 0; i < k; i++) {
printf("%s\n", s[list[i]]);
}
}
}
```
运行效果
程序运行时会显示一个菜单,用户可以选择不同的点名模式(重复点名或不重复点名)。
根据选择的模式,程序会从指定的txt文件中读取学生名单,并进行随机点名。
点名结果会显示在屏幕上,并可以选择保存到文件中。
这个示例程序提供了一个基本的框架,可以根据具体需求进行扩展和优化,例如增加更多的功能或改进用户界面。