本文目錄一覽:
- 1、c語言模擬簡單計算,無優先級,只計算加減乘除,輸入沒有空格
- 2、C語言模擬計算器的功能,要求至少能實現基本四則運算(加減乘除功能),要求提示明確.能用/*說明代碼意思最好
- 3、c語言模擬計算器四則混合運算
- 4、C語言 設計一個 模擬計算器程序
c語言模擬簡單計算,無優先級,只計算加減乘除,輸入沒有空格
#includestdio.h
#includestdlib.h
int main()
{
float a,b;int oper;
printf(“請輸入a,b兩個數\n”);
scanf(“%f %f”,a,b);
printf(“請輸入對應的 + – * /符號,對應的是1234\n”);
scanf(“%d”,oper);
float c1=a+b,c2=a-b,c3=a*b,c4=a/b;
switch(oper)
{
case 1: printf(“%f\n”,c1);break;
case 2: printf(“%f\n”,c2);break;
case 3: printf(“%f\n”,c3);break;
case 4:if(b==0) {printf(“除數為0,不可進行運算\n”);exit(-1);}
printf(“%f\n”,c4);break;
}
return 0;
}
C語言模擬計算器的功能,要求至少能實現基本四則運算(加減乘除功能),要求提示明確.能用/*說明代碼意思最好
#include
#include
using
namespace
std;
int
main()
{
int
a,b;//a是輸出結果,b是臨時輸入數據
char
x;//x是標點符號輸入
cina;//先輸入第一個數
while(1)//由於不知道運算式一共多長,所以用一個死循環不斷讀取
{
cinx;//輸入運算符
if(x.
c語言模擬計算器四則混合運算
//此算法只能進行整數四則混合運算,也不支持括號
//按下面的格式輸入表達式(末尾無=)
//10-5+4+6/2*14*8/4-5*7+2-4*6/2-10*4-6/3
#includestdio.h
int jisuan(int num1,char op1,int num2)
{
switch(op1)
{
case ‘*’:
return num1*num2;
case ‘/’:
return num1/num2;
case ‘+’:
return num1+num2;
case ‘-‘:
return num1-num2;
}
}
int process(int num1,char op1,int num2)
{
int r,num3;
char op2;
if(‘\n’!=(op2=getchar()))
{
scanf(“%d”,num3);
if(‘+’==op2 || ‘-‘==op2)
{
num1=jisuan(num1,op1,num2);
r=process(num1,op2,num3);
}
else if(‘*’==op2 || ‘/’==op2)
{
if(‘/’==op1)
{
num1=jisuan(num1,op1,num2);
r=process(num1,op2,num3);
}
else
{
num2=jisuan(num2,op2,num3);
r=process(num1,op1,num2);
}
}
}
else
{
r=jisuan(num1,op1,num2);
}
return r;
}
int main()
{
int num1,num2;
char op;
printf(“請輸入一個表達式:”);
scanf(“%d%c%d”,num1,op,num2);
printf(“=%d\n”,process(num1,op,num2));
return 0;
}
C語言 設計一個 模擬計算器程序
#include dos.h /*DOS接口函數*/
#include math.h /*數學函數的定義*/
#include conio.h /*屏幕操作函數*/
#include stdio.h /*I/O函數*/
#include stdlib.h /*庫函數*/
#include stdarg.h /*變量長度參數表*/
#include graphics.h /*圖形函數*/
#include string.h /*字符串函數*/
#include ctype.h /*字符操作函數*/
#define UP 0x48 /*光標上移鍵*/
#define DOWN 0x50 /*光標下移鍵*/
#define LEFT 0x4b /*光標左移鍵*/
#define RIGHT 0x4d /*光標右移鍵*/
#define ENTER 0x0d /*回車鍵*/
void *rar; /*全局變量,保存光標圖象*/
struct palettetype palette; /*使用調色板信息*/
int GraphDriver; /* 圖形設備驅動*/
int GraphMode; /* 圖形模式值*/
int ErrorCode; /* 錯誤代碼*/
int MaxColors; /* 可用顏色的最大數值*/
int MaxX, MaxY; /* 屏幕的最大分辨率*/
double AspectRatio; /* 屏幕的像素比*/
void drawboder(void); /*畫邊框函數*/
void initialize(void); /*初始化函數*/
void computer(void); /*計算器計算函數*/
void changetextstyle(int font, int direction, int charsize); /*改變文本樣式函數*/
void mwindow(char *header); /*窗口函數*/
int specialkey(void) ; /*獲取特殊鍵函數*/
int arrow(); /*設置箭頭光標函數*/
/*主函數*/
int main()
{
initialize();/* 設置系統進入圖形模式 */
computer(); /*運行計算器 */
closegraph();/*系統關閉圖形模式返迴文本模式*/
return(0); /*結束程序*/
}
/* 設置系統進入圖形模式 */
void initialize(void)
{
int xasp, yasp; /* 用於讀x和y方向縱橫比*/
GraphDriver = DETECT; /* 自動檢測顯示器*/
initgraph( GraphDriver, GraphMode, “” );
/*初始化圖形系統*/
ErrorCode = graphresult(); /*讀初始化結果*/
if( ErrorCode != grOk ) /*如果初始化時出現錯誤*/
{
printf(“Graphics System Error: %s\n”,
grapherrormsg( ErrorCode ) ); /*顯示錯誤代碼*/
exit( 1 ); /*退出*/
}
getpalette( palette ); /* 讀面板信息*/
MaxColors = getmaxcolor() + 1; /* 讀取顏色的最大值*/
MaxX = getmaxx(); /* 讀屏幕尺寸 */
MaxY = getmaxy(); /* 讀屏幕尺寸 */
getaspectratio( xasp, yasp ); /* 拷貝縱橫比到變量中*/
AspectRatio = (double)xasp/(double)yasp;/* 計算縱橫比值*/
}
/*計算器函數*/
void computer(void)
{
struct viewporttype vp; /*定義視口類型變量*/
int color, height, width;
int x, y,x0,y0, i, j,v,m,n,act,flag=1;
float num1=0,num2=0,result; /*操作數和計算結果變量*/
char cnum[5],str2[20]={“”},c,temp[20]={“”};
char str1[]=”1230.456+-789*/Qc=^%”;/* 定義字符串在按鈕圖形上顯示的符號 */
mwindow( “Calculator” ); /* 顯示主窗口 */
color = 7; /*設置灰顏色值*/
getviewsettings( vp ); /* 讀取當前窗口的大小*/
width=(vp.right+1)/10; /* 設置按鈕寬度 */
height=(vp.bottom-10)/10 ; /*設置按鈕高度 */
x = width /2; /*設置x的坐標值*/
y = height/2; /*設置y的坐標值*/
setfillstyle(SOLID_FILL, color+3);
bar( x+width*2, y, x+7*width, y+height );
/*畫一個二維矩形條顯示運算數和結果*/
setcolor( color+3 ); /*設置淡綠顏色邊框線*/
rectangle( x+width*2, y, x+7*width, y+height );
/*畫一個矩形邊框線*/
setcolor(RED); /*設置顏色為紅色*/
outtextxy(x+3*width,y+height/2,”0.”); /*輸出字符串”0.”*/
x =2*width-width/2; /*設置x的坐標值*/
y =2*height+height/2; /*設置y的坐標值*/
for( j=0 ; j4 ; ++j ) /*畫按鈕*/
{
for( i=0 ; i5 ; ++i )
{
setfillstyle(SOLID_FILL, color);
setcolor(RED);
bar( x, y, x+width, y+height ); /*畫一個矩形條*/
rectangle( x, y, x+width, y+height );
sprintf(str2,”%c”,str1[j*5+i]);
/*將字符保存到str2中*/
outtextxy( x+(width/2), y+height/2, str2);
x =x+width+ (width / 2) ; /*移動列坐標*/
}
y +=(height/2)*3; /* 移動行坐標*/
x =2*width-width/2; /*複位列坐標*/
}
x0=2*width;
y0=3*height;
x=x0;
y=y0;
gotoxy(x,y); /*移動光標到x,y位置*/
arrow(); /*顯示光標*/
putimage(x,y,rar,XOR_PUT);
m=0;
n=0;
strcpy(str2,””); /*設置str2為空串*/
while((v=specialkey())!=45) /*當壓下Alt+x鍵結束程序,否則執行下面的循環*/
{
while((v=specialkey())!=ENTER) /*當壓下鍵不是回車時*/
{
putimage(x,y,rar,XOR_PUT); /*顯示光標圖象*/
if(v==RIGHT) /*右移箭頭時新位置計算*/
if(x=x0+6*width)
/*如果右移,移到尾,則移動到最左邊字符位置*/
{
x=x0;
m=0;
}
else
{
x=x+width+width/2;
m++;
} /*否則,右移到下一個字符位置*/
if(v==LEFT) /*左移箭頭時新位置計算*/
if(x=x0)
{
x=x0+6*width;
m=4;
} /*如果移到頭,再左移,則移動到最右邊字符位置*/
else
{
x=x-width-width/2;
m–;
} /*否則,左移到前一個字符位置*/
if(v==UP) /*上移箭頭時新位置計算*/
if(y=y0)
{
y=y0+4*height+height/2;
n=3;
} /*如果移到頭,再上移,則移動到最下邊字符位置*/
else
{
y=y-height-height/2;
n–;
} /*否則,移到上邊一個字符位置*/
if(v==DOWN) /*下移箭頭時新位置計算*/
if(y=7*height)
{
y=y0;
n=0;
} /*如果移到尾,再下移,則移動到最上邊字符位置*/
else
{
y=y+height+height/2;
n++;
} /*否則,移到下邊一個字符位置*/
putimage(x,y,rar,XOR_PUT); /*在新的位置顯示光標箭頭*/
}
c=str1[n*5+m]; /*將字符保存到變量c中*/
if(isdigit(c)||c==’.’) /*判斷是否是數字或小數點*/
{
if(flag==-1) /*如果標誌為-1,表明為負數*/
{
strcpy(str2,”-“); /*將負號連接到字符串中*/
flag=1;
} /*將標誌值恢復為1*/
sprintf(temp,”%c”,c); /*將字符保存到字符串變量temp中*/
strcat(str2,temp); /*將temp中的字符串連接到str2中*/
setfillstyle(SOLID_FILL,color+3);
bar(2*width+width/2,height/2,15*width/2,3*height/2);
outtextxy(5*width,height,str2); /*顯示字符串*/
}
if(c==’+’)
{
num1=atof(str2); /*將第一個操作數轉換為浮點數*/
strcpy(str2,””); /*將str2清空*/
act=1; /*做計算加法標誌值*/
setfillstyle(SOLID_FILL,color+3);
bar(2*width+width/2,height/2,15*width/2,3*height/2);
outtextxy(5*width,height,”0.”); /*顯示字符串*/
}
if(c==’-‘)
{
if(strcmp(str2,””)==0) /*如果str2為空,說明是負號,而不是減號*/
flag=-1; /*設置負數標誌*/
else
{
num1=atof(str2); /*將第二個操作數轉換為浮點數*/
strcpy(str2,””); /*將str2清空*/
act=2; /*做計算減法標誌值*/
setfillstyle(SOLID_FILL,color+3);
bar(2*width+width/2,height/2,15*width/2,3*height/2); /*畫矩形*/
outtextxy(5*width,height,”0.”); /*顯示字符串*/
}
}
if(c==’*’)
{
num1=atof(str2); /*將第二個操作數轉換為浮點數*/
strcpy(str2,””); /*將str2清空*/
act=3; /*做計算乘法標誌值*/
setfillstyle(SOLID_FILL,color+3); bar(2*width+width/2,height/2,15*width/2,3*height/2);
outtextxy(5*width,height,”0.”); /*顯示字符串*/
}
if(c==’/’)
{
num1=atof(str2); /*將第二個操作數轉換為浮點數*/
strcpy(str2,””); /*將str2清空*/
act=4; /*做計算除法標誌值*/
setfillstyle(SOLID_FILL,color+3);
bar(2*width+width/2,height/2,15*width/2,3*height/2);
outtextxy(5*width,height,”0.”); /*顯示字符串*/
}
if(c==’^’)
{
num1=atof(str2); /*將第二個操作數轉換為浮點數*/
strcpy(str2,””); /*將str2清空*/
act=5; /*做計算乘方標誌值*/
setfillstyle(SOLID_FILL,color+3); /*設置用淡綠色實體填充*/
bar(2*width+width/2,height/2,15*width/2,3*height/2); /*畫矩形*/
outtextxy(5*width,height,”0.”); /*顯示字符串*/
}
if(c==’%’)
{
num1=atof(str2); /*將第二個操作數轉換為浮點數*/
strcpy(str2,””); /*將str2清空*/
act=6; /*做計算模運算乘方標誌值*/
setfillstyle(SOLID_FILL,color+3); /*設置用淡綠色實體填充*/
bar(2*width+width/2,height/2,15*width/2,3*height/2); /*畫矩形*/
outtextxy(5*width,height,”0.”); /*顯示字符串*/
}
if(c==’=’)
{
num2=atof(str2); /*將第二個操作數轉換為浮點數*/
switch(act) /*根據運算符號計算*/
{
case 1:result=num1+num2;break; /*做加法*/
case 2:result=num1-num2;break; /*做減法*/
case 3:result=num1*num2;break; /*做乘法*/
case 4:result=num1/num2;break; /*做除法*/
case 5:result=pow(num1,num2);break; /*做x的y次方*/
case 6:result=fmod(num1,num2);break; /*做模運算*/
}
setfillstyle(SOLID_FILL,color+3); /*設置用淡綠色實體填充*/
bar(2*width+width/2,height/2,15*width/2,3*height/2); /*覆蓋結果區*/
sprintf(temp,”%f”,result); /*將結果保存到temp中*/
outtextxy(5*width,height,temp); /*顯示結果*/
}
if(c==’c’)
{
num1=0; /*將兩個操作數複位0,符號標誌為1*/
num2=0;
flag=1;
strcpy(str2,””); /*將str2清空*/
setfillstyle(SOLID_FILL,color+3); /*設置用淡綠色實體填充*/
bar(2*width+width/2,height/2,15*width/2,3*height/2); /*覆蓋結果區*/
outtextxy(5*width,height,”0.”); /*顯示字符串*/
}
if(c==’Q’)exit(0); /*如果選擇了q回車,結束計算程序*/
}
putimage(x,y,rar,XOR_PUT); /*在退出之前消去光標箭頭*/
return; /*返回*/
}
/*窗口函數*/
void mwindow( char *header )
{
int height;
cleardevice(); /* 清除圖形屏幕 */
setcolor( MaxColors – 1 ); /* 設置當前顏色為白色*/
setviewport( 20, 20, MaxX/2, MaxY/2, 1 ); /* 設置視口大小 */
height = textheight( “H” ); /* 讀取基本文本大小 */
settextstyle( DEFAULT_FONT, HORIZ_DIR, 1 );/*設置文本樣式*/
settextjustify( CENTER_TEXT, TOP_TEXT );/*設置字符排列方式*/
outtextxy( MaxX/4, 2, header ); /*輸出標題*/
setviewport( 20,20+height+4, MaxX/2+4, MaxY/2+20, 1 ); /*設置視口大小*/
drawboder(); /*畫邊框*/
}
void drawboder(void) /*畫邊框*/
{
struct viewporttype vp; /*定義視口類型變量*/
setcolor( MaxColors – 1 ); /*設置當前顏色為白色 */
setlinestyle( SOLID_LINE, 0, NORM_WIDTH );/*設置畫線方式*/
getviewsettings( vp );/*將當前視口信息裝入vp所指的結構中*/
rectangle( 0, 0, vp.right-vp.left, vp.bottom-vp.top ); /*畫矩形邊框*/
}
/*設計鼠標圖形函數*/
int arrow()
{
int size;
int raw[]={4,4,4,8,6,8,14,16,16,16,8,6,8,4,4,4}; /*定義多邊形坐標*/
setfillstyle(SOLID_FILL,2); /*設置填充模式*/
fillpoly(8,raw); /*畫出一光標箭頭*/
size=imagesize(4,4,16,16); /*測試圖象大小*/
rar=malloc(size); /*分配內存區域*/
getimage(4,4,16,16,rar); /*存放光標箭頭圖象*/
putimage(4,4,rar,XOR_PUT); /*消去光標箭頭圖象*/
return 0;
}
/*按鍵函數*/
int specialkey(void)
{
int key;
while(bioskey(1)==0); /*等待鍵盤輸入*/
key=bioskey(0); /*鍵盤輸入*/
key=key0xff? key0xff:key8; /*只取特殊鍵的掃描值,其餘為0*/
return(key); /*返回鍵值*/
}
原創文章,作者:NZKZR,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/331416.html