国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用c語言編寫計(jì)算器

這篇具有很好參考價(jià)值的文章主要介紹了用c語言編寫計(jì)算器。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

板書:

1、在編寫控制臺(tái)程序的時(shí)候一切流程都是有先后關(guān)系、并行的,而且所有函數(shù)都是由我們來調(diào)用的,比如下面的實(shí)例性代碼:

printf("確定請(qǐng)輸入y,取消輸入n");

char c = getchar();

if(c=='y')

{

///

}文章來源地址http://www.zghlxwxcb.cn/news/detail-460175.html

else if(c=='n')

{

///

}

我們可以用getchar來等待用戶輸入一個(gè)值。但是到了Windows編程中就不一樣了,同一時(shí)刻用戶即可能點(diǎn)擊【OK】按鈕,又可能點(diǎn)擊【Cancel】按鈕,又可能在文本框中輸入幾個(gè)字,還可能在窗口上雙擊幾下,這樣就無法同時(shí)等待用戶的這些動(dòng)作。為了解決這個(gè)問題,Windows引入了消息機(jī)制(也可以叫做回調(diào)機(jī)制或者事件機(jī)制)。在程序啟動(dòng)的時(shí)候把函數(shù)func1要響應(yīng)【OK】按鈕1的點(diǎn)擊動(dòng)作、函數(shù)func2要響應(yīng)【Cancel】按鈕的點(diǎn)擊動(dòng)作、函數(shù)func3要響應(yīng)窗口的雙擊動(dòng)作等等這些信息告訴Windows,然后當(dāng)用戶執(zhí)行相應(yīng)操作的時(shí)候Windows就會(huì)來主動(dòng)調(diào)用你注冊(cè)的函數(shù),主動(dòng)通知你。不再是程序調(diào)用操作系統(tǒng)的函數(shù),而是操作系統(tǒng)反過來調(diào)用你的函數(shù)。Don't call me ,I'll call you!(也被人稱為“好萊塢法則”)。

2、關(guān)于上面的這個(gè)問題要慢慢來理解,下面就來通過第一個(gè)例子來初步理解這個(gè)Don't call me ,I'll call you!

創(chuàng)建一個(gè)對(duì)話框程序,然后來分析代碼??碝ain_OnCommand方法,初探windows的消息機(jī)制。

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)

{

switch(id)

{

case IDC_OK:

MessageBox(hwnd,"You click OK!","Test003",MB_OK);

EndDialog(hwnd, id);

break;

case IDC_CANCEL:

MessageBox(hwnd,"You click Cancel!","Test003",MB_OK);

EndDialog(hwnd, id);

break;

default:break;

}

}

按鈕被按下的時(shí)候Main_OnCommand方法被調(diào)用,hwnd是對(duì)話框句柄(什么是句柄后面講,通俗的說就是通過它能夠操縱對(duì)話框),id是控件的id,后兩個(gè)參數(shù)暫時(shí)不關(guān)心。

Main_OnCommand方法中根據(jù)id,也就是被點(diǎn)擊按鈕的名字來決定不同的動(dòng)作,EndDialog用來關(guān)閉對(duì)話框。

3、定制自己的對(duì)話框,向世界問好

首先打開資源編輯器并且打開對(duì)話框IDD_MAIN,然后刪除對(duì)話框上的兩個(gè)按鈕和標(biāo)簽,同時(shí)刪除main.cpp中的兩個(gè)Case語句變成:

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)

{

switch(id)

{

default:break;

}

}

然后重新添加一個(gè)自己的按鈕,在屬性中修改Name屬性為IDC_BTNHELLO。

控件名字的潛規(guī)則:所有控件的Name都以“IDC_”開頭,然后后邊跟著控件類型的簡(jiǎn)稱(按鈕簡(jiǎn)稱BTN、文本框簡(jiǎn)稱EDT等等),最后才是控件的真正的名字。修改按鈕的Caption屬性(也就是按鈕上顯示的文字)為“問好”。

在代碼中怎么得到IDC_BTNHELLO呢?剛才被刪掉的IDC_OK是什么東東呢?回憶配置ResEd的時(shí)候配置的“名稱輸出格式”和“默認(rèn)輸出文件名”以及“保存時(shí)自動(dòng)輸出”。每次保存對(duì)話框的時(shí)候ResEd都會(huì)幫我們把控件的名字輸出到rsrc.inc文件中,打開工程文件夾下的rsrc.inc,內(nèi)容如下:

