昨天去面试,有一道 c 的题:没做出来,因为好长时间没玩c了

zzzbbbll0304 2004-08-26 08:27:34
大概是这 样的:

有一个函数里面是大概是这样的。
function(a*,b*){
case:变量{
default;
while(........){
case 1: a++ = b++;
case 2: a++ = b++;
case 3: a++ = b++;
case 4: a++ = b++;
case 5: a++ = b++;
case 6: a++ = b++;
}


问题是这个函数在做什么,看了半天,不明白为什么case 的分项会放到一个循环里。





...全文
2299 74 打赏 收藏 转发到动态 举报
写回复
用AI写文章
74 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongchenzai 2004-12-10
  • 打赏
  • 举报
回复
出这种题目,一点意义都没有,如果开发人员都写这样的代码,那读性太差了吧
Reesoft 2004-12-10
  • 打赏
  • 举报
回复
这题目还是有点意思的,它能灵活地决定初次循环时要执行的代码,有时候初次循环不需要执行循环体的所有代码,我就经常碰到这种情况,正好用上这个办法了,呵呵!
liem 2004-11-25
  • 打赏
  • 举报
回复
虽已结帐,也想提个问题:
a++=b++;能通过编译吗?
a++不是左值啊
fury 2004-08-31
  • 打赏
  • 举报
回复
有意思


回复人: zhangfjj(小张(生命不息,灌水不止。)) ( ) 信誉:105 2004-08-27 20:10:00 得分: 0


回答:
事实上,这是一段卷曲的代码,所做的事情不过是将from所指数组里的count个整数复制
。。。


-------------------------------------

我觉得这个说得很明白了呀 有时间看一下汇编代码就更清楚了

这个代码应该是十几年前,为了追求效率而写的
现在讲的是面向对象,软件工程,重视程序的可读性甚于它的执行效率,
所以现在看来是有点过时了
搞编译器的人喜欢玩这个!

duo9 2004-08-31
  • 打赏
  • 举报
回复
SuperWater(超级水货)

年轻人,不要动不动就国企过企的。
人人从我做起。
wwwtony110 2004-08-30
  • 打赏
  • 举报
回复
这个面试题简直就是说废话~~~~
CASE根本就没有BREAK~~~那算什么程序啊?
不如就一个CASE能了~~~其他的都是废话~~~
那个公司要倒闭了
zncn2 2004-08-30
  • 打赏
  • 举报
回复
这跟编译器有关吧,得看它针对do-while和switch-case采用什么样的语法分析了
aruo98 2004-08-30
  • 打赏
  • 举报
回复
有意思
总比我面试考得题目有意思:
SENDMESSAGE和POSTMESSAGE有什么区别,晕死,他不好自己去MSDN里面看啊
我当场走人

----------------------------------------------------------------

它考的方面应该是阻塞函数和非阻塞函数这两个概念,而不是具体参数的区别吧。
Theleme 2004-08-30
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

void send(int *to,int *from,int count)
{
int n=(count+7)/8;
//cout<<"count "<<count<<endl
// <<"n "<<n<<endl;
switch(count%8)
{
case 0: do{ {*to++=*from++;cout<<"case 0 is called!\n";}
case 7: { *to++=*from++;cout<<"case 7 is called!\n";}
case 6: { *to++=*from++;cout<<"case 6 is called!\n";}
case 5: { *to++=*from++;cout<<"case 5 is called!\n";}
case 4: { *to++=*from++;cout<<"case 4 is called!\n";}
case 3: { *to++=*from++;cout<<"case 3 is called!\n";}
case 2: { *to++=*from++;cout<<"case 2 is called!\n";}
case 1: { *to++=*from++;cout<<"case 1 is called!\n";}
}while(--n>0);
}
}
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,0};
int b[10];
send(b,a,3);
send(b,a,7);

send(b,a,10);
return 0;
}

给定参数count,对8取整加1:n=count+7/8(因为后面是--n),对8取余count%8;

程序就是执行count%8+count/8=count 次的赋值,
send(b,a,10);就是赋值10次,

其它也没什么了
yelang771 2004-08-30
  • 打赏
  • 举报
回复
up
yiemyn 2004-08-30
  • 打赏
  • 举报
回复
不懂就说不懂吧,说人家公司BT没用的.
这个语法在C里面是正确而又正常的,只不过合编译不合我们人的逻辑罢了,像这种情况,只不过是我们大都不用,所以不记得.说到底还是C的编译有点BT
双杯献酒 2004-08-30
  • 打赏
  • 举报
回复
function(a*,b*){
switch(变量){
default; // 假定此处是 default:
.........;
while(........){
case 1: a++ = b++;
case 2: a++ = b++;
case 3: a++ = b++;
case 4: a++ = b++;
case 5: a++ = b++;
case 6: a++ = b++;
}



等价于
function(a*,b*){
if(变量 == 1 ) {goto case_1;}
else if(变量 == 2 ) {goto case_2;}
else if(变量 == 3 ) {goto case_3;}
else if(变量 == 4 ) {goto case_4;}
else if(变量 == 5 ) {goto case_5;}
else if(变量 == 6 ) {goto case_6;}
........
else {goto case_default;}

case_default:
........;
while(........){
case_1: a++ = b++;
case_2: a++ = b++;
case_3: a++ = b++;
case_4: a++ = b++;
case_5: a++ = b++;
case_6: a++ = b++;
}// while

SuperWater 2004-08-29
  • 打赏
  • 举报
回复
国内企业还会出这样的题目,软件业的悲哀!!!!

我敢保证你把这道题拿到微软区也没几个人知道?!或者说也不愿意去知道!!

软件代码编写最基本的原则就是"KISS"原则!!!!



66889900aa 2004-08-29
  • 打赏
  • 举报
回复
我在想
languagec 2004-08-29
  • 打赏
  • 举报
回复
David2008 2004-08-29
  • 打赏
  • 举报
回复
我觉得
是你自己没有记忆清楚
他考的可能是要你识别一个两重的条件
switch()一个
while()一个
dick4610 2004-08-29
  • 打赏
  • 举报
回复
好象是有那么点无聊
雪域红莲 2004-08-29
  • 打赏
  • 举报
回复
有意思
总比我面试考得题目有意思:
SENDMESSAGE和POSTMESSAGE有什么区别,晕死,他不好自己去MSDN里面看啊
我当场走人
maddevil 2004-08-29
  • 打赏
  • 举报
回复
这其实就是

for(...;...;a++,b++)
a=b;

的另一种写法而已
Flood1984 2004-08-28
  • 打赏
  • 举报
回复
我来解释下看:
如果程序如下:
switch(a)
{
case 1 : do { 语句1;
case 2 : 语句2 ;
case 3 : 语句3 ;
} while(条件)
}
则程序编译如下 :
do的入口-> ___________ --\
case 1的入口-> |语句1; | \
case 2的入口-> |语句2; | |<-- 这一部分为循环体
case 3的入口-> |语句3; | /
----------- --/
此处标记 WHILE
说明:
程序到达switch(a)后根据a的值进入case的入口,然后向下执行(如:case 2,执行 语句2,语句3),然后到达 WHILE 处,判断条件,如为假则结束,如为真,则跳到do的入口处进行下一次循环;

例:
case 2,且循环2次时:
则: 首先到达“case 2的入口”执行 语句2,语句3,然后判断条件,为真,将返回到“do的入口”执行 语句1,语句2,语句3, 又判断条件,为假,结束。



加载更多回复(54)

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