算法竞赛入门经典-1.5.4 Q&A

这小节考察实践能力,要求在不要查书、不要网上找答案,自己用实验的方法解决以下五个问题:

  做这五道题时,好几道都没思路,违反了规则到网上找了一圈,居然没找到答案,于是打算写这篇博客。不知是否有更好的实践方法,欢迎讨论。

Q1:c语言中,int型整数的最小和最大值是多少?(精确解)

A1:用实验的方法可以这样得到:利用int最大的正数溢出时符号为改变的特性。

1 int b = 0;
2 while(b >= 0)
3   b++;
4 printf("%d %d\n", b, b-1);

Q2:C语言中,double型浮点数能精确到多少位小数?

A2:通过观察无限循环小数,在第多少位出现不准确的输出大致获得。

1 printf("%.50lf\n", 1.0/3);

Q3:C语言中,double型浮点数最大整数值与最小整数值分别是多少?(不必特别精确)

A3:最小的整数值和Q2的解相当,最大整数值。可以用double溢出时,gcc编译器值一直是inf,来大概判断。

1 double a=10;
2 while(1)
3 {
4      a = a * 10;
5      printf("%e\n",a);
6      if(a == 1.0/0.0)
7            break;
8 }

Q4:判断a&&b||c,应该理解成(a&&b)||c还是a&&(b||c)?

A4:通过观察我们发现a, b, c分别是0, 0, 1时,(a&&b)||c和a&&(b||c)输出分别为1, 0,这样,执行a&&b||c,对比结果就可以判断出优先级。

1 printf("%d %d\n%d\n", (0&&0)||1, 0&&(0||1), 0&&0||1);

Q5:if(a) if(b) x++;else y++;的else与哪个if匹配?

A5:这个好构建。

猜你喜欢

转载自www.cnblogs.com/ziphe-from-teacher-chen/p/10454370.html
Q&A