#define IDC_BTNHELLO

1001

Dialog編輯器會(huì)自動(dòng)遞增id的取值。然后生成rsrc.inc,其實(shí)就是h頭文件,取這些定義的時(shí)候要先include這個(gè)inc文件??梢钥吹絩src.inc文件中就是這些控件名字的定義,使用的時(shí)候只要include這些文件就可以?!皉src.inc”和頭文件一樣。因此首先在main.cpp中添加“#include "rsrc.inc"”

編輯Main_OnCommand方法:

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)

{

switch(id)

{

case IDC_BTNHELLO:

MessageBox(NULL,TEXT("世界你好"),TEXT("問好"),MB_OK);

break;

default:break;

}

}

運(yùn)行程序,點(diǎn)擊“問好”按鈕,咱們第一個(gè)響應(yīng)按鈕動(dòng)作的程序就做好了。

4、自己動(dòng)手寫計(jì)算器1.0版

(1)、得到控件中用戶輸入的文本

GetDlgItemText(hwnd,IDC_EDTNAME,str,sizeof(str));

第一個(gè)參數(shù)是對(duì)話框的句柄;第二參數(shù)就是控件的id(name);第三個(gè)參數(shù)就是字符串?dāng)?shù)組的指針;

疑問:為什么不能像MessageBox一樣把字符串做為返回值返回呢???

這就涉及到C語言中函數(shù)返回指針的問題了

int i=20;

char cStr[3];

itoa(i,cStr,10);

char* f1()

{

return "adsfadsfasd";

}

在函數(shù)內(nèi)部返回函數(shù)內(nèi)構(gòu)建的指針有可能出現(xiàn)數(shù)據(jù)混亂.

當(dāng)f1函數(shù)在執(zhí)行的時(shí)候,這段內(nèi)存是被占用的,一旦函數(shù)返回,那么內(nèi)存就標(biāo)記為可以被其他人、函數(shù)占用。

如果你把這段內(nèi)存中的指針返回了,那么一旦其他地方用了這段內(nèi)存,那么你引用的就是錯(cuò)誤的數(shù)據(jù)了。

用GetWindowText、GetDlgItemText的時(shí)候?yàn)槭裁匆獋鲾?shù)組名呢?復(fù)習(xí):數(shù)組名就是指針,函數(shù)只有得到指針,才能直接操作數(shù)組中的數(shù)據(jù)。

(2)c語言中字符串連接:strcat(name,"你好");

但是在編寫windows程序的時(shí)候最好使用lstrcat代替strcat。

lstrcat(name,"你好");

同樣代替的有:strlen→lstrlen;strcmp→lstrcmp

(3)向用戶問好

TCHAR name[256];

GetDlgItemText(hwnd,IDC_EDTNAME,name,sizeof(name)/sizeof(TCHAR));

lstrcat(name,"你好");

MessageBox(NULL,name,TEXT("問好"),MB_OK);

(4)

C語言里邊字符串轉(zhuǎn)換為數(shù)字:atoi:ascii to int

(5)

編寫windows程序的時(shí)候最好用TCHAR來代替char,可以避免中文的問題

case IDC_BTNHELLO:

TCHAR name[256];

GetDlgItemText(hwnd,IDC_EDTNAME,name,sizeof(name)/sizeof(TCHAR));

int i = atoi(name);

int j=i*2;

TCHAR result[256];

itoa(j,result,10);

MessageBox(NULL,result,TEXT("問好"),MB_OK);

(6)Get、Set:配對(duì)的,設(shè)置對(duì)話框的值用SetDlgItemText:

代碼:

case IDC_BTNADD:

//取第一個(gè)文本框的字符串,然后得到整數(shù)表示

// 取第二個(gè)文本框的字符串,然后得到整數(shù)表示

//計(jì)算兩個(gè)整數(shù)的和

//把和重新轉(zhuǎn)換成字符串,然后Messagebox出來。

TCHAR cNumber1[256];

GetDlgItemText(hwnd,IDC_EDTNUM1,cNumber1,sizeof(cNumber1)/sizeof(TCHAR));

int n1 = atoi(cNumber1);

TCHAR cNumber2[256];

GetDlgItemText(hwnd,IDC_EDTNUM2,cNumber2,sizeof(cNumber2)/sizeof(TCHAR));

