1.条件运算符的一般形式:条件?表达式1:表达式2
若条件成立执行表达式1,不成立执行表达式2
2.结合性:右结合(唯一的三目运算符)
3.题目:
设int a=3,b=4,c;执行语句c= (a>b) ?--a: b++;后,b,c的值是?
int a = 3,b = 4,c;
printf("%d\n", (c = (a > b) ? --a : b++));//4
printf("b=%d\n", b);
//分析:(a > b),3<4条件不成立
//执行b++=4
//输出b=5
4.题目:
设int a=3;,值为1的表达式是? A a%3 B 3-++a C(a++)%3 D a>3?2:1
- 分析:A: a%3=3%3=0
- B: 3-++a=3-4=-1
- C:(a++)%3=3%3=0
- D: a>3?2:1→3不大于3条件为假,输出1
5.题目: 下列程序段执行后,变量m的值为 ? int w=1,x=2,y=3,Z=4,m; m=(w<x)?w:z
m=(m<y)?m:y
m=(m<z)?m:z
- 分析:m=(w<x)?w:z ,w<x=1<2为真,输出m=1
- m=(m<y)?m:y ,m<y=1<3为真,输出m=1
- m=(m<z)?m:z ,m<z=1<4为真,输出m=1
6.题目:int x=10,a=0,b=25;条件表达式x<1?a+10:b的值是 ?
- 分析:x<1=10<1为假
- 输出b=25
7.题目:若定义了x=100;则表达式x++>100?x+20: x+10的值是 ?♥(注意!!本题有陷阱)
- 分析:x++是++在后先参与运算再增1
- 所以x++>100=100>100为假
- 此时x=101,输出x+10=101+10=111
8.题目:设int a=1,b=3,c;执行语句c=(a!=b)?++a:b++;后c的值是?
- 分析:(a!=b)→1! =3为真
- 输出++a=2
9.题目:
设int a=4;,表达式的值不为8的是 ? A. a*=a-2 B. a--,3a-1 C. a>1?++a*2 : 3a D. a+=a
- 分析:A:a*=a-2→a=a*(a-2)→a=a2=42=8
- B:a—=4,执行3**a-1时a=3,带入式子33-1=8
- C:a>1→4>1为真输出++a2→a=52=10
- D:a+=a→a=a+(a)→a=4+4=8
10.题目:
下列程序段执行后的输出结果是?
int k=4,a=3,b=2,c=1; printf("%d\n",k<a?k:c<b?c:a):
- k<a?k:c<b?c:a是一个嵌套条件表达式,记住右结合,从右至左
- 那么执行顺序是:
- 首先c<b?c:a→c<b=1<2为真输出c=1
- 接着k<a?k:1→k<a=4<3为假输出1
11.题目:设int a=1,b=2,c=3,d=4,f;(!注意有坑♥)
执行语句f=(a!=b)?c++:d++;后f的值是 ?
- 分析:a!=b→1≠2为真输出c++=3
12.题目:
设int x,y;
条件运算符求x和y中最大值的C语言表达式是?
- x>y?x:y
13.题目:
求a、b和c的最大值并输出。 #include <stdio.h> int f (int, ) /第一空/ { return( ?y:x); }/第二空 void main() { int a=3,b=4,c=5,d; =f (f(a,b),f (a,c) ) ; /第三空/ printf("%d\n",d); }
#include <stdio.h>
int f(int x, int y)//自定义f函数声明
{ return( y > x ? y : x); }
int main() {
//求a、b和c的最大值并输出
int a = 3,b = 4,c = 5,d;//实参
d = f(f(a, b),f(a, c)); //函数调用
printf("%d\n",d);
}
14.题目:
程序分析题:阅读下列程序,写出输出结果 #include<stdio.h>
float fun (float x, float y, float z) { float min; min=x<y?x:y; if(z<min) min=z; return min; } int main(void) { float a=-3.1,b=2,c=1.4,d=5.0; printf("%5.1f,%5.1f\n", fun(a,b,c), fun(b,c,d));
return 0; }
#include <stdio.h>
float fun(float x, float y, float z)
{ //自定义float类型的fun函数 三个形式参数x,y,z
float min;
min = x < y ? x : y; //条件表达式求最小值
if (z < min) min = z;
return min;
}
int main(void) {
float a = -3.1, b = 2, c = 1.4, d = 5.0; //定义float类型的变量a,b,c,d
printf("%5.1f,%5.1f\n", fun(a, b, c), fun(b, c, d));//调用fun函数并输出结果
return 0;
//分析:fun(a, b, c)调用fun函数,a<b=-3.1<2为真,返回min=-3.1,接着1.4<-3.1为假,min值不变还是-3.1
//fun(b, c, d)调用fun函数,b<c=2<1.4为假,返回min=1.4,接着5.0<1.4为假,min值不变还是1.4
//关于%5.1f占位符:%f是指以小数形式输出,5表示输出数据所占的域宽(正数右对齐),.1表示保留1位小数
}
截图: