求C语言编写一个随机点名系统
- 资格考试
- 2023-06-04 13:00:36
求程序大佬用C语言写一个随机点名的程序?
例:
#include<stdio.h>/*standardinput&output*/
#include<stdlib.h>/*standardlibary*/
#include<string.h>/*string*/
#include<conio.h>/*ConsoleInput/Output*/
#include<time.h>
structstudentinfo/*学生信息的结构体*/
{
charsNo[5];/*学生编号*/
charsxueNo[14];/*学号*/
charsname[20];/*学生的姓名*/
}st[100];
charhash[100]={0};/*链表的数组*/
intmain()
{
inti=0,j=0,flag=0,RN,*a;
FILE*fp;
charch,filename[20]={0},line[100]={0};
printf("Pleaseinputfilename:");
//fflush(stdin);/*用来清空输入缓存,以便不影响后面输入的东西*/
gets(filename);/*键盘输入文件名*/
fp=fopen(filename,"r");/*openreadonly*/
printf("名单如下:\n");/*显示所有的学生信息*/
while(fgets(line,sizeof(line)-1,fp))
{
if(line[0]!='\n'&&line[0]!='')
{
sscanf(line,"%s%s%s\n",st[i].sNo,st[i].sxueNo,st[i].sname);/*文件输入*/
printf("%s\n%s\n%s\n",st[i].sNo,st[i].sxueNo,st[i].sname);/*打印出来*/
i++;/*统计人数*/
}
}
/*设置随机数种子*/
srand((unsigned)time(NULL));
/*sizeof(类型符)是计算类型所占字节数,sizeof(int)是int所占字节数,再乘以i,得到i个int型数据的总字节数。malloc函数用于动态开辟一块内存空间,参数为开辟的内存空间字节数,返回开辟的内存空间的首地址指针。*/
a=(int*)malloc(sizeof(int)*i);
memset(a,-1,sizeof(a));/*将已开辟内存空间a的第4个字节设置为-1*/
printf("按空格键点名,其他键退出:");
fflush(stdin);
while((ch=getch())=='')
/*while(!(ch=getch())==NULL)*/
{
if(flag==i)/*如果flag等于总人数*/
{
printf("%s\n","点名结束");
break;
}
RN=rand()%i;/*产生一个随机数*/
while(hash[RN]==1)/*判断有没有完成某个一个学生点名*/
RN=rand()%i;/*产生随机数*/
flag++;/*计数*/
printf("\n~~~~~\n%s\n%s\n%s\n------------\n",st[RN].sNo,st[RN].sxueNo,st[RN].sname);/*输出学生的信息*/
hash[RN]=1;
}
}
扩展资料:
printf函数使用注意事项
1、域宽
%d:按整型数据的实际长度输出。
如果想输出指定宽度可以指定域宽,%md-->m域宽,打印出来以后,在控制台上,显示m位;
如果我们要打印的数的位数如果超过我们设定m则原样输出;
如果我们要打印的数的位数如果小于我们设定的位数,则补空白,具体如下:
如果m为正数,则左对齐(左侧补空白);
如果m为负数,则右对齐(右侧补空白)。
2、转义字符
如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示。
如:printf("%f%%",1.0/3);输出结果:0.333333%。
c语言 随机点名
#include
#include
#include
#defineSTU_NUM_MAX64//假设最多有64个学生
structStudent
{
charname[10];
intstuID;
}stu[STU_NUM_MAX];
intexist[STU_NUM_MAX];//用以保存被点过名
staticintindex=0;//记住点名的次数
voidIitialize(){
for(inti=0;i}
boolIsExist(intid){
for(inti=0;iif(exist[i]==id)returntrue;//已存在
returnfalse;//不存在
}
voidAdd()//添加数据
{
FILE*fp;
intstu_num;
printf("\t\tYouwanttoinputthenumberofstudent?:");
scanf("%d",&stu_num);
for(inti=0;iprintf("\n");
printf("\t\tPleaseinputstudentID:");
scanf("%d",&stu[i].stuID);
printf("\t\tPleaseinputstudentname:");
scanf("%s",stu[i].name);
fflush(stdin);
}
if((fp=fopen("stu.dat","ab"))==NULL) {
printf("Can'topenfile\n");
exit(1);
}
for(intj=0;j{
if(fwrite(&stu[j],sizeof(structStudent),1,fp)!=1)
printf("Errorwritingfile.\n");
}
fclose(fp);
}
voidrollcall()//随机点名
{
FILE*fp;
if((fp=fopen("stu.dat","rb"))==NULL)
{
printf("Can'topenfile.\n");
exit(1);
}
srand((unsigned)time(NULL));
inti=0;
intrandID=rand()%(64-1+1)+1;//1~64
printf("\t\t随机点到的学号为:%d\n\t\t%s\t%s\n",randID,"StuID","StuName");
do
{
fseek(fp,i*sizeof(structStudent),SEEK_SET);
if(fread(&stu[i],sizeof(structStudent),1,fp))
{
if(stu[i].stuID==randID&&!IsExist(randID)){
printf("\t\t%4d\t%5s\n",stu[i].stuID,stu[i].name);
exist[index++]=randID;
break;}
}
i++;
}while(!feof(fp));
fclose(fp);
}
intmain()
{
intselect=0;
charanswer='y';
Iitialize();
do
{
printf("1.添加数据2.随机点名3.退出\n请选择:");
fflush(stdin);
scanf("%d",&select);
switch(select)
{
case1:
Add();
break;
case2:
rollcall();
break;
case3:
return0;
}
fflush(stdin);
printf("Youwanttocontinue?:");
scanf("%c",&answer);
}while(answer=='y'||answer=='Y');
return0;
}
上面的代码,我留下几个细节问题留给你自己学着解决,都是很简单的:
上面的代码,我没有对重复的学号作判断。
上面的代码,我没有把点名存放到另一个文件,而是用数组替代(可以实现的也很简单)。我怕写得代码太多,百度限制提交。
上面的代码,是测试数据,stu.dat目标文件并没有64个学生,我只写入了12条数据。
上面的代码,我没有对数据数量(最多64条)作判断。
课堂随机点名系统程序设计。
查找:我认为,首先把txt文件存在硬盘上,最好在学生前面编上序号,完了用rand(srand)抽取号码。抽取完毕后,用号码对应用c语言函数fscanf查找号码所对应的学生姓名。 删除和添加可以直接在txt里进行。如果非要在程序中的话,用fprintf就可以实现了。 随机点名:从网上下载个汉语的发音包,用c调用即可。 rand(srand)用法: 计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子。(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们又重复出现了。)用c语言编写一个自动点名系统,具体要求如下一、具体题目: 设计一个供教师上课使用的
#include用c语言编一个上课点名系统
是作业吗? 如果不是作业的话,建议还是别这么麻烦,弄一张表把。 现在外国都流行用EXCEL抽人,EXCEL(新版本的,好像2010里面有),有一个 抽样的类型,能够从表中随机抽出数据。。 然后在用VLOOKUP显示人名就好了。。。 如果是作业的话。。。用C++,面向对象,秒杀级别的作业。。 新建一个STUDENT类,然后将学好和姓名设置成PUBLIC成员。 然后再新建一个STUDENT类数组,然后读入文件即可。。。关键还是在于TXT文件格式怎么分割的问题。。其实也不难,CSTRING里面有很丰富的成员方法,用一些来拼接就好。 最后再找在VC的库里面找一个随机函数,或者自己写一个也行。。。 秒杀下一篇
返回列表