日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言1e12怎么识别,求大神帮助词法分析,当输入第一个1.2e12时可以输出,当时输入第二个1.2e12时就不能输出了,万分感谢,还有不能识别x=7*8+9中的+9,...

發(fā)布時間:2025/3/15 编程问答 17 豆豆

#include

#include

#include

#include

char?prog[80];?//存放所有輸入字符

char?token[8];?//存放詞組

char?ch;?//單個字符

int?syn,p,m,n;//syn:種別編碼

double?sum;

int?count;

int?Signal;?????????//是否帶正負(fù)號(0不帶,1負(fù)號)

int?xiaoshu;??? ??//是否是小數(shù)

double?isxiaoshu;???????//小數(shù)

int?zhishu; ??????????//是否是指數(shù)

int?index;????????????//指數(shù)冪

int?fushu;???????//是否帶負(fù)號

double?temp;

int?temp2;

void?scanner();

char?*rwtab[6]={“function”,”if”,”then”,”while”,”do”,”endfunc”};

int?main()

{

p=0;

count=0;

xiaoshu=0;

index=0;

int?b,a;

FILE?*fp;

printf(“以文件輸入請按1!\n”);

printf(“以鍵盤輸入請按2!\n”);

scanf(“%d”,&a);

if(a==1)

{

if((fp=fopen(“D:\111.txt”,”r”))==NULL)

{

printf(“Failure?to?open?111.txt!\n”);

exit(0);

}

fscanf(fp,”%s”,prog);

fclose(fp);

}

else?if(a==2)

{

printf(“\n?Please?input?string:\n”);

do{

ch=getchar();

prog[p++]=ch;

}while(ch!=””#””);

}

p=0;

do{

scanner();

switch(syn)

{

printf(“以文件輸出請按1!\n”);

printf(“以屏幕輸出請按2!\n”);

scanf(“%d”,&b);

if(b==1)

{

case?11:??if(xiaoshu==0)

{

fprintf(fp,”%2d,%8d”,syn,(int)sum);

//printf(“(%2d,%8d)\n”,syn,(int)sum);

break;

}

else?if(zhishu==1)

{

fprintf(fp,”(%2d,%10.5e)\n”,syn,sum);

//printf(“(%2d,%10.5e)\n”,syn,sum);

zhishu=0;

xiaoshu=0;

break;

}

else?if(xiaoshu==1)

{

fprintf(fp,”(%2d,%8.4f)\n”,syn,sum);

//printf(“(%2d,%8.4f)\n”,syn,sum);

xiaoshu=0;

break;

}

case?-1:

fprintf(fp,”input?error\n”);

printf(“input?error\n”);

break;

default:

fprintf(fp,”(%2d,%8s)\n”,syn,token);

//printf(“(%2d,%8s)\n”,syn,token);

}

}while(syn!=0);

return?0;

}

else?if(b==2)

{

case?11:??if(xiaoshu==0)

{

printf(“(%2d,%8d)\n”,syn,(int)sum);

break;

}

else?if(zhishu==1)

{

printf(“(%2d,%10.4e)\n”,syn,sum);

zhishu=0;

xiaoshu=0;

break;

}

else?if(xiaoshu==1)

{

printf(“(%2d,%8.4f)\n”,syn,sum);

xiaoshu=0;

break;

}

case?-1:

printf(“input?error\n”);

break;

default:

printf(“(%2d,%8s)\n”,syn,token);

}

while(syn!=0);

return?0;

}

void?scanner()

{

sum=0;

isxiaoshu=0;

m=0;

for(n=0;n<8;n++)

token[n]=NULL;

ch=prog[p++];

while(ch==””?“”||ch==””\n””||ch==””\t””)

ch=prog[p++];

if(((ch>=””a””)&&(ch<=””z””))||((ch>=””A””)&&(ch<=””Z””)))

{

while(((ch>=””a””)&&(ch<=””z””))||((ch>=””A””)&&(ch<=””Z””))||((ch>=””0″”)&&(ch<=””9″”)))

{

token[m++]=ch;

ch=prog[p++];

}

token[m++]=””\0″”;

p–;

syn=10;

for(n=0;n<6;n++)

if(strcmp(token,rwtab[n])==0)

{

syn=n+1;

break;

}

}

else

if((ch>=””0″”)&&(ch<=””9″”))

{

Num:

if(Signal==1)

{

token[m++]=””-“”;

}

while((ch>=””0″”)&&(ch<=””9″”))

{

sum=sum*10+ch-“”0″”;

ch=prog[p++];

}

if(ch==””.””)

{

xiaoshu=1;

ch=prog[p++];

while((ch>=””0″”)&&(ch<=””9″”))

{??????????????????????????????????//pow(x,y)計算x的y次冪

temp=(ch-“”0″”)*pow(0.1,++count);

isxiaoshu=isxiaoshu+temp;

ch=prog[p++];

}

sum=sum+isxiaoshu;

}

if(ch==””e””||ch==””E””)

{

zhishu=1;

ch=prog[p++];

if(ch==””-“”)

{

fushu=1;

ch=prog[p++];

}

while((ch>=””0″”)&&(ch<=””9″”))

{???????????????????????????????//指數(shù)

index=index*10+ch-“”0″”;

ch=prog[p++];

}

if(fushu)

sum=sum*pow(0.1,index);

else

sum=sum*pow(10,index);

}

if(Signal==1)

{

sum=-sum;

Signal=0;

}

p–;

syn=11;

}

else

switch(ch)

{

case?“”

m=0;

token[m++]=ch;

ch=prog[p++];

if(ch==””=””)

{

syn=21;

token[m++]=ch;

}

else?if(ch==””=””)

{

syn=21;

token[m++]=ch;

}

else

{

syn=20;

p–;

}

break;

case?“”>””:

m=0;

token[m++]=ch;

ch=prog[p++];

if(ch==””=””)

{

syn=24;

token[m++]=ch;

}

else

{

syn=23;

p–;

}

break;

case?“”=””:

m=0;

token[m++]=ch;

ch=prog[p++];

if(ch==””=””)

{

syn=25;

token[m++]=ch;

}

else

{

syn=18;

p–;

}

break;

case?“”+””:

temp2=prog[p];

if((temp2>=””0″”)&&(temp2<=””9″”))

{

Signal=2;

ch=prog[p++];

goto?Num;

}

syn=13;

token[m++]=ch;

break;

case?“”-“”:

temp2=prog[p];

if((temp2>=””0″”)&&(temp2<=””9″”))

{

Signal=1;

ch=prog[p++];

goto?Num;

}

syn=14;

token[m++]=ch;

break;

case?“”*””:

syn=15;

token[m++]=ch;

break;

case?“”/””:

syn=16;

token[m++]=ch;

break;

case?“”;””:

syn=26;

token[m++]=ch;

break;

case?“”(“”:

syn=27;

token[m++]=ch;

break;

case?“”)””:

syn=28;

token[m++]=ch;

break;

case””#””:

syn=0;

token[m++]=ch;

break;

default:

syn=-1;

}

}

總結(jié)

以上是生活随笔為你收集整理的C语言1e12怎么识别,求大神帮助词法分析,当输入第一个1.2e12时可以输出,当时输入第二个1.2e12时就不能输出了,万分感谢,还有不能识别x=7*8+9中的+9,...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。