算法竞赛入门经典 1 实验
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碼總結
以上是生活随笔為你收集整理的算法竞赛入门经典 1 实验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法竞赛入门经典(第二版)习题解答——第
- 下一篇: 大数据之SparkSQL简介及DataF