文档视界 最新最全的文档下载
当前位置:文档视界 › C语言课程设计(简易计算器设计)带所有代码.

C语言课程设计(简易计算器设计)带所有代码.

C语言课程设计(简易计算器设计)带所有代码.
C语言课程设计(简易计算器设计)带所有代码.

《C语言课程设计》报告

设计题目:简单计算器设计

学院名称:电子与信息工程学院专业:计算机科学与技术

班级:计科

姓名:学号

指导教师:

定稿日期:2013-5-28

一、设计题目

简单计算器设计

二、设计要求

在功能上功能尽量模拟windows操作系统中的计算器,系统界面不做强制要求。

三、设计目的

①通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能

力,能更好的巩固《C语言程序设计》课程学习的内容,掌握工程软件设

计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!

更加了解了c语言的好处和其可用性!同时增加了同学之间的团队合作精

神!更加也体会到以后在工作中团队合作的重要性和必要性!

②通过C语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的

程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。为后续各门计算机课程的学习和毕业

设计打下坚实基础。

四、设计思想及过程

①由于需要使功能尽量模仿Windows下的计算器,而很多功能要以图形界面

实现,故用Borland C++ Builder编写。所以用的是面向对象程序设计。但

因为这是C语言的课程设计,所以除了面向对象的使用以外,所有语法都

是按照C语言的格式编写。

②采用工程模式,文件包括calc.h(运算主函数头文件,包括各运算符的操作

以及其辅助函数)、Main.h(窗体类的声明头文件)、Calc.cpp(工程初始化文

件)、Main.cpp(代码主文件,包括各空间操作的函数)以及一些其它附属文

件,包括dll动态链接库。

③在参考了Windows里的计算器以后,决定在我的课程设计中实现:

⒈0~9的数字输入功能(小数点除外)

⒉实现加、减、乘、整除、取模、阶乘、位运算左移、x的y次方、与、

异或、x立方、x平方运算功能,二进制、八进制、十进制、十六进制

转换功能,正负转换功能,退格、归零等功能。

⒊数字显示最多为40位,超过即用科学表示法表示(例如1E50)。

⒋运算时因最高能对5000位的数字进行运算,故所有功能建立在自行编

写代码的高精度运算基础上。

④在按键操作中,先判断用户按的是数字键还是功能键。功能键分运算符键、

进制转换键以及清空键。然后记录下来用户当前的按键,然后对上次按的功能键键进行运算。如按了1、+、5,再按任何功能键即对1+5进行运算。

如果按的是进制转换键,就记录当前进制,则在以后每次操作中,都将显示结果转换为当前进制再显示。

如:以下是按5以及*号时的函数代码

⑤对于高精度,采用结构体struct high{int num[MAXN];};的形式,数组的一

个元素存一位。个位为num[1],将符号存在num[0]之中。

⒈对于高精度加法,先判断两个数符号,如果为异号,则进行高精度减

法,否则将各位逐个相加,然后逐位进位,返回答案即可。

⒉对于高精度减法,先判断两个数符号,如果为异号,则进行高精度加

法,否则用大数减小数,逐个相减,然后逐位退位,判断符号、返回

答案即可。

⒊对于高精度乘法,用第二个数的各位乘以第一个数的各位。然后错位

相加,相当于小学生摆竖式。最后将各位相乘的结果相加,逐位进位,判断符号、返回答案即可。

⒋对于高精度整除,采用各位从0~9枚举形式,如果此位与0~9相乘刚

好小于等于相应数字,则为此位答案为这个数。最后返回答案即可。

⒌对于高精度取模,则只需求出高精度整除,然后将数字减去整除的结

果即可。

⒍对于n阶乘,做n次乘法,每乘一次,乘数减一。

⒎对于左移,虽然是建立在位运算基础上,但其效果只是乘以二,所以

只需高精度乘以二即可。

⒏对于x的平方、立方、y次方,只需将x高精度相乘2次、3次或者更

多次即可。

⒐对于与运算,先将两个数转换为二进制,然后对每位进行与运算,最

后转换回十进制即可。

⒑对于异或运算,原理同与运算。

⑥对于进制转换,采用除n取余法。将其转换为相应进制。

⑦对于清零键,按按键功能对actNum、ans、nowSym等变量清空或者减少一

位即可。

⑧我对于程序容错性做了很大程度上的优化。对于超出位数的运算会跳出“数

字太大”提示。对于各按键混合使用会导致的程序混乱用了极大程度上的优化,也就是说对于按键的随意性有很好的兼容性。比如说可以直接按2再按*然后按=,就会算出2的平方。

⑨对于显示函数,先判断当前进制数,然后再将需要显示的数字转换为当前

进制数再显示。如果位数超过40,则取前几位,采用科学计数法显示。

⑩未能实现部分:小数部分。由于时间关系,未能实现复制粘贴数字功能。

五、流程图

六、运行过程

打开Calc.exe,模拟Windows下的计算器功能。

①基本功能为输入数字,再输入运算符,然后输入运算符对应数字,按等号。

②输入数字,再输入运算符,输入等于号的结果为“当前输入的数字→运算

符→当前输入的数字”。可以调节正负号。

③输入“数字,运算符,数字,运算符...数字,运算符”亦可。

七、心得体会

这次“简单计算器制作”的课程设计不仅让我对C语言的熟悉程度上升到了另一个高度,而且在一定意义上对面向对象设计的理解更加深刻了。是我在编程路途上的一次质的飞跃。而且在处理非常规数据类型的运算的锻炼下,使我对编程语言有了一个新的认识。当看着一个具有图形界面的计算器的模型成品出现在自己面前时,心中有着无限感慨,原来编程也不是非常遥不可及的,原来在编程的趣味性中能让我学到更多有意思的知识。

附源程序清单:

①Calc.h(运算函数集头文件)

#include

#include

#include

#define HIGH struct high

#define MAXN 5000

#define MAXSHOW 40

#define key_num 0

#define key_sym 1

struct high{

int num[MAXN];

};

HIGH ans, actNum, nowShow;

char nowSym = 'N', lastSym = 'N';

bool _isincMed = true, _lastKey = key_num;

int jz = 10;

bool _isbig(HIGH a, HIGH b)

{

int i;

for(i = MAXN - 1; i > 0; i--)

{

if(a.num[i] > b.num[i]) return true;

else

if(a.num[i] < b.num[i]) return false;

}

return false;

}

void copy(char *str, char *rstr, int op, int len) //将str的从op开始的len个字符复制

到rstr中

{

int i = 0, j = op - 1;

for(; i <= len - 1 || str[j] == '\0'; i++, j++) rstr[i] = str[j];

rstr[i] = '\0';

}

void copyint(HIGH num, HIGH *rint, int op, int len) //将str的从op开始的len个字

符复制到rstr中

{

int i = 1, j = op;

for(; i <= len && j < MAXN; i++, j++) rint -> num[i] = num.num[j];

}

void initNum(HIGH *numb) //初始化

{

int i;

HIGH tmp;

memset(tmp.num, 0, sizeof(tmp.num));

*numb = tmp;

}

int absCmp(HIGH a, HIGH b) //比较绝对值大小

{

int i;

for(i = MAXN - 1; i > 0; i--)

{

if(a.num[i] != b.num[i]) return (a.num[i] > b.num[i]);

}

return -1;

}

int getMed(HIGH a) //获取位数

{

int i, med;

for(i = MAXN - 1; i > 0; i--)

if(a.num[i] != 0)

{

med = i;

break;

}

if(i == 0) med = 1;

return med;

}

void turnSym(HIGH *a) //变号