int n2 = atoi(cNumber2);

int n3 = n1+n2;

TCHAR cResult[256];

itoa(n3,cResult,10);

SetDlgItemText(hwnd,IDC_EDTRESULT, cResult);

break;

(7)代碼中有UINT、TCHAR、LRESULT、HWND之類的新的數(shù)據(jù)類型,其實(shí)它們只是一些類型的別名而已,可以通過宏定義看出來。但是考慮到可移植性,盡量不要使用它們的真實(shí)類型

(8)思考:這個(gè)計(jì)算兩個(gè)數(shù)的和程序有什么缺陷?沒有阻止用戶輸入非數(shù)字

(9)作業(yè):做一個(gè)面積計(jì)算器,用戶輸入半徑,在另外一個(gè)文本框中顯示面積。

5、得到系統(tǒng)中有哪些邏輯驅(qū)動(dòng)器

DWORD GetLogicalDrives(VOID);

返回值的二進(jìn)制位標(biāo)志著存在哪些驅(qū)動(dòng)器。其中,位0設(shè)為1表示驅(qū)動(dòng)器A存在于系統(tǒng)中;位1設(shè)為1表示存在B驅(qū)動(dòng)器;以次類推。

比如:

00001100:有C盤,D盤

000011100:c、d、e

1101:A(軟驅(qū))、C、D

(1)寫程序中的錯(cuò)誤排除

"dwDrives"was not declared in the scope

declare:聲明;scope:范圍

"dwDrives"沒有被聲明在這個(gè)范圍內(nèi)。

(2)以二進(jìn)制顯示GetLogicalDrives的返回值:

stdlib.h

DWORD ds = GetLogicalDrives();

char str[33];

itoa(ds,str,2);

MessageBox(NULL,str,"",MB_OK);

DWORD是什么類型?在DWORD上點(diǎn)擊右鍵,選擇“轉(zhuǎn)到DWORD的定義”,其實(shí)DWORD是“unsigned long”。因此str定義成33位(還有最后一位的“\0”)。

(3)課后習(xí)題:判斷是否存在D盤。

(4)課后習(xí)題:依次顯示系統(tǒng)中所有的盤符。比如顯示出“CDEF”。

(5)課后習(xí)題:顯示系統(tǒng)中有多少個(gè)邏輯驅(qū)動(dòng)器。

這三道課后作業(yè)都是在鍛煉位運(yùn)算。一定要重視,不要一位沒啥意思,很多公司的筆試面試都會(huì)考查這一點(diǎn),這也是繼續(xù)深入研究C和其他語言的基礎(chǔ)。

Main_OnCommand 函數(shù)的響應(yīng)按鈕段:

CODE:

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)

