内容正文:
专题四 分支和跳转
一:单选题
1: 有以下程序
main()
{ int i;
for(i=4; i>0;i--)
switch(i)
{case 1: printf("%d", i);break;
case 2: printf("%d", i);
default : printf("%d", i);} }
执行后输出结果是( )
A.43221 B.43211 C.221 D.322
2:假定所有变量均已正确定义,下列程序段运行后 x 的值是( )
k=1; j=2; x=8;
if(!k)x++;
else
if(j)x=9;
else
x=3;
A.5 B.12 C.9 D.7
3:以下程序的运行结果是 ( )
#include <stdio.h>
main( ) {
int x = 2, y = 2, z = 5, j = 5;
switch (x) {
case 1:switch (x) {
case 2: j++;
case 1:x++;break;
}
case 2:z++;x++;break;
}
printf("%d,%d", j, z);
}
A.5,5 B.6,6 C.5,6 D.6,5
4:若执行以下程序时从键盘上输入 4,则输出结果是 ( )
main()
{int n;
scanf("%d",&n);
if(n++<4) printf("%d
",n);
else printf("%d
",++n); }
A.5 B.6 C.4 D.7
5:以下程序的运行结果是 ( )
#include <stdio.h>
main() {
int k = 1, j = 2;
{
switch (k) {
case 1 :
j += k;
case 2 :
case 3 :
j += k;
default :
break;
}
k--;
}
printf("%d
", j);
}
A.5 B.7 C.6 D.4
6:若变量 x 为 char 类型,则不能判断 x 中的值为大写字母的表达式的选项是 ( )
A.x>=’A’&&x<=’Z’ B.x>=(‘D’-3)&&x<=(‘X’+2)
C.’A’<=x<=’Z’ D.x>=65&&x<=90
二:分析题
判断下列表达式是true还是false?
1:88 > 2 && 'b'>'c'
2:36 > 15 || 'b'<'e'
3:!(75>39)
根据下列描述的条件,分别构造一个表达式
4:number等于或大于70,但是小于90
5:h不是字符q或k
6:number不在10~19之间(不包括10和19)
7:下面的程序将打印什么?
int main(void) {
int num;
for (num = 1; num <= 5; num++) {
if (num % 3 == 0)
putchar('$');
else
putchar('*');
putchar('#');
putchar('%');
}
putchar('
');
return 0;
}
8:下面的程序将打印什么?
#include <stdio.h>
int main(void) {
int i = 0;
while (i < 3) {
switch (i++) {
case 0:
printf("胖");
case 1:
printf("帽子");
case 2:
printf("猫");
default:
printf("啊哈!");
}
putchar('
');
}
return 0;
}
三:编程题
1:输入三个数,从小到大进行排序。
2:编写一个程序读取输入,读到#字符停止,然后报告读取的空格数、换行符数和所有其他字符的数量
学科网(北京)股份有限公司
$$
专题四 分支和跳转
一:单选题
1: 有以下程序
main()
{ int i;
for(i=4; i>0;i--)
switch(i)
{case 1: printf("%d", i);break;
case 2: printf("%d", i);
default : printf("%d", i);} }
执行后输出结果是( )
A.43221 B.43211 C.221 D.322
【答案】A
【解析】当i=4时:没有匹配的case,执行default分支,打印4。当i=3时:同样没有匹配的case,执行default分支,打印3。当i=2时:匹配case 2,打印2,然后由于没有break语句,继续执行下面的default分支,打印2。当i=1时:匹配case 1,打印1,然后由于有break语句,退出switch语句。所以,程序的输出将是4 3 2 2 1。
2:假定所有变量均已正确定义,下列程序段运行后 x 的值是( )
k=1; j=2; x=8;
if(!k)x++;
else
if(j)x=9;
else
x=3;
A.5 B.12 C.9 D.7
【答案】C
【解析】k的值为1,j的值为2,x的值为8。if(!k):这里的!k是一个逻辑非操作,由于k的值为1(真值),逻辑非操作将结果变为0(假值)。因为条件为假,所以if(!k)下面的x++不会被执行。由于if(!k)的分支不执行,程序继续执行else后面的if(j)语句。由于j的值为2(真值),if(j)的条件为真。因为if(j)的条件为真,x被赋值为9。所以,程序段运行后x的值是9。
3:以下程序的运行结果是 ( )
#include <stdio.h>
main( ) {
int x = 2, y = 2, z = 5, j = 5;
switch (x) {
case 1:switch (x) {
case 2: j++;
case 1:x++;break;
}
case 2:z++;x++;break;
}
printf("%d,%d", j, z);
}
A.5,5 B.6,6 C.5,6 D.6,5
【答案】C
【解析】执行第一个switch(x)匹配case 2,执行z++;x++,打印值j和z分别为5和6。
4:若执行以下程序时从键盘上输入 4,则输出结果是 ( )
main()
{int n;
scanf("%d",&n);
if(n++<4) printf("%d
",n);
else printf("%d
",++n); }
A.5 B.6 C.4 D.7
【答案】B
【解析】int n; 声明一个整型变量n。scanf("%d", &n); 读取输入的整数4,赋值给变量n。if(n++<4) 检查n的值是否小于4。此时n的值是4。由于n++是后缀自增,所以先比较n的原始值,然后n的值增加1。因为4不小于4,所以if条件为假。由于if条件为假,程序进入else语句块。else块中的printf函数包含一个前缀自增运算符++n。这意味着在printf执行之前,n的值首先增加1,所以n从5变为6。printf("%d
", ++n); 打印n的值,此时n的值已经是6。所以,程序的输出结果是6。
5:以下程序的运行结果是 ( )
#include <stdio.h>
main() {
int k = 1, j = 2;
{
switch (k) {
case 1 :
j += k;
case 2 :
case 3 :
j += k;
default :
break;
}
k--;
}
printf("%d
", j);
}
A.5 B.7 C.6 D.4
【答案】D
【解析】变量k初始化为1,变量j初始化为2。进入switch(k)语句,控制表达式是k的值,即1。switch语句找到case 1:匹配,开始执行该case下的代码块。j += k; 执行后,j的值变为 2 + 1 = 3。由于case 1后面没有break语句,程序会发生"fall through"现象,继续执行下一个case分支。程序继续执行case 2:和case 3:,这两个case分支也没有break语句,所以j的值再次增加k的值(此时k的值仍为1)。j += k; 执行后,j的值变为 3 + 1 = 4。由于case 3后面也没有break语句,但这是最后一个case,所以没有更多的代码要执行。switch语句执行完毕,然后执行k--;,k的值减少1,变为0。最后,printf("%d
", j); 打印变量j的值,此时j的值为4。程序的输出结果是4。
6:若变量 x 为 char 类型,则不能判断 x 中的值为大写字母的表达式的选项是 ( )
A.x>=’A’&&x<=’Z’ B.x>=(‘D’-3)&&x<=(‘X’+2)
C.’A’<=x<=’Z’ D.x>=65&&x<=90
【答案】C
【解析】C选项 'A' <= x <= 'Z':这个表达式在语法上是错误的,因为C语言不支持连续的两个小于等于或大于等于运算符。
二:分析题
判断下列表达式是true还是false?
1:88 > 2 && 'b'>'c'
【答案】false
2:36 > 15 || 'b'<'e'
【答案】true
3:!(75>39)
【答案】false
根据下列描述的条件,分别构造一个表达式
4:number等于或大于70,但是小于90
【答案】number>=70 && number<90
5:h不是字符q或k
【答案】h!=q && h!=k
6:number不在10~19之间(不包括10和19)
【答案】number>=19 || number <=10
7:下面的程序将打印什么?
int main(void) {
int num;
for (num = 1; num <= 5; num++) {
if (num % 3 == 0)
putchar('$');
else
putchar('*');
putchar('#');
putchar('%');
}
putchar('
');
return 0;
}
【答案】*#%*#%$#%*#%*#%
8:下面的程序将打印什么?
#include <stdio.h>
int main(void) {
int i = 0;
while (i < 3) {
switch (i++) {
case 0:
printf("胖");
case 1:
printf("帽子");
case 2:
printf("猫");
default:
printf("啊哈!");
}
putchar('
');
}
return 0;
}
【答案】胖帽子猫啊哈!
帽子猫啊哈!
猫啊哈!
三:编程题
1:输入三个数,从小到大进行排序。
【答案】
#include <stdio.h>
int main() {
int a, b, c, temp;
printf("请输入三个整数,用空格分隔:");
scanf("%d %d %d", &a, &b, &c);
// 排序三个数
if (a > b) {
temp = a;
a = b;
b = temp;
}
if (a > c) {
temp = a;
a = c;
c = temp;
}
if (b > c) {
temp = b;
b = c;
c = temp;
}
// 打印排序后的结果
printf("从小到大排序的结果是:%d %d %d
", a, b, c);
return 0;
}
2:编写一个程序读取输入,读到#字符停止,然后报告读取的空格数、换行符数和所有其他字符的数量
【答案】
#include <stdio.h>
int main() {
char ch; // 用来存储每次读取的字符
int spaceCount = 0; // 空格计数器
int newlineCount = 0; // 换行符计数器
int otherCount = 0; // 其他字符计数器
printf("请输入字符,输入#结束:");
while ((ch = getchar()) != '#') { // 循环读取字符直到遇到#
switch (ch) {
case ' ':
spaceCount++; // 空格计数
break;
case '
':
newlineCount++; // 换行符计数
break;
default:
otherCount++; // 其他字符计数
break;
}
}
printf("读取的空格数:%d
", spaceCount);
printf("读取的换行符数:%d
", newlineCount);
printf("读取的其他字符数:%d
", otherCount);
return 0;
}
学科网(北京)股份有限公司
$$