1. C语言编程题目 实现银行的电子排队业务 急~ 40分
这次完全改好了:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct node
{
int num;
char name[20];
}LNode;
LNode QUEUE[20];
int front=0;
int rear=0;
int i=0;
int main()
{
int MAINX(LNode QUEUE[20]/*,int front,int rear*/); //改动
MAINX(QUEUE/*,front,rear*/);//改动
return 0;
}
int MAINX(LNode QUEUE[20]/*,int front,int rear*/)
{
int ADDCQ(LNode QUEUE[20]/*,int front,int rear*/);
int dayin(LNode QUEUE[20]/*,int front,int rear*/);
int pan(LNode QUEUE[20]/*,int front,int rear*/);
while(1)
{
ADDCQ(QUEUE/*,front,rear*/);
dayin(QUEUE/*,front,rear*/);
pan(QUEUE/*,front,rear*/);
}
return 0;
}
int pan(LNode QUEUE[20]/*,int front,int rear*/) //判断
{
int dayin(LNode QUEUE[20]/*,int front,int rear*/);
int DELCQ(LNode QUEUE[20]/*,int front,int rear*/);
char operation;
printf("处理完毕请输入Y 需要新客户服务请输入N:");
scanf("%s",&operation);
if (operation=='Y')
{
DELCQ(QUEUE/*,front,rear*/);
dayin(QUEUE/*,front,rear*/);
pan(QUEUE/*,front,rear*/);//改动
}
return 0;
}
int ADDCQ(LNode QUEUE[20]/*,int front,int rear*/) //添加
{
int pan(LNode QUEUE[20]/*,int front,int rear*/);
printf("请客户输入姓名以得到服务编号:");
if((rear+1)%20==front)
{
printf("队列已满,请稍候再领取服务编号。\n");
pan(QUEUE/*,front,rear*/); //改动
}
else
{
//getchar();
//gets(QUEUE[(++rear)%20].name);
scanf("%s",&QUEUE[(++rear)%20].name);
i++;
QUEUE[rear%20].num=i;
}
return 0;
}
int DELCQ(LNode QUEUE[20]/*,int front,int rear*/) //删除
{
int pan(LNode QUEUE[20]/*,int front,int rear*/);
if(front==rear)
{
printf("输入错误。");
pan(QUEUE/*,front,rear*/);//改动
}
else
{
front=(front+1)%20;
}
return 0;
}
int dayin(LNode QUEUE[20]/*,int front,int rear*/) //打印等待列表
{
int j,k;
printf("当前客户等待情况:\n");
if(i==1&&front==rear)
printf("无等待。\n");
else
{
k=front+2;
for(j=QUEUE[front+2].num;j<=i;j++,k++)
{
k=k%20;
printf("处理编号:%d 客户姓名:%s\n",QUEUE[k].num,QUEUE[k].name);
}
}
return 0;
}
2. C语言编程问题:小白鼠排队
我发现了以下几个问题:
1,你的本意是想定义几个字符数组,来装这几个老鼠的名字。但是,你只定义了一个字符数组,说明只能装一个名字,所以是不行的。建议定义成二维的字符,如a[100][100],这样你就能装最多100个老鼠的名字了。
2,字符串的末尾是需要有'\0'作为结束标志的,而你的程序没有这一项,这也是不可以的,建议在定义的时候就初始化成0。
3,q=color[i];
color[i]=color[i+1];
color[i+1]=q;
这个地方,说明你对字符串这一块还不是很了解,建议找相关书籍看一下。字符串是不能直接这样相互复制的,需要调用strcpy函数。而且,你定义的q只是一个简单的字符,不是字符串,字符串是不能直接赋值给字符的,所以这个地方不对。q要定义字符串,比如q[100]。
由于我是定义了二维数组,所以此时color[i]不是第i个老鼠的名字,而是这个存放老鼠名字的首地址。
4,建议在输入前输入提示符,这样便于别人阅读和运行。我把我改的给你,你看看,也许还有问题,请你自己完善吧。。。
有什么不懂的,请追问。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{ int a[100],p;
char color[10][100]={0},q[100]={0};
int n,i,k;
printf("How many numbers do you want to put in?\n");
scanf("%d",&n);
printf("Please input the numbers and names:\n");
for(i=0;i<n;i++)
{
scanf("%d %s",&a[i],color[i]);
//gets(color[i]);
}
for(k=n-1;k>0;k--)
{
for(i=0;i<k;i++)
{
if(a[i]<a[i+1])
{ p=a[i];
a[i]=a[i+1];
a[i+1]=p;
strcpy(q,color[i]);
strcpy(color[i],color[i+1]);
strcpy(color[i+1],q);
}
}
}
for(i=0;i<n;i++)
{
printf("%d %s\n",a[i],color[i]);
}
return 0;
}
3. 有道编程题,模拟银行排队取号办理业务,每个人办理业务时间随机,柜台开发数随机,要求能动态开发柜台,
这个如果是在Windows下用可视化编程话,那是极其容易的,在dos可以模拟这个过程,算法如下:
1、数据结构
柜台:①处理状态,忙还是闲还是休息
②正在处理的顾客号
③开始处理的时间
顾客:①顾客编号
②办理业务需要的时间
③处理状态,等待或正在处理
2、程序流程
程序开始
创建柜台对列(柜台数组);
创建空的顾客队列
;
进入循环:
①检查柜台数组有无正在处理业务的柜台,并根据电脑时间看看是否处理完毕,如果处理完毕则要清理顾客队列;
②检查顾客队列是否有待处理的顾客,如果有,则要检查柜台,随机安排可用的柜台
③检查有无键盘输入,如果没有,继续下轮循环,如果有,看是什么,如果是创建顾客的按键,则创建一个随机时间的顾客,加入队列;如果是增减柜台,则增减柜台可用数,如果是退出,则退出程序,如果是无效输入则可提示输入帮助
循环体结束
为了增强效果,有处理状态变化时,可以显示出来,如几号顾客开始等待/开始处理/处理完毕用时多少等等
希望对你有所启示
代码还得你自己写
4. 数据结构排队问题编程
为了提高模仿程度,肯定需要好几个窗体程序之间独立运行 但是又必须互通数据,这样做是不是需要一个服务器?另外,像银行那样 多台机子服务客户,怎样做好相互通信?不知道这样说是不是听的明白,请问主要需要
5. C语言编程题目 实现银行的电子排队业务 急~
这次终于改好了:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct node
{
int num;
char name[20];
}LNode;
LNode QUEUE[20];
int front=0;
int rear=0;
int i=0;
int main()
{
int MAINX(LNode QUEUE[20]/*,int front,int rear*/); //改动
MAINX(QUEUE/*,front,rear*/);//改动
return 0;
}
int MAINX(LNode QUEUE[20]/*,int front,int rear*/)
{
int ADDCQ(LNode QUEUE[20]/*,int front,int rear*/);
int dayin(LNode QUEUE[20]/*,int front,int rear*/);
int pan(LNode QUEUE[20]/*,int front,int rear*/);
while(1)
{
ADDCQ(QUEUE/*,front,rear*/);
dayin(QUEUE/*,front,rear*/);
pan(QUEUE/*,front,rear*/);
}
return 0;
}
int pan(LNode QUEUE[20]/*,int front,int rear*/) //判断
{
int dayin(LNode QUEUE[20]/*,int front,int rear*/);
int DELCQ(LNode QUEUE[20]/*,int front,int rear*/);
char operation;
printf("处理完毕请输入Y 需要新客户服务请输入N:");
scanf("%s",&operation);
if (operation=='Y')
{
DELCQ(QUEUE/*,front,rear*/);
dayin(QUEUE/*,front,rear*/);
pan(QUEUE/*,front,rear*/);//改动
}
return 0;
}
int ADDCQ(LNode QUEUE[20]/*,int front,int rear*/) //添加
{
int pan(LNode QUEUE[20]/*,int front,int rear*/);
printf("请客户输入姓名以得到服务编号:");
if((rear+1)%20==front)
{
printf("队列已满,请稍候再领取服务编号。\n");
pan(QUEUE/*,front,rear*/); //改动
}
else
{
//getchar();
//gets(QUEUE[(++rear)%20].name);
scanf("%s",&QUEUE[(++rear)%20].name);
i++;
QUEUE[rear%20].num=i;
}
return 0;
}
int DELCQ(LNode QUEUE[20]/*,int front,int rear*/) //删除
{
int pan(LNode QUEUE[20]/*,int front,int rear*/);
if(front==rear)
{
printf("输入错误。");
pan(QUEUE/*,front,rear*/);//改动
}
else
{
front=(front+1)%20;
}
return 0;
}
int dayin(LNode QUEUE[20]/*,int front,int rear*/) //打印等待列表
{
int j,k;
printf("当前客户等待情况:\n");
if(i==1&&front==rear)
printf("无等待。\n");
else
{
k=front+2;
for(j=QUEUE[front+2].num;j<=i;j++,k++)
{
k=k%20;
printf("处理编号:%d 客户姓名:%s\n",QUEUE[k].num,QUEUE[k].name);
}
}
return 0;
}
6. C语言模拟排队编程,急求完整答案
这个题有够无聊的,
不过这明显是个基础教学用PPT,是帮助理解的案例,不是用来考人的,
那这些模拟数字应该都是直接写入的吧:
//state1
int q[10];
//state2
q[0] = 9;
q[1] = 5;
q[2] = 2;
q[3] = 7;
//state3
q[4] = 6;
q[5] = 4;
//state4
for(int i = 0;i < 4;i++){q[i] = q[i+2];}
q[4] = 0;q[5] = 0;
//state5
for(int i = 4;i >= 3;i--){q[i] = q[i-1];}
q[4] = 3;
//state6
int k;
for(int i = 0;i <= 4;i++){if(q[i] == 3){k = i;break;}}
//state7
for(int i = k;i < 4;i++){q[i] = q[i+1];}
q[4] = 0;
//state8
for(int i = 0;i < 4;i++){cout<<q[i];}
7. C语言编程题目
#include<stdio.h>
intmain()
{intn,i,f=0;
scanf("%d",&n);
for(i=2;i<=n;i++)f=(f+3)%i;
if(!f)f=n;
printf("%d
",f);
return0;
}
8. C语言编程题,13个人围成圈编号1~13数到3的出列,然后从第四个开始为1继续数到3的出列,最后剩下的是几号
结果是13号!
代码:
#include<stdio.h>
#define N 13
int main()
{
int flag[N+1] = {0}; //标志已出列的人,第0位不用
int i,j,out = 0;
i=1; //i为人的标号,初始值为1
j=0; //j为数的数字,当j=3时,对应的人出列
while(out < N) //out为已出列的人数,当out=N-1时,循环退出
{
if(flag[i] == 0) j++;
if(j == 3)
{
flag[i] = 1; //标志此人出列
j = 0; //重新开始数数字
out ++; //出列人数加1
}
i ++;
if(i == N) i = 0; //重新从1号人开始数
}
i = 1;
while(flag[i] == 1) i++;
printf("最后剩下的小孩为%d号!\n",i);
return 0;
}
9. 求编程题(看病要排队)的代码,必须用C语言解答,越基础越容易看懂越好,不要从别处来
struct BR_ //病人结构体;
{
int id; //病人ID;
int lv;//病人等级;
};
int main()
{
int n,i,j,yisheng,binglv,brnum = 0;
BR_ b2y[3][100] = { };//存放每个医生对应的病人;
int bingnum[3] = {}; //存放每个医生对应的病人个数;
char order[5];
//这里可以把所有输入的字串,存起来,再一一解决; 但是你原来的代码,是输入一个处理一个;
//所以 我也输入一个 处理一个了;
//但是题意是 : 输入完成后,再依次输出;
//所以,只能把要输出的东西,存在一个数组里面(下面的数组);等输入完成后再统一依次输出
char print_[300][8] = {}; //用来存放 最后print的字符串; 每一个out 都要处理一下;
int str_num = 0; //字符串的条数;
scanf("%d",&n);
for(j = 0 ; j < n;++j)
{
scanf("%s",order);
if(strcmp(order,"IN") == 0 ) //字符串比较,如果输入的IN,
{
brnum += 1;
scanf("%d",&yisheng);
scanf("%d",&binglv);
BR_ temp;
temp.id = brnum;
temp.lv = binglv;
b2y[ yisheng ][ bingnum[yisheng] ] = temp;
bingnum[yisheng]++;
//排序; 把等级高的 放在前面; 注意使用 稳定排序 的方式;比如下面的选择排序;
int pos = 0;
while(pos != n - 1)
{
for(i = pos + 1; i< n;++i)
{
if(b2y[yisheng][pos].lv < b2y[yisheng][i].lv)
{
BR_ temp1 = b2y[yisheng][pos];
b2y[yisheng][pos] = b2y[yisheng][i];
b2y[yisheng][i] = temp1;
}
}
pos++;
}
}
else if( strcmp(order,"OUT") == 0) //
{
scanf("%d",&yisheng);
if(bingnum[yisheng] <= 0) //如果这个医生当前病人为0 输出empty;
strcpy(print_[str_num++],"EMPTY");
else //不为0;输出排在最前面(也就是等级最高的病人);
{
char temp;
itoa(b2y[yisheng][0].id,print_[str_num++],10);
//最前面的病人 已经处理了,所以把数组后面的元素依次往前移动;
for(i = 0;i < bingnum[yisheng] - 1;++i)
{
b2y[yisheng][i] = b2y[yisheng][i + 1];
}
bingnum[yisheng]--;//病人数量递减;
}
}
}
for(i = 0 ; i < str_num;++i)
printf("%s\n",print_[i]);
return 0;
}
10. C语言程序设计题目:编写模拟同学排队打饭程序
代码: #include"stdio.h"
#include"stdlib.h"
#include"conio.h"
#include"string.h"
#include"io.h"
#define ESC 27
#define ENTER 13
#define Y 89
#define y 121
#define N 78
#define n 110
void vmenu1();
char choose();
void password();
char *getps();
void mimam();
void build();
void save();
void buy();
void open1();
void modify();
void modifyM();
void XnumM();
void XclassM();
void XnameM();
void add();
void xuehaoA();
void xingmingA();
void query();
void xuehaoQ();
void xingmingQ();
void delete1();
void xuehaoD();
void xingmingD();
void sort();
void sortX();
void sortN();
void sortA();
void all();
void help();
void lock();
void exit1();
struct record
{
char cnumber[15];
char cclass[15];
char cname[15];
char cmoney[10];
char cspend[10];
struct record *next;
};
struct sot
{
char ccnumber[15];
struct sot *pnext;
};
struct address
{
char *adss;
struct address *anext;
};
struct sot *chead=NULL;
struct record *head=NULL,*ppointer=NULL,*temp;
struct record *modf;
struct address *ahead=NULL;
FILE *fp;
int Fflag=0;
int counts=0;
int loop=0;
void main()
{
char menu;
password();
while(loop==0)
{
system("CLS");
vmenu1();
menu=choose();
switch(menu)
{
case '1':build();break;
case '2':count++;
if(count==1)
{
buy();
break;
}
else
{
chead=NULL;
buy();
break;
}
case '3':open1();break;
case '4':modify();k=0;break;
case '6':query();break;
case '7':delete1();break;
case '9':all();break;
case 'b':help();break;
case 'c':lock();break;
case 'd':{loop=1;exit1();break;}
default:
printf("----------------------------请输入菜单上的序号 ------------------------\n");
printf("---------------------------按任意键重新开始选择 -----------------------\n");
fflush(stdin);
a=getch();
}
}
}
void password()
{
char password[15];
char *password1;
char *password2;
char p1[15];
char p2[15];
char a;
int i;
int count=0;
if(access("c:\\mima.txt",00)!=0)
{
while(1)
{
system("CLS");
for(i=0;i<5;i++)
printf("\n");
printf("\t\t欢迎使用学生打饭系统!\n\n");
printf("\n");
printf("\n----------------------------请创建管理员密码:--------------------------------\n");
password1=getps();
for(i=0;i<15;i++)
p1[i]=*(password1++);
printf("\n");
printf("\n----------------------------请再输入一次密码:--------------------------------\n");
password2=getps();
for(i=0;i<15;i++)
p2[i]=*(password2++);
if(!strcmp(p1,p2))
{
if((fp=fopen("c:\\mima.txt","w"))==NULL)
{
printf("错误!\n");
exit(0);
}
else
{
fprintf(fp,"%s",p1);
printf("\n密码创建完毕!\n");
fclose(fp);
system("cmd.exe /c attrib c:\\mima.txt +h");
break;
}
}
else
{
printf("两次输入不一致,请重新输入密码:\n");
}
}
}
else
{
while(1)
{
count++;
for(i=0;i<5;i++)
printf("\n");
printf("----------------------------请输入管理员密码:----------------------------------\n");
password1=getps();
for(i=0;i<15;i++)
p1[i]=*(password1++);
if((fp=fopen("c:\\mima.txt","r"))==NULL)
{
printf("错误!\n");
exit(0);
}
else
{
fscanf(fp,"%s",password);
fclose(fp);
if(!strcmp(p1,password))
break;
else
printf("\n密码错误!\n");
}
if(count<=9)
{
printf("\n您还有%d次机会。。。。。。\n",10-count);
printf("\n\n\n-------------------请按除ESC外的任意按键重新输入密码!----------------------\n");
a=getch();
if(a==ESC)
exit(0);
}
if(count==10)
{
printf("\n\n您无权使用本系统!\n");
printf("按任意键退出。。。。。。\n");
fflush(stdin);
a=getch();
exit(0);
}
}
}
printf("\n\n\n是否要对密码进行修改?\n");
printf("\t按Y或y更改,其余按键进入系统。\n");
fflush(stdin);
a=getchar();
if(a==Y||a==y)
{
mimam();
}
system("CLS");
for(i=0;i<5;i++)
printf("\n");
printf("\t\t欢迎使用学生打饭系统!\n\n");
printf(" ");
printf("\t\t按任意键进入系统。。。。。。\n\n");
a=getch();
}
char *getps()
{
char p[15];
password=p;
while(1)
{
fflush(stdin);
*password=getch();
if(*password==ENTER)
{
break;
}
putchar('*');
password++;
}
*password='\0';
password=p;
return(password);
}