c語言優(yōu)先級是:每種同類型的運(yùn)算符都有內(nèi)部的運(yùn)算符優(yōu)先級,不同類型的運(yùn)算符之間也有相應(yīng)的優(yōu)先級順序。一個(gè)表達(dá)式中既可以包括相同類型的運(yùn)算符,也可以包括不同類型的運(yùn)算符或者函數(shù)。
創(chuàng)新互聯(lián)建站秉承實(shí)現(xiàn)全網(wǎng)價(jià)值營銷的理念,以專業(yè)定制企業(yè)官網(wǎng),成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作,微信小程序,網(wǎng)頁設(shè)計(jì)制作,手機(jī)網(wǎng)站制作設(shè)計(jì),營銷型網(wǎng)站建設(shè)幫助傳統(tǒng)企業(yè)實(shí)現(xiàn)“互聯(lián)網(wǎng)+”轉(zhuǎn)型升級專業(yè)定制企業(yè)官網(wǎng),公司注重人才、技術(shù)和管理,匯聚了一批優(yōu)秀的互聯(lián)網(wǎng)技術(shù)人才,對客戶都以感恩的心態(tài)奉獻(xiàn)自己的專業(yè)和所長。
當(dāng)多種運(yùn)算符出現(xiàn)在同一個(gè)表達(dá)式中時(shí),應(yīng)該先按照不同類型運(yùn)算符間的優(yōu)先級進(jìn)行運(yùn)算。
各種運(yùn)算符間的優(yōu)先級如下:數(shù)值運(yùn)算符、字符串運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符??梢杂美ㄌ柛淖儍?yōu)先級順序,使得括號內(nèi)的運(yùn)算優(yōu)先于括號外的運(yùn)算。對于多重括號,總是由內(nèi)到外強(qiáng)制表達(dá)式的某些部分優(yōu)先運(yùn)行。括號內(nèi)的運(yùn)算總是最優(yōu)先計(jì)算。
優(yōu)先級結(jié)合性:
當(dāng)一個(gè)運(yùn)算對象兩側(cè)的運(yùn)算符優(yōu)先級別相同時(shí),則按運(yùn)算符的結(jié)合性來確定表達(dá)式的運(yùn)算順序。關(guān)于結(jié)合性的概念在其他高級語言中是沒有的,這是C語言的特點(diǎn)之一。在標(biāo)準(zhǔn)C語言的文檔里,對操作符的結(jié)合性并沒有做出非常清楚的解釋。
C語言也將34種運(yùn)算符規(guī)定了不同的結(jié)合性。大多數(shù)運(yùn)算符結(jié)合方向是“自左至右”,即:先左后右,也叫“左結(jié)合性”
例如 a-b + c,表達(dá)式中有-和+兩種運(yùn)算符,且優(yōu)先級相同,按先左后右結(jié)合方向,先圍繞減號結(jié)合,執(zhí)行a-b的運(yùn)算,再圍繞加號結(jié)合,完成運(yùn)算(a-b) + c。除了左結(jié)合性外,C 語言有三類運(yùn)算符的結(jié)合方向是從右至左,也叫“右結(jié)合性”
以上內(nèi)容參考:百度百科-運(yùn)算符優(yōu)先級
c語言優(yōu)先級運(yùn)算符:
一級運(yùn)算符:標(biāo)識,常量,字符串文字量,優(yōu)先級提升表達(dá)式最優(yōu)先執(zhí)行。
二級運(yùn)算符:數(shù)組下標(biāo)運(yùn)算(expression)、函數(shù)調(diào)用(argument-expression-list)、成員訪問(identifier、?- identifier)、后綴自增(i++)、后綴自減(i--)、?復(fù)合初始化(initializer-list)。
三級運(yùn)算符:前綴自增(++i)、前綴自減(--i)、單目轉(zhuǎn)型表式式(取地址 ,提領(lǐng) * , 正號+ ,負(fù)號-、?位反~ 邏輯否!)、求類型長度(sizeof unary-expression)。
四級運(yùn)算符:強(qiáng)制表達(dá)式成為type-name指定的類型( type-name ) cast-expression。
五級運(yùn)算符:“ * ” 乘法運(yùn)算符。
六級運(yùn)算符:“ + ”加法運(yùn)算符。
七級運(yùn)算符: 左移運(yùn)算符; 右移運(yùn)算符。
八級運(yùn)算符:、=、、=關(guān)系運(yùn)算符。
九級運(yùn)算符:“ == ”等于運(yùn)算符;“ != ”不等于運(yùn)算符。
十級運(yùn)算符:“ ”按位與運(yùn)算符。
十一級運(yùn)算符:“ ∧ ”按位異或運(yùn)算符。
十二級運(yùn)算符:“ | ”按位或運(yùn)算符。
十三級運(yùn)算符:“”邏輯與運(yùn)算符。
十四級運(yùn)算符:“ || ”邏輯或運(yùn)算符。
十五級運(yùn)算符:? :條件運(yùn)算符。
注意:
在一個(gè)表達(dá)式中可能包含多個(gè)有不同運(yùn)算符連接起來的、具有不同數(shù)據(jù)類型的數(shù)據(jù)對象;由于表達(dá)式有多種運(yùn)算,不同的結(jié)合順序可能得出不同結(jié)果甚至出現(xiàn)錯(cuò)誤運(yùn)算錯(cuò)誤,因?yàn)楫?dāng)表達(dá)式中含多種運(yùn)算時(shí),必須按一定順序進(jìn)行結(jié)合,才能保證運(yùn)算的合理性和結(jié)果的正確性、唯一性。
優(yōu)先級從上到下依次遞減,最上面具有最高的優(yōu)先級,逗號操作符具有最低的優(yōu)先級。表達(dá)式的結(jié)合次序取決于表達(dá)式中各種運(yùn)算符的優(yōu)先級。優(yōu)先級高的運(yùn)算符先結(jié)合,優(yōu)先級低的運(yùn)算符后結(jié)合,同一行中的運(yùn)算符的優(yōu)先級相同。
宏只是把所有參數(shù)連接起來,拼成一個(gè)表達(dá)式而已
你這里直接把x和y代入進(jìn)去就知道問題在哪里了
原來的表達(dá)式為:a + b * a - b
改了之后為:(a + b) * (a - b)
所以你如果用宏的話,最好這樣寫:#define M(x, y) (x) * (y)
這樣就不會出現(xiàn)這種錯(cuò)誤了
#include "string.h"
#define n 10 /*假定系統(tǒng)中可容納的作業(yè)數(shù)量為n*/
typedef struct jcb
{char name[4]; /*作業(yè)名*/
int length; /*作業(yè)長度,所需主存大小*/
int printer; /*作業(yè)執(zhí)行所需打印機(jī)的數(shù)量*/
int tape; /*作業(yè)執(zhí)行所需磁帶機(jī)的數(shù)量*/
int runtime; /*作業(yè)估計(jì)執(zhí)行時(shí)間*/
int waittime; /*作業(yè)在系統(tǒng)中的等待時(shí)間*/
int next; /*指向下一個(gè)作業(yè)控制塊的指針*/
}JCB; /*作業(yè)控制塊類型定義*/
int head; /*作業(yè)隊(duì)列頭指針定義*/
int tape,printer;
long memory;
JCB jobtable[n]; /*作業(yè)表*/
int jobcount=0; /*系統(tǒng)內(nèi)現(xiàn)有作業(yè)數(shù)量*/
shedule( )
/*作業(yè)調(diào)度函數(shù)*/
{float xk,k;
int p,q,s,t;
do
{p=head;
q=s=-1;
k=0;
while(p!=-1)
{ if(jobtable[p].length=memoryjobtable[p].tape=tapejobtable[p].printer=printer)
{ /*系統(tǒng)可用資源是否滿足作業(yè)需求*/
xk=(float)(jobtable[p].waittime)/jobtable[p].runtime;
if(q==0||xkk) /*滿足條件的第一個(gè)作業(yè)或者作業(yè)q的響應(yīng)比小于作業(yè)p的響應(yīng)比*/
{k=xk; /*記錄響應(yīng)比*/
q=p;
t=s;
}/*if*/
}/*if*/
s=p;
p=jobtable[p].next; /*指針p后移*/
}/*while*/
if(q!=-1)
{ if(t==-1) /*是作業(yè)隊(duì)列的第一個(gè)*/
head=jobtable[head].next;
else
jobtable[t].next=jobtable[q].next;
/*為作業(yè)q分配資源:分配主存空間;分配磁帶機(jī);分配打印機(jī)*/
memory=memory-jobtable[q].length;
tape=tape-jobtable[q].tape;
printer=printer-jobtable[q].printer;
printf("選中作業(yè)的作業(yè)名:%s\n",jobtable[q].name);
}
}while(q!=-1);
}/*作業(yè)調(diào)度函數(shù)結(jié)束*/
main( )
{char name[4];
int size,tcount,pcount,wtime,rtime;
int p;
/*系統(tǒng)數(shù)據(jù)初始化*/
memory=65536;
tape=4;
printer=2;
head=-1;
printf("輸入作業(yè)相關(guān)數(shù)據(jù)(以作業(yè)大小為負(fù)數(shù)停止輸入):\n");
/*輸入數(shù)據(jù),建立作業(yè)隊(duì)列*/
printf("輸入作業(yè)名、作業(yè)大小、磁帶機(jī)數(shù)、打印機(jī)數(shù)、等待時(shí)間、估計(jì)執(zhí)行時(shí)間\n");
scanf("%s%d%d %d %d %d",name,size,tcount,pcount,wtime,rtime);
while(size!=-1)
{/*創(chuàng)建JCB*/
if(jobcountn)p=jobcount;
else { printf("無法再創(chuàng)建作業(yè)\n");
break;
}
jobcount++;
/*填寫該作業(yè)相關(guān)內(nèi)容*/
strcpy(jobtable[p].name,name);
jobtable[p].length=size;
jobtable[p].printer=pcount;
jobtable[p].tape=tcount;
jobtable[p].runtime=rtime;
jobtable[p].waittime=wtime;
/*掛入作業(yè)隊(duì)列隊(duì)首*/
jobtable[p].next=head;
head=p;
/* 輸入一個(gè)作業(yè)數(shù)據(jù)*/
printf("輸入作業(yè)名、作業(yè)大小、磁帶機(jī)數(shù)、打印機(jī)數(shù)、等待時(shí)間、估計(jì)執(zhí)行時(shí)間\n");
scanf("%s%d%d%d%d%d",name,size,tcount,pcount,wtime,rtime);
}/*while*/
shedule( ); /*進(jìn)行作業(yè)調(diào)度*/
}/*main( )函數(shù)結(jié)束*/
# include "stdio.h"
# include "malloc.h"
# include "stdlib.h"
typedef struct Queue
{
int data;
int Priority;
Queue * Next;
}* PQUEUE;
bool insert(PQUEUE p,int i, int j);
bool pop(PQUEUE p);
void sort(PQUEUE p);
int length = 0;
PQUEUE pT;
int main(void)
{
PQUEUE pH = (PQUEUE)malloc(sizeof(Queue));
insert(pH, 75, 8);
insert(pH, 54, 4);
insert(pH, 75, 6);
insert(pH, 23, 5);
insert(pH, 81, 4);
insert(pH, 65, 3);
insert(pH, 43, 4);
insert(pH, 34, 2);
sort(pH);
pop(pH);
pop(pH);
pop(pH);
pop(pH);
pop(pH);
pop(pH);
pop(pH);
pop(pH);
return 0;
}
bool insert(PQUEUE p,int i, int j)
{
if(i= 0 i= 100 j=0 j=100)
{
PQUEUE pNew = (PQUEUE)malloc(sizeof(Queue));
if(length == 0)
{
pT = NULL;
}
if(pT == NULL)
{
pT = p;
}
if(NULL == pNew)
{
printf("動態(tài)內(nèi)存分配失敗~!");
exit(-1);
}
pNew-data = i;
pNew-Priority = j;
pT-Next = pNew;
pNew-Next = NULL;
pT = pNew;
length++;
return true;
}
return false;
}
PQUEUE p2;
bool pop(PQUEUE p)
{
if(length != 0)
{
p2 = p;
p = p-Next;
printf("%d,", p-data);
printf("%d\n", p-Priority);
p2-Next = p-Next;
length--;
return true;
}
return false;
}
void sort(PQUEUE p)
{
if(length != 0)
{
PQUEUE w,q;
int i, j, t1,t2;
for(i=0,w=p-Next; i length-1; ++i,w = w-Next)
{
for(j=i+1,q=w-Next; j length; ++j,q = q-Next)
{
if(w-Priority q-Priority)
{
t1 = w-data;
w-data = q-data;
q-data = t1;
t2 = w-Priority;
w-Priority = q-Priority;
q-Priority = t2;
}
}
}
}
return;
}
/*
都滿足你的要求了,以上是使用鏈表結(jié)構(gòu)的隊(duì)列
*/
C語言中運(yùn)算符優(yōu)先級排序如下:
分為優(yōu)先級15級:
1、圓括號【()】、下標(biāo)運(yùn)算符【[]】、分量運(yùn)算符的指向結(jié)構(gòu)體成員運(yùn)算符【-】、結(jié)構(gòu)體成員運(yùn)算符【.】;
2、邏輯非運(yùn)算符【!】、按位取反運(yùn)算符【~】、自增自減運(yùn)算符【++】【 --】、負(fù)號運(yùn)算符【-】、類型轉(zhuǎn)換運(yùn)算符【(類型)】、指針運(yùn)算符和取地址運(yùn)算符【*】【】、長度運(yùn)算符【sizeof】;
3、乘法運(yùn)算符【*】、除法運(yùn)算符【/】、取余運(yùn)算符【%】;
4、加法運(yùn)算符【+】、減法運(yùn)算符【-】;
5、左移動運(yùn)算符【】、右移動運(yùn)算符【】;
6、關(guān)系運(yùn)算符【 】【】【=】【 = 】;
7、等于運(yùn)算符【==】、不等于運(yùn)算符【!=】;
8、按位與運(yùn)算符【】;
9、按位異或運(yùn)算符【^】;
10、按位或運(yùn)算符【|】;
11、邏輯與運(yùn)算符【】;
12、邏輯或運(yùn)算符【||】;
13、條件運(yùn)算符【?:】;
14、賦值運(yùn)算符【=】【/=】【*=】【%=】【+=】【-=】【=】【=】【=】【^=】【|=】;
15、逗號運(yùn)算符【,】。
注意:
每種同類型的運(yùn)算符都有內(nèi)部的運(yùn)算符優(yōu)先級,不同類型的運(yùn)算符之間也有相應(yīng)的優(yōu)先級順序。一個(gè)表達(dá)式中既可以包括相同類型的運(yùn)算符,也可以包括不同類型的運(yùn)算符或者函數(shù)。當(dāng)多種運(yùn)算符出現(xiàn)在同一個(gè)表達(dá)式中時(shí),應(yīng)該先按照不同類型運(yùn)算符間的優(yōu)先級進(jìn)行運(yùn)算。
各種運(yùn)算符間的優(yōu)先級如下:數(shù)值運(yùn)算符、字符串運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符??梢杂美ㄌ柛淖儍?yōu)先級順序,使得括號內(nèi)的運(yùn)算優(yōu)先于括號外的運(yùn)算。對于多重括號,總是由內(nèi)到外強(qiáng)制表達(dá)式的某些部分優(yōu)先運(yùn)行。括號內(nèi)的運(yùn)算總是最優(yōu)先計(jì)算。
網(wǎng)頁題目:c語言構(gòu)造優(yōu)先函數(shù) c語言構(gòu)造函數(shù)
網(wǎng)頁網(wǎng)址:http://muchs.cn/article2/docsjoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、企業(yè)網(wǎng)站制作、關(guān)鍵詞優(yōu)化、搜索引擎優(yōu)化、電子商務(wù)、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)