求C語言編寫一個(gè)隨機(jī)點(diǎn)名系統(tǒng)
- 資格考試
- 2023-06-04 13:00:36
求程序大佬用C語言寫一個(gè)隨機(jī)點(diǎn)名的程序?
例:
#include<stdio.h>/*standardinput&output*/
#include<stdlib.h>/*standardlibary*/
#include<string.h>/*string*/
#include<conio.h>/*ConsoleInput/Output*/
#include<time.h>
structstudentinfo/*學(xué)生信息的結(jié)構(gòu)體*/
{
charsNo[5];/*學(xué)生編號(hào)*/
charsxueNo[14];/*學(xué)號(hào)*/
charsname[20];/*學(xué)生的姓名*/
}st[100];
charhash[100]={0};/*鏈表的數(shù)組*/
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");/*顯示所有的學(xué)生信息*/
while(fgets(line,sizeof(line)-1,fp))
{
if(line[0]!='\n'&&line[0]?。剑ВВ?/p>
{
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++;/*統(tǒng)計(jì)人數(shù)*/
}
}
/*設(shè)置隨機(jī)數(shù)種子*/
srand((unsigned)time(NULL));
/*sizeof(類型符)是計(jì)算類型所占字節(jié)數(shù),sizeof(int)是int所占字節(jié)數(shù),再乘以i,得到i個(gè)int型數(shù)據(jù)的總字節(jié)數(shù)。malloc函數(shù)用于動(dòng)態(tài)開辟一塊內(nèi)存空間,參數(shù)為開辟的內(nèi)存空間字節(jié)數(shù),返回開辟的內(nèi)存空間的首地址指針。*/
a=(int*)malloc(sizeof(int)*i);
memset(a,-1,sizeof(a));/*將已開辟內(nèi)存空間a的第4個(gè)字節(jié)設(shè)置為-1*/
printf("按空格鍵點(diǎn)名,其他鍵退出:");
fflush(stdin);
while((ch=getch())=='')
/*while(?。╟h=getch())==NULL)*/
{
if(flag==i)/*如果flag等于總?cè)藬?shù)*/
{
printf("%s\n","點(diǎn)名結(jié)束");
break;
}
RN=rand()%i;/*產(chǎn)生一個(gè)隨機(jī)數(shù)*/
while(hash[RN]==1)/*判斷有沒有完成某個(gè)一個(gè)學(xué)生點(diǎn)名*/
RN=rand()%i;/*產(chǎn)生隨機(jī)數(shù)*/
flag++;/*計(jì)數(shù)*/
printf("\n~~~~~\n%s\n%s\n%s\n------------\n",st[RN].sNo,st[RN].sxueNo,st[RN].sname);/*輸出學(xué)生的信息*/
hash[RN]=1;
}
}
擴(kuò)展資料:
printf函數(shù)使用注意事項(xiàng)
1、域?qū)?/p>
%d:按整型數(shù)據(jù)的實(shí)際長(zhǎng)度輸出。
如果想輸出指定寬度可以指定域?qū)?,%md-->m域?qū)?,打印出來以后,在控制臺(tái)上,顯示m位;
如果我們要打印的數(shù)的位數(shù)如果超過我們?cè)O(shè)定m則原樣輸出;
如果我們要打印的數(shù)的位數(shù)如果小于我們?cè)O(shè)定的位數(shù),則補(bǔ)空白,具體如下:
如果m為正數(shù),則左對(duì)齊(左側(cè)補(bǔ)空白);
如果m為負(fù)數(shù),則右對(duì)齊(右側(cè)補(bǔ)空白)。
2、轉(zhuǎn)義字符
如果想輸出字符"%",則應(yīng)該在“格式控制”字符串中用連續(xù)兩個(gè)%表示。
如:printf("%f%%",1.0/3);輸出結(jié)果:0.333333%。
c語言 隨機(jī)點(diǎn)名
#include
#include
#include
#defineSTU_NUM_MAX64//假設(shè)最多有64個(gè)學(xué)生
structStudent
{
charname[10];
intstuID;
}stu[STU_NUM_MAX];
intexist[STU_NUM_MAX];//用以保存被點(diǎn)過名
staticintindex=0;//記住點(diǎn)名的次數(shù)
voidIitialize(){
for(inti=0;i}
boolIsExist(intid){
for(inti=0;iif(exist[i]==id)returntrue;//已存在
returnfalse;//不存在
}
voidAdd()//添加數(shù)據(jù)
{
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()//隨機(jī)點(diǎn)名
{
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隨機(jī)點(diǎn)到的學(xué)號(hào)為:%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.添加數(shù)據(jù)2.隨機(jī)點(diǎn)名3.退出\n請(qǐng)選擇:");
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;
}
上面的代碼,我留下幾個(gè)細(xì)節(jié)問題留給你自己學(xué)著解決,都是很簡(jiǎn)單的:
上面的代碼,我沒有對(duì)重復(fù)的學(xué)號(hào)作判斷。
上面的代碼,我沒有把點(diǎn)名存放到另一個(gè)文件,而是用數(shù)組替代(可以實(shí)現(xiàn)的也很簡(jiǎn)單)。我怕寫得代碼太多,百度限制提交。
上面的代碼,是測(cè)試數(shù)據(jù),stu.dat目標(biāo)文件并沒有64個(gè)學(xué)生,我只寫入了12條數(shù)據(jù)。
上面的代碼,我沒有對(duì)數(shù)據(jù)數(shù)量(最多64條)作判斷。