首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

某通讯公司switch笔试题

2012-12-22 
某通信公司switch笔试题int ncswitch(n++){default:printf(error)breakcase a:caseA:case b

某通信公司switch笔试题
int n='c';
switch(n++)
{default:printf("error");break;
case 'a':case'A':case 'b':case'B':printf("good");break;
case 'c':case 'C':printf("pass");
case 'd':case 'D':printf("warn");

}
这个运行结果是,请给出原因,不要告诉我用VS运行(已运行过)
[最优解释]
弱弱的问一句,不用执行default后面的printf("error");的吗
[其他解释]

是passwarn,因为你后面没有了break;
另外,你的n初始为 'c'
当然执行一次后,n为'd'了,但这不影响结果!
毕竟,根据switch的特性,在【开始端直到完全结束或break结束】
[其他解释]
输出结果是passwarn
因为你的case后面没有加break,所以程序会顺序执行后面的语句
[其他解释]
这里就是passwarm,n的值传进来时是c,下面case又没有break语句,所以会输出下面的
[其他解释]
passwarn  在linux下编译执行

原因  case ‘c'后没有 break;
case ’d'继续执行
[其他解释]
"c" : 之后的顺序执行一次
passwarn
[其他解释]

引用:
答案这个,请大家不要说两个warn了,继续坐等大牛解释

其实很多人不是已经回答了么 ... 
首先:你要考虑顺序执行,所以第一个default被直接滤过去了
其次:你要考虑n的初始值,所以从'c'开始查找输出,所以输出pass
最后:你要注意有没有break,没有?那么继续输出后面的,所以输出warn
------
你做个试验,在case 'c':case 'C':printf("pass");这一句后面简单的加一句printf("\n");
你会看到,结果变成:
pass
warn
而不是passwarn,这样做,你就能体会什么叫顺序执行 ... 
[其他解释]
不过就是case语句的fall down而已.
[其他解释]
passwarnwarn

[其他解释]
引用:
passwarnwarn

一个冒号只算一个
[其他解释]
passwarnwarn,因为C把case语句当作真正意义的标号,相当于先查找标号,找到之后顺序执行。先找到case c:然后执行下面的语句,直到结束
[其他解释]
好像 挺简单的  
[其他解释]
passdwarn
[其他解释]
怎么我觉得是warn的...
不是switch(n++)吗?
[其他解释]
引用:
怎么我觉得是warn的...
不是switch(n++)吗?
先取n的值  再++
[其他解释]
为什么会有人居然会觉得是2次warn
[其他解释]
引用:
怎么我觉得是warn的...
不是switch(n++)吗?

如果是++n 就按你说的了

ps:到底结果是passwarn还是passwarnwarn
我觉得是前者
[其他解释]
引用:
怎么我觉得是warn的...
不是switch(n++)吗?

是n++,是先执行n,然后在++
[其他解释]
正确答案应该是passwarn,按switchcase的规则是这样。
可是这个default我受教了!default在前面和后面的结果也不一样,以前没注意过。。。
------其他解决方案--------------------


引用:
passwarnwarn,因为C把case语句当作真正意义的标号,相当于先查找标号,找到之后顺序执行。先找到case c:然后执行下面的语句,直到结束

你有一个错误,你没有考虑顺序执行。
[其他解释]
这个需要什么解释
[其他解释]

答案这个,请大家不要说两个warn了,继续坐等大牛解释
[其他解释]
又没有循环 直接一次性输出 就考了个n++ 和switch
[其他解释]
引用:
引用:passwarnwarn,因为C把case语句当作真正意义的标号,相当于先查找标号,找到之后顺序执行。先找到case c:然后执行下面的语句,直到结束
你有一个错误,你没有考虑顺序执行。
确实多了一个warn,看到前面的顺手粘贴 复制了一下,分析应该是没错的。
[其他解释]
可是case‘C’的值不符合switch括号里的值
[其他解释]
int n='c';
switch(n++)
{default:printf("error");break;
case 'a':case'A':case 'b':case'B':printf("good");break;
case 'c':case 'C':printf("pass");
case 'd':case 'D':printf("warn");

}
这个程序执行case 'c':case 'C':printf("pass");
那case‘c’执行然后case‘C’执行吗?
[其他解释]
看汇编代码.
[其他解释]
我怎么觉得也是warn啊
看看这个程序
#include <stdio.h>
int main(void)
{
int i=1;
while(i++<10)
{
printf("%d,",i);
}
return 0;
}

输出的就是2到10啊,这里也不输出1的
不应该是判断之后就是加1然后进入循环体吗?
[其他解释]
引用:
引用:我怎么觉得也是warn啊
看看这个程序C/C++ code?12345678910#include <stdio.h>int main(void){    int i=1;    while(i++<10)    {        printf("%d,",i);    }    return 0;}
输出的就是2到10啊……

这个我知道啊,入口的时候n不是加1了吗
进入之后难道不是变成100吗?为什么还要执行99的时候的语句呢?
我设置成整型数之后结果就不是这样了
[其他解释]
引用:
我怎么觉得也是warn啊
看看这个程序C/C++ code?12345678910#include <stdio.h>int main(void){    int i=1;    while(i++<10)    {        printf("%d,",i);    }    return 0;}
输出的就是2到10啊,这里也不输出1的
不应该是判断之后就是加1……

楼主的程序没有循环  第一眼有时会看错
[其他解释]
该回复于2012-11-19 14:02:49被管理员删除
[其他解释]
我怎么觉得也是warn啊
看看这个程序


C/C++ code?



12345678910

#include <stdio.h> int main(void) {     int i=1;     while(i++<10)     {         printf("%d,",i);     }     return 0; }
输出的就是2到10啊,这里也不输出1的……[/quote]

i++,1<10,之后i+1=2了。所以输出是2吧!
------其他解决方案--------------------


引用:
引用:引用:我怎么觉得也是warn啊
看看这个程序C/C++ code?12345678910#include <stdio.h>int main(void){    int i=1;    while(i++<10)    {        printf("%d,",i);    } ……

switch(i++)
这个句子条件的时候输入进switch这个语句的是i,也就是case的i.
然后i才++.
而你举的例子,
for(i++)
printf(i);
这时候printf的i已经是++后的i了.
[其他解释]
新手巩固了~~
[其他解释]
没有break,要直接往后运行
[其他解释]
当然是一个warn啊,你的这句
          case 'c':case 'C':printf("pass");
后面没有加break,所以就是一个warn啦。
[其他解释]
引用:
passwarnwarn,因为C把case语句当作真正意义的标号,相当于先查找标号,找到之后顺序执行。先找到case c:然后执行下面的语句,直到结束 
http://www.hollistercanadacoupons.com

别误导人啊..就一个warn
[其他解释]
引用:
引用:passwarnwarn,因为C把case语句当作真正意义的标号,相当于先查找标号,找到之后顺序执行。先找到case c:然后执行下面的语句,直到结束  http://www.hollistercanadacoupons.com
别误导人啊..就一个warn

额,我这句话也误导人了.Passwarn.一个warn.
[其他解释]
引用:
引用:
引用:passwarnwarn,因为C把case语句当作真正意义的标号,相当于先查找标号,找到之后顺序执行。先找到case c:然后执行下面的语句,直到结束  http://www.hollistercanadacoupons.com
别误导人啊..就一个warn
额,我这句话也误导人了.Passwarn.一个……


呵呵呵 ... 
[其他解释]
引用:
引用:引用:我怎么觉得也是warn啊
看看这个程序C/C++ code?12345678910#include <stdio.h>int main(void){    int i=1;    while(i++<10)    {        printf("%d,",i);    } ……
先取值 在switch结束后 再+1
[其他解释]
引用:
答案这个,请大家不要说两个warn了,继续坐等大牛解释


你上面的几位都解释的这么清楚了,还解释啥呢,真好笑
[其他解释]
这种坑爹的代码工作中谁写谁倒霉
[其他解释]
passwarn大家都说了
[其他解释]
答案就是passwarn;没有任何别的异议?
case 1:case 2: case 3: case 4: print("a");
j就是说switch接受到的1234中的任何一个,都会打印出a?

是这样吗?
[其他解释]
是passwarn,
[其他解释]
引用:
引用:引用:引用:我怎么觉得也是warn啊
看看这个程序C/C++ code?12345678910#include <stdio.h>int main(void){    int i=1;    while(i++<10)    {       ……
懂了
------其他解决方案--------------------


引用:
答案这个,请大家不要说两个warn了,继续坐等大牛解释

这个要解释啥。。
[其他解释]
引用:
引用:引用:引用:我怎么觉得也是warn啊
看看这个程序C/C++ code?12345678910#include <stdio.h>int main(void){    int i=1;    while(i++<10)    {       ……

如果是吧printf换成一个计算式的话,比如就是一个加法吧k=i;这时候k是等于i还是加了1之后的?
[其他解释]
引用:
引用:引用:引用:我怎么觉得也是warn啊
看看这个程序C/C++ code?12345678910#include <stdio.h>int main(void){    int i=1;    while(i++<10)    {       ……

那如果for里面不是输出的话,就是一个简单的运算表达式的话,那也是先用i然后再加1吗?
不过好像不是吧?
[其他解释]
这是C语言的多做之过(参见c专家编程),switch的fall through原则,关键是break。

一方面是没有break导致的顺序执行,另外就是没有default,会导致空指针之类的问题
[其他解释]
引用:
引用:答案就是passwarn;没有任何别的异议?
case 1:case 2: case 3: case 4: print("a");
j就是说switch接受到的1234中的任何一个,都会打印出a?

是这样吗?
对的。注意在后边加break,如果没有break,会顺序执行后边的case。


那上面那个题目并不难啦
[其他解释]
引用:
答案就是passwarn;没有任何别的异议?
case 1:case 2: case 3: case 4: print("a");
j就是说switch接受到的1234中的任何一个,都会打印出a?

是这样吗?

对的。注意在后边加break,如果没有break,会顺序执行后边的case。
[其他解释]
在VS里看了看,
switch(n) 和 switch(n++),结果是一样的,都是 passwarn, switch(n) 之后n是c,switch(n++)之后n是d。
switch(++n)的结果是warn,n是d,因为先++了。
[其他解释]
引用:
passdwarn


正确答案,首先第一这个是switch,不是while,我第一次看错了,所以只会执行一次,n++其实还是‘c’,故执行case 'c':;因为后面没有break,所以继续执行case 'd':;因此打印出来passwarn
[其他解释]
引用:
输出结果是passwarn
因为你的case后面没有加break,所以程序会顺序执行后面的语句


++
[其他解释]
引用:
弱弱的问一句,不用执行default后面的printf("error");的吗

我以前也曾有过这样的疑问,后来实验发现default 是否执行 和放的地方没有关系
[其他解释]
passwarn
switch,csae语句没有循环,只会运行一次。因为定义的是n='c',而n++是先运行在++.即进入switch语句的仍是c。故走case'c':输出pass,因没有break,仍会继续走case‘d’:即输出warn。然后就是程序结束啦。
[其他解释]
引用:

请问你截图的书叫什么名字?
[其他解释]
这语句写的真蛋疼啊,格式排好点,一目了然
[其他解释]
passwarnbogon

------其他解决方案--------------------


应该是pass wam  但 n的值是d
因为是n++  程序运行一遍了 n的值才自加
[其他解释]

引用:
引用:
请问你截图的书叫什么名字?
c专家编程
[其他解释]
输出结果为passwarn。
首先,n++是取n的值作为表达式的值,然后n自增1;而++n是n自增1,然后作为表达式的值。那么传递个switch的就是'c'。
其次,case 'c'和case'C'的执行语句之后没有break,那么程序会继续向下执行,直到switch结束。
[其他解释]
passwarn 因为case都没有break语句
[其他解释]
引用:
引用:引用:引用:我怎么觉得也是warn啊
看看这个程序C/C++ code?12345678910#include <stdio.h>int main(void){    int i=1;    while(i++<10)    {       ……
 正解啊
[其他解释]
引用:
引用:怎么我觉得是warn的...
不是switch(n++)吗?
如果是++n 就按你说的了

ps:到底结果是passwarn还是passwarnwarn
我觉得是前者

前者
[其他解释]
null

热点排行