内容正文:
4.3.2节:if语句的嵌套及条件表达式
一、单项选择题
1.关于 C 语言中 if 语句嵌套的一般形式,以下说法正确的是( )
A. if 语句只能嵌套在 if 子句中
B. if 语句只能嵌套在 else 子句中
C. if 语句可以嵌套在 if 子句或 else 子句中,也可多层嵌套
D. if 语句的嵌套必须保证 if 与 else 数量完全相等
【答案】C
【解析】if 语句的嵌套可在 if 子句或 else 子句中,也可多层嵌套,且结构不强制对称,可根据实际需求使用部分结构。
2.条件运算符?:在 C 语言中属于( )
A. 单目运算符 B. 双目运算符 C. 三目运算符 D. 以上都不是
【答案】C
【解析】条件运算符?:是 C 语言中唯一的三目运算符,需要三个运算对象参与运算。
3.条件表达式表达式1 ? 表达式2 : 表达式3的执行规则是( )
A.先求解表达式 2,再根据表达式 1 的值决定是否执行表达式 3
B.若表达式 1 为真,执行表达式 3;否则执行表达式 2
C.若表达式1为真,求解表达式2的值作为整个表达式的值;否则求解表达式3的值
D.同时求解表达式 2 和表达式 3,再根据表达式 1 的值选择结果
【答案】C
【解析】条件表达式的规则是:表达式 1 为真则取表达式 2 的值,否则取表达式 3 的值,不会同时求解两个分支的表达式。
4.以下关于 if 语句嵌套的代码片段,输出结果为( )
int a=5,b=3;
if(a>b)
if(b>0) printf("A");
else printf("B");
else
if(a>0) printf("C");
else printf("D");
A. A B. B C. C D. D
【答案】A
【解析】外层a>b为真,进入内层b>0判断,3>0为真,输出 "A"。
5.执行以下代码后,变量max的值为( )
int a=7,b=9,max;
max = a>b ? a : b;
A. 7 B. 9 C. 16 D. 2
【答案】B
【解析】条件表达式中a>b(7>9)为假,因此取表达式 3 的值b,即 9。
6.关于条件运算符的优先级和结合性,以下说法正确的是( )
A. 优先级高于关系运算符,结合方向为自左至右
B. 优先级仅高于赋值运算符,结合方向为自右至左
C. 优先级低于赋值运算符,结合方向为自右至左
D. 优先级高于逻辑运算符,结合方向为自左至右
【答案】B
【解析】条件运算符的优先级仅高于赋值运算符,低于逻辑、关系、算术运算符,结合方向为自右至左。
7.执行以下代码后,变量result的值为( )
int a=10,b=20,c=15;
int result = (a>b) ? (a>c?a:c) : (b>c?b:c);
A. 10 B. 15 C. 20 D. 35
【答案】C
【解析】外层条件表达式中a>b(10>20)为假,执行内层表达式b>c?b:c(20>15 为真),取b的值 20。
8.执行以下代码后,输出结果为( )
float a=6,b=6,c=6;
if(a>0&&b>0&&c>0&&a+b>c&&b+c>a&&a+c>b)
if(a==b&&b==c) printf("等边三角形");
else if(a==b||b==c||a==c) printf("等腰三角形");
else printf("任意三角形");
else printf("不能构成三角形");
A. 等边三角形 B. 等腰三角形 C. 任意三角形 D. 不能构成三角形
【答案】A
【解析】首先判断三边能构成三角形,且a==b&&b==c成立,因此输出 “等边三角形”。
9.以下代码片段中,printf语句的执行情况是( )
int a=3,b=5;
if(a==3)
if(b<4) printf("A");
else printf("B");
else
printf("C");
A. 输出 A B. 输出 B C. 输出 C D. 无输出
【答案】B
【解析】外层a==3为真,进入内层b<4判断(5<4 为假),执行 else 分支,输出 "B"。
10.条件表达式(a>b) ? (a>c?a:c) : (b>c?b:c)的作用是( )
A. 求 a、b、c 中的最小值 B. 求 a、b、c 中的最大值
C. 判断 a、b、c 是否相等 D. 计算 a、b、c 的和
【答案】B
【解析】该表达式通过嵌套条件表达式,依次比较 a 与 b、再与 c 比较,最终得到三个数中的最大值。
二、填空题。
1.条件运算符?:是 C 语言中唯一的______目运算符,语法格式为___________。
【答案】三;表达式1 ? 表达式2 : 表达式3
【解析】条件运算符是唯一的三目运算符,需要三个运算对象参与运算。
2.条件表达式的执行规则中,若表达式 1 的值为真,则整个条件表达式的值为______的值。
【答案】表达式 2
【解析】条件表达式规则:表达式 1 为真取表达式 2 的值,为假取表达式 3 的值。
3.执行代码int a=8,b=5,max; max = a>b ? a : b;后,变量max的值为___________。
【答案】8
【解析】a>b(8>5)为真,条件表达式取a的值 8。
4.执行代码int a=3,b=7,c=5; int max = (a>b)?(a>c?a:c):(b>c?b:c);后,变量max的值为___________。
【答案】7
【解析】外层a>b(3>7)为假,执行b>c?b:c(7>5 为真),取b的值 7。
5.等腰三角形的判断条件是:至少有两条边长度相等,用 C 语言表达式表示为___________。
【答案】a==b||b==c||a==c
【解析】判断等腰三角形的条件为任意两边相等,用逻辑或运算符连接三个相等判断。
6.条件表达式x>0 ? 1 : (x<0 ? -1 : 0)的作用是判断变量 x 的符号,当 x 为正数时返回______,负数时返回 - 1,零时返回 0。
【答案】1
【解析】该嵌套条件表达式中,外层x>0为真时返回 1,为假则判断内层x<0。
7.等边三角形的判断条件是:三条边长度都相等,用 C 语言表达式表示为___________。
【答案】a==b&&b==c
【解析】判断等边三角形需要三边同时相等,用逻辑与运算符连接两个相等判断。
8.执行以下代码后,变量result的值为___________。
int a=12,b=9;
int result = a>b ? (a-b) : (b-a);
【答案】3
【解析】a>b(12>9)为真,取a-b的值 3,因此result=3。
9.条件表达式可以改写为等价的if-else语句,例如_____________可改写为if(a>b) max=a; else max=b;。
【答案】max = a>b?a:b;
【解析】条件表达式的双分支逻辑可以用 if-else 语句实现等价功能。
10.条件运算符的结合方向为______,即多个条件运算符连续使用时,使用该结合方向进行计算。
【答案】自右至左
【解析】条件运算符的结合方向为自右至左。
三、阅读程序题。
1.写出下列程序段的输出结果:________________。
#include "stdio.h"
main()
{ int a=6,b=6,c=6;
if(a>0&&b>0&&c>0&&a+b>c&&b+c>a&&a+c>b)
if(a==b&&b==c)
printf("等边三角形!
");
else if(a==b||b==c||a==c)
printf("等腰三角形!
");
else
printf("任意三角形!
");
else
printf("不能构成三角形!
"); }
【答案】等边三角形!
2.写出下列程序段的输出结果:________________。
#include "stdio.h"
main()
{ int x=-3,y;
y = x>0 ? 1 : (x<0 ? -1 : 0);
printf("y=%d
",y); }
【答案】y=-1
3.写出下列程序段的输出结果:________________。
#include "stdio.h"
main()
{ int a=10,b=12;
if(a>b)
printf("A");
else
if(b>10) printf("B");
else printf("C"); }
【答案】B
4.写出下列程序段的输出结果:________________。
#include "stdio.h"
main()
{
int a=4,b=5,c=3;
int max = (a>b)?(a>c?a:c):(b>c?b:c);
printf("max=%d
",max);
}
【答案】max=5
5.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{
int a=12, b=9;
int res;
if(a>10)
if(b>10) res=1;
else res=2;
else
res=3;
printf("%d",res);
}
【答案】2
6.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{
int x=15;
if(x>10)
if(x<20)
printf("OK");
else
printf("NO");
else
printf("NONE");
}
【答案】OK
7.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{
int x=6, y=2;
int res;
if(x%y==0)
if(x/y>2) res=100;
else res=200;
else
res=300;
printf("%d",res);
}
【答案】100
8.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{
int x=7;
if(x%3==0) printf("X");
else
if(x%4==0) printf("Y");
else printf("Z");
}
【答案】Z
9.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{
int a=15, b=12, c=8;
if(a>b)
if(b>c)
if(a+b>c) printf("1");
else printf("2");
else
printf("3");
else
printf("4");
}
【答案】1
10.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{
int a=3, b=6, c=2;
if(a*b>c*10)
printf("X");
else
if(a+b>c)
printf("Y");
else
printf("Z");
}
【答案】Y
四、程序填空题(根据题意,将空缺的语句补上)
1.以下程序使用条件表达式求两个数的最大值,请补全代码:
#include "stdio.h"
main()
{
int a,b,max;
printf("请输入a,b的值:");
scanf("%d,%d",&a,&b);
max = ______;
printf("max=%d
",max);
}
【答案】a>b?a:b
2.以下程序使用条件表达式求两个数的差的绝对值,请补全代码:
#include "stdio.h"
main()
{
int a,b,diff;
printf("请输入a,b的值:");
scanf("%d,%d",&a,&b);
diff = ______;
printf("差的绝对值=%d
",diff);
}
【答案】a>b?(a-b):(b-a)
3.程序功能:条件表达式嵌套,判断 x 是否大于 100,是则赋值 50,否则赋值 10
#include <stdio.h>
main()
{
int x, y;
scanf("%d",&x);
_________________;
printf("%d",y);
}
【答案】y = x>100 ? 50 : 10
4.程序功能:a>b 时,若 b>c 输出 1,否则输出 2;a≤b 时,若 a>c 输出 3,否则输出 4。
#include <stdio.h>
main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a>b)
if(b>c) printf("1");
else printf("2");
else
if(______) printf("3");
else printf("4");
}
【答案】a>c
5.程序功能:能被 3 或 5 整除,但不能同时被 3 和 5 整除,赋值 1,否则 0
#include <stdio.h>
main()
{
int n,f;
scanf("%d",&n);
f = (______) ? 1 : 0;
printf("%d",f);
}
【答案】(n%3==0 || n%5==0) && !(n%3==0 && n%5==0)
五、编程题。
1. 输入一个 0~100 的成绩,判断等级:90~100:优秀;80~89:良好;60~79:及格;0~59:不及格。
【参考代码】
#include <stdio.h>
main()
{
int score;
scanf("%d",&score);
if(score>=0 && score<=100)
if(score>=90) printf("优秀");
else if(score>=80) printf("良好");
else if(score>=60) printf("及格");
else printf("不及格");
else
printf("成绩无效");
}
2.输入一个整数 x,用 if 嵌套 计算分段函数:x≥10 → y=3x-5;0≤x<10 → y=2x;x<0 → y=x+10。
【参考代码】
#include <stdio.h>
main()
{
int x,y;
scanf("%d",&x);
if(x>=0)
if(x>=10) y=3*x-5;
else y=2*x;
else
y=x+10;
printf("%d",y);
}
3.输入一个整数,用 if 嵌套 判断:能被 2 和 5 同时整除输出 "YES",只能被其中一个整除输出 "PART",都不能输出 "NO"。
【参考代码】
#include <stdio.h>
main()
{
int n;
scanf("%d",&n);
if(n%2==0)
if(n%5==0) printf("YES");
else printf("PART");
else
if(n%5==0) printf("PART");
else printf("NO");
}
4.输入两个整数 a、b,用 if 嵌套 判断:a 和 b 都为正 → 输出和;都为负 → 输出乘积;一正一负 → 输出差的绝对值。
【参考代码】
#include <stdio.h>
main()
{
int a,b;
scanf("%d%d",&a,&b);
if(a>0)
if(b>0) printf("%d",a+b);
else printf("%d",a-b>0?a-b:b-a);
else
if(b<0) printf("%d",a*b);
else printf("%d",a-b>0?a-b:b-a);
}
5.输入三个整数(可重复),使用条件表达式实现:找出最大数和最小数,计算两者的差值并输出(要求:仅用条件表达式,不使用 if 语句)。
【参考代码】
#include <stdio.h>
main()
{
int a,b,c,max,min,diff;
scanf("%d%d%d",&a,&b,&c);
// 嵌套条件表达式求最大值
max = a>b ? (a>c ? a : c) : (b>c ? b : c);
// 嵌套条件表达式求最小值
min = a<b ? (a<c ? a : c) : (b<c ? b : c);
// 计算差值
diff = max - min;
printf("%d",diff);
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
4.3.2节:if语句的嵌套及条件表达式
一、单项选择题
1.关于 C 语言中 if 语句嵌套的一般形式,以下说法正确的是( )
A. if 语句只能嵌套在 if 子句中
B. if 语句只能嵌套在 else 子句中
C. if 语句可以嵌套在 if 子句或 else 子句中,也可多层嵌套
D. if 语句的嵌套必须保证 if 与 else 数量完全相等
2.条件运算符?:在 C 语言中属于()
A. 单目运算符 B. 双目运算符 C. 三目运算符 D. 以上都不是
3.条件表达式表达式1 ? 表达式2 : 表达式3的执行规则是()
A.先求解表达式 2,再根据表达式 1 的值决定是否执行表达式 3
B.若表达式 1 为真,执行表达式 3;否则执行表达式 2
C.若表达式1为真,求解表达式2的值作为整个表达式的值;否则求解表达式3的值
D.同时求解表达式 2 和表达式 3,再根据表达式 1 的值选择结果
4.以下关于 if 语句嵌套的代码片段,输出结果为()
int a=5,b=3;
if(a>b)
if(b>0) printf("A");
else printf("B");
else
if(a>0) printf("C");
else printf("D");
A. A B. B C. C D. D
5.执行以下代码后,变量max的值为()
int a=7,b=9,max;
max = a>b ? a : b;
A. 7 B. 9 C. 16 D. 2
6.关于条件运算符的优先级和结合性,以下说法正确的是()
A. 优先级高于关系运算符,结合方向为自左至右
B. 优先级仅高于赋值运算符,结合方向为自右至左
C. 优先级低于赋值运算符,结合方向为自右至左
D. 优先级高于逻辑运算符,结合方向为自左至右
7.执行以下代码后,变量result的值为()
int a=10,b=20,c=15;
int result = (a>b) ? (a>c?a:c) : (b>c?b:c);
A. 10 B. 15 C. 20 D. 35
8.执行以下代码后,输出结果为()
float a=6,b=6,c=6;
if(a>0&&b>0&&c>0&&a+b>c&&b+c>a&&a+c>b)
if(a==b&&b==c) printf("等边三角形");
else if(a==b||b==c||a==c) printf("等腰三角形");
else printf("任意三角形");
else printf("不能构成三角形");
A. 等边三角形 B. 等腰三角形 C. 任意三角形 D. 不能构成三角形
9.以下代码片段中,printf语句的执行情况是()
int a=3,b=5;
if(a==3)
if(b<4) printf("A");
else printf("B");
else
printf("C");
A. 输出 A B. 输出 B C. 输出 C D. 无输出
10.条件表达式(a>b) ? (a>c?a:c) : (b>c?b:c)的作用是()
A. 求 a、b、c 中的最小值 B. 求 a、b、c 中的最大值
C. 判断 a、b、c 是否相等 D. 计算 a、b、c 的和
二、填空题。
1.条件运算符?:是 C 语言中唯一的______目运算符,语法格式为___________。
2.条件表达式的执行规则中,若表达式 1 的值为真,则整个条件表达式的值为______的值。
3.执行代码int a=8,b=5,max; max = a>b ? a : b;后,变量max的值为___________。
4.执行代码int a=3,b=7,c=5; int max = (a>b)?(a>c?a:c):(b>c?b:c);后,变量max的值为___________。
5.等腰三角形的判断条件是:至少有两条边长度相等,用 C 语言表达式表示为___________。
6.条件表达式x>0 ? 1 : (x<0 ? -1 : 0)的作用是判断变量 x 的符号,当 x 为正数时返回______,负数时返回 - 1,零时返回 0。
7.等边三角形的判断条件是:三条边长度都相等,用 C 语言表达式表示为___________。
8.执行以下代码后,变量result的值为___________。
int a=12,b=9;
int result = a>b ? (a-b) : (b-a);
9.条件表达式可以改写为等价的if-else语句,例如_____________可改写为if(a>b) max=a; else max=b;。
10.条件运算符的结合方向为______,即多个条件运算符连续使用时,使用该结合方向进行计算。
三、阅读程序题。
1.写出下列程序段的输出结果:________________。
#include "stdio.h"
main()
{ int a=6,b=6,c=6;
if(a>0&&b>0&&c>0&&a+b>c&&b+c>a&&a+c>b)
if(a==b&&b==c)
printf("等边三角形!
");
else if(a==b||b==c||a==c)
printf("等腰三角形!
");
else
printf("任意三角形!
");
else
printf("不能构成三角形!
"); }
2.写出下列程序段的输出结果:________________。
#include "stdio.h"
main()
{ int x=-3,y;
y = x>0 ? 1 : (x<0 ? -1 : 0);
printf("y=%d
",y); }
3.写出下列程序段的输出结果:________________。
#include "stdio.h"
main()
{ int a=10,b=12;
if(a>b)
printf("A");
else
if(b>10) printf("B");
else printf("C"); }
4.写出下列程序段的输出结果:________________。
#include "stdio.h"
main()
{ int a=4,b=5,c=3;
int max = (a>b)?(a>c?a:c):(b>c?b:c);
printf("max=%d
",max); }
5.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int a=12, b=9;
int res;
if(a>10)
if(b>10) res=1;
else res=2;
else
res=3;
printf("%d",res);}
6.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int x=15;
if(x>10)
if(x<20) printf("OK");
else printf("NO");
else printf("NONE");}
7.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int x=6, y=2;
int res;
if(x%y==0)
if(x/y>2) res=100;
else res=200;
else res=300;
printf("%d",res);}
8.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int x=7;
if(x%3==0) printf("X");
else
if(x%4==0) printf("Y");
else printf("Z"); }
9.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int a=15, b=12, c=8;
if(a>b)
if(b>c)
if(a+b>c) printf("1");
else printf("2");
else printf("3");
else printf("4"); }
10.写出下列程序段的输出结果:________________。
#include <stdio.h>
main()
{ int a=3, b=6, c=2;
if(a*b>c*10) printf("X");
else
if(a+b>c) printf("Y");
else printf("Z");
}
四、程序填空题(根据题意,将空缺的语句补上)
1.以下程序使用条件表达式求两个数的最大值,请补全代码:
#include "stdio.h"
main()
{ int a,b,max;
printf("请输入a,b的值:");
scanf("%d,%d",&a,&b);
max = ______;
printf("max=%d
",max); }
2.以下程序使用条件表达式求两个数的差的绝对值,请补全代码:
#include "stdio.h"
main()
{ int a,b,diff;
printf("请输入a,b的值:");
scanf("%d,%d",&a,&b);
diff = ______;
printf("差的绝对值=%d
",diff); }
3.程序功能:条件表达式嵌套,判断 x 是否大于 100,是则赋值 50,否则赋值 10
#include <stdio.h>
main()
{ int x, y;
scanf("%d",&x);
_________________;
printf("%d",y); }
4.程序功能:a>b 时,若 b>c 输出 1,否则输出 2;a≤b 时,若 a>c 输出 3,否则输出 4。
#include <stdio.h>
main()
{ int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a>b)
if(b>c) printf("1");
else printf("2");
else
if(______) printf("3");
else printf("4"); }
5.程序功能:能被 3 或 5 整除,但不能同时被 3 和 5 整除,赋值 1,否则 0
#include <stdio.h>
main()
{ int n,f;
scanf("%d",&n);
f = (______) ? 1 : 0;
printf("%d",f); }
五、编程题。
1. 输入一个 0~100 的成绩,判断等级:90~100:优秀;80~89:良好;60~79:及格;0~59:不及格。
2.输入一个整数 x,用 if 嵌套 计算分段函数:x≥10 → y=3x-5;0≤x<10 → y=2x;x<0 → y=x+10。
3.输入一个整数,用 if 嵌套 判断:能被 2 和 5 同时整除输出 "YES",只能被其中一个整除输出 "PART",都不能输出 "NO"。
4.输入两个整数 a、b,用 if 嵌套 判断:a 和 b 都为正 → 输出和;都为负 → 输出乘积;一正一负 → 输出差的绝对值。
5.输入三个整数(可重复),使用条件表达式实现:找出最大数和最小数,计算两者的差值并输出(要求:仅用条件表达式,不使用 if 语句)。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$