求程序大佬用C语言写一个随机点名的程序? 100

班上一共46人随机点一个人的名字(有一个人是四个字的名字)求大佬写一个模板... 班上一共46人随机点一个人的名字(有一个人是四个字的名字)求大佬写一个模板 展开
 我来答
问明6E
高粉答主

2019-11-13 · 每个回答都超有意思的
知道答主
回答量:279
采纳率:100%
帮助的人:13万
展开全部

例:

#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%。

nicecompione
2019-11-12 · 超过10用户采纳过TA的回答
知道答主
回答量:30
采纳率:58%
帮助的人:14.1万
展开全部
#include<stdio.h>
#include<iostream>
#include<time.h>
#include<string>
#include<stdlib.h>
using namespace std;
const int SUM=46;//总人数
//每个人的名字
string names[SUM]={"张三","李四","王五","1","2","3","4","5","6","7","8","9","10","11","12",
"13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29"
,"30","31","32","33","34","35","36","37","38","39","40","41","42","43"};

int vis[SUM]={0};//记录下这个人是否是被点到了,防止重复点到
int main()
{
srand(time(0));
int n=SUM;
while(n--){
int num=rand()%SUM;
while(vis[num]==1){
num=rand()%SUM;
}
vis[num]=1;
cout<<names[num]<<endl;
}
return 0;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式