{

a -> num[0] = a -> num[0] == 0 ? -1 : 0;

}

void decMed(HIGH *a) //减去一位

{

int i, med = getMed(*a);

if(med == MAXN - 1) med--;

for(i = 1; i <= med; i++) a -> num[i] = a -> num[i + 1];

a -> num[med] = 0;

}

void incMed(HIGH *a, int b) //加一位

{

int i, med = getMed(*a);

HIGH r;

initNum(&r);

if(med < MAXSHOW)

{

for(i = 2; i <= med + 1; i++) r.num[i] = a -> num[i - 1];

r.num[1] = b;

r.num[0] = a -> num[0];

}

else r = *a;

*a = r;

}

HIGH mul(HIGH a, HIGH b) //高精度乘法

{

int i, j, k, ma, mb;

HIGH tmpr, r, zero;

initNum(&zero);

initNum(&r);

ma = getMed(a);

mb = getMed(b);

for(i = 1; i <= ma; i++)

{

initNum(&tmpr);

for(j = 1; j <= mb; j++)

{

tmpr.num[j] = a.num[i] * b.num[j];

}

int tmpMed = getMed(tmpr);

if(tmpMed + i > MAXN)

{

initNum(&r);

Application -> MessageBox("数字太大!", "错误", MB_OKCANCEL);

nowSym = 'N';

_lastKey = key_num;

lastSym = 'N';

return r;

}

for(k = 1; k < tmpMed; k++)

{

tmpr.num[k + 1] += (tmpr.num[k] / 10);

tmpr.num[k] %= 10;

}

if(tmpr.num[tmpMed] > 10)

tmpMed = getMed(tmpr);

if(tmpMed + i > MAXN)

{

initNum(&r);

Application -> MessageBox("数字太大!", "错误", MB_OKCANCEL);

nowSym = 'N';

_lastKey = key_num;

lastSym = 'N';

return r;

}

for(j = 1; j <= tmpMed; j++) r.num[j + i - 1] += tmpr.num[j];

}

for(i = 1; i < MAXN - 1; i++)

{

r.num[i + 1] += (r.num[i] / 10);

r.num[i] %= 10;

}

if(r.num[MAXN - 1] > 9)

{

initNum(&r);

Application -> MessageBox("数字太大!", "错误", MB_OKCANCEL);

nowShow = zero;

nowSym = 'N';

_lastKey = key_num;

lastSym = 'N';

}

if((a.num[0] == -1 && b.num[0] == -1) || (a.num[0] == 0 && b.num[0] == 0)) r.num[0] = 0;

else r.num[0] = -1;

return r;

}

HIGH dec(HIGH a, HIGH b) //高精度减法

{

int i, med;

HIGH r;

HIGH inc(HIGH a, HIGH b);

bool m = false;

initNum(&r);

if(a.num[0] == -1 && b.num[0] == -1) m = true;

else

if(a.num[0] == -1)

{

b.num[0] = -1;

return inc(a, b);

}

else

if(b.num[0] == -1)

{

a.num[0] = -1;

return inc(a, b);

}

if(!absCmp(a, b))

{

a.num[0] = (a.num[0] == 0) ? -1 : 0;

b.num[0] = (b.num[0] == 0) ? -1 : 0;

return dec(b, a);

}

med = getMed(a);

for(i = 1; i <= med; i++) r.num[i] = a.num[i] - b.num[i];

for(i = 1; i <= med; i++)

{

if(r.num[i] < 0)

{

r.num[i + 1] -= 1;

r.num[i] = 10 + r.num[i];

}

}

if(m) r.num[0] = -1;

return r;

}

HIGH inc(HIGH a, HIGH b) //高精度加法

{

int i;

bool m = false, err = false;

initNum(&r);

initNum(&zero);

if(a.num[0] == -1 && b.num[0] == -1) m = true;

else

if(a.num[0] == -1)

{

a.num[0] = 0;

return dec(b, a);

}

else

if(b.num[0] == -1)

{

b.num[0] = 0;

return dec(a, b);

}

for(i = 1; i < MAXN; i++) r.num[i] = a.num[i] + b.num[i];

for(i = 1; i < MAXN - 1; i++)

{

r.num[i + 1] += (r.num[i] / 10);

r.num[i] %= 10;

}

if(r.num[MAXN - 1] > 9)

{

initNum(&r);

Application -> MessageBox("数字太大!", "错误", MB_OKCANCEL);

nowSym = 'N';

_lastKey = key_num;

lastSym = 'N';

nowShow = zero;

return r;

}

if(m) r.num[0] = -1;

return r;

}

HIGH div(HIGH a, HIGH b) //高精度整除

{

int i, j, ma = getMed(a), mb = getMed(b);

HIGH r, tmpHigh, cmp, someZero, theone;

initNum(&r);

initNum(&theone);

if(a.num[0] == b.num[0]) ;

else r.num[0] = -1;

a.num[0] = 0;

b.num[0] = 0;

for(i = ma - mb + 1; i > 0; i--)

{

initNum(&tmpHigh);

copyint(a, &tmpHigh, i, ma);

initNum(&cmp);

for(j = 0; !_isbig(cmp, tmpHigh); j++)

{

cmp = inc(cmp, b);

}

theone.num[1] = j;

if(_isbig(mul(theone, b), tmpHigh)) j--;

r.num[i] = j;

initNum(&someZero);

someZero.num[i] = j;

someZero = mul(someZero, b);

a = dec(a, someZero);

}

return r;

}

HIGH mod(HIGH a, HIGH b) //高精度取模{

int i, j;

HIGH tmpans;

tmpans = div(a, b);

return dec(a, mul(tmpans, b));

}

String getHexStr(int a) //得到十六进制字符串{

if(a == 10) return "A";

else

if(a == 11) return "B";

else

if(a == 12) return "C";

else

if(a == 13) return "D";

else

if(a == 14) return "E";

else

if(a == 15) return "F";

}

int getHex(HIGH a) //十六进制取余{

if(a.num[2] == 0) return a.num[1];

else return a.num[2] * 10 + a.num[1];

}

HIGH hex(HIGH a) //转化十六进制{

int i = 0, j;

HIGH zero, r, sixteen;

initNum(&zero);

initNum(&r);

initNum(&sixteen);

sixteen.num[1] = 6;

sixteen.num[2] = 1;

if(a.num[0] == -1)

{

initNum(&r);

Application -> MessageBox("不能为负数!", "错误", MB_OKCANCEL);

nowSym = 'N';

_lastKey = key_num;

lastSym = 'N';

nowShow = zero;

return r;

}

while(_isbig(a, zero))

{

i++;

r.num[i] = getHex(mod(a, sixteen));

a = div(a, sixteen);

if(getMed(r) > MAXSHOW)

{

initNum(&r);

Application -> MessageBox("数字太大!", "错误", MB_OKCANCEL);

nowShow = zero;

nowSym = 'N';

_lastKey = key_num;

lastSym = 'N';

return r;

}

}

return r;

}

HIGH bajinzhi(HIGH a) //转化八进制

{

int i = 0, j;

HIGH zero, r, eight;

initNum(&zero);

initNum(&r);

initNum(&eight);

eight.num[1] = 8;

if(a.num[0] == -1)

{

initNum(&r);

Application -> MessageBox("不能为负数!", "错误", MB_OKCANCEL);

nowSym = 'N';

_lastKey = key_num;

lastSym = 'N';

nowShow = zero;

return r;

}

while(_isbig(a, zero))

{

i++;

r.num[i] = mod(a, eight).num[1];

a = div(a, eight);

if(getMed(r) > MAXSHOW)

{

initNum(&r);

Application -> MessageBox("数字太大!", "错误", MB_OKCANCEL);

nowShow = zero;

nowSym = 'N';

_lastKey = key_num;

lastSym = 'N';

return r;

}

}

return r;

}

