当前位置:首页 » 编程软件 » 四则运算的编译器

四则运算的编译器

发布时间: 2022-06-04 00:49:15

‘壹’ 如何编写一个可以计算任意两个实数的四则运算,求余,乘方的c语言计算器

亲,要用什么编译器做呢,是只要代码还是???

‘贰’ 求一个尽量完整的编译器:词法分析器+语法分析器

在一个模式被匹配之前,词法分析器往往需要超前扫描该词素后面的若干个字符,使用将字符退回输入流的方法,需要移动大量字符的时间,由于 词法分析器是编译期间唯一需要逐一扫描源程序字符的过程,因此它的效率将极大的影响编译器的性能,因此人们发明了双缓冲区的技术。
双缓冲区技术原理如下:
把一个缓冲区分成前后两个部分,每部分能够容纳N(1024/4096)个字符,每次系统读命令读入N个字符到前半部分或者后半部分,如果剩余的不足N个字符,则在最后增加一个不同于其他任何字符的字符,如eof/#,用于标识源文件的结束。缓冲区包括两个指针beginning和forward,在两个指针之间的字符串就是当前的词素。一开始两个指针都指向第一个字符,然后forward向后扫描,直至发现一个匹配的词素为止。如果forward跨过中间标记,则往后半部分读入N个字符。如果forward指针移过最后位置,则向前半部分读入N个字符,且forward指针重新指向开始继续处理过程。为了处理方便在两个部分的最后都增加一个文件结束标识eof。示意图如下:
______________________________________________________________________
|............for......while.... ........................................ |....int i .................................................. ...................| |_______________________________eof|_______________eof________________eof|
| |
beginning forward

下面是双缓冲区的一个c实现:

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

#define MAXWORD 1000

struct bibuffer
{
char* buffer[2048]; //缓冲区空间
char* beginning,forward; //前向和后向指针
int count; //前向指针记数
} bbuf;

void parse(char c)
{
if(c=' ')
{
memcpy(word[i],beginning,(size_t)(forward-beginning));
i++;
}
else forward++;
}

int main(int argc,char* argv)
{
File* fp;
char* word[MAXWORD];
int i=0;
buffer=new char[2048];
fp=open("test.c","r");
read(fp,buffer,1023);
buffer[1023]='#';
read(fp,buffer+1024,1023);
buffer[2047]='#';
bbuf->buffer=buffer;
bbuf->beginning=bbuf->forward=bbuf->buffer;
bbuf->count=0;
while(1)
{
forward=forward+1;
if(count==1023)
{
read(fp,buffer+1024,1023);
forward++;
//这个函数的具体代码就要和具体的词法分析规则而定,这里假设只识别空格分割的单词
parse(*forward);
}
else if(count>=2048)
{
read(fp,buffer,1023);
forward=bbuf->buffer;
//这个函数的具体代码就要和具体的词法分析规则而定,这里假设只识别空格分割的单词
parse(*forward);
}
else if(count!=1023&&count<2048&&(*forward)='#')
{
break; //词法分析结束
}
}
}

