
急求一个计算器的c语言程序
功能:程序首先显示计算器界面,4、并用户输入一个算术计算式。假如用户输入22+1<回车>,程序将在计算器的屏上输出结果。如果输入错误,5、显示inputerror。123...
功能:程序首先显示计算器界面,4、 并用户输入一个算术计算式。假如用户输入22+1<回车>,程序将在计算器的屏上输出结果。如果输入错误,5、 显示input error。
1 2 3 + - 4 5 6 * / 7 8 9 = ← 0 End
要求:1)、只要求计算一个式子,回车后将结果显是在屏上。
2)、程序可重复进行运算,直到按End键退出。
3)、当用户没有输入时,在程序界面的下方显示当前日期与时间。
4)、运行过程保存计算器界面不改变
5)、最好能实现类似这样的算式:22 +3*4 (
高分悬赏
非常急啊 谢谢各位c程序高手们 展开
1 2 3 + - 4 5 6 * / 7 8 9 = ← 0 End
要求:1)、只要求计算一个式子,回车后将结果显是在屏上。
2)、程序可重复进行运算,直到按End键退出。
3)、当用户没有输入时,在程序界面的下方显示当前日期与时间。
4)、运行过程保存计算器界面不改变
5)、最好能实现类似这样的算式:22 +3*4 (
高分悬赏
非常急啊 谢谢各位c程序高手们 展开
2009-06-23
展开全部
给,已编译确认:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
#include <bios.h>
#define End 0X4F00
char token; /*全局标志变量*/
/*递归调用的函数原型*/
int exp( void );
int term( void );
int factor( void );
void error( void ) /*报告出错信息的函数*/
{
fprintf( stderr, "错误\n");
system("pause");
return ;
}
void match( char expectedToken ) /*对当前的标志进行匹配*/
{
if( token == expectedToken ) token = getchar(); /*匹配成功,获取下一个标志*/
else error(); /*匹配不成功,报告错误*/
}
void Message(void)
{
printf("================================================================\n");
printf("* 递归实现的四则运算表达式求值程序 *\n");
printf("****************************************************************\n");
printf("使用方法:请从键盘上直接输入表达式,以回车键结束.如45*(12-2)[回车]\n");
printf("*****************************************************************\n\n");
}
int main()
{
int k=0,result; /*运算的结果*/
Message();
while(k!=End) /*循环,直到按End键退出*/
{
printf(" >> 请输入表达式: ");
token = getchar(); /*载入第一个符号*/
result = exp(); /*进行计算*/
if( token == '\n' ) /* 是否一行结束 */
printf( "结果为 : %d\n", result );
else error(); /* 出现了例外的字符 */
while(!kbhit()); /*检测是否有按键动作*/
k=bioskey(0); /*返回按键的扫描码,参数为0 清空键盘缓冲区,为1不清空键盘缓冲区*/
}
system("pause");
return 0;
}
int exp( void )
{
int temp = term(); /*计算比加减运算优先级别高的部分*/
while(( token == '+' ) || ( token == '-' ))
switch( token ) {
case '+': match('+'); /*加法*/
temp += term();
break;
case '-': match('-');
temp -= term(); /*减法*/
break;
}
return temp;
}
int term( void )
{
int div; /*除数*/
int temp = factor(); /*计算比乘除运算优先级别高的部分*/
while(( token == '*' ) || ( token == '/' ))
switch( token ) {
case '*': match('*'); /*乘法*/
temp *= factor();
break;
case '/': match('/'); /*除法*/
div = factor();
if( div == 0 ) /*需要判断除数是否为0*/
{
fprintf( stderr, "除数为0.\n" );
exit(1);
}
temp /= div;
break;
}
return temp;
}
int factor( void )
{
int temp;
if( token == '(' ) /*带有括号的运算*/
{
match( '(' );
temp = exp();
match(')');
}
else if ( isdigit( token )) /*实际的数字*/
{
ungetc( token, stdin ); /*将读入的字符退还给输入流*/
scanf( "%d", &temp ); /*读出数字*/
token = getchar(); /*读出当前的标志*/
}
else error(); /*不是括号也不是数字*/
return temp;
}
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
#include <bios.h>
#define End 0X4F00
char token; /*全局标志变量*/
/*递归调用的函数原型*/
int exp( void );
int term( void );
int factor( void );
void error( void ) /*报告出错信息的函数*/
{
fprintf( stderr, "错误\n");
system("pause");
return ;
}
void match( char expectedToken ) /*对当前的标志进行匹配*/
{
if( token == expectedToken ) token = getchar(); /*匹配成功,获取下一个标志*/
else error(); /*匹配不成功,报告错误*/
}
void Message(void)
{
printf("================================================================\n");
printf("* 递归实现的四则运算表达式求值程序 *\n");
printf("****************************************************************\n");
printf("使用方法:请从键盘上直接输入表达式,以回车键结束.如45*(12-2)[回车]\n");
printf("*****************************************************************\n\n");
}
int main()
{
int k=0,result; /*运算的结果*/
Message();
while(k!=End) /*循环,直到按End键退出*/
{
printf(" >> 请输入表达式: ");
token = getchar(); /*载入第一个符号*/
result = exp(); /*进行计算*/
if( token == '\n' ) /* 是否一行结束 */
printf( "结果为 : %d\n", result );
else error(); /* 出现了例外的字符 */
while(!kbhit()); /*检测是否有按键动作*/
k=bioskey(0); /*返回按键的扫描码,参数为0 清空键盘缓冲区,为1不清空键盘缓冲区*/
}
system("pause");
return 0;
}
int exp( void )
{
int temp = term(); /*计算比加减运算优先级别高的部分*/
while(( token == '+' ) || ( token == '-' ))
switch( token ) {
case '+': match('+'); /*加法*/
temp += term();
break;
case '-': match('-');
temp -= term(); /*减法*/
break;
}
return temp;
}
int term( void )
{
int div; /*除数*/
int temp = factor(); /*计算比乘除运算优先级别高的部分*/
while(( token == '*' ) || ( token == '/' ))
switch( token ) {
case '*': match('*'); /*乘法*/
temp *= factor();
break;
case '/': match('/'); /*除法*/
div = factor();
if( div == 0 ) /*需要判断除数是否为0*/
{
fprintf( stderr, "除数为0.\n" );
exit(1);
}
temp /= div;
break;
}
return temp;
}
int factor( void )
{
int temp;
if( token == '(' ) /*带有括号的运算*/
{
match( '(' );
temp = exp();
match(')');
}
else if ( isdigit( token )) /*实际的数字*/
{
ungetc( token, stdin ); /*将读入的字符退还给输入流*/
scanf( "%d", &temp ); /*读出数字*/
token = getchar(); /*读出当前的标志*/
}
else error(); /*不是括号也不是数字*/
return temp;
}

2023-06-12 广告
MAIN: MOV SP,#50H MOV DPTR,#TAB;读入字模指针 MOV 30H,DPL; 存起来 ;堆栈低8位 MOV 31H,DPH ;堆栈高8位 MOV 32H,30H;再记录指针,留作移动了多少位的判断 用。 MOV 3...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
#include
<stdio.h>
#include
<stdlib.h>
void
min()
{
float
a,b;
char
op;
printf("输入第一个数:");
scanf("%f",&a);
fflush(stdin);
printf("输入一个运算符+-*
/:");
scanf("%c",&op);
fflush(stdin);
printf("输入第二个数:");
scanf("%f",&b);
fflush(stdin);
switch(op)
{
case
'+':
a=a+b;
break;
case
'-':
a=a-b;
break;
case
'*':
a=a*b;
break;
case
'/':
a=a/b;
break;
default:
printf("+-/*!!!error");
return;
}
printf
("%f\n",a);
return
;
}
int
main()
{
char
ch;
printf("请输入选择\na开始运算c清屏x退出:");
ch=getchar();
while(ch!='x')
{
min();
ch=getchar();
if(ch=='c')
system("cls");
}
return
0;
}
<stdio.h>
#include
<stdlib.h>
void
min()
{
float
a,b;
char
op;
printf("输入第一个数:");
scanf("%f",&a);
fflush(stdin);
printf("输入一个运算符+-*
/:");
scanf("%c",&op);
fflush(stdin);
printf("输入第二个数:");
scanf("%f",&b);
fflush(stdin);
switch(op)
{
case
'+':
a=a+b;
break;
case
'-':
a=a-b;
break;
case
'*':
a=a*b;
break;
case
'/':
a=a/b;
break;
default:
printf("+-/*!!!error");
return;
}
printf
("%f\n",a);
return
;
}
int
main()
{
char
ch;
printf("请输入选择\na开始运算c清屏x退出:");
ch=getchar();
while(ch!='x')
{
min();
ch=getchar();
if(ch=='c')
system("cls");
}
return
0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询