HIGH bin(HIGH a) //转化二进制

{

int i = 0, j;

HIGH zero, r, two;

initNum(&zero);

initNum(&r);

initNum(&two);

two.num[1] = 2;

if(a.num[0] == -1)

{

initNum(&r);

Application -> MessageBox("不能为负数!", "错误", MB_OKCANCEL);

nowShow = zero;

nowSym = 'N';

_lastKey = key_num;

lastSym = 'N';

return r;

}

while(_isbig(a, zero))

{

i++;

r.num[i] = a.num[1] % 2;

a = div(a, two);

if(getMed(r) > MAXSHOW)

{

initNum(&r);

Application -> MessageBox("数字太大!", "错误", MB_OKCANCEL);

nowShow = zero;

nowSym = 'N';

_lastKey = key_num;

lastSym = 'N';

return r;

}

}

return r;

}

HIGH binToshi(HIGH a)

{

int i, med = getMed(a);

HIGH r, tmp, the1, tmp2, two, thetwo;

initNum(&tmp);

initNum(&tmp2);

initNum(&the1);

initNum(&thetwo);

initNum(&two);

two.num[1] = 1;

thetwo.num[1] = 2;

the1.num[1] = 1;

initNum(&r);

for(i = 1; i <= med; i++, tmp = inc(tmp, the1)) {

tmp2.num[1] = a.num[i];

r = inc(r, mul(tmp2, two));

two = mul(two, thetwo);

}

return r;

}

HIGH and(HIGH a, HIGH b) //与

{

HIGH tmpa, tmpb, r;

int med, meda, medb, i;

initNum(&r);

tmpa = bin(a);

tmpb = bin(b);

meda = getMed(tmpa);

medb = getMed(tmpb);

med = (meda > medb) ? meda : medb;

for(i = 1; i <= med; i++)

r.num[i] = tmpa.num[i] & tmpb.num[i];

r = binToshi(r);

return r;

}

HIGH xor(HIGH a, HIGH b) //异或

{

HIGH tmpa, tmpb, r;

int med, meda, medb, i;

initNum(&r);

tmpa = bin(a);

tmpb = bin(b);

meda = getMed(tmpa);

medb = getMed(tmpb);

med = (meda > medb) ? meda : medb;

for(i = 1; i <= med; i++)

r.num[i] = tmpa.num[i] ^ tmpb.num[i];

r = binToshi(r);

return r;

}

void doAns(HIGH *ans, HIGH actNum, char *nowSym, char newSym, char lastSym, bool lastKey)

{

HIGH the1, zero, tmp;

initNum(&the1);

the1.num[1] = 1;

if(lastKey == key_sym)

{

if(newSym == 'N')

{

//if(*nowSym != 'N') doAns(ans, *ans, nowSym, 'N', lastSym, key_num);

//else

if(*nowSym != 'N') doAns(ans, actNum, nowSym, 'N', lastSym, key_num);

else

if(lastSym != 'N') doAns(ans, actNum, &lastSym, 'N', lastSym, key_num);

else

*ans = actNum;

}

else

{

*nowSym = newSym;

}

}

else

if(lastKey == key_num)

{

if(*nowSym == 'N')

{

if(lastSym != 'N') doAns(ans, actNum, &lastSym, 'N', lastSym, lastKey);

else *ans = actNum;

}

else

if(*nowSym == '+') *ans = inc(actNum, *ans);

else

if(*nowSym == '-') *ans = dec(*ans, actNum);

else

if(*nowSym == '*') *ans = mul(*ans, actNum);

else

if(*nowSym == '/') *ans = div(*ans, actNum);

else

if(*nowSym == '2') *ans = mul(*ans, *ans);

else

if(*nowSym == '3')

{

*ans = mul(mul(*ans, *ans), *ans);

}

else

if(*nowSym == 'Y')

{

initNum(&zero);

if(actNum.num[0] == -1 || !_isbig(actNum, zero))

{

*ans = the1;

return ;

}

zero.num[1] = 2;

tmp = *ans;

for(; !_isbig(zero, actNum); zero = inc(zero, the1))

{

*ans = mul(*ans, tmp);

}

}

else

if(*nowSym == 'L')

{

initNum(&zero);

zero.num[1] = 2;

if(*nowSym == '2') *ans = mul(*ans, zero);

}

else

if(*nowSym == 'M') *ans = mod(*ans, actNum);

else

if(*nowSym == '!')

{

actNum = dec(*ans, the1);

initNum(&zero);

while(_isbig(actNum, zero))

{

*ans = mul(*ans, actNum);

actNum = dec(actNum, the1);

}

}

else

if(*nowSym == 'A') *ans = and(*ans, actNum);

else

if(*nowSym == 'X') *ans = xor(*ans, actNum);

}

}

②Calc.cpp /*由BCB生成*/

#include

#pragma hdrstop

//-------------------------------------------------------------

USEFORM("Main.cpp", MainForm);

//-------------------------------------------------------------

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

try

{

Application -> Initialize();

Application -> CreateForm(__classid(TMainForm), &MainForm);

Application -> Run();

}

catch(Exception &exception)

{

Application -> ShowException(&exception);

}

catch(...)

{

try

{

throw Exception("");

}

catch(Exception&exception)

{

Application -> ShowException(&exception);

}

}

return 0;

}

//-------------------------------------------------------------

③Main.h /*由BCB生成*/

#ifndef MainH

#define MainH

//--------------------------------------------------------------------------- #include

#include

#include

#include

#include

#include

//--------------------------------------------------------------------------- class TMainForm : public TForm