{

TCHAR cDriveExists[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";

int nLen=0;

switch(id)

{

case IDC_BTNRESULT: //響應(yīng)計(jì)算圓面積按鈕

TCHAR cBanjing[256];

GetDlgItemText(hwnd,IDC_EDTRADIUS,cBanjing,sizeof(cBanjing)/sizeof(TCHAR));

double fBanjing,fZhouchang;

fBanjing = atof(cBanjing);

fZhouchang = 3.1415926*(fBanjing*fBanjing);

TCHAR cZhouchang[256];

gcvt(fZhouchang,10,cZhouchang);

//SetDlgItemText(hwnd,IDC_EDTZHOUCHANG,cZhouchang);

SetDlgItemText(hwnd,IDC_STC,cZhouchang);

break;

case IDC_BTNCALCHELP: //響應(yīng)圓面積幫助按鈕

MessageBox(hwnd,TEXT("\n圓形面積計(jì)算公式:\n\n圓面積(s)=圓周率π(3.14)*半徑(r)的平方。\t"),TEXT("計(jì)算公式"),MB_OK|MB_ICONASTERISK);

break;

case IDC_BTNGETDRIVERS: //獲取用戶磁盤信息按鈕

DWORD dwMydrivers;

dwMydrivers = GetLogicalDrives();

TCHAR cDrivers[256];

itoa(dwMydrivers,cDrivers,2); //轉(zhuǎn)換為字符串

strrev(cDrivers); //反轉(zhuǎn)字符串

TCHAR cDriverscn[256];

//MessageBox(hwnd,cDrivers,TEXT("調(diào)試"),MB_OK);

//列出所有存在盤符

int i;

for(i=0;i<strlen(cDrivers);i++)

{

if(cDrivers[i]=='1')

{

cDriverscn[nLen] = cDriveExists[i];

nLen++;

}

}

cDriverscn[nLen]='\0';

SetDlgItemText(hwnd,IDC_EDTMYDRIVERS,cDriverscn);

//判斷是否存在D盤

if(cDrivers[4]='1')

{

SetDlgItemText(hwnd,IDC_EDTYESNOD,TEXT("有"));

}

else

{

SetDlgItemText(hwnd,IDC_EDTYESNOD,TEXT("無"));

}

//計(jì)算存在磁盤總數(shù)

TCHAR cSUM[256];

itoa(nLen,cSUM,10);

SetDlgItemText(hwnd,IDC_EDTDRIVERSNUM,cSUM);

break;

default:break;

}

}

#include "rsrc.inc"???? rsrc.inc文件里面的內(nèi)容

CODE:

#define IDC_GRPCALC ????????????1001

#define IDC_GRP1??????????????? 1014

#define IDC_EDTRADIUS?????????? 1002

#define IDC_BTNRESULT?????????? 1003

#define IDC_BTNCALCHELP???????? 1006

#define IDC_BTNGETDRIVERS?????? 1008

#define IDC_STC1??????????????? 1005

#define IDC_EDTMYDRIVERS??????? 1007

#define IDC_EDTYESNOD?????????? 1009

#define IDC_EDTDRIVERSNUM?????? 1010

#define IDC_STC2??????????????? 1011

#define IDC_STC3??????????????? 1012

#define IDC_STC4??????????????? 1013

#define IDC_STC???????????????? 1015

dialogs.dlg? 文件的內(nèi)容

CODE:

#define IDC_GRPCALC 1001

#define IDC_GRP1 1014

#define IDC_EDTRADIUS 1002

#define IDC_BTNRESULT 1003

#define IDC_BTNCALCHELP 1006

#define IDC_BTNGETDRIVERS 1008

#define IDC_STC1 1005

#define IDC_EDTMYDRIVERS 1007

#define IDC_EDTYESNOD 1009

#define IDC_EDTDRIVERSNUM 1010

#define IDC_STC2 1011

#define IDC_STC3 1012

#define IDC_STC4 1013

#define IDC_STC 1015

#include "dialogs.h"

#include <windows.h>

IDD_MAIN DIALOGEX 122,75,245,193

LANGUAGE 4,2

CAPTION "calc"

FONT 8,"Tahoma",0,0,0

STYLE WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MAXIMIZEBOX

BEGIN

? CONTROL "",IDC_EDTRADIUS,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP,102,29,54,13,WS_EX_CLIENTEDGE

? CONTROL "計(jì)? 算",IDC_BTNRESULT,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,162,29,42,13

? CONTROL "幫? 助",IDC_BTNCALCHELP,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,162,46,42,13

? CONTROL "獲取磁盤信息",IDC_BTNGETDRIVERS,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,90,158,66,13

? CONTROL "計(jì)算結(jié)果:",IDC_STC1,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,60,48,40,9

? CONTROL "",IDC_EDTMYDRIVERS,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_READONLY,126,118,86,13,WS_EX_CLIENTEDGE

? CONTROL "",IDC_EDTYESNOD,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_READONLY,126,99,86,13,WS_EX_CLIENTEDGE

? CONTROL "",IDC_EDTDRIVERSNUM,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_READONLY,126,136,86,13,WS_EX_CLIENTEDGE

? CONTROL "系統(tǒng)中是否存在有 D 盤:",IDC_STC2,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,30,101,90,9

? CONTROL "系統(tǒng)中存在的所有磁盤:",IDC_STC3,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,30,120,88,9

? CONTROL "系統(tǒng)中邏輯驅(qū)動(dòng)器個(gè)數(shù):",IDC_STC4,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,30,138,88,9

? CONTROL "請(qǐng)輸入圓的半徑 r=",IDC_TEXT,"Static",WS_CHILD|WS_VISIBLE|WS_GROUP,34,31,68,9

? CONTROL "計(jì)算圓面積",IDC_GRPCALC,"Button",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,22,14,202,59

? CONTROL "本地磁盤信息",IDC_GRP1,"Button",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,22,84,202,94

? CONTROL "請(qǐng)輸入半徑",IDC_STC,"Static",WS_CHILD|WS_VISIBLE,104,48,54,9

END

楊中科 at 2008-10-28 21:52:55

diamondboy的答案非常好,值得鼓勵(lì)!!!

你想一下GetLogicalDriver相關(guān)的那幾道作業(yè)題有沒有更高效的解法呢?提示一下使用位運(yùn)算。你可以參考咱們以前的C#的課的內(nèi)容:

http://www.jsj321.com/forum/view ... &extra=page%3D1

位運(yùn)算是語言無關(guān)的,而且C#的位運(yùn)算和C一模一樣,完全可以參考。還是那句話“一通百通”。

咱們的論壇已經(jīng)可以上傳附件了,可以把你的作業(yè)上傳上來。

再次為diamondboy喝彩。

diamondboy at 2008-10-29 21:05:44

暈了呢,我就搞不懂所謂的位運(yùn)算是怎么回事呢,二進(jìn)制的東東看了就懵了。。? 現(xiàn)在就去看老大給的視頻去。。。

calc.rar

(2008-10-29 21:05:44, Size: 19.9 KB, Downloads: 119)

shiren1118 at 2008-10-31 21:37:09

老楊辛苦,呵呵

willweiwei at 2008-12-09 00:37:10

由itoa是英文integer to array得atoi是英文 array to integer

百度得到的

貌似不是 C語言里邊字符串轉(zhuǎn)換為數(shù)字:atoi:ascii to int

哈哈

雞蛋里面挑骨頭

Joshua at 2008-12-12 21:31:13

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)

