❶ 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;
}