1.1
实验1:
printf("%d\n",3-4); //result :-1
实验4:
printf("%d\n",8/5); //result : 1
printf("%.1f\n",8/5); //result : 0.0
原因:printf函数不会进行任何类型转换,它只是从内存中读出你所提供的元素的值(按照%d,%f等控制字符提示的格式)。C语言设计中,int类型一般是32bit或者16bit,而float一般是64bit,并且有可能使用科学计数保存。8/5=1 在内存中为 0000,0000,0000,0001。而且因为在静态区的原因,这段内存前后默认也是0,使用%f来读,会读64位,而且会使用科学计数法 0*2的1次方 所以结果为0。
实验7:
printf("%d\n",8.0/5.0); //result:1606416400
原因:result为浮点数 输出整形截取以double型保存的数据的后四个字节。
实验6和实验7详细原因建议阅读float与double在内存中储存的相关文章
http://blog.csdn.net/u013412165/article/details/52557483
1.5
实验A1:表达式11111*11111值是多少,把5个1改成6个1呢,9个1呢。
printf("%d\n",11111*11111); // 123454321
printf("%d\n",111111*111111); //-539247567
原因:溢出
printf("%d\n",111111111*111111111); //1653732529
原因:同上
实验A2:把实验A1中的所有数换成浮点数,结果如何?
直接输出是0,将int转化为浮点数输出后,六个1能输出正确结果,9个1不行。
实验A3:表达式sqrt(-10)的值是多少?
sqrt要求参数为非负浮点数,如果为负数,返回值不定,始终采用并返回double。
实验A4:表达式1.0/0.0、0.0/0/0的值是多少?尝试用各种方式输出。在计算的过程中系统会报错吗?
printf("%f\n",1.0/0.0);// inf 无穷大
printf("%f\n",0.0/0.0); // nan
实验A5:表达式1/0的值是多少?在计算的过程中系统会报错吗?
printf("%d\n",1/0); // 1606416400
实验B1:在同一行中输入12和2,并以空格分割,是否得到了预期的效果?
可以正常读取。
实验B2:在不同的两行中输入12和2,是否得到了预期的结果?
可以正常读取。
实验B3:在实验1和2中,在数值前后插入大量的空格或水平制表符,甚至插入一些空行。
可以正常读数
实验B4:把2换成字符s。
121606422582
s转化为rascal码