{

? int i=0;

? DWORD x,t=1;

? char sz[26],p='A';

? if(id==IDC_BTNGET)

??? {

???????? x=GetLogicalDrives();

???????? while(x>0)

???????????????????????? {

???????????????????????????????????? if((t&x)==1)? { sz=p;++i; }

???????????????????????????????????? x>>=1;++p;

?????????????????????????????? }

???????????? SetDlgItemText(hwnd,IDC_EDTOUT,sz);

???? }

??????????????

}

獲取本機(jī)磁盤列表。

Joshua at 2008-12-12 22:10:57

更正下:在???????? SetDlgItemText(hwnd,IDC_EDTOUT,sz); 上還要加一句?? sz='\0';

635260101 at 2009-4-04 14:15:59

先做了計(jì)算器...

caclv1.rar

(2009-04-04 14:15:59, Size: 31 KB, Downloads: 63)

makesue at 2009-4-16 01:31:51

本人位運(yùn)算顯示磁盤信息的代碼

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)

{

??? switch(id)

??? {

??????? case IDC_BTN1:

???????? DWORD d=GetLogicalDrives();

???????? if((d&8)>0)

????????? {

?????????? TCHAR c[256];

?????????? SetDlgItemText(hwnd,IDC_EDT1,TEXT("存在"));

????????? }

???????? else

???????? {

????????? SetDlgItemText(hwnd ,IDC_EDT1,TEXT("不存在"));

???????? }

??????? break;

??????? case IDC_BTN2:

?? hanshu(hwnd);

??????? break;

??????? case IDC_BTN3:????????

???????? hanshu1(hwnd);

?? break;

????????

??????? default:break;

??? }

}

void hanshu(HWND hwnd)

{

?? DWORD d1=GetLogicalDrives();

???????? int i=0;

???????? while (d1>0)

???????? {

????????? if((d1&1)>0)

????????? {

?????????? i++;

????????? }

????????? d1=d1>>1;

???????

???????? }

???????? TCHAR j[256];

???????? itoa(i,j,10);

???????? lstrcat(j,"個(gè)");

???????? SetDlgItemText(hwnd,IDC_EDT2,j);

}

void hanshu1(HWND hwnd)

