
这个星期做了几道程序设计的习题,结果正确率惨不忍睹。
例如:
#include<stdio.h>
int main( )
{
int x = 1 , a = 0 , b = 0 ;
switch( x )
{
case 0 : b++ ;
case 1 : a++ ;
case 2 : a++ ; b++ ;
}
printf( "%d,%d" , a , b ) ;
return 0 ;
}
我第一反应就是a=1;b=0;但是我忽略了一个指令“break”,这个程序在switch选择的时候,由于x=1;直接进行case 1;但case 1后面没有break,这个程序会接着进行下去。
例2:
#include<stdio.h>
int main( )
{
int x = 10 , y = 20 , t = 0 ;
if( x == y ) t = x ; x = y ; y = t ;
printf( "%d,%dn" , x , y ) ;
return 0 ;
}
这题乍一看很简单,但一不小心就掉坑里面去了,其中的if函数因为没有括号,它只与第一个t=x相匹配;
例3:
#include<stdio.h>
int main( )
{
int i = 1 , j = 1 , k = 2 ;
if( ( j++ || k++ ) && i++ ) printf( "%d,%d,%dn" , i , j , k ) ;
return 0 ;
}
这题我填的是2,3,2;其实j++||k++中J++判断不为0,就不会判断k++;“||”左边为真时,“||”后面的语句不再执行,< 语句为真 > “||”左边为假时,继续判断“||”后面的值,若为真则真,若为假则假;“&&”左边为假时,“&&”后面的语句不再执行,< 语句为假>,“&&”左边为真时,继续执行“&&”后面的值,若为真则真,若为假则假.
例4:
已有定义:int x = 3 , y = 4 , z = 5 ; 则表达式!( x + y ) + z – 1 && y + z / 2的值是___。
!(x+y)+z-1&&y+z/2
=!(3+4)+5-1&&4+5/2
=!7+5-1&&4+5/2
=0+4&&4+5/2
=4&&6
=1
运算符的优先级:
()最高,下来是!下来是+,-,*,/,最后是&&,逻辑与在左边右边只要有一个0的时候结果就为0,4和6都不为0,所以结果为1。
运算符的优先级就是:!> 算术运算符 > 关系运算符 > && > || > 赋值运算符




近期评论