未来交通编程作品(未来交通手工作品)

2023-11-17 00:35:46 数码极客 bianji01

 

用C语言编程模拟交通路口(十字路口)红绿灯的控制功能

本系统的设计首先必须了解交通路灯的亮灭规律。设有一个十字路口,1、3为南,北

方向,2、4为东,西方向,初始态为4个路口的红灯全亮。之后,1、3路口的绿灯亮,

2、4路口的红灯亮,1、3路口方向通车。延迟一段时间后,1、3路口的绿灯熄灭,而1、

3路口的黄灯开始闪烁。闪烁若干次后,1、3路口的红灯亮,同时2、4路口的绿灯亮,2、

4路口方向开始通车。延迟一段时间后,2、4路口的绿灯熄灭,而黄灯开始闪烁。闪烁若

干次后,再切换到1、3路口方向。之后,重复上述过程。对于各组灯的亮灭,我们运用的

是8255A的输入输出功能。

编程高手帮个忙,数据结构大作业. 交通咨询模拟 要求:建立一个模拟的交通网络(用有向网来表示)

/*在TC2和VC6下都可以顺利运行。

做了一个下午。一定要用我这个噢。

简单的输入错误检测。有完整的说明和

#include/*库文件包含*/

#include/*用于字符串操作*/

#include/*用于exit函数*/

/**************************************************************************

intcheck(char*c)

输入参数:

char*c:输入的字符串

返回参数:

0:字符串中有不符合规定的字符

1:字符串字符符合规定,没有不符合规定的字符.

检查字符串中有否除了0-9,+,-,*,/,(,),之外的其他字符,

如果有,则返回0,表示出现错误。

若没有,则返回1,表式字符串符合规定。

**************************************************************************/

intcheck(char*c)

intk=0;

while(*c!=\0)

if((*c>=0&&*c<=9)||*c==+||

*c==-||*c==*||*c==/||

*c==.||*c==(||*c==))

printf("inputerror,therehavethecharnotthemathexpressionchar!\n");

return0;

if(*c==()

elseif(*c==))

if(k!=0)

printf("inputerror,thereisnothavecorrectbracket()!\n");

return0;

return1;

/**************************************************************************

voidmove(char*f,double*s,intp)

输入参数:

char*f:运算符数组

double*s:数值数组

intp:当前运算符数组位置。

返回参数:

将当前已经完成运算的运算符消去,同时将数值数组的位置调整以进行下一次运算。

传入值p若为3

则当前符号的数组位置为3.

f[3]=f[3+1].......f[len-2]=f[len-1]f[len-1]=\0;

s[i]=s[i+1].......s[len-1]=s[len]因为数值比运算符多一个。

***************************************************************************/

voidmove(char*f,double*s,intp)

inti=0,len=strlen(f);