{

???????? DWORD e=GetLogicalDrives();

???????? int k=0;

???????? int p=0;

???????? TCHAR b[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";

???????? TCHAR f[256];

???????? while (e>0)

???????? {

????????? if((e&1)==1)

?????????? {

???????????

??????????? f[p]=b[k];

??????????? f[++p]='\0';

??????????? SetDlgItemText(hwnd,IDC_EDT3,f);

????????

????????????????????????

?????????? }

??? e=e>>1;

??? k++;

???????? }

????????

}

磁盤.rar

(2009-04-16 01:31:51, Size: 21.5 KB, Downloads: 33)

命苦 at 2009-4-17 22:30:20

我的作業(yè)終于交上來啦!不過只有計(jì)算園面積的一道題。

初次奇遇 at 2009-4-20 13:32:51

哈哈 代碼越來復(fù)雜了啊

slsky at 2009-4-29 19:46:17

^不是“非”

George at 2009-5-16 22:37:07

太難了,即使能用控制臺(tái)寫出來也不知道在這里怎么實(shí)現(xiàn)。

在VC里面寫,可以把字符存入數(shù)組的,可這里怎么弄都不行。

一個(gè)頭3個(gè)大?。?!

未命名.JPG

CalcV1.rar

(2009-05-16 22:37:07, Size: 13.1 KB, Downloads: 30)

星塵幻 at 2009-5-18 21:58:11

未命名.jpg

除法的浮點(diǎn)數(shù)還不會(huì)弄..顯示的還是整數(shù)。還想改成點(diǎn)擊按鈕輸入數(shù)字,好像有點(diǎn)困難,唉繼續(xù)想..

angustao at 2009-5-19 03:03:44

本以為一天可以看2節(jié),結(jié)果看到第五節(jié)就耗費(fèi)了我2天時(shí)間,并且還有位運(yùn)算的練習(xí)沒有做。非常感謝楊老師送給我的一句話:只有螞蟻啃骨頭慢慢來??磥硪彩菦]有辦法的事,這個(gè)東西急步得。重看C++/mfc再看c跳來跳去終于還是選擇了C。我把作業(yè)補(bǔ)交下吧

功能:四則運(yùn)算(整型,雙精度型) 圓面積計(jì)算

BUG:0字符顯示沒有控制好,沒有處理鍵盤輸入。

源代碼帶有文字說明,呵呵~~代碼沒有整理不要扔磚。

counter2.0.rar

(2009-05-19 03:03:44, Size: 24.5 KB, Downloads: 21)

星塵幻 at 2009-5-19 23:43:20

參考之前同學(xué)的代碼修改了一下弄好了,用的與運(yùn)算不知對(duì)不對(duì)..

明天聽第六課了,希望暑假前能趕上進(jìn)度..我要努力,在如鵬能學(xué)到東西我很喜歡這里

jisuanqiv1.rar

(2009-05-19 23:43:20, Size: 21.2 KB, Downloads: 23)

我是老實(shí)人 at 2009-5-28 09:17:37

用函數(shù)返回值來傳遞動(dòng)態(tài)內(nèi)存這種方法雖然好用,但是常常有人把return語句用錯(cuò)了。這里強(qiáng)調(diào)不要用return語句返回指向“棧內(nèi)存”的指針,因?yàn)樵搩?nèi)存在函數(shù)結(jié)束時(shí)自動(dòng)消亡,見示例7-4-4。

? char *GetString(void)

? {

?

char p[] = "hello world";

?

return p;

// 編譯器將提出警告

? }

??

? void Test4(void)

? {

? char *str = NULL;

? str = GetString();

// str 的內(nèi)容是垃圾

? cout<< str <<? endl;

? }

??

示例7-4-4 return語句返回指向“棧內(nèi)存”的指針

用調(diào)試器逐步跟蹤Test4,發(fā)現(xiàn)執(zhí)行str = GetString語句后str不再是NULL指針,但是str的內(nèi)容不是“helloworld”而是垃圾。

(你上課講的那個(gè)指針返回值問題)

引自--林銳《高質(zhì)量c/c++編程指南》

zhiping1989 at 2009-6-07 11:37:31

這邊要注意if((a&8)>0)???? a&8要用括號(hào)括起來 我剛開始沒注意這個(gè)問題 一直出錯(cuò)

zhiping1989 at 2009-6-07 13:51:42

我的作業(yè)也寫好了 雖然有點(diǎn)晚 發(fā)出來大家指教指教 我的變量名起的有點(diǎn)亂 大家要諒解 因?yàn)槲矣⑽乃椒浅€

CODE:

switch(id)

