免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: _google
打印 上一主题 下一主题

[C] HELP!我是C新手,看到两个oracle的C语言面试题 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2007-01-10 16:45 |只看该作者
the first program is
b=a+b;
a=b-a;     // a=b;
b=b-a;     // b=a;
c=b+c;     // c=a+c;
b=c-b;     // b = c;
c=c-b;     // c = a;

论坛徽章:
0
22 [报告]
发表于 2007-01-10 17:16 |只看该作者
  1. int my_atoi(char *str)
  2. {
  3.         int i,sum = 0,flag = 0,len = strlen(str);

  4.         for(i = len -1; i >= 0 && flag >= 0;i--)
  5.         {
  6.                 (isdigit(str[i]) == 0) ? (flag = (str[0] == '-') ? 1 : -1) : (sum += (int)((str[i] - 48) * pow(10,len-i-1)));
  7.         }
  8.         return (flag == 0) ? sum : -sum;
  9. }
复制代码


只能处理整数,不能处理长整型,好像题中也没有要求长整型,有出错处理(flag == -1),但是我不知道应该返回什么值给调用程序……

论坛徽章:
0
23 [报告]
发表于 2007-01-10 17:41 |只看该作者
真强 这些人啊  好好学习了

论坛徽章:
0
24 [报告]
发表于 2007-01-10 17:47 |只看该作者

c = (a+c)-(a=b,b=c) ===> 错误

c = (a+c)-(a=b,b=c);
经过测试是错误的!

结果:a,b赋值符合要求,c赋值错误.

[ 本帖最后由 Nickwong 于 2007-1-10 17:48 编辑 ]

论坛徽章:
0
25 [报告]
发表于 2007-01-10 18:09 |只看该作者
a ^= b;
b ^= a;
a ^= b;

=====
int atoi( const char* val, int& status )
{
int result =0 ;

while(  *val >= '0' && *val <= '9'  && *val != '\0' )
{
   result = result* 10 + *val - '0', val++;
  
}

return *val == '\0' ? ( staus = 1, result ): ( status =0, -1 );

}

[ 本帖最后由 HeavenTear 于 2007-1-10 22:09 编辑 ]

论坛徽章:
0
26 [报告]
发表于 2007-01-10 19:24 |只看该作者
原帖由 Nickwong 于 2007-1-10 17:47 发表
c = (a+c)-(a=b,b=c);
经过测试是错误的!

结果:a,b赋值符合要求,c赋值错误.



验证通过
你是什么编译器

论坛徽章:
0
27 [报告]
发表于 2007-01-10 20:25 |只看该作者
菜哦,C的函数强的可以写在一句上.是你太不了解C了

论坛徽章:
0
28 [报告]
发表于 2007-01-10 21:00 |只看该作者
原帖由 Nickwong 于 2007-1-10 17:47 发表
c = (a+c)-(a=b,b=c);
经过测试是错误的!

结果:a,b赋值符合要求,c赋值错误.


[root@cent c]# cat a.c
#include <stdio.h>
int main()
{
        int a=22,b=33,c=44;
        c = (a+c)-(a=b,b=c);
        printf("%d,%d,%d\n",a,b,c);
        a ^= b ^= c ^= a ^= b ^= c ^= a ^= b;
        printf("%d,%d,%d\n",a,b,c);
        return 0;
}
[root@cent c]# ./a.out
33,44,22
44,22,33
[root@cent c]#

我测这2个怎么都是对的?

论坛徽章:
0
29 [报告]
发表于 2007-01-11 10:10 |只看该作者
第一题只能用异或来做,用加减得没有考虑到溢出的问题.

论坛徽章:
0
30 [报告]
发表于 2007-01-11 10:45 |只看该作者
c = (a+c)-(a=b,b=c);
这个是错误的,大部分编译器都会解释成:
b=c;
a=b;
c=(a+c)-a;
显然错误了, 结果b=c0; a= b0; c=b0
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP