五、程序设计基本概念
5.1 赋值语句
5.2 i++1.下面代码的输出结果是什么?
解:int i =i;这句话虽然在语法上没有错误,但是因为main()函数中的i与外面的i并不是一回事,因此int i =i;中右边的i是一个未定义的值,赋给左边的i后,两者都是未定义。int i =1; void main(){ int i=i; }
2.下面程序的结果是多少?
int main(){ int x=2,y,z; x *=(y=z=5);cout<<x<<endl;//1 z=3;//2 x==(y=z);cout<<x<<endl;//3 x=(y==z);cout<<x<<endl;//4 x=(y&z);cout<<x<<endl;//5 x=(y&&z);cout<<x<<endl;//6 y=4;//7 x=(y|z);cout<<x<<endl;//8 x=(y||z);cout<<x<<endl;//9 return 0; }
解:1:x=x*5;输出103:只是一个判断语句,并没有改变x的值,输出10
4:y==z返回boolean值,相等为1,不等为0;此时y等于z,x=1,输出1
5:y&z代表y和z按位与,因为此时y等于z,因此按位与后值y&z==y==z,输出3
6:y&&z代表与,返回boolean值,此时y==z==4,返回1,输出1
8:y|z代表y和z按位或,结果为7,输出7
9:y||z代表或,返回boolean值,此时y和z都>0,返回1,输出1
3.以下代码的结果是?
解:计算x转为二进制后包含1的数量,每进行一次x=x&(x-1),x从右往左就会少一个1。int func(int x) { int count =0; while(x) { count++; x=x&(x-1); } return count; }
还有另外形式的计算方法:
int func(int x) { int count=0; while(x){ count+=x&1; x>>1; } return count; }
1.下面程序输出什么?
解:1:将arr[]的首地址给*ptr,那么此时*ptr为6,ptr指向第一个元素。main() { int b=3; int arr[] ={6,7,8,9,10}; sint *ptr=arr;//这里的sint应该是short int的意思//1 *(ptr++)+=123;//2 printf("%d,%d\n",*ptr,*(++ptr));//3 }
2:该语句等价为*ptr=*ptr+123;ptr++;此时*ptr=129,但ptr又向后指了一位,因此*ptr=7。
3:printf从右向左进行,因此首先看*(++ptr),ptr先向后指了一位,再取值,因此是8;再看*ptr,因为上一步指向8,此时仍然指向8,因此最终输出为88。