{

__published: // IDE-managed Components

TMainMenu *MainMenu1;

TMenuItem *E1;

TMenuItem *N1;

TMenuItem *H1;

TEdit *Show_Editor;

TButton *bt_bkspace;

TButton *bt_ce;

TButton *bt_Leftc;

TButton *bt_0;

TButton *bt_iAndm;

TButton *bt_inc;

TButton *bt_eq;

TButton *bt_1;

TButton *bt_2;

TButton *bt_3;

TButton *bt_dec;

TButton *bt_lsh;

TButton *bt_4;

TButton *bt_5;

TButton *bt_6;

TButton *bt_mul;

TButton *bt_xor;

TButton *bt_7;

TButton *bt_8;

TButton *bt_9;

TButton *bt_div;

TButton *bt_mod;

TButton *bt_and;

TButton *bt_xpf;

TButton *bt_xlf;

TButton *bt_xycf;

TButton *bt_njc;

TButton *sljz;

TButton *sjz;

TButton *bjz;

TButton *ejz;

void __fastcall FormCreate(TObject *Sender);

void __fastcall bt_7Click(TObject *Sender);

void __fastcall bt_8Click(TObject *Sender);

void __fastcall bt_0Click(TObject *Sender);

void __fastcall bt_1Click(TObject *Sender);

void __fastcall bt_2Click(TObject *Sender);

void __fastcall bt_3Click(TObject *Sender);

void __fastcall bt_4Click(TObject *Sender);

void __fastcall bt_5Click(TObject *Sender);

void __fastcall bt_6Click(TObject *Sender);

void __fastcall bt_9Click(TObject *Sender);

void __fastcall bt_iAndmClick(TObject *Sender);

void __fastcall bt_incClick(TObject *Sender);

void __fastcall bt_eqClick(TObject *Sender);

void __fastcall bt_decClick(TObject *Sender);

void __fastcall bt_mulClick(TObject *Sender);

void __fastcall Show_EditorKeyPress(TObject *Sender, char &Key);

void __fastcall bt_divClick(TObject *Sender);

void __fastcall bt_LeftcClick(TObject *Sender);

void __fastcall bt_ceClick(TObject *Sender);

void __fastcall bt_bkspaceClick(TObject *Sender);

void __fastcall bt_xpfClick(TObject *Sender);

void __fastcall bt_xlfClick(TObject *Sender);

void __fastcall bt_xycfClick(TObject *Sender);

void __fastcall bt_lshClick(TObject *Sender);

void __fastcall bt_modClick(TObject *Sender);

void __fastcall bt_njcClick(TObject *Sender);

void __fastcall sjzClick(TObject *Sender);

void __fastcall ejzClick(TObject *Sender);

void __fastcall sljzClick(TObject *Sender);

void __fastcall bjzClick(TObject *Sender);

void __fastcall bt_andClick(TObject *Sender);

void __fastcall bt_xorClick(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TMainForm(TComponent* Owner);

void __fastcall TMainForm::ShowText(HIGH a);

};

//---------------------------------------------------------------------------

extern PACKAGE TMainForm *MainForm;

//---------------------------------------------------------------------------

#endif

④Main.cpp

#include

#include

#pragma hdrstop

#include "Main.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

using namespace std ;

TMainForm*MainForm ;

//---------------------------------------------------------------------------

__fastcall TMainForm :: TMainForm(TComponent*Owner)

:

TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TMainForm :: ShowText(HIGH a) /*显示函数*/

{

nowShow=a ;

AnsiString str ;

int med,i,j ;

if(jz==2)a=bin(a);

else

if(jz==8)a=bajinzhi(a);

else

if(jz==16)a=hex(a);

med=getMed(a);

bool m=(a.num[0]==-1)?true:false ;

if(med<=MAXSHOW)

{

if(m)

{

i=1 ;

str="-" ;

}

else i=0 ;

for(j=med;(m)?(i<=med):(i

{

str+=(a.num[j]>9)?getHexStr(a.num[j]):IntToStr(a.num[j]);

}

Show_Editor->Text=str ;

}

else

{

if(m)

{

i=1 ;

str="-" ;

}

else i=0 ;

int e=med-1 ;

C语言简易计算器的实现

目录 一.课程设计目的 (1) 二.设计环境 (1) 三.设计内容 (1) 四.设计说明 (2) 五.设计程序流程图 (2) 六.调试 (4) (1)错误原因分析一 (4) (2)语法错误 (5) (3)逻辑错误 (5) 七. 调试结果图 (6) 八. 结论与心得体会 (7) 九.附录 (8) 具体代码实现 (8) 十.参考文献 (18)

一.课程设计目的 1.通过一个学期的学习,我认为要学号C语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践来巩固我 们的知识,特别是学计算机专业的,我们更应该注重这一环节, 只有这样我们才能成为一个合格的计算机人才。通过这一个课程 设计,进一步来巩固所学的语句,如:循环,和分支结构的运用。还要熟悉四则运算和函数的算法。 2.通过这次课程设计扩展自己的知识面,课本上的东西是远 远不够的,可以通过上网或去图书馆查资料等方式得到一些新的 知识, 3.通过课程设计,加深对课程化设计思想的理解,能进行一 个系统功能分析,并设计一个合理的模块化结构,提高程序开发 能力。 二.设计环境 1.硬件:一台完整的电脑,包括键盘、鼠标,最小硬盘空间1GHz 2.软件:安装有Microsoft visual c++6.0 三.设计内容 以简易计算器为例,通过对简单应用软件计算器的设计,编制、调试,实现

简单的加,减,乘,除等运算,以学习应用MFC库类编写对话框的原理,加深对C++类的学习及应用。 (1)定义一个结构体类型数组,输入0~9及+、--、*等符号的信息,将其信息存入文件中; (2)输入简单的加减乘除算术计算式,并在屏幕上显示计算结果; (3)画出部分模块的流程图; (4)编写代码; (5)程序分析与调试。 四.设计说明 1)包含的功能有:加、减、乘、除运算,开方、平方等功能。 (2)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。 (3)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。 (4)计算功能基本上是用系统内部函数。 (5)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。 (6)“CE”按钮可以清除所有已输入的数据从头计算 五.设计程序流程图

c语言计算器源代码

c语言计算器源代码 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】

#i n c l u d e<> #include<> #include<> #definemaxsize100 typedefdoubledatatype1; typedefchardatatype2; typedefstructstack1 { datatype1data1[maxsize]; inttop1; /*栈顶元素*/ }seqstack1,*pseqstack1;/*顺序栈*/ typedefstructstack2 { datatype2data2[maxsize]; inttop2; /*栈顶元素*/ }seqstack2,*pseqstack2;/*顺序栈*/ /*栈的初始化*/ pseqstack1init_seqstack1(void) { pseqstack1S; S=(pseqstack1)malloc(sizeof(pseqstack1)); if(S) S->top1=-1; returnS; } pseqstack2init_seqstack2(void) { pseqstack2S; S=(pseqstack2)malloc(sizeof(pseqstack2)); if(S) S->top2=-1; returnS; } /*判断栈空*/ intempty_seqstack1(pseqstack1S)

if(S->top1==-1) return1; else return0; } intempty_seqstack2(pseqstack2S) { if(S->top2==-1) return1; else return0; } /*X入栈*/ intpush_seqstack1(pseqstack1S,datatype1X) { if(S->top1==maxsize-1) { printf("栈满,无法入栈!\n"); return0; } else { S->top1++; S->data1[S->top1]=X; return1; } } intpush_seqstack2(pseqstack2S,datatype2X) { if(S->top2==maxsize-1) { printf("栈满,无法入栈!\n"); return0; } else { S->top2++; S->data2[S->top2]=X; return1; }

C语言课程设计计算器图形界面

C语言课程设计计算器图形界面

扬州大学 C语言课程设计报告 题目一个简易计算器的设计与实现 班级 学号 姓名 指导教师 成绩 老师评语: 扬州大学信息工程学院 年 6 月 25 目录

一、程序设计目的: (1) 二、程序设计内容: (1) 三、课程设计所补充的内容:补充的函数或算法…………3,4 四、系统总体设计 (4) 五、系统详细设计………………………………………5,6,7,8 六、运行结果………………………………………………8,9,10 七、系统调试…………………………………………8,9,10,11 八、课程设计体会总结………………………………8,9,10,11 1 课程设计目的 (1).课程设计是一项综合性实践环节,是对平时实验的一个补充,课程设计内容包括课程的主要理论知识,但由于C语言对初学者较难掌握,因而对一个完整的C语言程序不适合平时实验。

经过课程设计能够达到综合设计C语言程序的目的。 (2)经过本课程设计,能够培养独立思考,综合运用所学有关相应知识的能力,能更好地使用C语言的知识,更好地了解C语言的好处和其可用性!掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础! (3)经过本程序训练程序设计的基本技能,掌握字符串的表示方法和字符串函数的功能、自学掌握四则运算的算法及WIN-TC的图形操作的基本知识、键盘上特殊键的获取及图形方式下光标的显示。 2 课程设计内容 目的:本课程的课程设计要求学生模拟实现一个简单计算器,要求(1)能够实现四则运算,并能支持优先级运算。(2)三角与反三角运算:如sinx,cosx等。(3)指数对数运算:如log (x),lnx,e的x次方等。(4)其它运算:如X!,x的累加等。(4)不允许调用库函数,使用自行开发的程序实现常见函数运算。(5)进一步考虑计算器外观设计,用可视化界面给出计算器外观、功能按键及输入界面。 使用说明:执行加法运算,'—'表示执行减法运算,表示执行乘法运算,'/'表示除法运算.‘Q’表示退出计算器‘C’表示清零,’=’表示得出结果'^'表示执行x的y次方,'e'表示执行e的x次方操

速算,简易计算器c语言代码,可实现加减乘除

#include"stdio.h" #include"math.h" #include"stdlib.h" struct optrstyle { int top; char stack[20]; } struct opndstyle { int top; int stack[20]; } void main() { char ch; while(1) { printf("-----------------------------------------\n"); printf("|-----------欢迎来到速算24--------------|\n"); printf("|----------是否开始游戏?????------------|\n"); printf("|--------- 开始游戏请按'Y'-------------|\n"); printf("|--------- 退出游戏请按其他键-------------|\n"); printf("-----------------------------------------\n"); scanf("%c",&ch); if(ch=='Y' or ch=='y') { } else break; } } int EvaluateExpression() { // 算术表达式求值的算符优先算法。设OPTR 和OPND 分别为运算符栈和运算数栈,OP 为运算符集合。 InitStack(OPTR); Push(OPTR,'#'); InitStack(OPND); c = getchar(); while(c!='#' || GetTop(OPTR)!='#') { if(!In(c,OP))

简易计算器设计-msp430-C语言

简易计算器

目录 摘要…………………………………………………………………………………P3 关键字………………………………………………………………………………P3 一、设计要求………………………………………………………………………P3 二、方案论证与选择………………………………………………………………P3 2.1 单片机选择………………………………………………………………P3 2.2 LCD显示屏选择…………………………………………………………P3 2.3 键盘选择…………………………………………………………………P4 2.4 CPU工作方式选择………………………………………………………P4 三、系统实现………………………………………………………………………P4 3.1 硬件设计…………………………………………………………………P4 3.1.1系统框图……………………………………………………………P4 3.1.2 盘的电平设计以及与单片机的连接 键……………………………P5 3.2.3单片机与显示器的连接…………………………………………… P5 3.2软件设计…………………………………………………………………… P6 四、作品性能测试与分析…………………………………………………………P10 4.1试性能概览………………………………………………………………P10 4.2误差分析…………………………………………………………………P12

五、参考文献………………………………………………………………………P12 六、附录……………………………………………………………………………P13 6.1计算器功能介绍…………………………………………………………P13 6.2仿真电路图………………………………………………………………P13 6.3元件清单…………………………………………………………………P13 6.4原程序代码………………………………………………………………P14 摘要:本设计以低功耗单片机MSP430V136T、1602字符型液晶屏和4*4简易键盘为主要器件,来实现加、减、乘、除、开根号、平方、求倒数等运算。设计中分别采用P1口低4位和P2口低4位与键盘的行列线相连,用于采集中断信号并分析键值;键盘规格为4*4,由于所需的功能键数大于16,因此需要进行按键复用;单片机的P3口连接显示器的D0~D7端,用于输出显示数据或控制命令;选用P4口中的3、4和5口用于实现显示屏的控制功能:使能、控制/数

C语言制作简单计算器

C语言制作简单计算器 一、项目介绍 我们要用c语言做一个简单的计算器,进行加、减、乘、除操作。本程序涉及的所有数学知识都很简单,但输入过程会增加复杂性。我们需要检查输入,确保用户没有要求计算机完成不可能的任务。还必须允许用户一次输入一个计算式,例如:32.4+32 或者9*3.2 项目效果图 编写这个程序的步骤如下: ?获得用户要求计算机执行计算所需的输入。 ?检查输入,确保输入可以理解。 ?执行计算。 ?显示结果。 三、解决方案 1.步骤1

获得用户输入是很简单的,可以使用printf()和scanf()。下面是读取用户输入的程序代码: #includeint main(){ double number1=0.0; //定义第一个操作值 double number2=0.0; //定义第二个操作值 char operation=0; //operation必须是'+''-''*''/'或'%' printf("\nEnter the calculation\n"); scanf("%lf%c%lf",&number1,&operation,&number2); return0; } 2.步骤2 接着,检查输入是否正确。最明显的检查是要执行的操作是否有效。有效的操作有+、-、*、/和%,所以需要检查输入的操作是否是其中的一个。 还需要检查第二个数字,如果操作是/或者%,第二个数字就不能是0。如果右操作数是0,这些操作就是无效的。这些操作都可以用if语句来完成,switch语句则为此提供了一种更好的方式,因此它比一系列if语句更容易理解。 switch(operation) { case'+': printf("=%lf\n",number1+number2); break; case'-': printf("=%lf\n",number1-number2); break; case'*': printf("=%lf\n",number1*number2); break; case'/': if(number2==0) printf("\n\n\aDavision by zero error!\n"); else printf("=%lf\n",number1/number2); break;

简易计算器C语言代码

简易四则运算计算器 计算机工具地历史而言,中国古代最早采用地一种计算工具叫筹策,又叫做算筹,这种算筹多用竹子制成,也有用木头,兽骨充当材料的,大约270枚一束,放在布袋里可随身携带。直到今天仍在使用的住算盘,是中国古代计算工具领域中的另一项发明明代时的住算盘已经与现代的住算盘几乎相同。 17世纪初,西方国家的计算工具有了较大的发展。英国数学家纳尔发现了“纳皮尔算筹”;英国牧师奥却德发明了圆柱形对数计算尺,这种计算尺不仅能做加减乘涂,乘方和开方运算,甚至可以计算三角函数,指数函数和对数函数。这些计算工具不仅带动了计算的发展,也为现代计算器发展尊定了良好的基础,成为现代社会应用广泛的计算工具,如手机,操作系统上附带的多功能计算器。 项目设计目的 掌握模块的划分; 掌握结构体定义; 掌握栈的操作; 掌握函数的定义; 掌握栈的基本操作; 掌握VC的基本绘图库; 掌握鼠标的响应操作; 目设计内容 设计一个含有界面的计算器,输入一个包含括号的表达式,使用栈数据类型实现整数的四则运算操作,开方运算。 项目设计要求 根据分析,系统要求实现以下几点基本功能: 可通过按钮输入数字、运算符; 能通过按钮实现退格、清除功能; 实现加、减、乘、除、开方运算功能; 实现括号运算; 显示运算结果; 良好的交互界面。

项目详细设计 功能模块图 根据系统功能要求,主要含有四大模块,分别是计算器界面设计模块、计算器按键控制模块、四则混合运算模块、计算器记忆处理模块。 计算器界面设计模块:调用VC图形系统函数和字符函数画出计算器的界面,包括24个按钮和一个文本输入框。 计算机按键控制模块:计算器通过键盘按键值的判断,执行相应的操作,如接收数字输入等。 计算器计算处理模块。计算处理模块主要完成可以包括括号的表达式运算,运算包括加,减,乘,除、开方。计算处理模块在按键控制模块中被调用执行。处理模块是通过栈来实现的,分别定义了两个顺序栈,一个用来存放操作符栈,一个用来存放操作数栈。 计算器记忆处理模块。记忆处理模块使计算其具有记忆功能。记忆当前输入的表达式,给出一个最后的运算结果。可以清楚部分或全部记忆的值。 图简易计算器模块图 数据结构 该系统主要的数据有操作符集,用一维数组存放;存放操作符的优先级关系集,操作符的优先级关系用一个二维数组来体现;另外定义两个栈,一个用来存放操作符,一个用来存放操作数。 char ops[7]={'+','-','*','/','(',')','#'}; int cmp[7][7]={ {2,2,1,1,1,2,2}, {2,2,1,1,1,2,2}, {2,2,2,2,1,2,2}, {2,2,2,2,1,2,2}, {1,1,1,1,1,3,0}, {2,2,2,2,0,2,2}, {1,1,1,1,1,0,3}}; typedef struct { char elem[Stack_Size]; int top; }SeqStack; typedef struct { int elem[Stack_Size]; int top; }SeqStackOperand;

C语言课程设计--计算器(图形界面)

扬州大 学 题目一个简易计算器的设计与实现 班级 学号 姓名 指导教师 成绩 老师评语: 扬州大学信息工程学院 2010 年6 月25

目录 一、程序设计目的: (1) 二、程序设计内容: (1) 三、课程设计所补充的内容:补充的函数或算法…………3,4 四、系统总体设计 (4) 五、系统详细设计………………………………………5,6,7,8 六、运行结果………………………………………………8,9,10 七、系统调试…………………………………………8,9,10,11 八、课程设计体会总结………………………………8,9,10,11

1 课程设计目的 (1).课程设计是一项综合性实践环节,是对平时实验的一个补充,课程设计内容包括课程的主要理论知识,但由于C语言对初学者较难掌握,因而对一个完整的C语言程序不适合平时实验。通过课程设计可以达到综合设计C语言程序的目的。 (2)通过本课程设计,可以培养独立思考,综合运用所学有关相应知识的能力,能更好地使用C语言的知识,更好地了解C语言的好处和其可用性!掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础! (3)通过本程序训练程序设计的基本技能,掌握字符串的表示方法和字符串函数的功能、自学掌握四则运算的算法及WIN-TC的图形操作的基本知识、键盘上特殊键的获取及图形方式下光标的显示。 2 课程设计内容 目的:本课程的课程设计要求学生模拟实现一个简单计算器,要求(1)能够实现四则运算,并能支持优先级运算。(2)三角与反三角运算:如sinx,cosx等。(3)指数对数运算:如log(x),lnx,e的x次方等。(4)其他运算:如X!,x 的累加等。(4)不允许调用库函数,使用自行开发的程序实现常用函数运算。(5)进一步考虑计算器外观设计,用可视化界面给出计算器外观、功能按键及输入界面。 使用说明:执行加法运算,'—'表示执行减法运算,表示执行乘法运算,'/'表示除法运算.‘Q’表示退出计算器‘C’表示清零,’=’表示得出结果'^'表示执行x的y次方,'e'表示执行e的x次方操作,'&'表示执行累加操作.,你可以可以用键盘上的上下左右键对光标进行移动,当光标移动到计算器按键上时,按ENTER即可执行该键的操作!最后按“=”则可得出结果。 3 课题设计的补充知识 本程序通过int specialkey(void)和#include来实现对屏幕的操作,通过调用int arrow()函数,int specialkey(void)和#include来实现对光标的操作。计算机图形采用Turbo C 2.0绘图程序制作。因此涉及C的图形程序设计知识。此外,由于不允许调用库函数,则要自行开发程序实现sinx,cosx,e的x次方函数运算,则可以根据幂级数的展开式来设计实现其运算的算法,而x的阶乘和x的累加则可用for语句来实现。 最后,不得不说说四则运算的算法,有两种方法可以实现:(1)利用堆栈实现四则运算(2)还可以用递归整数的四则运算。 sinx函数 #include

C语言简单计算器的编写课程设计

2013-2014学年第二学期 《高级语言程序设计》 课程设计报告 题目:简单计算器 专业:数字媒体技术 班级:13级1班 姓名:邢洪波 指导教 师:王辉 成绩: 计算机与信息工程系 二0一四年二月二十日 1设计内容及要求 利用本学期所学的《C语言程序设计》课程,运用相关知识,查阅相关资料,编写C语言程序,设计一个简单计算器,要求编写的简单计算器能够模拟windows系统的计算器,用户能够用键盘输入相关数据,能够进行简单的加、减、乘、除运算,并且在程序运行过程中能够正常的退出程序。? 在计算器程序运行中,输入数据时如果遇到输入错误的情况,能够能过键盘上的退格键进行删除,并且重新输入正确的数据。在数据输入完成后,

如果需要放弃本次计算操作,可以利用程序中设置好的按键进行清零,并为下一次运算作准备。 运用相关知识,查阅相关资料,编写一个简单的计算器,能够实现简单的基本的加减乘除运算,在计算器工作时用户能利用键盘或鼠标进行相应操作。程序基本功能要求实现完整,并有简单的验证。程序还须有符合标准的 程序设计报告。

2概要设计 系统流程图 系统流程图主要功能表 主要功能表

3设计过程或程序代码 #include<> #include<> #include<> /*malloc的头文件代表在内存中开辟存储空间*/ double jisuan(char a[]) { int i=1,j,k,m,cnt=0,t1=0,t2=0,t3=0; /*定义整型变量i,j,k,m,n,cnt,t1,t2,t3*/ char nibo[50],zhan2[50]; /*定义字符型数组*/ double x,n,l,z=0,zhan3[50]; /*定义双精度变量x,n,l,z,zhan3[50]*/ typedef struct /*表示可以用con定义结构体变量*/ { double d1; int d2; }dd; typedef struct { dd data[50]; int top; }zhan1; zhan1 *shu; /*定义指针变量*/ shu=(zhan1 *)malloc(sizeof(zhan1)); shu->top=0; while(a[i]!='\0') /*外循环是用while语句*/ {

(完整word版)C语言简易计算器课程设计.doc

C语言课程设计报告书题目:简易计算器 院系: 班级: 学号: 姓名:

摘要 该软件为用户提供在windows 系统上的简易计算器,能进行简单的加、减、 乘、除四则运算与混合运算。目的是为了巩固和加深 C 语言课程的基本知识的理 解和掌握,利用 C语言进行基本的软件设计,掌握 C 语言的编程和程序调试 的基本技能,掌握书写程序设计说明文档的能力,提高运用 C 语言解决实际问 题的能力。 关键词: C; 简易计算器 ; 程序 ; 基本算法;混合运算 SUMMARY the software provides a simple calculator in Windows system for users ,can be a simple add,subtract,multiply,divide.The purpose is to consolidate and deepen the basic knowledge of C language courses to understand and master, The use of C language for software design basic, To master the basic skills of C language programming and program debugging, Master the writing program design documentation ability,improve the ability to use C language to solve practical problems.

用C语言实现多项式简单计算器的设计

武汉理工大学华夏学院课程设计报告书 课程名称:数据结构 题目:用C语言实现多项式简单计算器的设计 系名:信息工程系 专业班级:软件工程1121班 姓名:邓燕蓉 指导教师:王绪梅 2013 年 6月 28日

课程设计任务书 学生姓名:邓燕蓉专业班级:软件工程1121班 指导教师:王绪梅工作单位:华夏学院计算机教研室设计题目:用C语言实现多项式简单计算器的设计 设计目的 1.巩固和加深课堂所学知识、学会分析研究数据对象的特性及数据的组织方法; 2.选择合适的数据的逻辑结构和存储结构以及相应操作,实现简单的多项式计算; 3.提高程序设计能力、加强查阅、运用资料的能力、算法分析与程序设计素质培养; 设计任务(在规定的时间内完成下列任务) 〔问题描述〕输入并建立两个多项式并输出多项式 设计一个程序:对两个多项式进行加、减法及乘法运算,建立一个新多项式并输出. 或设计一个程序对其中一个多项式求导。 〔实现提示〕 选择带头结点的单链表或循环链表存储多项式,头结点中存放多项式的参数及单链表的数据具体要完成的任务是: A.编制完成上述问题的C语言程序、进行程序调试并能得出正确的运行结果。 B.写出规范的课程设计报告书; 时间安排:6月24日---28日 具体要求 1. 课程设计报告按统一通用格式书写,具体内容如下: ①设计任务与要求 ②总体方案与说明 ③软件主要模块的流程图 ④源程序清单与注释 ⑤问题分析与解决方案(包括调式记录、调式报告,即在调式过程中遇到的主要问题、解决方法 及改进设想); ⑥小结与体会 附录:①源程序(必须有简单注释)②使用说明③参考资料 2.每位学生应独立完成各自的任务且每天至少在设计室工作半天; 指导教师签名:王绪梅2013 年6月22日 教研室主任(或责任教师)签名:2013年6月24日

单片机C语言简易计算器

课程设计报告 课程名称单片机原理及应用设计题目简易计算器设计专业班级 姓名 学号

1.项目概述 中国古代最早采用的一种计算工具叫算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的。约二百七十枚一束,放在布袋里可以随身携带。17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的“纳皮尔算筹”,英国牧师奥却德发明了圆柱形对数计算尺,这种计算尺不仅能做加减乘除,乘方,开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。 2.项目要求 基于AT89C51单片机的简易计算器,设计要求如下: (1)计算器至少能正常显示8位数。 (2)开机时,显示“0” (3)计算器能对整数进行简单的加减乘除四则运算,在做除法时能自动舍去小数部分 (4)运算结果超过可显示的位数时能进行出错提示。 3.小组人员组成及分工

4.系统设计1.框图设计 显示 录入 5.硬件设计 (1)电路原理图: AT89C51 八位七段数码管 按键录入模 块(0-9 +-*/=c)

(2)元件清单: 6.软件设计(1)算法流程图: 主函数

显示函数 按键函数

(2)程序清单: #include /***按键程序***/ char keyscan(); /***显示程序***/ void display(); char dsp[9]={0,0,12,12,12,12,12,12,12}; //初始化显示数组 /***计算程序***/ void calculate(char k,char c1[8],char c2[8]); /***片选***/ unsigned char code Select[]= {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; /***码选***/ unsigned char code LED_CODES[]= {0xC0,0xF9,0xA4,0xB0,0x99, //0-4 0x92,0x82,0xF8,0x80,0x90, //5-9 0x86,0xAF,0xFF,0x7F,0xBF,}; //E,r,空格,.,- /***main函数***/ void main(void) { char i,j,k,c; char a[8],b[8]; /***定时1ms***/ TMOD=0; //TL0=-(1000/256); //TH0=-(1000%256); EA = 1; //总中断开关

用C语言编写简易计算器

供应链管理 用C语言设计简易计算器 班级:工业工程1103班 姓名: 2014/5/6

一、设计内容 我设计的是一款简易计算器,界面清楚,操作方便,它能实现以下功能:1.以界面形式给出计算器功能 2.简单的四则混合运算(支持小括号、优先级) 3.弦、余弦函数计算 4.指数、对数的运算 二、总体设计 简单计算器由五大模块组成,模块设计如下: 模块调用图 1.主函数 void main() 功能:调用各个主要模块,实现简单计算器的整体功能。2. 主界面函数void JieMian() 功能:使用有关图形函数模拟出可视化的计算器外观界面,并提供用户输入窗口。 3.四则混合运算函数void SiZeHunHeYunSuan() 功能:实现简单的加减乘除混合运算,并支持优先级和带括号的运算。 4.三角运算函数void SanJiaoYunSuan() 功能:实现基本的三角函数运算:sin(x)和cos(x)。 5.指对数函数void ZhiDuiShuYunSuan() 功能:实现基本的指数和对数运算。

三、采取的解决措施: 1.去图书馆借相关图书,上网查资料,通过自己的阅读,研究,不断的尝试,运行,修改,最终做出了简单的界面,但仍存在很多不足的地方,只能模拟出大体的外观,没能模拟出计算器中的各个键。 2.查在界面显示的函数原型,对比自己的程序,不断修改,对比,调试,检查,反思,最后发现是语句顺序错误,显示写在了判断的后面,修改成功。 3.在编写ln函数的时候,遇到很大困难,最后通过查阅资料,向别人请教编写出了函数。 四、详细代码: #include #include #include void main () { int i,flag; printf("*****欢迎使用简单计算器*******\n"); printf(" 1.加法运算\n"); printf(" 2.减法运算\n"); printf(" 3.乘法运算\n"); printf(" 4.除法运算\n"); printf(" 5.开方运算\n"); printf(" 6.平方运算\n"); printf(" 7.立方运算\n"); printf(" 8.正弦运算\n"); printf(" 9.余弦运算\n"); printf(" 10.正切运算\n"); printf(" 11.余切运算\n"); printf(" 12.平均值方差标准差运算\n"); printf("请输入i的值:\n"); scanf("%d",&i); switch(i) { case 1:flag=1;break; case 2:flag=2;break; case 3:flag=3;break; case 4:flag=4;break; case 5:flag=5;break; case 6:flag=6;break; case 7:flag=7;break; case 8:flag=8;break;

C语言,简单计算机代码

C语言,简单计算机代码 #include #include #define p 3.14 int jia(int a, int b) //加{ return a + b; } int jian(int a, int b) // 减{ return a - b; } int cheng(int a, int b) //乘{ return a * b; } int chu(int a, int b) //除{ return a / b;

void menu() { printf(" @@@ 菜单@@@\n"); printf("***** 1.加减 2.十进制转换 3.三角函数*****\n"); } int main() { while(1) { int i=0,n,a[200]; int r; int c; int tallax=1; menu(); scanf("%d", &tallax); switch (tallax) // { case 1:

printf("***** 1.加 2.减 3.乘 4.除*****\n"); int input=1; int x = 0; int y = 0; int ret = 0; scanf("%d", &input); if (input >= 1 && input <= 4) { printf("输入两个数:(1 3)\n"); scanf("%d%d", &x, &y); } else printf("输入错误"); switch (input) { case 1: ret = jia(x, y); printf("%d+%d = %d\n",x,y,ret); break; case 2: ret = jian(x, y); printf("%d-%d = %d\n",x,y,ret);

c语言课程设计-简易计算器

C语言课程设计学院:地球物理与测控技术学院专业:测控技术与仪器 姓名:邬博文 学号:201620120202

目录 第一章选题的意义 (4) 1.1 课题研究的背景 (4) 1.2 自己设计的优势 (4) 1.3 设计上功能上的不足 (4) 第二章研究的基础 (5) 2.1 涉及的主要知识点 (5) 第三章研究的可行性 (6) 3.1 技术的可行性 (6) 3.2 经济效益和社会效益的可行性 (6) 第四章研究的具体部分 (7) 4.1 研究的主要流程图 (7) 4.2 研究的具体代码 (8) 4.3程序运行结果图表 (14) 第五章总结 (17)

第一章选题的意义 ①通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固《C语言程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!更加了解了c语言的好处和其可用性!同时增加了同学之间的团队合作精神!更加也体会到以后在工作中团队合作的重要性和必要性! ②通过C语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础。 1.1 课题研究的背景 计算器是现代日常生活中使用较为频繁的工具之一,常用的计算器有简易版和科学计算器两种模式。简易版的计算器不支持表达式运算,每次只能输入一个数据或者运算符来计算,而科学计算器除了容纳简易版计算器的功能外,还支持表达式运算,用户可以输入一个合法的算术表达式来得到所需的结果。计算器对我们每一的学生都很熟悉,从初中到高中再到大学。但是我们只知道按下几个按钮计算器便会显示出结果,很少有学生分析过计算器究竟是如何运行的。C语言课程设计便是一个很好的机会,让我去亲自写计算器的运行代码,尽管是简单计算器的设计,但其背后的知识那是相当多的,对我是个挑战,我接受! 1.2 自己设计的优势 现时学习生活中,常会遇到一些数目较大数据繁杂的数值运算,徒手运算起来很困难,这时候我们就必须用到计算器。人们对计算的要求不断提高,普通的功能简单的仅能进行加、减、乘、除运算的计算工具已经不能满足需要,需要一种能进行多种计算。现在已经有一些功能较为强大、涵盖面较广的计算软件,而且各种平台的小工具仍不断出现。这些大大方便了我们的生活给我们更多的选择和实现方式。本程序实现了加、减、乘、除、求幂、求模,求平方根,求Sin,求Cos,求Log10,求阶乘,取整,求正切,以及进制之间的相互转换。它可以直接输入数学表达式,不需要任何转换,就可以直接输出。 1.3 设计上功能上的不足 本程序虽然在其他简易计算器的基础上新增加了很多类容,如:三角函数的求值、指数函数的计算、任意数的任意次方、进制之间的相互转换等;但是由于个人能力的限制,仍不能实现四则混合运算的功能,仅仅是能进行一个两个数或者一个数的计算,这是这个程序最为不足的地方。但是我相信,随着学习的不断深入,这个功能在不久以后会被很好的实现。

(完整版)C语言毕业课程设计报告【简易计算器设计】

《C语言课程设计》报告

设计题目:简单计算器设计 学院名称:电子与信息工程学院 专业:计算机科学与技术 班级:计科09-1 姓名:朱凯迪学号1 9 指导教师:宋宏图定稿日期:2010年03月10日 一、设计题目 简单计算器设计 二、设计要求 在功能上功能尽量模拟windows操作系统中的计算器,系统界面不做强制要求。 三、设计目的 ①通过本项课程设计,可以培养独立思考、综合运用 所学有关相应知识的能力,能更好的巩固《C语言程 序设计》课程学习的内容,掌握工程软件设计的基

本方法,强化上机动手编程能力,闯过理论与实践相 结合的难关!更加了解了c语言的好处和其可用性! 同时增加了同学之间的团队合作精神!更加也体会到 以后在工作中团队合作的重要性和必要性! ②通过C语言课程设计,使学生了解高级程序设计语言 的结构,掌握基本的程序设计过程和技巧,掌握基本 的分析问题和利用计算机求解问题的能力,具备初步 的高级语言程序设计能力。为后续各门计算机课程的 学习和毕业设计打下坚实基础。 四、设计思想及过程 ①由于需要使功能尽量模仿Windows下的计算器,而 很多功能要以图形界面实现,故用Borland C++ Builder编写。所以用的是面向对象程序设计。但因 为这是C语言的课程设计,所以除了面向对象的使用 以外,所有语法都是按照C语言的格式编写。 ②采用工程模式,文件包括calc.h(运算主函数头文件, 包括各运算符的操作以及其辅助函数)、Main.h(窗体 类的声明头文件)、Calc.cpp(工程初始化文件)、 Main.cpp(代码主文件,包括各空间操作的函数)以及 一些其它附属文件,包括dll动态链接库。 ③在参考了Windows里的计算器以后,决定在我的课 程设计中实现: ⒈0~9的数字输入功能(小数点除外) ⒉实现加、减、乘、整除、取模、阶乘、位运算左 移、x的y次方、与、异或、x立方、x平方运算

基于c语言的简易计算器的设计与实现

课程名称:C语言程序设计课题名称:简易计算器 班级: 学号: 姓名: 指导老师: 成绩:

一、课程设计目的 1.通过这次的课程设计,巩固以前所学的知识: 1)进一步熟悉了各种语句,如宏定义语句,语句的嵌套等等。 2)对顺序,选择,循环结构的综合运用。 3)进一步巩固了一些算法,如求四则混合运算,三角函数,指对数的算法。 2.在课程设计的过程中,拓展了自己的知识面,知道我们所学过的C语言知识不过 是很少的一部分。还有很多知识等待我们自己去学习。 3.为了完善自己的程序,通过上网,查阅图书等途径学到了一些新的知识,如对C 语言中一些常用图形函数的应用。 4.通过课程设计,加深对结构化程序设计思想的理解,能进行一个系统功能需求分 析,并设计合理的模块化结构。 5.通过课程设计,提高程序开发能力,能运用合理的控制流编写清晰高效的程序。 二、设计内容 我设计的是一款简易计算器,界面清楚,操作方便,它能实现以下功能: 1.查询当时时间 2.简单的四则混合运算(支持小括号、优先级) 3.正弦、余弦函数计算 4.指对数计算 三、总体设计 简单计算器由六大模块组成,模块调用图如下: Main() ZhuJieMia n() SiZeYunS uan() Time() SanJiaoY unSuan() ZhiDuiShuY unSuan()

1.主函数 void main() 功能:调用各个主要模块,实现简单计算器的整体功能。 2.主界面函数void ZhuJieMian() 功能:使用有关图形函数模拟出可视化的计算器外观界面,并提供用户输入窗口。 3.时钟函数 int Time() 功能:在模拟的可视化计算器中显示当时的时间。 4.四则混合运算函数void SiZeHunHeYunSuan() 功能:实现简单的加减乘除混合运算,并支持优先级和带括号的运算。 5.三角运算函数void SanJiaoYunSuan() 功能:实现基本的三角函数运算:sin(x)和cos(x)。 6.指对数函数void ZhiDuiShuYunSuan() 功能:实现基本的指数和对数运算。 四、详细设计 a)数据结构设计: int priority(char left,char right) {char option[]={'+','-','*','/','(',')','='}; int i,le,ri; int l[]={4,4,6,6,2,10,0}; int r[]={3,3,5,5,9,3,0}; for(i=0;i<=7;i++) {if(option[i]==left) le=l[i]; if(option[i]==right) ri=r[i]; } return(ri-le); } 用两个数组模拟数据结构栈,其特点是数据先进后出。用两个数组分别保存操作数和运算符。从字符串中依次分离出操作数与运算符,分别存入对应数组。当操作符串为空时,直接存入(相当与栈元素的压入)。当不为空时,与数组最后一个元素(相当于栈顶)比较优先级,若大于直接存入,否则弹出操作数最后两位进行运算,直到操作符栈顶元素优先级小

用c语言编写的计算器源代码

作品:科学计算器 作者:欧宗龙 编写环境:vc++6.0 语言:c #include "stdafx.h" #include #include #include #include "resource.h" #include "MainDlg.h" #include #include #define PI 3.141593 BOOL A_Op=FALSE; BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose); } return FALSE; } BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) {

return TRUE; } void TrimNumber(char a[])//判断并删除小数点后无用的零 { for(unsigned i=0;i=i;j--) { if(a[j]=='0') { a[j]='\0'; } else if(a[j]=='.') { a[j]='\0'; } else break; } } } } double Operate(char Operator,double n1,double n2) //判断符号,进行相应的运算{ if(Operator=='0') { } if(Operator=='+') { n2+=n1; } if(Operator=='-') { n2=n1-n2; } if(Operator=='*') { n2*=n1; } if(Operator=='/')

相关文档
相关文档 最新文档