1,关于C语言问题运算顺序问题优先级是对多个函数并列时候优先算法的特权,没有注意优先级的顺序就会把算法出错,这些优先级是必须记住的 。下面的是我自己总结的关于C优先级的口诀. 当然,应用这个口诀的前提是你必须认识所有的C语言的运算符 。优先决括号成员第一; //括号运算符[]() 成员运算符. ->全体单目第二; //所有的单目运算符比如++ -- +(正) -(负) 指针运算*&乘除余三,加减四; //这个"余"是指取余运算即%移位五,关系六; //移位运算符:<< >>,关系:> < >= <= 等等于(与)不等排第七; //即== !=位与异或和位或; //这几个都是位运算: 位与(&)异或(^)位或(|) "三分天下"八九十; 逻辑或跟与; //逻辑运算符:|| 和 &&十二和十一; //注意顺序:优先级(||) 底于 优先级(&&) 条件高于赋值, //三目运算符优先级排到 13 位只比赋值运算符和","高//需要注意的是赋值运算符很多!逗号运算级最低! //逗号运算符优先级最低由于C语言的运算符优先级与C++的不完全一样(主要是增加了几个运算符),所以这个口诀不能完全实用于C++.但是应该能够兼容,大家可以比较一下他们的区别应该就能够很快掌握C++的优先级的!
2,c语言计算顺序就是四则运算计算顺序,先乘除后加减 。结果是10吧 。只是四则运算的话就是和数学运算时候的顺序一样的= < shift Left-to-right9 < 。譬如 ++*a也是先*后++ 。譬如 *a++ 就是先左后右 。所以所谓的左 , 因为*优先于++运算 , 但是顺序是从右往左了; <. ->> >,右;= %= += -= >* pointer-to-member Left-to-right6 * /,都是取决于运算符号的优先级别的.* ->= >! sizeof new delete unary (prefix) Right-to-left* & indirection and reference (pointers)+ - unary sign operator4 (type) type casting Right-to-left5 : conditional Right-to-left17 = *= /:: scope Left-to-right2 () []。具体的列表如下;= relational Left-to-right10 == 这要看运算符的优先级;< 。1 != assignment Right-to-left18 ; > ++ -- dynamic_cast static_cast reinterpret_cast const_cast typeid postfix Left-to-right3 ++ -- ~ != equality Left-to-right11 & bitwise AND Left-to-right12 ^ bitwise XOR Left-to-right13 | bitwise OR Left-to-right14 && logical AND Left-to-right15 || logical OR Left-to-right16 , comma Left-to-right这样可以么;><= &= ^= ?; % multiplicative Left-to-right7 + - additive Left-to-right8 <
3,c语言运算顺序而且m,n,a , M,N也不知道 。顺序应该是先声明s,i,j(i , j是临时作为下标变量 。),s初始化为0,然后进入第一个fors自加a(可以把a看成一个二维图像,分横竖两行,先横再竖)的所有横行的第一列和第N列 。然后进入第二个for 。s自加a的所有竖行的第一列和第M列 。最后返回s其实这个s就是a的所有横行的第一列和第N列加a的所有竖行的第一列和第M列的和这要看运算符的优先级 。譬如 *a++ 就是先左后右 , 因为*优先于++运算 。譬如 ++*a也是先*后++,但是顺序是从右往左了 。所以所谓的左,右 , 都是取决于运算符号的优先级别的 。具体的列表如下 。1 :: scope left-to-right2 () [] . -> ++ -- dynamic_cast static_cast reinterpret_cast const_cast typeid postfix left-to-right3 ++ -- ~ ! sizeof new delete unary (prefix) right-to-left* & indirection and reference (pointers)+ - unary sign operator4 (type) type casting right-to-left5 .* ->* pointer-to-member left-to-right6 * / % multiplicative left-to-right7 + - additive left-to-right8 << >> shift left-to-right9 < > <= >= relational left-to-right10 == != equality left-to-right11 & bitwise and left-to-right12 ^ bitwise xor left-to-right13 | bitwise or left-to-right14 && logical and left-to-right15 || logical or left-to-right16 ?: conditional right-to-left17 = *= /= %= += -= >>= <<= &= ^= != assignment right-to-left18 , comma left-to-right【c语言中的计算顺序是什么,关于C语言问题运算顺序问题】
4,C语言中运算顺序好多啊谁帮忙总结一下谭浩强C语言书附录里面很详细:除了单目运算符、条件、赋值这三种运算符的结合性是从右向左,其他都是从左向右优先级的顺序(从高到低):括号下标结构体() [] -> .非反增减负类型! ~ ++ -- - (类型)指针地址与长度 * & sizeof算术移位关系* / % + ->> <<== >= <= > <位与异或或与或 & ^ | || &&条件赋值逗号 ?: = += -+ >>= <<=,http://www.slyar.com/blog/c-operator-priority.html运算符结合方式() [] -> .由左向右! ~ ++ -- + -* & (类型) sizeof由右向左* / %由左向右+ -由左向右<< >>由左向右< <= >= >由左向右== !=由左向右&由左向右^由左向右|由左向右||由左向右? :由右向左= += -= *= /=&= ^= |= <<= >>=由右向左,由左向右C语言的某位标准制定者曾经建议过:只要记住括号优先,乘除先于加减这两条准则就行了.优秀的程序员是不会写过于复杂,让人难以读懂的表达式的楼上几位讲的结合性与优先级的问题搞明白了后,推荐你看我的百度知道回答会对c语言有更深的理解5,帮我说说这个C语言的运算顺序吧拜托了、x+=x-=x+x , 表达式2是将i 的值加一个 , 先将1赋值给变量i; 这是赋值运算符,运算顺序是从右到左 。即先将x+x的值减赋给x变量(x-=x+x,即x=7-14=-7),再将x+=-7所以x的最终的值为-7+-7为-142、k=(i=1 。所以将2的值赋值给变量k,所以k的值为2 k=i=1,++i,i++;这个是由逗号运算符组成的表达式语句,将变量i的值赋给变量k (此时i和k的值都为1,++i,i++);这是将括号中的值计算出来后再赋值给变量k,i=1,++i,i++从左向右运算,将最后一个表达式的值作为这个逗号运算符组成的表达式的值,该值为2 (但i的值变成3)这类题没有实际意义,让别人怎么办,太容易出错了,写出这种代码来会不又能怎样会c++的c应该更没问题啊 楼上都把要点说过了 #include #include #include typedef struct data { int num; int secret; }typedata; typedef struct node { typedata data; struct node *next; }listnode; typedef listnode *linklist; linklist head; listnode *creat() { int n,j,b; linklist head=(listnode *)malloc(sizeof(listnode)); listnode *q; printf("输入总人数:"); scanf("%d",&n); fflush(stdin); q=head; for(j=1;j<=n;j++) { printf("请输入第%d号同学的密码:\n",j); scanf("%d",&b); fflush(stdin); printf("\n"); q->next=(listnode *)malloc(sizeof(listnode)); q=q->next; q->data.secret=b; q->data.num=j; q->next=head->next; } return(head); } void output(listnode *head,int m) { int i; listnode *p,*q; q=head; do { if(m<=0) { printf("输入错误"); exit(0); } i=1; while(i!=m) { q=q->next; i++; } p=q->next; q->next=p->next; printf("num:%d secret:%d\n",p->data.num,p->data.secret); m=p->data.secret; free(p); } while(q->next!=q); printf("num:%d secret:%d\n",q->data.num,q->data.secret); free(q); free(head); } int main() { int m=20; listnode *a; a=creat(); printf("请任意输入一个数m:"); scanf("%d",&m); fflush(stdin); output(a,m); printf("joseph环结束 , 欢迎下次使用\n"); system("pause"); return 0; } 貌似楼上那位output函数输出语句没看仔细,循环里面是p,之后才是q
推荐阅读
- c语言中值传递,C语言的函数调用中怎样判断是地址传递还是值传递
- idea是用什么语言,怎么用IntelliJ IDEA开发JAVA程序
- 小优小优,海尔电视唤醒词小优小优
- mongo 时间戳 mongodb时间索引
- 客户感知分析
- s400联想,联想ideapad S400
- mongodb 写入卡 mongodb 写入
- 小q机器人,腾讯小q机器人
- mongodb wal mongodb配置web