解析:华为经典C语言面试题
来源:优易学  2011-8-27 13:29:29   【优易学:中国教育考试门户网】   资料下载   IT书店

 

 3、写出程序运行结果
  int sum(int a)
  {
  auto int c=0;
  static int b=3;
  c+=1;
  b+=2;
  return(a+b+c);
  }
  void main()
  {
  int I;
  int a=2;
  for(I=0;I<5;I++)
  {
  printf("%d,", sum(a));
  }
  }
  运行结果是:8,10,12,14,16,
  在求和函数sum里面c是auto变量,根据auto变量特性知每次调用sum函数时变量c都会自动赋值为0.b是static变量,根据static变量特性知每次调用sum函数时变量b都会使用上次调用sum函数时b保存的值。
  简单的分析一下函数,可以知道,若传入的参数不变,则每次调用sum函数返回的结果,都比上次多2.所以答案是:8,10,12,14,16,
  4、func(1) = ?
  int func(int a)
  {
  int b;
  switch(a)
  {
  case 1: 30;
  case 2: 20;
  case 3: 16;
  default: 0;
  }
  return b;
  }
  在 case 语句中可能忘记了对变量b赋值。如果改为下面的代码:
  int func(int a)
  {
  int b;
  switch(a)
  {
  case 1: b = 30;
  case 2: b = 20;
  case 3: b = 16;
  default: b = 0;
  }
  return b;
  }
  因为case语句中漏掉了break语句,所以无论传给函数的参数是多少,运行结果均为0。
  5、a[q - p] = ?
  int a[3];
  a[0]=0; a[1]=1; a[2]=2;
  int *p, *q;
  p=a;
  q=&a[2];
  很明显:a[q - p] = a[2] = 2;
  6、内存空间占用问题
  定义 int **a[3][4], 则变量占有的内存空间为:16位系统24,32位编译系统中是48。
  PS:公式:3 * 4 * sizeof(int **)
  7、程序编写
  编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒。
  void ResetTheTime(int *year,int *month,int *date,int *hour,int *minute,int*second)
  {
  int dayOfMonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};
  if( *year < 0 || *month < 1 || *month > 12 ||
  *date < 1 || *date > 31 || *hour < 0 || *hour > 23 ||
  *minute < 0 ||*minute > 59|| *second <0 || *second >60 )
  return;
  if( *year%400 == 0 || *year%100 != 0 && *year%4 == 0 )
  dayOfMonth[1] = 29;
  if(*second >= 60)
  {
  *second = 0;
  *minute += 1;
  if(*minute >= 60)
  {
  *minute = 0;
  *hour += 1;
  if(*hour >= 24)
  {
  *hour = 0;
  *date += 1;
  if(*date > dayOfMonth[*month-1])
  {
  *date = 1;
  *month += 1;
  if(*month > 12)
  {
  *month=1;
  *year += 1;
  }
  }
  }
  }
  }
  return;
  }

上一页  [1] [2] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训