代码一
//执行下列程序后,a和b的输出值分别是?
#include <stdio.h>
int main()
{
int a=3,b=5,c;
c=(a>b)? a++ :b--;
printf("a=%d,b=%d,c=%d\n",a,b,c); //a=3,b=4,c=5 √
return 0;
}
输出为:
本题基础,答案显而易见呦!
代码二
//执行下列程序段后,x、y、z的值分别是?
#include <stdio.h>
int main()
{
int x=10,y=20,z=30;
if(x>y) z=x; x=y; y=z;
printf("x=%d,y=%d,z=%d\n",x,y,z); //x=20,y=30,z=30 √
return 0;
}
注意到 if 语句判断后没有加花括号,那麽本题里面,由于x和y不满足if条件语句里面的判断,所以说z=x;不会执行。那么执行的是 x=y; y=z; 这两个语句。
代码三
//以下程序输出为?
#include <stdio.h>
int main()
{
int a=5,b=0,c=0;
if(a+b+c) printf("***\n"); else printf("$$$\n");
// *** √
return 0;
}
输出:
满足 if 语句,即 if 中的条件为真,那么将会直接执行紧跟着 if 语句的打印语句,else后的语句不会执行,所以输出如下结果。
代码四
//以下程序输出结果为?
#include <stdio.h>
int main()
{
int m=5;
if(m++>5) printf("%d\n",m); // 6
else printf("%d\n",m--);
return 0;
}
结果显然:
接下来再测试一下:
//测试一下:
#include <stdio.h>
int main()
{
int m=4; //这里把m改成4看一下。
if(m++>5) printf("%d\n",m);
else printf("%d\n",m--); //5。因为 m-- 是先使用后自减
printf("m=%d\n",m); //所以说这时m的值为4
return 0;
}
输入:结合注释里的内容以及上面的例子,可以理解。
代码五
//执行下列程序后,x的值为?
#include <stdio.h>
int main()
{
int a=2,b=5,c=7,d=8;
int x;
if(a>b) //不满足,所以直接执行下面else中的x=7
if(c>d) x=1;
else if(a<c)
if(b<d) x=2;
else x=3;
else x=6;
else x=7;
printf("x=%d\n",x);
return 0;
}
这个小题主要是理解 if 和哪一个else相匹配。
可以再测试一下:
//测试
//执行下列程序后,x的值为?
#include <stdio.h>
int main()
{
int a=2,b=5,c=7,d=8;
int x;
if(a<b) //这里 修改为a<b。满足,故继续执行下面的第一个if
if(c>d) x=1; //不满足,所以继续执行下面的else-if判断语句 注意喔!
else if(a<c) //满足,所以执行下面的if语句
if(b<d) x=2; //满足,所以执行x=2。而后跳出循环
else x=3;
else x=6;
else x=7;
printf("x=%d\n",x); //x=2
return 0;
}
输出为:
分析一下:
代码六:switch、break、
//运行下列程序,输出结果为?
#include <stdio.h>
int main()
{
int x=1,a=0,b=0;
switch(x){
case 0: b++; // 0不满足。所以需要继续执行
case 1: a++; // 1。满足,所以执行a++,得到a的值为1
case 2: a++; b++; //上一条语句中没有break,所以这条语句必定会执行
//所以a为2,b为1
}
printf("a=%d,b=%d\n",a,b); // a=2,b=1
return 0;
}
输出如下:
加上break,再测试一下:
//测试
#include <stdio.h>
int main()
{
int x=1,a=0,b=0;
switch(x){
case 0: b++; // 0不满足。所以需要继续执行
case 1: a++; break;// 1。满足,所以执行a++,得到a的值为1
case 2: a++; b++; //上一条语句中有break,执行完之后直接跳出break;所以该条语句不执行。
//所以a为1,b为0(b仍然为原值)
}
printf("a=%d,b=%d\n",a,b); // a=1,b=0
return 0;
}
输出:
见注释喔!
如果把上面的break改成continue,那么…则会报错!!!
┭┮﹏┭┮ ┭┮﹏┭┮ ┭┮﹏┭┮ ┭┮﹏┭┮ ┭┮﹏┭┮