{

case IDC_BTN2: //計(jì)算器

{

TCHAR aname[256],bname[256],cname[256];

double a_1,a_2,a_3;

GetDlgItemText(hwnd,IDC_EDT1,aname,sizeof(aname)/sizeof(int));

GetDlgItemText(hwnd,IDC_EDT2,bname,sizeof(bname)/sizeof(int));

a_1=atof(aname);

a_2=atof(bname);

a_3=a_1+a_2;

gcvt(a_3,10,cname);

SetDlgItemText(hwnd,IDC_EDT3,cname);

}

break;

case IDC_BTN6: //面積

{

TCHAR dname[256],ename[256],qname[256];

double a_4,a_5,a_9;

GetDlgItemText(hwnd,IDC_EDT4,dname,sizeof(dname)/sizeof(TCHAR));

GetDlgItemText(hwnd,IDC_EDT5,qname,sizeof(qname)/sizeof(TCHAR));

a_4=atoi(dname);

a_9=atoi(qname);

a_5=a_4*3.1415;

gcvt(a_5,10,ename);

SetDlgItemText(hwnd,IDC_EDT6,ename);

}

break;

case IDC_BTN1:? //是否存在d盤

{

int a_6;

char fname[256];

a_6=GetLogicalDrives();

itoa(a_6,fname,2) ;

if((a_6&8)>0)

{

SetDlgItemText(hwnd,IDC_EDT7,TEXT("存在D盤"));

}

else

{

SetDlgItemText(hwnd,IDC_EDT7,TEXT("不存在D盤"));

}

}

break;

case IDC_BTN3:? //響應(yīng)顯示所有盤符

{

int a_7,a_8=0,a_9=0;

char hname[256];

a_7=GetLogicalDrives();

while(a_7!=0)

{

if((a_7&1)==1)

{

hname[a_8]='A'+a_9;

a_8++;

}

a_7=a_7>>1;

a_9++;

}

hname[a_8]='\0';

SetDlgItemText(hwnd,IDC_EDT7,hname);

}

break;

case IDC_BTN4:? // 響應(yīng)顯示磁盤個(gè)數(shù)

{

int j=0;

int i=GetLogicalDrives();

while(i!=0)

{

if((i&1)==1)

{

j++;

}

i=i>>1;

}

TCHAR k[256];

itoa(j,k,10);

SetDlgItemText(hwnd,IDC_EDT7,k);

}

break;

case IDM_A:? //退出

{

EndDialog(hwnd, 0);

}

break;

case IDM_B:?? //打開如鵬網(wǎng)站

{

ShellExecute(hwnd,TEXT("OPEN"),TEXT("www.rupeng.com"),NULL,NULL,SW_NORMAL);

}

break;

default:break;

}

