int a = 8 ,b = 4 ; int expr = a++ % ++b * 2 ;为什么答案是6,急

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/04 17:19:46
inta=8,b=4;intexpr=a++%++b*2;为什么答案是6,急inta=8,b=4;intexpr=a++%++b*2;为什么答案是6,急inta=8,b=4;intexpr=a++%+

int a = 8 ,b = 4 ; int expr = a++ % ++b * 2 ;为什么答案是6,急
int a = 8 ,b = 4 ; int expr = a++ % ++b * 2 ;为什么答案是6,急

int a = 8 ,b = 4 ; int expr = a++ % ++b * 2 ;为什么答案是6,急
实际运算顺序:( a%(++b) )*2=6
值的处理:8%5*2=6
符号的优先级依次是
第一级别:前置++
第二级别:求余,乘法
第三级别:加法
第四节别:= 等于
第五个级别:后置++
前置++在执行语句前进行+1操作,后置++在执行语句(除了运算还有赋值操作)完了,才执行+1操作,具体是在整个算式运算完后进行赋值操作的时候才进行+1操作
你可以自己试一试,输出的就是一个8,一个9.
int b=a++ ; 这个时候++操作还没来得及执行,就赋值给b了,赋完值然后才+1.
等到下一次赋值的时候就给了c
#include "stdafx.h"
#include "stdio.h"
int _tmain(int argc,_TCHAR* argv[])
{
int a=8;
int b=a++ ;
int c=a;
printf("%d",b);
printf("%d",c);
getchar();
return 0;
}
其实最核心的是,i++是赋完值才+1,还没等值++完,赋值操作(=)就抢着先进行了.

#include int b=2; int fun(int*k) { b=*k+b;return(b);} main() {int a[10]={1,2,3,4,5,6,7,8}#include int b=2; int fun(int*k) { b=*k+b;return(b);} main() {int a[10]={1,2,3,4,5,6,7,8},i;for(i=2;i void fun(int a,int b) { int t; t=a;a=b;b=t; } main()void fun(int a,int b){ int t; t=a;a=b;b=t; } main() { int c[10]={1,2,3,4,5,6,7,8,9,0}.i; for(i=0;i #include void fun(int a, int b) { int t; t=a; a=b; b=t;main() { int c[10]={1,2,3,4,5,6,7,8,9,0), i; for (i=0; i int*a[3] for(int i=0;i>ba[i]=new int[b] } int b=2;int fun(int*k) {b=*k=b;return (b);} main() {int a[10]={1,2,3,4,5,6,7,8} for (i=2;i #include stdio.h void fun(int a,int b) { int t; t=a,a=b,b=t; } main() { int c[10]={1,2,3,4,5,6,7#include stdio.hvoid fun(int a,int b){int t;t=a,a=b,b=t;}main(){int c[10]={1,2,3,4,5,6,7,8,9,0},i;for(i=0;i int a[]={1,2,3,4,2,4,5,2}; int b=LB(a,4)+LB(a+3,#includeint LB(int *a,int n) {int i,s=1;for(i=0;i 让人费解的一道C语言题目#include int func(int a,int b);void main(){int k=4,m=1,p;p=func(k,m);printf(%d,,p);p=func(%d ,p);}int func(int a,int b){static int m=0,i=2;i+=m+1;m=i+a+b;return(m);}A.8,17 B.8,16 C.8,20 D.8,8能将下为什么 #define N 20 fun(int a[],int n,int m) {int i; for(i=m;i>n;i--)a[i+1]=a[i]; return m; } void main() #define N 20fun(int a[],int n,int m){int i;for(i=m;i>n;i--)a[i+1]=a[i];return m;}void main(){ int i,a[N]={1,2,3,4,5,6,7,8,9,10};fun(a,0,N/2);for(i=0;i char ch;A=0;B=0;int tar[4];int plyer[4];int A,B;void guess(){int i,j;char ch;A=0;B=0;for(i=0;i #include void fun(int a,int b) {int t; t=a;a=b;b=t; } main() {int c[6]={1,2,3,4,5,6},i;for(i=0;i 代码如下:a.h文件extern int p_abs(int &a);extern int p_max(int &a,int &b);class a{public:a():x(0),y(0){}a(const int &i,const int &j):x(i),y(j){}int get_x(){return x;};int get_y(){return y;};void set_x(const int &i){x=i;};void set_y(const int & int main() { int a[9] = {1,2,3,4,5,6,7,8,9}; int b[9] = {1,2,3,4,5,6,7,8,9}; for(int i = 0;i < 9;i++int main(){int a[9] = {1,2,3,4,5,6,7,8,9};int b[9] = {1,2,3,4,5,6,7,8,9};for(int i = 0;i < 9;i++)for(int j = 0;j < 9;j++){if(a[i] == b[j]){cout #include int b=2; int fun(int *k) {b=*k+b;return(b);} main() {int a[10]={1,2,3,4,5,6,7,8}, 大哥为什么我这个程序的结果没有把a,b值互换# include void huhuan(int a,int b){int t;t = a;a = b;b = t;return;}int main(void){int i = 4;int j = 6;huhuan(i,j); printf(i = %d,j = %d ,i,j);return 0;} int a[]={5,10,15,20,25,30}; int b=LA(a,4); int c=LA(a+2,3);printf(%d %d ,b,#include stdio.hint LA(int *a,int n){int i,s=0;for(i=0;i int i=4, 【c语言】以下程序的输出结果为什么是8,17?#includeint f(int,int)main(){ int k=4,m=1,p; p=f(k,m);printf(%d,,p); p=f(k,m);printf(%d ,p);}int f(int a,int b){static int m,i=2; i+=m+1;m=i+a+b;return(m);}我觉得输出应该是8,16