A. c語言中,有哪些算術運算符
C語言中算術運算符有以下這些
實例:
#include<stdio.h>
intmain()
{
inta=21;
intb=10;
intc;
c=a+b;
printf("Line 1 - c 的值是 %d ",c);
c=a-b;
printf("Line 2 - c 的值是 %d ",c);
c=a*b;
printf("Line 3 - c 的值是 %d ",c);
c=a/b;
printf("Line 4 - c 的值是 %d ",c);
c=a%b;
printf("Line 5 - c 的值是 %d ",c);
c=a++; // 賦值後再加 1 ,c 為 21,a 為 22
printf("Line 6 - c 的值是 %d ",c);
c=a--; // 賦值後再減 1 ,c 為 22 ,a 為 21
printf("Line 7 - c 的值是 %d ",c);
return0;
}
當上面的代碼被編譯和執行時,它會產生下列結果:
Line 1 - c 的值是 31
Line 2 - c 的值是 11
Line 3 - c 的值是 210
Line 4 - c 的值是 2
Line 5 - c 的值是 1
Line 6 - c 的值是 21
Line 7 - c 的值是 22
(1)c語言表達式中有乘有除擴展閱讀:
C語言中,除了算數運算符,還提供以下運算符:
1、關系運算符
2、邏輯運算符
3、位運算符
4、賦值運算符
5、雜項運算符
運算符優先順序:
C語言中,運算符的運算優先順序共分為15 級。1 級最高,15 級最低。
在表達式中,優先順序較高的先於優先順序較低的進行運算。而在一個運算量兩側的運算符 優先順序相同時,則按運算符的結合性所規定的結合方向處理。
運算符結合性:
C語言中各運算符的結合性分為兩種,即左結合性(自左至右)和右結合性(自右至左)。例如算術運算符的結合性是自左至右,即先左後右。
如有表達式x-y+z 則y 應先與「-」號結合,執行x-y 運算,然後再執行+z 的運算。這種自左至右的結合 方向就稱為「左結合性」。而自右至左的結合方向稱為「右結合性」。
最典型的右結合 性運算符是賦值運算符。如x=y=z,由於「=」的右結合性,應先執行y=z 再執行x=(y=z)運算。C語言運算符中有不少為右結合性,應注意區別,以避免理解錯誤。
優先順序從上到下依次遞減,最上面具有最高的優先順序,逗號操作符具有最低的優先順序。
所有的優先順序中,只有三個優先順序是從右至左結合的,它們是單目運算符、條件運算符、賦值運算符。其它的都是從左至右結合。
具有最高優先順序的其實並不算是真正的運算符,它們算是一類特殊的操作。()是與函數相關,[]與數組相關,而->及.是取結構成員。
其次是單目運算符,所有的單目運算符具有相同的優先順序,因此在我認為的 真正的運算符中它們具有最高的優先順序,又由於它們都是從右至左結合的,因此*p++與*(p++)等效是毫無疑問的。
B. c語言中只含有乘除的表達式怎麼判斷合法
只含有乘和除,那麼只要除數不為0,就可以計算,所以只要判斷除數不為0就可以了。
C. 如何在c語言中輸入一個算式的時候先除再乘再除
int a,=2,b=3,c=5,d=6,sum;
sum=a/困老b*c/d;//C語言乘除同級,從左向右,誰在前先執行誰;
sum=((a/b)*c)/d;//等價於上面汪叢升;鄭空
D. 在C語言中表達式由那些組成
在C語言中,表達式是由操作數和操作符組成的組合,操作數是指參與運算的變數或常量,而困塵操作符則表示執行的運算操作。C語言中的操作符可以分為汪敬禪以下幾類:
算術運算符,如加、減、乘、除、求余等;
關系運算符,如相等、不等、大於、小於、大於等於、小於等於;
邏輯運算符,如邏輯與(AND)、邏輯或(OR)、邏輯非(NOT);
位運算符,如按位與(&)、按位或(|)、按位異或(^)、按位取反(~)等;
賦值運算符,如等號(=)、加等(+=)、減等(-=)等;
條件運算符,如三目運算符(?:);
其他運算符,如逗稿閉號運算符(,)等。
在表達式中,操作符還有一個重要的概念,就是優先順序,它決定了表達式中各個操作符執行順序的順序。在C語言中,優先順序高的操作符會先被執行。如果需要改變操作符的執行順序,可以使用括弧來改變優先順序。
E. c語言中整數小數乘除有何規定
在C語言中無論整型數還是浮點數,都可以進行乘法和除法操作。需要注意的是類型轉換。比如:
printf("%f",3/2);
輸出的結果是0.000000。這並不是一個預期的運算結果。因為3、2這樣的常量在C語言中默認是整型常量。3/2的結果是1。但是對於整數1來說,它的機器碼
而浮點數的編碼一般使用的IEEE754編碼,上面的機器碼用IEEE754編碼表示,即為0。正確的寫法應該是:
printf("%f",(float)3/2);
F. 用 C 語言編寫一個具有加、減、乘、除計算功能的程序,代碼語句後要寫有正確注釋。
#include <stdio.h>
#include <stdlib.h>
#define STACK_SIZE 512
typedef struct /* 定義一個運算符棧 */
{
char * base; /*指向棧底的指針*/
char * top; /*指向棧頂的指針*/
}OPTR_Stack;
typedef struct /* 定義一個操作符棧 */
{
double * base;
double * top;
}OPND_Stack;
void OptrInIt(OPTR_Stack *s) /* 初始化運算符棧 */
{
s->base=(char*)malloc(STACK_SIZE*sizeof(char));/*分配內存*/
if(s->base==NULL) exit(0); /* 判斷棧是否為空 */
s->top=s->base; /春裂* 初始化棧 */
}
int OptrEmpty(OPTR_Stack s) /* 定義棧空事件 */
{
if(s.top==s.base) /*判斷棧空*/
return 1; /* 棧空返回1,否則為0 */
else
return 0;
}
void OptrPush(OPTR_Stack *s,char elem) /* 入棧操作符 */
{
if (s->top-s->base==STACK_SIZE) /* 判斷棧滿 */
{
printf("OPTR_Stack is full!\n"); /*棧滿則列印*/
getch(); /*停止*/
exit(0);
}
else
*(s->top++)=elem; /*棧未滿則elem入棧*/
}
char OptrPop(OPTR_Stack *s) /* 出棧 */
{
char elem; /*定義字元變數*/
if(OptrEmpty(*s)) /*判斷棧是否為空*/
{
printf("Stack is empty\n"); /*棧空列印*/
getch(); /*停止*/
exit(0);
}
else
{
elem=*--s->top; /*出棧值傳給elem*/
return elem;
}
}
char OptrGetTop(OPTR_Stack s) /* 獲取棧頂元素扒態閉 */
{
char elem; /*定義字元變數*/
if(!OptrEmpty(s)) /*判斷棧s是否為空*/
{
elem=*(s.top-1); /*將棧頂元素值傳給elem*/
return elem;
}
}
void OpndInit(OPND_Stack *s) /* 初始化數棧 */
{
s->base=(double *)malloc(STACK_SIZE*sizeof(double));/*分配內閉乎存*/
if(s->base==NULL) exit(0); /* 判斷棧是否為空 */
s->top=s->base; /* 初始化棧 */
}
int OpndEmpty(OPND_Stack s) /* 判斷數棧是否為空 */
{
if(s.top==s.base)
return 1; /*棧為空則返回1*/
else
return 0; /*棧不為空則返回0*/
}
void OpndPush(OPND_Stack *s,double elem) /* 入棧 */
{
if (s->top-s->base==STACK_SIZE) /* 判斷棧滿 */
{
printf("OPND_Stack is full!\n"); /*棧滿則列印*/
getch(); /*停止*/
exit(0);
}
else
*s->top++=elem; /*棧未滿則elem入棧*/
}
double OpndPop(OPND_Stack *s) /* 出棧 */
{
double elem; /*定義字元變數*/
if(OpndEmpty(*s)) /*判斷棧s是否為空*/
{
printf("OPND_Stack is empty\n"); /*棧空則列印*/
getch(); /*停止*/
exit(0);
}
else
{
elem=*--s->top; /*棧非空出棧*/
return elem;
}
}
double OpndGetTop(OPND_Stack s) /* 獲取棧頂元素 */
{
double elem; /*定義字元變數*/
if(!OpndEmpty(s)) /*判斷棧s是否為空*/
{
elem=*(s.top-1); /* 將棧頂值傳給elem*/
return elem; /*返回值*/
}
}
int isoper(char c) /* 判斷是否為運算符 */
{
if(c=='+'||c=='-'||c=='*'||c=='/'||c=='%')
return 1; /*如果c是'+''-''/''*'中的一種則返回1*/
else
return 0; /*否則返回0*/
}
int priority(char c) /* 判斷優先順序 */
{
int p; /*定義一個整型數*/
switch(c)
{
case '+':
case '-': p=1;break; /* +-的優先順序為1*/
case '*':
case '%':
case '/': p=2;break; /* '*''%''/'的優先順序為2*/
case '(': p=0;break; /* (的優先順序為0*/
}
return(p); /*返回值*/
}
double calculate(double s1,double s2,char oper) /* 計算表達式 */
{
double y; /*定義一個浮點型*/
switch(oper)
{
case '+': y=s2+s1;break;
case '-': y=s2-s1;break;
case '*': y=s2*s1;break;
case '%': y=(int)((int)s2%(int)s1); break;
case '/': /*情形為'/'時*/
if(s1==0) /*當除數為0時*/
{
printf("\nDevided by zero!"); /*列印除數為0*/
getch(); /*停止*/
exit(0);
}
y=s2/s1;break; /*除數不為0則定義y值為兩數商*/
}
return(y); /*返回值*/
}
double StrTodouble(char *s,int *j) /* 將字元串轉化成數字 */
{
int i,k; /*定義兩個整型變數*/
char n[100]; /*定義一個數組*/
double f; /*定義一個浮點型*/
i=*j;
for(k=0;s[i]>='0' && s[i]<='9' || s[i]=='.';i++,k++) /*當數組里為0~9的數值或是小數點*/
{
n[k]=s[i]; /*將字元存入數組*/
}
n[k]='\0'; /*存入一個數值後數值間加空格*/
*j=i;
f=atof(n); /*將字元數組轉換成浮點型數據*/
return(f); /*返回值*/
}
double compute(char *exp1)
{
char oper;
int i;
double OPND1,OPND2,result,f;
OPTR_Stack OPTR; /* 運算符棧OPTR*/
OPND_Stack OPND; /*操作數棧OPND */
OptrInIt(&OPTR); /*初始化符號棧*/
OpndInit(&OPND); /*初始化操作數棧*/
printf("\n你輸入的表達式是 :");
puts(exp1); /*輸出輸入的表達式*/
for(i=0;exp1[i]!='\0' && exp1[i]!='\n';i++)
{
if(!isoper(exp1[i]) && exp1[i]>='0' && exp1[i]<='9' || exp1[i]=='.') /* 將字元型的操作數轉化為數字,存入數棧中 */
{
f=StrTodouble(exp1,&i); /*將數組exp1中的字元型操作數轉換為浮點型的數*/
OpndPush(&OPND,f); /*將轉換後的數存入數棧中*/
}
if(isoper(exp1[i])) /* 為運算符時 */
{
if(!OptrEmpty(OPTR)) /*當符號棧不為空時*/
{
while(!OptrEmpty(OPTR) && priority(exp1[i])<=priority(OptrGetTop(OPTR)))
/* 比較優先順序,棧頂運算符優先順序高時,運算符出棧 */
{
oper=OptrPop(&OPTR); /*出棧將值傳給oper*/
OPND1=OpndPop(&OPND); /*數棧中一個數出棧*/
OPND2=OpndPop(&OPND); /*數棧中下一個數出棧*/
result=calculate(OPND1,OPND2,oper); /*計算*/
OpndPush(&OPND,result); /*計算結果入棧*/
}
OptrPush(&OPTR,exp1[i]); /*棧頂運算符優先順序低時,運算符入棧*/
}
else
OptrPush(&OPTR,exp1[i]); /*符號棧為空時,運算符入棧*/
}
else if(exp1[i]=='(') OptrPush(&OPTR,exp1[i]); /*'('入棧*/
else if(exp1[i]==')')
{
while(OptrGetTop(OPTR)!='(' && !OptrEmpty(OPTR))
/*運算符出棧,直到遇到')'或者棧空 */
{
oper=OptrPop(&OPTR); /*出棧將值傳給oper*/
OPND1=OpndPop(&OPND); /*數棧中一個數出棧*/
OPND2=OpndPop(&OPND); /*數棧中下一個數出棧*/
result=calculate(OPND1,OPND2,oper); /*計算*/
OpndPush(&OPND,result); /*計算結果入棧*/
}
OptrPop(&OPTR); /*將棧內的'('丟掉*/
}
}
while(!OptrEmpty(OPTR)) /*符號棧不為空*/
{
oper=OptrPop(&OPTR); /*出棧將值傳給oper*/
OPND1=OpndPop(&OPND); /*數棧中一個數出棧*/
OPND2=OpndPop(&OPND); /*數棧中下一個數出棧*/
result=calculate(OPND1,OPND2,oper); /*計算*/
OpndPush(&OPND,result); /*計算結果入棧*/
}
return result;
}
int main()
{
double result;
char exp1[100]; /*表達式*/
while(1) {
printf("請輸入要計算的表達式 : ");
gets(exp1); /*輸入值放入數組exp1中*/
result = compute(exp1);
printf("\n結果是 : %lf\n",result); /*列印結果*/
printf("回車繼續,其他退出\n");
if(getch()!='\r') exit(0);
}
}
G. C語言中的 算術運算 關系運算 邏輯運算 分別怎麼解釋
算術運算是有加,減,乘,除組成敬睜穗的表達式;
關系運算是早鉛有>,<,<=,>=,==,!=等關系運算符亮卜組成的表達式;
邏輯運算有與(&&),或(||),非(!)等邏輯運算符組成的表達式!
H. c語言運算優先順序
優先順序就是當表達式中有多個運算符時,先計算誰,後計算誰。打個比方,在四則運算中乘除的優先順序就高於加減。
但是C語言中的運算符除了加減乘除還有很多,我們也沒必要將所有運算符的優先順序都記住,這里列出來各個運算符的優先順序表,實在需要用到的時候查一下表就行了。而且實際上在編程的時候需要考慮優先順序的情況很少,因為如果不知道優先順序高低的話,加一個括弧就行了,因為括弧的優先順序是最高的。
比如:
k = (j > i) && (8 == i)
根據優先順序的高低,完全可以寫成:
k = j > i && 8 == i
第一種寫法是比較提倡的,因為一看就知道先計算誰後計算誰,節省了大家的時間還不容易出錯。而且加圓括弧也是一種編程規范,因為程序不只是寫給自己看。
此外運算符還有「目」和「結合性」的概念。「目」就是眼睛的意思,一個運算符需要幾個數參與就歸為「幾目」。C語言中大多數運算符都是雙目的,比如 和 運算符;也有單目和三目的,單目運算符如邏輯非 ( !1 );三目運算符即條件運算符,?:也是C語言中的唯一一個三目運算符。
說完了「目」的概念,再來說一說「結合性」。先來煮個栗子:
1 + 2 × 3 / 4
上式中乘法和除法的優先順序相同,但計算的時候是從左往右,所以乘和除的結合性就是從左往右,so easy!
C語言中大多數運算符的結合性都是從左往右,只有三個運算符是從右往左的。一個是單目運算符,另一個是三目運算符,還有一個就是雙目運算符中的賦值運算符 。運算符的「結合性」也不需要死記硬背,在不斷使用中就記住了。
I. c語言中整數小數乘除有何規定
其實,整數沒有除法,只有取商(/),取余(%),所以,也沒有什麼舍入
2/3=0
3.2/2=1.6(2也是浮點數,因為不同數據類型的數是不能參與運算的)
1.50000*6=9.0(同理,6也是浮點數)
J. c語言 加減乘除 順序
先加減後乘除。
C語言中的加號、減號與數學中的一樣,乘號、除號不同;另外C語言還多了一個求余數的運算符,就是 %。
不同類型的除數和被除數會導致不同類型的運算結果:
當除數和被除數都是整數時,運算結果也是整數;如果不能整除,那麼就直接丟掉小數部分,只保留整數部分,這跟將小數賦值給整數類型是一個道理。一旦除數和被除數中有一個是小數,那麼運算結果也是小數,並且是 double 類型的小數。
(10)c語言表達式中有乘有除擴展閱讀
取余,也就是求余數,使用的運算符是 %。C語言中的取余運算只能針對整數,也就是說,% 的兩邊都必須是整數,不能出現小數,否則編譯器會報錯。
另外,余數可以是正數也可以是負數,由 % 左邊的整數決定:
如果 % 左邊是正數,那麼余數也是正數;
如果 % 左邊是負數,那麼余數也是負數。