c语言提问,请大侠帮我,为什么计算机计算的最后一个输出为i=2

作者&投稿:郎光 (若有异议请与网页底部的电邮联系)
用c语言程序设计一个简单计算器,求其源代码~

#include /*DOS接口函数*/
#include /*数学函数的定义*/
#include /*屏幕操作函数*/
#include /*I/O函数*/
#include /*库函数*/
#include /*变量长度参数表*/
#include /*图形函数*/
#include /*字符串函数*/
#include /*字符操作函数*/
#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
",
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 ; j<4 ; ++j ) /*画按钮*/
{
for( i=0 ; i<5 ; ++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=key&0xff? key&0xff:key>>8; /*只取特殊键的扫描值,其余为0*/
return(key); /*返回键值*/
}

怎么不能用了?再除法中判0,double应该使用f-1e-6

#include <stdio.h>

#define LOW 0

#define HIGH 5

#define CHANGE 2

int i=LOW;

int workover(int i);

int reset( int i );

void main()

{

int i=HIGH;

printf ("i=%d
",reset(i/2));

printf ("i=%d
", reset(i=i/2));

printf ("i=%d
",workover(i) );

}

int workover(int i)

{

i=(i%i)*((i*i)/(2*i)+47);

printf("i=%d
", i);

return i ;

}

int reset( int i )

{

i=i<=CHANGE ? HIGH :

LOW;

return i ;

}

不知道你是什么意思,给你改了一哈。看看是不是你想要的。



因为 reset(i=i/2);中的
i = i/2 为赋值 并且 你的reset() workover () 函数调用后都没有 变量接返回值 !!

仔细看看你学的代码吧!! 会找到很多东西,都是不注意引起的!

建议你把编程格式写得规范一些,像缩进,换行等一些格式方面的,这样写出来不但易于查错,而且别人也容易看明白;呵呵,我也是新手,刚开始学C语言 你看看三楼的就知道了

貌似你程序写的不对啊啊。


请大侠用俄语帮忙翻译一句话,谢谢! 请不要用翻译工具直译! 外面风很大...
На улице ветрено, много одевайся!~如果你认可我的回答,请及时点击【采纳为满意回答】按钮~~手机提问的朋友在客户端右上角评价点【满意】即可。~你的采纳是我前进的动力~~O(∩_∩)O,互相帮助,祝共同进步!

数学题,请大侠们帮忙
因为AO=CO 角AOE=角COF OE=OF 所以△AOE≌△COF 所以∠OCF=∠OAE 又∠MAO=∠NCO(内错角相等)所以∠MAE=∠NCF

c语言中 x=x&(x-1)实现什么功能?大侠帮忙
将x的二进制值中,最后一个1置0,其它不变。即达到从x的尾部,删除一个1的效果。二进制的减法规则中可以得知,在做x-1时,当把x写作 A1B 的形式,其中A为随意值,B为若干个0,可能为0个。这时x-1的值,实际上是 A0C 的形式,其中A值不变,C为与B相同位数的1.这样 x&(x-1)的结果,...

各位大侠帮帮忙
好吧,那你只好告诉他你喜欢他了。我开玩笑。很严肃的对他说清楚好了啦。最狠的就是在全班面前大骂他:“我很烦你的,别那么讨厌好不好!”之类的。只要你神色严肃,真的生气,没有人会误解你的意思的。

英语高手进
每次考试都只有八十多分,我想上90分,但是不管怎么样都上不了,每次遇到语法选择和完形填空就不行了,各位大侠帮帮忙说说考好英语的心得,到了时态都会搞混...这种语言现象非常多,如能经常使用此法则会牢固地记住所学的短语。如: 1)含有get的短语有:get ready for 为…… 做准备,get up 起床,get on, with ...

请各位大侠帮帮小女子!
如果按下开机按扭,显示器就没显示,而且也没听到主板 嘀 !的一声报警,你应该检查忆下机器硬件,大多数是主板和内存出毛病了。如果接触良好,还不行就去维修部吧。做好心里准备。

各位大侠帮帮忙!不甚感激。
请您多加注意自己的行为。」孙策虽然赞同虞翻的话,但是却改不了坏习惯。西元200年,有一天孙策出外打猎追赶野兽,他骑的骏马速度特别快,随从的马根本追不上。正当孙策追赶猎物时,突然遇到许贡(前吴郡太守,为孙策所杀)三名门客,他们用箭射中孙策的脸颊。从后赶到的随从立刻将他们三人全部杀死,...

求搞笑的,结局反转的笑话段子,急求啊,拜托各位大侠帮忙啊
5、有一个小学老师有很浓重的地方口音,一天上课,他对学生提问:50+9=?小逗号心里直嘀咕:“武术+酒=?武术+酒=?”突然恍然大悟,答曰:醉拳~6、老师:我要你们写一篇作文,要写人,重点要写突出的地方。小逗号:老师,我想好了。我就写我奶奶。老师:那你奶奶有什么突出的方面吗?小逗号:我...

请大侠们帮忙翻译服装行业的英语,感谢
1.侧骨爆缝,前后错位,左右侧骨有长短 The 1 side of the bone joints before and after blasting, dislocation, left and right side bone length 2.袖口带帽,打摺 2 cuff band cap, pleating 3.前门襟切线滑落,长短,内部拷克线脱落,袖口切线滑落 The 3 front placket length, internal ...

...程序需要matlab编程,画图,自己一直没有画出来。恳请各位大侠帮...
根据相邻值的连续性吗?(3)考虑一个简单的情况:取φ=0,则Exi=0,Eyi=1,ζ=0。进一步计算得Exr=0,γ=90°,所以tan2α=0,sin2β=0这时为什么不取α=0而是如图取-90°呢?因提问已过多日,不知楼主是否还需要,故暂不贴出代码,如有需要再贴。

晋宁县19373989028: C语言问题,请大侠帮忙.急用!!!!!! -
兆淑美常: #include <stdio.h>#define N 41#define NG 0#define OK 1 int getfibo(int arr[], int size) { int i; for(i = 2; i < size; i++){ arr[i] = arr[i-1] + arr[i-2]; } return OK; } int sumofdiv(int arr[], int size) { int i, s = 0; for(i = 0 ;i < size; i++) s += arr[i]; return s; } int main(...

晋宁县19373989028: 大侠请帮忙,一段C语言程序的疑惑,为什么这段程序会出现错误? -
兆淑美常: 缺少类的定义不好找啊建议你有选择的先注释掉一部分, 然后再编译找错误

晋宁县19373989028: 求大侠帮忙用C语言,从键盘输入两个整数,要求求和然后输出和. -
兆淑美常: #include "stdio.h" void main() { int a,b,c; scanf("%d %d",&a,&b); c=a+b; printf("%d",c); }

晋宁县19373989028: C语言编程序 求大侠帮忙 -
兆淑美常: 朋友您好! #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int s,t,t0,t1,j,i; clrscr(); randomize(); s=rand()%99+1; printf("Please guess the number\n"); t0=clock(); while(j!=s) { t1=clock(); t=(t1-t0)/CLK_TCK; scanf("%d",&j)...

晋宁县19373989028: C语言的疑问、请大侠帮我解解
兆淑美常: math.h是数学函数库, # include <math.h>这句话就是说把数学函数库包含在这个C语言源程序里面,编译的时候会用到数学函数库里面的函数. 一些数学计算的公式的具体实现是放在math.h里的,例如三角函数,反三角函数,指数与对数的计算...

晋宁县19373989028: c语言求大侠相助 -
兆淑美常: #include <stdio.h> void main() { int n=2000; while(n<=2500) { if((n%4==0 && n%100!=0) ||n%400==0) printf("%ld是闰年\t",n); else printf("%ld不是闰年\t",n); n++; } } DOS窗口只能显示那么多行,前面的就自动丢弃了,你把2500改成2298就可...

晋宁县19373989028: 请大神帮我看看 C语言我这个求正弦的函数的程序为什么计算结果不正确.
兆淑美常: <p></p> <p>#include &lt;stdio.h&gt;</p> <p>#include &lt;math.h&gt;</p> <p>void main()</p> <p>{</p> <p> float x,sum=0.0,r,j2=1.0,j1=1.0;</p> <p> int b=3,m=0,i;</p> <p> printf("请输入数字x=");</p> <p> scanf("%f",&amp;x);</p> <p> do</p...

晋宁县19373989028: 本人编的一个c语言计算器,结果运行的时候它提示错误.求大侠解答. -
兆淑美常: //修改程序完毕,并标出注解 main() {...

晋宁县19373989028: 请教大侠c语言问题:以下程序为什么输出是 - 1,而不是4 -
兆淑美常: #include int main() { int flag=0,i; int a[7]={8,9,7,9,8,9,7}; flag=-1; for(i=6;i>=0;i--) if(a[i]==8){ flag=i; break; } printf(“%d\n”,flag); } 都先break了,还赋值??

晋宁县19373989028: 请大侠帮我解决C语言 下列程序在运行时输入12.8,写出结果. -
兆淑美常: 如果你的输入没有错误的话 输出12 - 8=4 换行 可是输入的时候应该是12,8 中间应该是个逗号吧

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网