❶ c語言的二進制十六進制問題
以你所說為例
你上面的x為位類型數據,也就是只能為0或1,如果你要檢測x的值16次,有兩種方式,一高就是高位在前,那麼就左移;一種是低位在前,那麼就是右移.
如下:
u8 i;
u16 dat;
for(i=0;i<16;i++)
{
if(x)
dat |= (1<<i); //x為1時,左移,高位在前
else
dat |= (0<<i); //x為0時,左移,高位在前
}
❷ 用C語言怎麼乘啊
直接使用:19*23*149即可。
在c語言中,加減乘除運算符號分別為:+,-,*,/。%表示取余符號,例如a%b即求a除以b後的余數,c語言中括弧運算只能使用()。
例如:
#include<stdio.h>
intmain(){
intn;
n=19*23*149;
printf("%d ",n);
return0;
}
/*
輸出:
65113
*/
❸ C語言:乘號怎樣表示
C語言中乘號用「*」表示。
同時按住【Shift + 8】可打出「*」。
C語言中除號用「/」表示(shift鍵旁邊,需英文狀態下才能打出),求余用「%」表示(同時按住【Shift + 5】可打出)。
(3)165乘3加254用c語言表示擴展閱讀
其他運算符
加法運算符 6級
「 + 」加法運算符;「 - 」減法運算符。
移位運算符 7級
<< 左移運算符;>> 右移運算符。
關系運算符 8級
<、<=、>、>=關系運算符。
相等運算符 9級
「 == 」等於運算符;「 != 」不等於運算符。
位與運算符 10級
「 & 」按位與運算符
位異或運算符 11級
「 ∧ 」按位異或運算符(Bitwise exclusive OR operator)。
位或運算符 12 級
「 | 」按位或運算符(Bitwise inclusive OR operator)。
邏輯與運算符 13級
「&&」邏輯與運算符。
邏輯或運算符 14 級
「 || 」邏輯或運算符。
三元條件運算符 15級
? :條件運算符。
賦值運算符 16 級
=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=賦值運算符。
逗號運算符 17級
「,」逗號運算符。
[pre]C 語言中,逗號(,)也可以是運算符,稱為逗號運算符(Comma Operator)。逗號運算符可以把兩個以上(包含兩個)的表達式連接成一個表達式,稱為逗號表達式。其一般形式為:子表達式1, 子表達式2, ..., 子表達式n。例如:a + b, c = b, c++。
逗號運算符的優先順序是所有運算符中級別最低的,通常配合 for 循環使用。逗號表達式最右邊的子表達式的值即為逗號表達式的值。上例中,c++ 的值(c 自增之前的值)即為該表達式的值。
逗號運算符保證左邊的子表達式運算結束後才進行右邊的子表達式的運算。也就是說,逗號運算符是一個序列點,其左邊所有副作用都結束後,才對其右邊的子表達式進行運算。因此,上例中,c 得到 b 的值後,才進行自增運算。
❹ 乘法在c語言中怎麼表示
估計你的意思是說C語言編譯成匯編語言之後乘法怎麼表示吧,因為在匯編中加法確實是用ADD表示的,下面給你運算符表:
ADD 加法.
ADC 帶進位加法.
INC 加 1.
AAA 加法的ASCII碼調整.
DAA 加法的十進制調整.
SUB 減法.
SBB 帶借位減法.
DEC 減 1.
NEC 求反(以 0 減之).
CMP 比較.(兩操作數作減法,僅修改標志位,不回送結果).
AAS 減法的ASCII碼調整.
DAS 減法的十進制調整.
MUL 無符號乘法.
IMUL 整數乘法.
以上兩條,結果回送AH和AL(位元組運算),或DX和AX(字運算),
AAM 乘法的ASCII碼調整.
DIV 無符號除法.
IDIV 整數除法.
以上兩條,結果回送:
商回送AL,余數回送AH, (位元組運算);
或 商回送AX,余數回送DX, (字運算).
AAD 除法的ASCII碼調整.
CBW 位元組轉換為字. (把AL中位元組的符號擴展到AH中去)
CWD 字轉換為雙字. (把AX中的字的符號擴展到DX中去)
CWDE 字轉換為雙字. (把AX中的字元號擴展到EAX中去)
CDQ 雙字擴展. (把EAX中的字的符號擴展到EDX中去)
❺ 乘法在c語言中怎麼表示比如加法是add
估計你的意思是說C語言編譯成匯編語言之後乘法怎麼表示吧,因為在匯編中加法確實是用ADD表示的,下面給你運算符表:
ADD
加法.
ADC
帶進位加法.
INC
加
1.
AAA
加法的ASCII碼調整.
DAA
加法的十進制調整.
SUB
減法.
SBB
帶借位減法.
DEC
減
1.
NEC
求反(以
0
減之).
CMP
比較.(兩操作數作減法,僅修改標志位,不回送結果).
AAS
減法的ASCII碼調整.
DAS
減法的十進制調整.
MUL
無符號乘法.
IMUL
整數乘法.
以上兩條,結果回送AH和AL(位元組運算),或DX和AX(字運算),
AAM
乘法的ASCII碼調整.
DIV
無符號除法.
IDIV
整數除法.
以上兩條,結果回送:
商回送AL,余數回送AH,
(位元組運算);
或
商回送AX,余數回送DX,
(字運算).
AAD
除法的ASCII碼調整.
CBW
位元組轉換為字.
(把AL中位元組的符號擴展到AH中去)
CWD
字轉換為雙字.
(把AX中的字的符號擴展到DX中去)
CWDE
字轉換為雙字.
(把AX中的字元號擴展到EAX中去)
CDQ
雙字擴展.
(把EAX中的字的符號擴展到EDX中去)
❻ C語言:乘號怎樣表示
C語言中乘號用「*」表示。
同時按住【Shift
+
8】可打出「*」。
C語言中除號用「/」表示(shift鍵旁邊,需英文狀態下才能打出),求余用「%」表示(同時按住【Shift
+
5】可打出)。
❼ c語言求解165
這段代碼就是把數組a的前4個元素進行累乘,結果是120。形參數組b指向實參數組a,形參n獲得的實參值為3,確定了對數組的搜索范圍。
❽ 用C語言編寫一個計算器程序,實現加,減,乘,除,求平方根(正數),倒數等功能.
#include<iostream>
#include<cmath>
#include<string>
using namespace std;
const double pi = 3.14159265; const double e = 2.718281828459; const int SIZE = 1000;
typedef struct node//為了處理符號而建立的鏈表(如: 1+(-2)) { char data; node *next; }node;
typedef struct stack_num//存儲 數 的棧 { double *top; double *base; }stack_num;
typedef struct stack_char//存儲 運算符號 的棧 { char *top; char *base; }stack_char;
stack_num S_num;//定義 stack_char S_char;//定義
char fu[18] = {'\n', ')', '+', '-', '*', '/', '%', '^', 'Q', 'L', 'C', 'S', 'T', 'c', 's', 't', '('};
int compare[1000];//表現出各運算符號的優先順序 double shu[1000];//存儲 "數" 的數組
double dai_result;//運算的結果,是為了處理 M 運算(簡介函數里有M的定義) int biao = 0;//和dia_result 一樣,為了處理 M 運算 char line[SIZE];//輸入的所要計算的表達式
void init()//初始化 { compare[fu[0]] = -2;//用數字的大小表現出符號的優先順序
compare[fu[1]] = -1; compare[fu[2]] = 2; compare[fu[3]] = 2; compare[fu[4]] = 4; compare[fu[5]] = 4; compare[fu[6]] = 4; compare[fu[7]] = 5; for(int i = 8; i <= 15; i++) compare[fu[i]] = 6; compare[fu[16]] = 7; S_num.base = (double*)malloc(sizeof(double)*SIZE);//為棧開辟空間 S_char.base = (char*)malloc(sizeof(char)*SIZE);//同上 S_num.top = S_num.base; S_char.top = S_char.base; }
void push_num(double n)//數字進棧 { * ++S_num.top = n; }
void push_char(char c)//運算符號進棧 { * ++S_char.top = c; }
double pop_num()//數字出棧 { double m = *S_num.top; S_num.top--; return m; }
char pop_char()//運算符號出棧 { char cc = *S_char.top; S_char.top--; return cc; }
char get_top_char()//得到運算符號的棧中最頂端的運算符號 { return *S_char.top;
}
double operate(double y, char c, double x)//
對兩個數計算
(
含是雙目運算符
:
如
*, /
等等
)
{
double r;
if(c == '-')
r = x - y;
else if(c == '+')
r = x + y;
else if(c == '/' && y != 0)
r = x / y;
else if(c == '*')
r = x * y;
else if(c == '^')
{
r = 1;
for(int i = 1; i <= y; i++)
r *= x;
}
else if(c == '%')
{
int r0 = (int)x % (int)y;
r = double(r0);
}
return r;
}
double operate_one(double one, char cc)//
對一個數運算
(
含單目運算符
:
如
log(L), sin(S)
等等
)
{
double r;
if(cc == 'Q')
r = sqrt(one);
else if(cc == 'C')
r = cos(one);
else if(cc == 'S')
r = sin(one);
else if(cc == 'T')
r = tan(one);
else if(cc == 'c')
i++;
}
i++;
}
if(ge >= 3)
return 0;
else
return 1;
}
void output(double result)//
打出結果
{
printf("
所得結果是
: ");
cout<<result<<endl;
}
void check()//
檢查表達式是否合法
{
void introce();
char cc;//
決定計算器按哪種功能進行計算
double result;//
結果
void input();//
定義
if( check_kuohao() && check_char() )//
看是否合法
,
合法則計算
{
result = compute();
output(result);
cout<<"
輸入一個字元
'M'
或
'D'
或
'F',
決定是否繼續
: "<<endl;
while(cin>>cc)
{
if(cc == 'M')
{
system("cls");
introce();
printf("
您上次所得結果為
: ");
cout<<result<<endl;
cout<<"
在上次計算結果的基礎上
,
請繼續輸入想計算的表達式
"<<endl;
dai_result = result;
biao = 1;
input();//
輸入表達式
break;
}
else if(cc == 'D')
{
system("cls");
introce();
cout<<"
計算器已清零
,
請輸入您所要計算的表達式
"<<endl;
input();//
輸入表達式
break;
}
else if(cc == 'F')
{
system("cls");
cout<<"
計算器關閉
,
謝謝使用
!"<<endl;
break;
}
else
{
cout<<"
所輸入字元無效
,
請輸入一個字元
'M'
或
'D'
或
'F'!"<<endl;
continue;
}
}
}
else//
不合法,分兩種不合法
{
if(check_kuohao() == 0 && check_char() == 1)
{
cout<<"
您所輸入的表達式括弧不匹配
,
請重新輸入
:"<<endl;
input();//
輸入表達式
}
else
{
cout<<"
您所輸入的表達式不合法
,
請重新輸入
:"<<endl;
input();//
輸入表達式
}
}
}
void tackle_fuhao()//
處理負號
{
node *root, *head, *p, *q, *p1;
root = head = new node;
head->next = NULL;
int i;
for(i = 0; line[i] != '\0'; i++)//
建立鏈表
{
p = new node;
p->data = line[i];
p->next = head->next;
head->next = p;
head = p;
}
// delete p;
q = (node*)malloc(sizeof(node));
head = root;
if(root->next->data == '+' || root->next->data == '-')//
處理第一個字元
{
p = new node;
p->data = '0';
p->next = head->next;
head->next = p;
}
if(root->next != NULL)
{
for(q = root->next; q; q = q->next)
{
if(q->data == '(' && (q->next->data == '-' || q->next->data == '+'))
{
p = new node;
p->data = '0';
p->next = q->next;
q->next = p;
}
}
}
// delete q;
p1 = new node;
int qi = -1;
for(p1 = root->next; p1; p1 = p1->next)
{
line[++qi] = p1->data;
}
line[++qi] = '\0';
}
void input()//
輸入
{
cin>>line;
if(biao == 0)
tackle_fuhao();//
處理負號
check();//
檢查表達式是否合法
}
void introce()//
對計算器的符號功能的簡要介紹
{
cout<<"
計算器簡要介紹
"<<endl;
cout<<"C(cos)
S(sin)
T(tan)
a(arccos)
c(arcsin) "<<endl;
cout<<"7
8
9
/
on
t(arctan) "<<endl;
cout<<"4
5
6
*
%
L(log)"<<endl;
cout<<"1
2
3
-
M(M+)
Q(sqrt)
"<<endl;
cout<<"0
.
+
^(
乘方
) F(off)
Enter(=) "<<endl;
cout<<"
對於對數輸入
L2_5
表示以
2
為底
5
的對數
"<<endl;
cout<<"M(
在前面結果的基礎上繼續計算,
如:
上次結果為
10
,
現輸入
+10.5*2)"<<endl;
cout<<"D(
清零並繼續輸入
)"<<endl;
cout<<"F(
計算機關閉
)"<<endl;
cout<<"
輸入
P
就代表輸入圓周率
,
輸入
E
代表輸入自然對數
"<<endl<<endl;
}
void print()
{
system("color 2");
cout<<"
歡迎使用本計算器
"<<endl;
cout<<"
輸入一個字元串
on,
計算器開始啟動
"<<endl;
}
void if_start()//
是否啟動計算器
{
string start;
print();
while(cin>>start)
{
if(start != "on")
{
cout<<"
您所輸入的字元無效
,
請按照介紹的繼續輸入
:"<<endl;
continue;
}
else
break;
}
if(start == "on")
{
system("color 5");//
顏色的處理
system("cls");//
刷屏
}
introce();//
對計算器的簡要介紹
cout<<"
現在
,
請輸入您所要計算的表達式
"<<endl;
input();//
輸入所要計算的表達式
}
int main()
{
if_start();//
調用是否啟動計算器函數
return 0;
}
r = acos(one);
else if(cc == 's')
r = asin(one);
else if(cc == 't')
r = atan(one);
❾ 用C語言編寫可以進行加減乘除整數運算混合運算的計算器,要求寫思路,越詳細越好,初學者,不要很復雜的。
#include<cstdlib>
#include<iostream>
usingnamespacestd;
intmain()
{
inta,b;//a是輸出結果,b是臨時輸入數據
charx;//x是標點符號輸入
cin>>a;//先輸入第一個數
while(1)//由於不知道運算式一共多長,所以用一個死循環不斷讀取
{
cin>>x;//輸入運算符
if(x=='=')//'='特殊處理,輸出結果
{
cout<<a<<endl;
break;//退出循環,跳到return0;
}
else//如果是運算符就輸入下一個數
{
cin>>b;
switch(x)//判斷符號類型,並進行相應計算
{
case'+':a+=b;break;//每個case後面必須加break;否則將後面所有運算式全走一遍
case'-':a-=b;break;
case'*':a*=b;break;
case'/':a/=b;break;
}
}
}
return0;
}
汗,又改變條件了,這次你的要求和原來要求可是截然不同的程序啊,涉及到很多演算法的,二叉樹,堆棧等,我如果重寫了初學者不一定能看懂了。我下面就給你貼一下差不多的代碼吧。只是這個不需要輸入等號,回車自動計算。如果需要去掉那些繁瑣的代碼估計沒人為了這幾個虛擬分給你去掉的。
#include<iostream>
#include<string>
#include<stack>
#include"Tree.h"
#include<windows.h>
boolisok(stringexp)//此函數驗證式子是否正確,即是否符合運算規則。
{
charcheck;
interror=0;
intlb=0;
intrb=0;
if(exp.size()==1&&exp[0]!='-')returnfalse;
elseif((IsOperator(exp[0])&&exp[0]!='-'||IsOperator(exp[exp.size()-1]))&&exp[0]!='('&&exp[exp.size()-1]!=')')//此處若不加,在遇到某些式子時,會出現非法操作。
returnfalse;
for(intm=0;m<exp.size();m++)
{
check=exp[m];
if(m==0&&check=='-'&&(isdigit(exp[1])!=0||exp[1]=='('))check=exp[++m];
if(IsOperand(check));//如果是數字,跳過,不管。
elseif(IsOperator(check))
{
if(check==')')
{
rb++;
if(IsOperator(exp[m+1])&&(exp[m+1]=='+'||exp[m+1]=='-'||exp[m+1]=='*'||exp[m+1]=='/'||exp[m+1]=='^'||exp[m+1]==')'))
{
m++;
if(exp[m]==')')
rb++;
}
elseif(IsOperator(exp[m+1]))
error++;
}
elseif(check=='(')
{
lb++;
if(exp[m+1]=='(')
{
m++;
lb++;
}
elseif(IsOperator(exp[m+1])&&exp[m+1]!='-')
error++;
}
else
{
if(IsOperator(exp[m+1])&&exp[m+1]=='(')
{
m++;
lb++;
}
elseif(IsOperator(exp[m+1]))
error++;
}
}
else
error++;
}
if(error==0&&lb==rb)
return(true);
else
return(false);
}
intmain()
{
HANDLEhOut=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTitle("四則運算器二叉樹版");
SetConsoleTextAttribute(hOut,BACKGROUND_GREEN+FOREGROUND_BLUE);
binary_treeetree;
stack<binary_tree>NodeStack;
stack<char>OpStack;
stringinfix;
charchoice='y';
system("cls");
cout<<"*******************************************************************"<<endl;
cout<<"**"<<endl;
cout<<"*十進制四則運算計算器 ※※※※※※※※※※※※*"<<endl;
cout<<"* ※※*"<<endl;
cout<<"*(二叉樹版) ※※※※※※※※※※※※*"<<endl;
cout<<"**"<<endl;
cout<<"*******************************************************************"<<endl;
charc;
while(choice=='y'||choice=='Y')
{
cout<<" 請輸入表達式,不要帶空格: ";
cin>>infix;
cout<<"--------------------------------------------------------------------------------"<<' ';
cout<<"表達式為:"<<infix<<' ';
if(isok(infix))
{
for(inti=0;i<infix.size();i++)
{
c=infix[i];
if(i==0&&c=='-')//若開始為負,則把零壓入運算數棧,把'-'壓入運算符棧
{
binary_treetemp;
temp.root=build_node("0");
NodeStack.push(temp);
OpStack.push('-');
}
else
if(IsOperand(c))
{
stringtempstring;
tempstring=tempstring+c;
while(i+1<infix.size()&&IsOperand(infix[i+1]))
{
tempstring+=infix[++i];
}
binary_treetemp;
temp.root=build_node(tempstring);
NodeStack.push(temp);
}
elseif(c=='+'||c=='-'||c=='*'||c=='/'||c=='^')
{
if(OpStack.empty())
OpStack.push(c);
elseif(OpStack.top()=='(')
OpStack.push(c);
elseif(TakesPrecedence(c,OpStack.top()))
OpStack.push(c);
else
{
while(!OpStack.empty()&&(TakesPrecedence(OpStack.top(),c)||addition(OpStack.top(),c)))
{
binary_treetemp_tree;
stringthisstring="";
thisstring=thisstring+OpStack.top();
OpStack.pop();
etree.root=build_node(thisstring);
(temp_tree.root,NodeStack.top().root);
NodeStack.pop();
etree.root->right_child=temp_tree.root;
temp_tree.root=NULL;
(temp_tree.root,NodeStack.top().root);
etree.root->left_child=temp_tree.root;
NodeStack.pop();
temp_tree.root=NULL;
(temp_tree.root,etree.root);
NodeStack.push(temp_tree);
etree.root=NULL;
}
OpStack.push(c);
}
}
elseif(c=='(')//若中間遇到括弧,則判斷下一位是否為'-'
{OpStack.push(c);
if(infix[i+1]=='-')
{
binary_treetemp;
temp.root=build_node("0");
NodeStack.push(temp);
OpStack.push('-');
++i;
}
}
elseif(c==')')
{
while(OpStack.top()!='(')
{
binary_treetemp_tree;
stringthisstring="";
thisstring=thisstring+OpStack.top();
OpStack.pop();
etree.root=build_node(thisstring);
(temp_tree.root,NodeStack.top().root);
NodeStack.pop();
etree.root->right_child=temp_tree.root;
temp_tree.root=NULL;
(temp_tree.root,NodeStack.top().root);
etree.root->left_child=temp_tree.root;
NodeStack.pop();
temp_tree.root=NULL;
(temp_tree.root,etree.root);
NodeStack.push(temp_tree);
etree.root=NULL;
}
OpStack.pop();
}
}
////////////////////////////////////////////////////////
while(!OpStack.empty())
{
binary_treetemp_tree;
stringthisstring="";
thisstring=thisstring+OpStack.top();
OpStack.pop();
etree.root=build_node(thisstring);
(temp_tree.root,NodeStack.top().root);
NodeStack.pop();
etree.root->right_child=temp_tree.root;
temp_tree.root=NULL;
(temp_tree.root,NodeStack.top().root);
etree.root->left_child=temp_tree.root;
NodeStack.pop();
temp_tree.root=NULL;
(temp_tree.root,etree.root);
NodeStack.push(temp_tree);
if(!OpStack.empty())
{
etree.root=NULL;
}
}
cout<<"列印結點如下:";
etree.print();
cout<<' ';
cout<<"結點個數為:"<<etree.counter()<<' ';
cout<<"以下是,中間的計算結果:"<<' ';
etree.evaluate();
cout<<' ';
cout<<"結果是:";
cout<<etree.root->data<<' ';
cout<<' '<<"--------------------------------------------------------------------------------"<<' ';
cout<<" 是否要重新運行?輸入<Y/N>:";
cin>>choice;
}
else
{
cout<<"************************************************"<<' ';
cout<<"錯誤:輸入的表達試有誤!"<<' ';
cout<<"************************************************"<<' ';
cout<<" 是否要重新運行?輸入<Y/N>:";
cin>>choice;
}
}
return0;
}
課程設計報告
設計題目:十進制四則運算計算器
實習目的
通過實習,了解並初步掌握設計、實現較大系統的完整過程,包括系統分析、編碼設計、系統集成、以及調試分析,熟練掌握數據結構的選擇、設計、實現以及操作方法,為進一步的應用開發打好基礎。
二.問題描述
在以二叉樹表示算術表達式的基礎上,設計一個十進制的四則運算的計算器。[設計要求]實現整數浮點數的四則運算。
三.需求分析
該程序實現的是實數型的四則運算,並在此運算上又加入了冪」^」運算,該程序用一二叉樹表示整個輸入的算術表達式:
(1)實現對結點的列印,便於結果分析;
(2)實現對結點的統計;
(3)實現中間結果的顯示,可以看列印的結點,驗證運算結果的正確與否。
四.概要設計
系統用到的抽象數據類型定義:
1.ADTnode_type{
數據對象V:一個集合,該集合中的所有元素具有相同的特性
數據關系R:R={VR}
VR={<x,y>|P(x,y)^(x,y屬於V)}
基本操作:
(1) node_type(stringk);
操作結果:對結點進行初始化
}ADTnode_type
2.ADTbinary_tree{
數據對象D:一個集合,該集合中的所有元素具有相同的特性
數據關系R:若D為空,則為空樹。若D中僅含有一個數據元素,則R為空集,否則R={H},H為如下二元關系:
(1) 在D中存在唯一的稱為根的數據元素root,它在關系H中沒有前驅
(2) 除root以外,D中每個結點在關系H下有且僅有一個前驅。
基本操作:
(1) print(node_type*r)CopyTimeTree(p,q);
操作結果:對結點進行列印
(2) evaluate(node_type*prt);
操作結果:對一二叉樹進行計算
(3) counter();
操作結果:計算一棵二叉樹中的結點個數
}ADTbinary_tree
系統中子程序及功能要求:
1. ADTnode_typebuild_node(stringx):建立一個結點
2. addition(charOperatorA,charOperatorB):判斷兩操作符是否相等,若相等返回True
3. TakesPrecedence(charOperatorA,charOperatorB):判別符號的優先順序。A>B,返回為TRUE
4. (ADTnode_type*&r1,ADTnode_type*r2):拷貝整個二叉樹
5. isok(stringexp):驗證表達式是否輸入正確,若正確返回TRUE
五.測試分析(運行結果)
第一個表達式:10-(-3)*(((21+3/5)*8/3)*(-2))
第二個表達式:-(32.7-3210.3)/((8.0+0.9)*8.9)+4.4
依次把運算符和操作數放入堆棧中,過程中依次把中間運算結果列印出來
❿ c語言九九乘法表
操作方法 :
#include
int main() {
int i,j; // i, j控制行或列
for(i=1;i<=9;i++) {
for(j=1;j<=i;j++)
// %2d 控制寬度為兩個字元,且右對齊;如果改為 %-2d 則為左對齊
// 為tab縮進
printf("%d*%d=%2d ", i, j, i*j);
printf("
");
}
return 0;
}