當前位置:首頁 » 編程軟體 » 四則運算的編譯器

四則運算的編譯器

發布時間: 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語言 做簡易計算器

是不是要用棧的知識,先標記一下

熱點內容
存儲類型默認分配 發布:2025-05-20 13:32:26 瀏覽:661
qq信息加密 發布:2025-05-20 13:31:32 瀏覽:340
文件夾嗅探器foldersniffer 發布:2025-05-20 12:33:36 瀏覽:912
編譯裝入 發布:2025-05-20 12:32:48 瀏覽:562
萬勝壓縮機價格 發布:2025-05-20 12:20:00 瀏覽:987
判斷雲伺服器是否誠實的存放數據 發布:2025-05-20 12:11:07 瀏覽:377
c語言基礎書 發布:2025-05-20 12:11:00 瀏覽:780
java小數正則表達式 發布:2025-05-20 11:30:58 瀏覽:136
文件夾加密win7 發布:2025-05-20 11:27:46 瀏覽:838
壓縮文件設置密碼有什麼意思 發布:2025-05-20 11:26:37 瀏覽:551