close
一把刀實用查詢📘

小計算器/怎樣用c語言編寫一個小計算器?



  1. include <stdlib.h>
  1. include <math.h>
  1. include <graphics.h>
  1. include <stdio.h>
  1. include <process.h>
  1. define EXCAPE 27
  1. define ENTER 13

main(){

int press,i,x,y,x1,y1,ch_z=0;

int dian=0;

char ch='0'; /*input + - * / */

char emp[80],sum[80],*e,*s;

double yuan=0.000000000000;

void init(void);

void clear_z(char *u);

double strtoflt(char *p);

int getkey();

int gd=DETECT, gm;

initgraph(&gd, &gm, "");

e=emp;

s=sum;

init();

x = (getmaxx() / 2) - 120;

y = (getmaxy() / 2) - 150;

x1 = (getmaxx() / 2) + 120;

y1 = (getmaxy() / 2) + 150;

while(1){

press = getkey();

switch(press){

case EXCAPE:

exit(0);

case 47:

bar (x + 10, y + 80 + 10, x + 60 - 10, y + 80 + 60 - 10);

delay(8000);

init();

if (ch!='0'){

switch(ch){

case '/':

if (strtoflt(emp)==0.0){

ch='0';

ch_z=0;

dian=0;

emp[0]='\0';

sum[0]='\0';

e=emp;

s=sum;

outtextxy(x+30,y+40,"error!!!!!");

break;

}

yuan = strtoflt(sum) / strtoflt(emp);

sprintf(sum,"%0.10f",yuan);

clear_z(sum);

outtextxy(x+30,y+40,sum);

break;

case '*':

yuan = strtoflt(sum) * strtoflt(emp);

sprintf(sum,"%0.10f",yuan);

clear_z(sum);

outtextxy(x+30,y+40,sum);

break;

case '+':

yuan = strtoflt(sum) + strtoflt(emp);

sprintf(sum,"%0.10f",yuan);

clear_z(sum);

outtextxy(x+30,y+40,sum);

break;

case '-':

if (strtoflt(sum)>=strtoflt(emp)){

yuan = strtoflt(sum) - strtoflt(emp);

sprintf(sum,"%0.10f",yuan);

}

else{

yuan=strtoflt(emp)-strtoflt(sum);

sprintf(sum,"-%0.10f",yuan);

}

clear_z(sum);

outtextxy(x+30,y+40,sum);

emp[0]='\0';

}

}

else{

if (ch_z==0){

outtextxy(x+30,y+40,emp);

stpcpy(sum,emp);


}

else{

outtextxy(x+30,y+40,sum);


}

}

ch='/';

ch_z=0;

emp[0]='\0';

e=emp;

dian=0;

break;

case 42:

bar (x + 60 + 10, y + 80 + 10, x + 60 * 2 - 10, y + 80 + 60 - 10);

delay(8000);

init();

if (ch!='0'){

switch(ch){

case '/':

yuan = strtoflt(sum) / strtoflt(emp);

sprintf(sum,"%0.10f",yuan);

clear_z(sum);

outtextxy(x+30,y+40,sum);

emp[0]='\0';

e=emp;

break;

case '*':

yuan = strtoflt(sum) * strtoflt(emp);

sprintf(sum,"%0.10f",yuan);

clear_z(sum);

outtextxy(x+30,y+40,sum);

emp[0]='\0';

e=emp;

break;

case '+':

yuan = strtoflt(sum) + strtoflt(emp);

sprintf(sum,"%0.10f",yuan);

clear_z(sum);

outtextxy(x+30,y+40,sum);

emp[0]='\0';

e=emp;

break;

case '-':

if (strtoflt(sum)>=strtoflt(emp)){

yuan = strtoflt(sum) - strtoflt(emp);

sprintf(sum,"%0.10f",yuan);

}

else{

yuan=strtoflt(emp)-strtoflt(sum);

sprintf(sum,"-%0.10f",yuan);

}

clear_z(sum);

outtextxy(x+30,y+40,sum);

emp[0]='\0';

e=emp;

break;

}

}

else{

if (ch_z==0){

outtextxy(x+30,y+40,emp);

stpcpy(sum,emp);

e=emp;

}

else

outtextxy(x+30,y+40,sum);

}

ch='*';

ch_z=0;

dian=0;

break;

case 45:

bar (x + 60 * 2 + 10, y + 80 + 10, x + 60 * 3 - 10, y + 80 + 60 - 10);

delay(8000);

init();

if (ch!='0'){

switch(ch){

case '/':

yuan = strtoflt(sum) / strtoflt(emp);

sprintf(sum,"%0.10f",yuan);

clear_z(sum);

outtextxy(x+30,y+40,sum);

emp[0]='\0';

e=emp;

break;

case '*':

yuan = strtoflt(sum) * strtoflt(emp);

sprintf(sum,"%0.10f",yuan);

clear_z(sum);

outtextxy(x+30,y+40,sum);

emp[0]='\0';

e=emp;

break;

case '+':

yuan = strtoflt(sum) + strtoflt(emp);

sprintf(sum,"%0.10f",yuan);

clear_z(sum);

outtextxy(x+30,y+40,sum);

emp[0]='\0';

e=emp;

break;

case '-':

if (strtoflt(sum)>=strtoflt(emp)){

yuan = strtoflt(sum) - strtoflt(emp);

sprintf(sum,"%0.10f",yuan);

}

else{

yuan=strtoflt(emp)-strtoflt(sum);

sprintf(sum,"-%0.10f",yuan);

}

clear_z(sum);

outtextxy(x+30,y+40,sum);

emp[0]='\0';

e=emp;

break;

}

}

else{

if (ch_z==0){

outtextxy(x+30,y+40,emp);

stpcpy(sum,emp);

e=emp;

}

else

outtextxy(x+30,y+40,sum);

}

ch='-';

ch_z=0;

dian=0;

break;

case 43:

bar (x + 60 * 3 + 10, y + 80 + 10, x + 60 * 4 - 10, y + 80 + 60 - 10);

delay(8000);

init();

if (ch!='0'){

switch(ch){

case '/':

yuan = strtoflt(sum) / strtoflt(emp);

sprintf(sum,"%0.10f",yuan);

clear_z(sum);

outtextxy(x+30,y+40,sum);

emp[0]='\0';

e=emp;

break;

case '*':

yuan = strtoflt(sum) * strtoflt(emp);

sprintf(sum,"%0.10f",yuan);

clear_z(sum);

outtextxy(x+30,y+40,sum);

emp[0]='\0';

e=emp;

break;

case '+':

yuan = strtoflt(sum) + strtoflt(emp);

sprintf(sum,"%0.10f",yuan);

clear_z(sum);

outtextxy(x+30,y+40,sum);

emp[0]='\0';

e=emp;

break;

case '-':

if (strtoflt(sum)>=strtoflt(emp)){

yuan = strtoflt(sum) - strtoflt(emp);

sprintf(sum,"%0.10f",yuan);

}

else{

yuan=strtoflt(emp)-strtoflt(sum);

sprintf(sum,"-%0.10f",yuan);

}

clear_z(sum);

outtextxy(x+30,y+40,sum);

emp[0]='\0';

e=emp;

break;

}

}

else{

if (ch_z==0){

outtextxy(x+30,y+40,emp);

stpcpy(sum,emp);

e=emp;

}

else

outtextxy(x+30,y+40,sum);

}

ch='+';

ch_z=0;

dian=0;

break;

case 49:

bar (x + 10, y + 80 + 53 + 10, x + 60 - 10, y + 80 + 53 * 2 - 4);

delay(8000);

init();

for (i=0;i<=79;i++){

if (emp[i]=='\0')

break;

}

if (ch_z==0){

  • e='1';e++;*e='\0';

outtextxy(x+30,y+40,emp);

}

else{

outtextxy(x+30,y+40,sum);

}

break;

case 50:

bar (x + 60 + 10, y + 80 + 53 + 10, x + 60 * 2 - 10, y + 80 + 53 * 2 - 4);

delay(8000);

init();

for (i=0;i<=79;i++){

if (emp[i]=='\0')

break;

}

if (ch_z==0){

  • e='2';e++;*e='\0';

outtextxy(x+30,y+40,emp);

}

else{

outtextxy(x+30,y+40,sum);

}

break;

case 51:

bar (x + 60 * 2 + 10, y + 80 + 53 + 10, x + 60 * 3 - 10, y + 80 + 53 * 2 - 4);

delay(8000);

init();

for (i=0;i<=79;i++){

if (emp[i]=='\0')

break;

}

if (ch_z==0){

  • e='3';e++;*e='\0';

outtextxy(x+30,y+40,emp);

}

else{

outtextxy(x+30,y+40,sum);

}

break;

case ENTER:

bar (x + 60 * 3 + 10, y + 80 + 53 + 10, x + 60 * 4 - 10, y + 80 + 53 * 2 - 4);

delay(8000);

init();

if (ch!='0'){

switch(ch){

case '/':

yuan = strtoflt(sum) / strtoflt(emp);

sprintf(sum,"%0.10f",yuan);

clear_z(sum);

outtextxy(x+30,y+40,sum);

emp[0]='\0';

e=emp;

break;

case '*':

yuan = strtoflt(sum) * strtoflt(emp);

sprintf(sum,"%0.10f",yuan);

clear_z(sum);

outtextxy(x+30,y+40,sum);

emp[0]='\0';

e=emp;

break;

case '+':

yuan = strtoflt(sum) + strtoflt(emp);

sprintf(sum,"%0.10f",yuan);

clear_z(sum);

outtextxy(x+30,y+40,sum);

emp[0]='\0';

e=emp;

break;

case '-':

if (strtoflt(sum)>=strtoflt(emp)){

yuan = strtoflt(sum) - strtoflt(emp);

sprintf(sum,"%0.10f",yuan);

}

else{

yuan=strtoflt(emp)-strtoflt(sum);

sprintf(sum,"-%0.10f",yuan);

}

clear_z(sum);

outtextxy(x+30,y+40,sum);

emp[0]='\0';

e=emp;

break;

}

}

else{

if (ch_z==0){

outtextxy(x+30,y+40,emp);

stpcpy(sum,emp);

e=emp;

}

else{

outtextxy(x+30,y+40,sum);

}

}

ch='0';

ch_z=1;

dian=0;

break;

case 52:

bar (x + 10, y + 80 + 53 * 2 + 10, x + 60 - 10, y + 80 + 53 * 3 - 4);

delay(8000);

init();

if (ch_z==0){

  • e='4';e++;*e='\0';

outtextxy(x+30,y+40,emp);

}

else{

outtextxy(x+30,y+40,sum);

}

break;

case 53:

bar (x + 60 + 10, y + 80 + 53 * 2 + 10, x + 60 * 2 - 10, y + 80 + 53 * 3 - 4);

delay(8000);

init();

if (ch_z==0){

  • e='5';e++;*e='\0';

outtextxy(x+30,y+40,emp);

}

else{

outtextxy(x+30,y+40,sum);

}

break;

case 54:

bar (x + 60 * 2 +10, y + 80 + 53 * 2 + 10, x + 60 * 3 - 10, y + 80 + 53 * 3 - 4);

delay(8000);

init();

if (ch_z==0){

  • e='6';e++;*e='\0';

outtextxy(x+30,y+40,emp);

}

else{

outtextxy(x+30,y+40,sum);

}

break;

case 46:

bar (x + 60 * 3 + 10, y + 80 + 53 * 2 + 10, x + 60 * 4 - 10, y + 80 + 53 * 3 - 4);

delay(8000);

init();

if (dian==0){

if (ch_z==0){

  • e='.';e++;*e='\0';

outtextxy(x+30,y+40,emp);

}

else{

outtextxy(x+30,y+40,sum);

}

}

else{

if (ch_z==0)

outtextxy(x+30,y+40,emp);

else

outtextxy(x+30,y+40,sum);

}

dian=1;

break;

case 55:

bar (x + 10, y + 80 + 53 * 3 + 10, x + 60 - 10, y + 80 + 53 * 4 - 4);

delay(8000);

init();

if (ch_z==0){

  • e='7';e++;*e='\0';

outtextxy(x+30,y+40,emp);

}

else{

outtextxy(x+30,y+40,sum);

}

break;

case 56:

bar (x + 60 + 10, y + 80 + 53 * 3 + 10, x + 60 * 2 -10, y + 80 + 53 * 4 - 4);

delay(8000);

init();

if (ch_z==0){

  • e='8';e++;*e='\0';

outtextxy(x+30,y+40,emp);

}

else{

outtextxy(x+30,y+40,sum);

}

break;

case 57:

bar (x + 60 * 2 + 10, y + 80 + 53 * 3 + 10, x + 60 * 3 - 10, y + 80 + 53 * 4 - 4);

delay(8000);

init();

if (ch_z==0){

  • e='9';e++;*e='\0';

outtextxy(x+30,y+40,emp);

}

else{

outtextxy(x+30,y+40,sum);

}

break;

case 48:

bar (x + 60 * 3 + 10, y + 80 + 53 * 3 + 10, x + 60 * 4 - 10, y + 80 + 53 * 4 - 4);

delay(8000);

init();

if (ch_z==0){

  • e='0';e++;*e='\0';

outtextxy(x+30,y+40,emp);

}

else{

outtextxy(x+30,y+40,sum);

}

break;

case 32:

emp[0]='\0';

sum[0]='\0';

e=emp;

s=sum;

ch='0';

ch_z=0;

dian=0;

init();

break;

case 8:

delay(8000);

for(i=0;i<=79;i++){

if (emp[i]=='\0')

break;

}

if (i==0)

break;

if (i!=79&&i!=0){

i--;

emp[i]='\0';

e=&emp[i];

}

init();

outtextxy(x+30,y+40,emp);

break;

}

}

}