到了這里,關(guān)于用c語言編寫計(jì)算器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Android開發(fā):基于Kotlin編寫一個(gè)簡(jiǎn)易計(jì)算器

    Android開發(fā):基于Kotlin編寫一個(gè)簡(jiǎn)易計(jì)算器

    本著程序員“擁抱變化”的思想,最近開始學(xué)Kotlin了。感覺還是得通過實(shí)戰(zhàn)來入門一門新語言,所以打算寫一個(gè)基于Kotlin語言的計(jì)算器,本文對(duì)開發(fā)過程以及學(xué)習(xí)Kotlin的一些知識(shí)進(jìn)行了記錄。 計(jì)算器的全部源碼已經(jīng)放到了我的Github中,需要的伙伴自?。篊alculator Kotlin中文站:

    2023年04月27日
    瀏覽(25)
  • 使用Python編寫簡(jiǎn)單的小程序、成績(jī)計(jì)算器

    使用Python編寫簡(jiǎn)單的小程序、成績(jī)計(jì)算器

    成績(jī)計(jì)算器程序需要兩個(gè)分?jǐn)?shù),以百分比表示 - 一個(gè)用于項(xiàng)目,一個(gè)用于考試。 項(xiàng)目和考試都為最終評(píng)估成績(jī)貢獻(xiàn)了50%。 程序應(yīng)從中計(jì)算出總體百分比,并使用下表中的數(shù)據(jù)計(jì)算出最終成績(jī): 例 項(xiàng)目分?jǐn)?shù) - 78%,考試分?jǐn)?shù) - 65%。 最終成績(jī) = 71.5% ((78 + 65)*0.5),最終成績(jī)

    2024年02月11日
    瀏覽(22)
  • C語言實(shí)現(xiàn)貸款計(jì)算器

    C語言實(shí)現(xiàn)貸款計(jì)算器

    等額本金,等額本息數(shù)學(xué)推導(dǎo):貸款 買房,利息怎么算?不要被忽悠了!李永樂老師講等額本金和等額本息 一個(gè)心血來潮的研究,避免以后買房被坑。 搗鼓了半天才發(fā)現(xiàn)原來支付寶的那個(gè)利率是年利率不是月利率,坑了我半天。。。 程序輸出: 等額本金: 等額本息:

    2024年02月12日
    瀏覽(26)
  • C語言用函數(shù)指針實(shí)現(xiàn)計(jì)算器

    C語言用函數(shù)指針實(shí)現(xiàn)計(jì)算器

    一、運(yùn)行結(jié)果; 二、源代碼;

    2024年01月23日
    瀏覽(16)
  • 使用C語言構(gòu)造一個(gè)簡(jiǎn)單計(jì)算器

    使用C語言構(gòu)造一個(gè)簡(jiǎn)單計(jì)算器

    本節(jié)我們用小學(xué)生知識(shí)來制作一個(gè)簡(jiǎn)單的計(jì)算器,可以運(yùn)算加,減,乘,除,以及余數(shù)的運(yùn)算。 在這節(jié)代碼中用到switch語句,因?yàn)橐斎脒\(yùn)算符,所以注意%c的對(duì)應(yīng) 接下來上代碼: 這里的話我們簡(jiǎn)單演示一下乘法的運(yùn)算: 如果用其他的計(jì)算符號(hào)直接更改即可,這里使用雙精

    2024年02月12日
    瀏覽(26)
  • 房貸計(jì)算器微信小程序原生語言

    房貸計(jì)算器微信小程序原生語言

    效果: 輸入 300萬 結(jié)果 還款明細(xì) 一共有3個(gè)頁面 1、輸入頁面 2、結(jié)果頁面 3、詳情頁面 index.wxml文件

    2024年04月28日
    瀏覽(29)
  • Android開發(fā):kotlin語言實(shí)現(xiàn)簡(jiǎn)易計(jì)算器

    Android開發(fā):kotlin語言實(shí)現(xiàn)簡(jiǎn)易計(jì)算器

    輸入兩個(gè)數(shù)字,可選加減乘除操作符,并計(jì)算顯示對(duì)應(yīng)結(jié)果 隨系統(tǒng)切換語言 可對(duì)結(jié)果進(jìn)行四舍五入操作 界面布局:activity_main.xml文件代碼 字符定義:string.xml文件代碼 邏輯實(shí)現(xiàn):MainActivity.kt 文件代碼 方法一(偷懶): 復(fù)制文件到對(duì)應(yīng)位置 方法二: 1. 繪制界面 2. 編寫邏輯

    2023年04月08日
    瀏覽(28)
  • (C語言)用函數(shù)指針數(shù)組實(shí)現(xiàn)計(jì)算器

    (C語言)用函數(shù)指針數(shù)組實(shí)現(xiàn)計(jì)算器

    一、運(yùn)算結(jié)果; 二、源代碼;

    2024年01月19日
    瀏覽(20)
  • 模擬計(jì)算器編程教程,中文編程開發(fā)語言工具編程實(shí)例

    模擬計(jì)算器編程教程,中文編程開發(fā)語言工具編程實(shí)例

    模擬計(jì)算器編程教程,中文編程開發(fā)語言工具編程實(shí)例 中文編程系統(tǒng)化教程,不需英語基礎(chǔ)。學(xué)習(xí)鏈接 ??????https://edu.csdn.net/course/detail/39036 課程安排:初級(jí)1 1 ?初級(jí)概述 2 ?熟悉構(gòu)件取值賦值 3 折疊式菜單滑動(dòng)面板編程 4 自定義圖形窗口自定義標(biāo)題欄編程 5 多行文本

    2024年02月08日
    瀏覽(25)
  • 一元稀疏多項(xiàng)式簡(jiǎn)單計(jì)算器(C語言)含注釋

    一元稀疏多項(xiàng)式簡(jiǎn)單計(jì)算器(C語言)含注釋

    問題描述 設(shè)計(jì)一個(gè)一元稀疏多項(xiàng)式簡(jiǎn)單計(jì)算器 基本要求 一元稀疏多項(xiàng)式簡(jiǎn)單計(jì)算器的基本功能是: (1)輸入并建立多項(xiàng)式; (2)輸出多項(xiàng)式,輸出形式為整數(shù)序列:n,c1,e1,c2,e2,……,cn,en,其中n是多項(xiàng)式的項(xiàng)數(shù),ci和ei分別是第i項(xiàng)的系數(shù)和指數(shù),序列按指數(shù)降序排列; (

    2024年02月08日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包