《吉师作业》(2)之迟来的答案
## 1. (单选题)
分析以下程序的运行结果。
#include <stdio.h>
void main()
{
int k=2;
switch(k)
{
case 1:printf("%d\n",k++); break;
case 2:printf("%d ",k++);
case 3:printf("%d\n",k++); break;
case 4:printf("%d\n",k++);
default:printf("Full!\n");
}
}
- A. 3 4
- B. 3 3
- C. 2 3
- D. 2 2
## 解题过程
首先分析该程序,简单的分支语句,最初K=2,跳转到选择2,执行K++,
因为是K++,不是++K,所以第一次输出为2,因为选择2后面没有break语句,所以顺序执行下一条也就是选择3.同理,第二次就为3
有个憨批错了我不说是谁![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/70addbbe8f834e0ebe0e523acf4f3e95~tplv-k3u1fbpfcp-zoom-1.image)
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/904b78414b734508a41cf01d10a03010~tplv-k3u1fbpfcp-zoom-1.image)
## 2. (单选题)
以下程序的输出结果是( )。
#include<stdio.h>
void main()
{
int x=1,y=0,a=0,b=0;
switch(x)
{
case 1:switch(y)
{
case 0:a++;break;
case 1:b++;break;
}
case 2:a++;b++;break;
}
printf("a=%d,b=%d",a,b);
}
- A. a=1,b=1
- B. a=1,b=2
- C. a=2,b=1
- D. a=2,b=2
首先分析第一个switch,对x进行选择,此时x=1,y=0,a=0,b=0
所以进入选择1再次进行选择,因为y=0,执行a++后退出内嵌选择
此时x=1,y=0,a=1,b=0
但因为外部的选择1并未加入break语句,所以,继续执行外部的选择2
a++,b++
此时x=1,y=0,a=2,b=1
输出
## 3. (单选题)
以为了避免嵌套的条件分支语句if-else二义性,C语言规定,C程序中的else总是与( )组成配对关系。
- A. 缩排位置相同的if
- B. 在其之前未配对的最近的if
- C. 在其之前未配对的if
- D. 同一行上的if
选B,这玩意得记住,贼特么坑
## 4. (单选题)以下程序的输出结果是( )
#include<stdio.h>
int main()
{
int a=010,b=0x10,c=10;
printf("%d,%d,%d",a,b,c);
return(0);
}
- A. 10,10,10
- B. 8,16,10
- C. 16,8,10
- D. 8,10,10
这玩意我的评价是看选项排除一哈,推导出a是8进制,b直接16进制,c十进制
位权一乘
- 点赞
- 收藏
- 关注作者
评论(0)