/*---------------------------------------------------------------------*/

void init(void){

int x, y, x1, y1, i, j;

char emp;

x = (getmaxx() / 2) - 120;

y = (getmaxy() / 2) - 150;

x1 = (getmaxx() / 2) + 120;

y1 = (getmaxy() / 2) + 150;

cleardevice();

setbkcolor(3);

setfillstyle(1, 15);

setcolor(15);

settextstyle(1,0,1);

rectangle (x, y, x1, y1);

rectangle (x - 7, y - 7, x1 + 7, y1 + 7);

rectangle (x + 10, y + 10, x1 - 10, y + 80 - 10);

line (x, y + 80, x1, y + 80);

y = y + 80;

for (j = 1; j <= 4; j++){

x = (getmaxx() / 2) - 120;

for (i = 1; i <= 4; i++){

/* bar (x + 10, y + 10, x + 60 - 10, y + 60 - 10);*/

rectangle(x + 10, y + 10, x + 60 - 10, y + 60 - 10);

if (j == 1){

if (i == 1)

outtextxy(x + 20, y + 20, "/");

if (i == 2)

outtextxy(x + 25, y + 20, "*");

if (i == 3)

outtextxy(x + 27, y + 20, "-");

if (i == 4)

outtextxy(x + 25, y + 20, "+");

}

if (j == 2){

if (i == 1)

outtextxy(x + 25, y + 20, "1");

if (i == 2)

outtextxy(x + 25, y + 20, "2");

if (i == 3)

outtextxy(x + 25, y + 20, "3");

if (i == 4)

outtextxy(x + 25, y + 20, "=");

}

if (j == 3){

if (i == 1)

outtextxy(x + 25, y + 20, "4");

if (i == 2)

outtextxy(x + 25, y + 20, "5");

if (i == 3)

outtextxy(x + 25, y + 20, "6");

if (i == 4)

outtextxy(x + 25, y + 20, ".");

}

if (j == 4){

if (i == 1)

outtextxy(x + 25, y + 20, "7");

if (i == 2)

outtextxy(x + 25, y + 20, "8");

if (i == 3)

outtextxy(x + 25, y + 20, "9");

if (i == 4)

outtextxy(x + 25, y + 20, "0");

}

x = x + 60;

}

y = y + 53;

}

}

/*---------------------------------------------------------------------*/

int getkey(){

char lowbyte;

int press;

while(bioskey(1)==0);

press = bioskey(0);

press = press&0xff? press&0xff: press>>8;


return(press);


}

double strtoflt(char *p)

{

double rtl=0.000000000000;

double pnt=0.000000000000;

double t = 10;

int ispoint = 0;

while (*p!='\0'||*p!='.'){

if(*p<'0'||*p>'9')

break;

rtl*=10;

rtl+=*p-'0';

p++;

}

if (*p=='.'){

ispoint=1;

p++;

}

while(ispoint&&*p!='\0'){

pnt+=(double)(*p-'0')/t;

t*=10;

p++;

}

rtl+=pnt;

return (rtl);

}

/*-----------------------------------------------------------------------*/

void clear_z(char u[]){

int i;

for(i=strlen(u)-1;i>=0;i--){

if (u[i]!='0')

break;

}

if (u[i]=='.'){

u[i]='\0';

}

else{

i++;

u[i]='\0';

}

}

關于“小計算器/怎樣用c語言編寫一個小計算器?”的用戶留言:

目前暫無留言

新增相關留言✍


返回首頁 | 📱 行動版 | 電腦版 💻
2009-2024 v1.22 a-j-e-3