for(i=p;i

{/*即把乘和除号的位置用后面的加和减号填充*/

f[i]=f[i+1];

s[i]=s[i+1];

s[i]=s[i+1];

f[len-1]=\0;

/**************************************************************************

doubleconvnum(char*c)

输入参数:

char*c:由数字和小数点组成的字符,用以转换成double型的数值。

返回参数:

num:返回转换好的值。

将输入的字符串先将其小数点以前的部分复制到temp[]数组中,

若有小数点,则将小数点之后的数值,也就是小数部分先进行计算,值存入num中

计算完成后,再对整数部分进行计算,值加上小数部分的值,存入num中。

***************************************************************************/

doubleconvnum(char*c)

doublenum=0.0;

doublea=1.0;

inti=0,p=0,len=0;

chartemp[100];

inttempi=0;

intstart=0;

intf=1;/*正负符号指示器,若为1则为正数,为-1,此数为负数*/

len=strlen?;

if(c[0]==-)

start=1;

f=-1;

for(i=start;i

if(c[i]==.)

break;

temp[tempi++]=c[i];/*将整数部分复制到temp[]中*/

temp[tempi]=\0;

if(p!=0)

for(i=p+1;i

if(c[i]==.)/*如果有多余的小数点,则表示输入错误*/

printf("thereismorethatonedot.innumber!error!\n");

exit(0);

a=a*0.1;

num+=(a*(c[i]-48));

a=1.0;

len=strlen(temp);/*计算整数部分*/

for(i=len-1;i>=0;i--)

num=num+(a*(temp[i]-48));

a*=10;

num=num*f;

returnnum;

/**************************************************************************

doublegood(char*c)

输入参数:

char*c:即将进行运算的字符串型数学表达式。如3.5+(2*3/5)

返回参数:

s[0]:计算结果将放入s[0]中

将输入的字符串中的数字分别调用convnum(char*c)函数进行数值变换,再将其依

次存入doulbes[i]中,将加减乘除运算符依次存入字符串符号数组charf[i]中,

然后如果遇到括号,则将括号内的字符串存入另一字符数组中,然后用此

good(char*c)递归函数进行递归运算。然后根据先乘除,后加减的顺序对已

存入数组的数值根据存入字符串符号数组的运算符进行运算。结果存入s[0]中。

返回最终结果。

***************************************************************************/

doublegood(char*c)/*可递归函数*/

{/*取得数值字符串,并调用convnum转换成double*/

charg[100],number[30];/*g,保存当前的表达式串,number保存一个数的所有字符*/

charf[80];/*保存所有的符号的堆栈*/

intfi=0;/*保存符号的位置指针*/

doubles[80];/*保存当前所有的数的一个堆栈*/

intsi=0;/*保存数字位置指针*/

intk=0;/*若k=1则表示有一对括号*/

intnum=0,i=0;/*num保存新括号内的字符数,i保存number里的字符位置*/

intcc=0;/*乘除符号数量*/

intjj=0;/*加减符号数量*/

while(*c!=\0)/*当p==1和k==0时,表示已经把括号里的内容全部复制到g[100]中了*/

num=0;

switch(*c)

case+:/*当前字符为+-乘除时则表示*/

case-:

case*:

case/:

f[fi++]=*c;

if(*c==*||*c==/)

cc++;

jj++;

if(*(c-1)!=))

number[i]=\0;

i=0;/*完成一个数字的复制,其位置指针i=0*/

s[si++]=convnum(number);

break;

case(:/*有括号,则将当前括号作用范围内的全部字符保存,作为*/

k++;/*一个新的字符表达式进行递归调用good函数计算。*/

while(k>0)

g[num]=*c;

num++;

if(*c==))

elseif(*c==()

g[num-1]=\0;

num=0;/*完成一个括号内容的复制,其位置指针num=0*/

s[si++]=good(g);

break;

default:

number[i++]=*c;

if(*(c+1)==\0)

{number[i]=\0;

s[si++]=convnum(number);

break;

f[fi]=\0;

while(cc>0)

switch(f[i])

case*:cc--;

s[i+1]=s[i]*s[i+1];

move(f,s,i);

break;

case/:cc--;

s[i+1]=s[i]/(float)s[i+1];

move(f,s,i);

break;

default:

break;

while(jj>0)

switch(f[i])

case+:s[i+1]=s[i]+s[i+1];

jj--;

move(f,s,i);

break;

case-:s[i+1]=s[i]-s[i+1];

jj--;

move(f,s,i);

break;

default:

printf("operatorerror!");

break;

returns[0];

voidmain()

charstr[100];

doublesum=0;

intp=1;

while(1)

printf("enterexpression:enterexitendofprogram\n");

scanf("%s",str);

p=strcmp(str,"exit");

if(p==0)

break;

p=check(str);

if(p==0)

continue;

sum=good(str);

printf("%s=%f",str,sum);

printf("\n");

printf("goodbye!\n");

enterexpression:enterexitendofprogram

3.5+(12.3*15+8-(3/2+1))*2+(3.2*3-5)/6(输入)

3.5+(12.3*15+8-(3/2+1))*2+(3.2*3-5)/6=384.266667

enterexpression:enterexitendofprogram

china(输入)

inputerror,therehavethecharnotthemathexpressionchar!

enterexpression:enterexitendofprogram

exit(输入)

goodbye!

抱歉,你可能没有看我清的问题啊,你写的程序完全答非所问啊

声明:易趣百科所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系315127732@qq.com
广告位招租
横幅广告