當前位置:首頁 » 編程語言 » c語言隨機點名

c語言隨機點名

發布時間: 2022-04-20 12:20:10

1. c語言 隨機點名

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#defineSTU_NUM_MAX64//假設最多有64個學生
structStudent
{
charname[10];
intstuID;
}stu[STU_NUM_MAX];
intexist[STU_NUM_MAX];//用以保存被點過名
staticintindex=0;//記住點名的次數
voidIitialize(){
for(inti=0;i<STU_NUM_MAX;i++)exist[i]=0;
}
boolIsExist(intid){
for(inti=0;i<STU_NUM_MAX;i++)
if(exist[i]==id)returntrue;//已存在
returnfalse;//不存在
}
voidAdd()//添加數據
{
FILE*fp;
intstu_num;
printf(" ?:");
scanf("%d",&stu_num);
for(inti=0;i<stu_num;i++){
printf(" ");
printf(" PleaseinputstudentID:");
scanf("%d",&stu[i].stuID);
printf(" Pleaseinputstudentname:");
scanf("%s",stu[i].name);
fflush(stdin);
}
if((fp=fopen("stu.dat","ab"))==NULL) {
printf("Can'topenfile ");
exit(1);
}
for(intj=0;j<stu_num;j++)
{
if(fwrite(&stu[j],sizeof(structStudent),1,fp)!=1)
printf("Errorwritingfile. ");
}
fclose(fp);
}
voidrollcall()//隨機點名
{
FILE*fp;
if((fp=fopen("stu.dat","rb"))==NULL)
{
printf("Can'topenfile. ");
exit(1);
}
srand((unsigned)time(NULL));
inti=0;
intrandID=rand()%(64-1+1)+1;//1~64
printf(" 隨機點到的學號為:%d %s %s ",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(" %4d %5s ",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.退出 請選擇:");
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;
}

上面的代碼,我留下幾個細節問題留給你自己學著解決,都是很簡單的:

  1. 上面的代碼,我沒有對重復的學號作判斷。

  2. 上面的代碼,我沒有把點名存放到另一個文件,而是用數組替代(可以實現的也很簡單)。我怕寫得代碼太多,網路限制提交。

  3. 上面的代碼,是測試數據,stu.dat目標文件並沒有64個學生,我只寫入了12條數據。

  4. 上面的代碼,我沒有對數據數量(最多64條)作判斷。

2. 怎麼用C語言編寫隨機點名

使用系統函數 int rand(void)產生偽隨機數,先用void srand(unsigned int seed)函數設置隨機種子,這樣就會產生真正的隨機函數

3. c語言 課堂隨機點名程序

10分就想要這個程序呀!
這個不好做,你先等等吧

4. c語言課堂隨機點名

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>

#defineMAXSTUDENT100

charName[MAXSTUDENT][16];

//讀文件內保存的學生姓名
intreadName(constchar*fileName)
{
intpos,slen;
FILE*fp=fopen(fileName,"r");
if(fp==NULL)return0;
memset(Name,0,sizeof(Name));

pos=0;
while(!feof(fp)&&pos<MAXSTUDENT)
{
fgets(Name[pos],16,fp);
slen=strlen(Name[pos]);
if(slen>0)
{
slen--;
while(Name[pos][slen]==10||Name[pos][slen]==13)Name[pos][slen--]=0;//去掉字元串後的換行符
pos++;
}
}
printf("讀入%d人姓名 ",pos);
fclose(fp);
returnpos;
}

voidmain()
{
charfileName[32];
intn,pos,loop;
charflag[100];
srand(time(NULL));
printf("請輸入學生姓名文件名:");
scanf("%s",fileName);
n=readName(fileName);

if(n==0)
{
printf("讀取錯誤,請確認文件%s是否名是否正確,文件的格式是否正確! ",fileName);
return;
}
getchar();
memset(flag,0,sizeof(flag));
while(1)
{
pos=rand()%n;
loop=0;
while(flag[pos])//可以保證每個人都點到一次
{
if(++loop>n)memset(flag,0,sizeof(flag));
pos=rand()%n;
}
flag[pos]=1;
printf("點%s",Name[pos]);
if(getchar()!=10)break;
}
}

熱點內容
ios6G與安卓12G哪個更快 發布:2025-01-24 11:26:22 瀏覽:827
下線源碼 發布:2025-01-24 11:26:22 瀏覽:523
windows8解壓軟體 發布:2025-01-24 11:04:41 瀏覽:559
藍牙聊天源碼 發布:2025-01-24 11:03:13 瀏覽:124
安卓是什麼意思是vivo嗎 發布:2025-01-24 11:01:32 瀏覽:486
懸賞網源碼 發布:2025-01-24 10:53:14 瀏覽:733
c語言時間變數 發布:2025-01-24 10:40:24 瀏覽:870
ppiandroid 發布:2025-01-24 10:25:50 瀏覽:1001
兒童壓縮機 發布:2025-01-24 10:25:09 瀏覽:75
蘋果的允許訪問在哪裡 發布:2025-01-24 10:24:32 瀏覽:32