‘叁’ 用C函数编一个四则运算的小程序(要编译能通过的

这么难,真的写不出来。要调用windows文件吗。好像在课本的第十一章有这部分的内容。

‘肆’ C语言实现加减乘除运算

按照你的程序运行后。。。在输入c值的时候
程序直接结束了。。。还有就是每个case语句后记着加上break跳出不过也有不过根据具体需要也可以不加break;但是你的这个程序需要加上break;
原因是:回车符也是字符,所以你按回后,程序以为是输入了c的值了,而在输入b值成功是因为
回车符不是数字形式的。
以下是我改过的程序,编译运行都很好的

#include <stdio.h>
#include <math.h>

void main()
{
float a,b;
char c;
printf("\n input a:");
scanf("%f",&a);
printf("\n input b:");
scanf("%f",&b);
//这种情况经常遇到。。。。输入完后回车被下一个scanf("%c",&c)捕获了。
//因为回车符也是字符,所以你按回车后,程序以为是输入了c的值了
//所以加上下面一行,把回车符取走就可以了。。。。
getchar();
printf("\n input c:");
scanf("%c",&c);
//printf("\n%c",c);
switch(c)
{
case '+': printf("a+b=%f",a+b);break;
case '-': printf("a-b=%f",a-b);break;
case '*': printf("a*b=%f",a*b);break;
case '/': printf("a/b=%f",a/b);break;
default: break;
}
//为了好看
printf("\n");
}

‘伍’ 通过已有的四则运算编写大数的幂运算函数,就是实现大数的N次方运算。C++

您好,一般情况下不要自己创造这些基础的东东 一般用库 还有,您的代码混乱根本无法通过编译器

Ø GMP:GMP大数库是GNU项目的一部分,诞生于1991年。作为一个任意精度的大整数运算库,它包括了任意精度的带符号整数、有理数、浮点数的各种基本运算操作。它是一个c语言的库,但是官方提供了c++的包装类,主要的应用方向是密码学、网络安全、代数系统、计算科学等。GMP库的运行速度非常快的,它的官方网站上称自己为地球上最快的大数库,但是GMP库所提供的只是数学运算功能,并没有密码学相关的高级功能。
Ø Miracl:Miracl库是Shamus Software Ltd开发的一个大数库,它的使用许可针对教育科学研究或者非商业目的地应用是免费的。在应用上它是一个c语言的库,同时提供了几个较为简单的c++包装类。在功能上它不但提供了高精度的大整数和分数的各种数学运算操作而且提供了很多密码学算法中的功能模块,如SHA、AES、DSA等中的一些底层操作。最为特别的是它还提供了很多椭圆曲线密码体制中的底层功能模块。由于Miracl库的内部实现采用了很多的汇编层的代码,故运行速度也非常快。
Ø Crypto++:Crypto++库是一个开源项目,也是免费使用的。由于它是一个纯c++实现的库,所以应用非常的方便,库的结构清晰,使用方便,文档也很健全。Crypto++库提供了很多密码学算法的实现。
Ø OpenSSL:OpenSSL是一个开放源代码的实现了SSL及相关加密技术的软件包,由加拿大的Eric Yang等发起编写的。它可以实现消息摘要、文件的加密和解密、数字证书、数字签名和随机数字等。 它的主要用途并不是大数库,而是SSL协议的实现和应用,但是其中也有一些关于大整数的功能,此外它也是基于c语言。

‘陆’ java:抽象类和接口实现四则运算器

import java.util.*;
interface yunsuan
{
public int jia();
public int jian();
public int cheng();
public int chu();
}
class Example implements yunsuan
{
int x,y;
public Example(int x,int y)
{
this.x=x;
this.y=y;
}
public int jia()
{
return x+y;
}
public int jian()
{
return x-y;
}
public int cheng()
{
return x*y;
}
public int chu()
{
return x/y;
}
}
public class ag
{
public static void main(String []args)
{
Scanner in=new Scanner(System.in);
System.out.println("输入第一个数");
int a=in.nextInt();
System.out.println("输入第二个数");
int b=in.nextInt();
System.out.println("输入运算符");
String c=in.next();
Example ys=new Example(a,b);
if(c.equals("+"))
{System.out.print(ys.jia());}
else if(c.equals("-"))
{System.out.print(ys.jian());}
else if(c.equals("*"))
{System.out.print(ys.cheng());}
else if(c.equals("/"))
{System.out.print(ys.chu());}
}
}

‘柒’ C语言 做简易计算器

是不是要用栈的知识,先标记一下

热点内容
php与java的区别 发布:2024-05-17 16:12:48 浏览:339
registrar服务器地址是什么 发布:2024-05-17 16:11:46 浏览:112
订阅号助手如何找到密码 发布:2024-05-17 15:57:47 浏览:711
搜解压缩 发布:2024-05-17 15:38:32 浏览:764
水泵扬程算法 发布:2024-05-17 15:37:29 浏览:977
英雄联盟技能脚本 发布:2024-05-17 14:59:41 浏览:444
全名k歌安卓手机里面怎么录屏 发布:2024-05-17 14:40:07 浏览:180
常用数据库介绍 发布:2024-05-17 14:31:38 浏览:504
中孚存储介质信息消除工具 发布:2024-05-17 14:31:33 浏览:589
服务器访问ip如何调转主页 发布:2024-05-17 14:30:33 浏览:789