智能车制作

标题: c语言面试题 [打印本页]

作者: 丝路雪林    时间: 2013-5-9 13:27
标题: c语言面试题
#include <stdio.h>
#include <math.h>
void main()
{
  unsigned int a,b;
  a = 8;
  b = 10;
  do
  {
   printf("%s\n","i'am here");
  }
  while((a-b)>5||(a-b)<-5);
}

为什么这样写就会无限地执行循环?如果这样写
#include <stdio.h>
#include <math.h>
void main()
{
  unsigned int a,b;
  a = 8;
  b = 10;
  do
  {
   printf("%s\n","i'am here");
  }
  while((a-b)>5);
}
就会执行一次循环,然后跳出

这是一家公司的面试题,相信广大车友应该精通C语言,求解释?
请大家莫嫌简单,自己可以用VC++试一试

作者: Mr_Q    时间: 2013-5-9 13:27
改为#include <stdio.h>
#include <math.h>
void main()
{
  unsigned int a,b;
  a = 8;
  b = 10;
  do
  {
   printf("%s\n","i'am here");
  }
  while((a-b)>5);
}
也是无限循环~~
while((a-b)>5);
改成while((a-b)<5);
只执行一次

初步分析~unsigned int~~~无符号的

作者: 简单丹    时间: 2013-5-9 13:58
你题目就错了....关键是定义类型那儿出问题unsigned int
作者: 恋深蓝    时间: 2013-5-9 14:04
简单丹 发表于 2013-5-9 13:58
你题目就错了....关键是定义类型那儿出问题unsigned int

求大神详解,我试了试,二者相减结果为-2,而且while()中的条件为假啊,为嘛会无限执行呢!
作者: 奋斗小青年、    时间: 2013-5-9 14:16
c很神奇
作者: 简单丹    时间: 2013-5-9 14:17
恋深蓝 发表于 2013-5-9 14:04
求大神详解,我试了试,二者相减结果为-2,而且while()中的条件为假啊,为嘛会无限执行呢!

其实LZ的两个程序都回无线循环
你把输出格式换成无符号型%u就是一个很大的整数...如果是%d就是-2
#include <stdio.h>
#include <math.h>
void main()
{
  unsigned int a,b;
  a = 8;
  b = 10;
  do
  {
   printf("%u\n",a-b);
  }
  while(a-b>5);
}




作者: dlyt03    时间: 2013-5-9 14:40

作者: pangfumin    时间: 2013-5-9 15:31
unsigned int 无符号的整形,复数当然出错啦,c语言这种强类型的语言很容易出错。要是能用一些,更高级的语言开发嵌入式就好了
作者: 空格    时间: 2013-5-9 15:58
神奇的C语言,常读常新!
作者: 言言的诺诺    时间: 2013-5-9 16:38
C真心强大、、
作者: wsadjkl    时间: 2013-5-9 18:49

作者: 270136977    时间: 2013-5-9 21:37
两个都是无限循环吧。。a、b都是无符号的,问题就在这吧
作者: gdpjsx    时间: 2013-5-10 12:52





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2