從問題到程序、文獻管理與信息分析、構建之法、深刻理解計算機系統

《從問題到程序》

第一章

1.這個部分的機器指令看不明白,將寄存器1的數據加到寄存器0原有數據上,這個原有數據是指第一行的數據仍是第三行運算過的數據?

2.return 0究竟是什麼?它和return 1有什麼區別?

return 0 表明程序正常退出,return 1表明程序異常退出!
使用return 語句能夠返回一個變量內的值或一個指針,也可用return0,表示返回爲空。
return 表明調到函數外,
return 0表明函數正常終止
return 1表明函數非正常終止
return 關鍵字的做用是返回程序流程的控制權!
其反作用是返回一個值。
例如int main(){}則必須返回一個值
return 0表明函數正常終止
ruturn 1表明函數非正常終止
被調函數 return 1只是給主調函數一個標誌,說明他的執行過程遇到異常狀況。
而後就返回主調函數來處理,繼續執行。
這個異常狀況是什麼那?
這個異常狀況是返回給控制檯的,不在你編的程序的控制範圍內,是給操做系統識別的,對你的程序無影響web

第二章

1.請設法找出這 個程序裏的錯誤:

#include <stdio.h> 
int main()
{     
printf("Factorial of %d is %f\n", 7, 1*2*3*4*5*6*7);     
return 0; 
}

整形常量是指形式爲整常數的常量,以上1234567是整形常量的運算,結果也是整形常量,因此不能以%f格式輸出,若是改成1.0234567就能夠,由於此時有一個1.0是浮點型常量(包含小數點的實數),全部常量均會被轉換成double型的來運算。因此能夠用%f輸出。數據庫

2.若是程序裏要用標準庫裏的數學函數,程序前面要另寫一行: #include <math.h>什麼纔是標準庫裏的數學函數?何時須要調用這個頭文件?

數學函數庫,一些數學計算的公式的具體實現是放在math.h裏,具體有:數組

一、 三角函數

double sin(double);正弦
double cos(double);餘弦
double tan(double);正切函數

2 、反三角函數

double asin (double); 結果介於[-PI/2,PI/2]
double acos (double); 結果介於[0,PI]
double atan (double); 反正切(主值),結果介於[-PI/2,PI/2]
double atan2 (double,double); 反正切(整圓值),結果介於[-PI,PI]工具

3 、雙曲三角函數

double sinh (double);
double cosh (double);
double tanh (double);單元測試

4 、指數與對數

double frexp(double value,int exp);這是一個將value值拆分紅小數部分f和(以2爲底的)指數部分exp,並返回小數部分f,即f2^exp。其中f取值在0.5~1.0範圍或者0。
double ldexp(double x,int exp);這個函數恰好跟上面那個frexp函數功能相反,它的返回值是x2^exp
double modf(double value,double
iptr);拆分value值,返回它的小數部分,iptr指向整數部分。
double log (double); 以e爲底的對數
double log10 (double);以10爲底的對數
double pow(double x,double y);計算x的y次冪
float powf(float x,float y); 功能與pow一致,只是輸入與輸出皆爲單精度浮點數
double exp (double);求取天然數e的冪
double sqrt (double);開平方根學習

5 、取整

double ceil (double); 取上整,返回不比x小的最小整數
double floor (double); 取下整,返回不比x大的最大整數,即高斯函數[x]測試

6 、絕對值

int abs(int i); 求整型的絕對值
double fabs (double);求實型的絕對值
double cabs(struct complex znum);求複數的絕對值網站

7 、標準化浮點數

double frexp (double f,int p); 標準化浮點數,f = x 2^p,已知f求x,p (x介於[0.5,1])
double ldexp (double x,int p); 與frexp相反,已知x,p求f搜索引擎

8 、取整與取餘

double modf (double,double*); 將參數的整數部分經過指針回傳,返回小數部分
double fmod (double,double); 返回兩參數相除的餘數

9 、其餘

double hypot(double x,double y);已知直角三角形兩個直角邊長度,求斜邊長度
double ldexp(double x,int exponent);計算x(2的exponent次冪)
double poly(double x,int degree,double coeffs []);計算多項式
int matherr(struct exception
e);數學錯誤計算處理程序
source: 《C & C++ Code Capsules》

3.本章中的有用程序模式

2.1:簡單計算程序:

#include <stdio.h> 
int main() 
{  
printf("... ...", ...); /* 計算表達式寫在這裏 */     
return 0;
}

2.2:使用數學函數的簡單計算程序採用以下模式:

#include <stdio.h> 
#include <math.h> 
int main() 
{     
printf("... ...", ...); /* 計算表達式寫在這裏 */     
return 0;
}

第三章

1.void main()和int main(void)的區別

main後面的括號是參數表的意思,空括號則表示main沒有參數。實際上main是程序的入口點,全部執行代碼的起點。
1)區別是main()函數是否有返回值。
2)void定義的函數沒有返回值,int定義的函數返回整型值。
3)void,字面意思是「無類型」,經常使用在程序編寫中對定義函數的參數類型、返回值、函數中指針類型進行聲明,有註釋和限制程序的做用。

2.空語句的做用是什麼?爲何要使用空語句?

我以爲空語句就是補全語句的做用,可是感受無關緊要,資料上說空語句有如下幾個用途:
1)純粹消耗CPU時間,起到延時的做用。
2)爲了程序的結構清楚,可讀性好,之後擴充新功能方便。有些公司的編碼規範要求,對於if/else語句等,若是分支不配對的話,須要用空語句進行配對。
例如:
正常的這麼作就行:

if(XXX)
{
XXXXX
}

可是編碼規範要求,必須這麼寫

if(XXX)
{
XXXXX
}
else
{
;
}

3)對於某些大型的軟件項目,特別是一些嵌入式項目,處於自動化測試的須要,要求必須進行語句(例如,if/else語句)的配對。

3.本章中的有用程序模式:

3.1:簡單程序

#include <stdio.h> /* 若是須要用數學函數,這裏還要寫#include <math.h> */ 
int main () {     /* 若干變量定義(以及初始化) */     /* 若干計算和賦值語句 */     /* 若干輸出語句 */     return 0; }

3.2:帶函數定義的程序

#include … ……  /* 函數定義寫在這裏(能夠有一個或幾個) */ 
int main () {     …… /* 主程序體,這裏一般包含對一些函數的調用 */     return 0; }

第四章

1.爲何浮點數運算有偏差?

其根本緣由是計算機所使用二進制01代碼沒法準確表示某些帶小數位的十進制數據。2進制的浮點數表示有一個很大的問題——它並不能夠精確表示全部實數。說得更準確一點,只有能夠寫成2^a+2^b+2^c+...這種形式而且精度不能太多的實數才能夠用浮點數來精確表示。而大多數實數僅僅保存了一個四捨五入後的近似值而已。譬如,0.1在單精度浮點數中實際值爲0.100000001490116119384765625,也就是說0.1疊加10遍的確是和1.0不等的。

第六章

1.下面代碼中putchar(n % 6 == 5 ? '\n' : ' ');使程序能在輸出 6個元素後換一行。 爲何是餘數爲5換行,而不是餘數爲6?

#include <stdio.h> 
int main () {     
long fib[30];     
int n; 
fib[0] = 1;     
fib[1] = 1;     
for (n = 2; n < 30; ++n)         
fib[n] = fib[n-1] + fib[n-2]; 
for (n = 29; n >= 0; --n) {         
printf("%d", fib[n]);         
putchar(n % 6 == 5 ? '\n' : ' ');     } 
return 0; }

由於數組是從0開始計數的,而不是從1開始。

後面的由於c語言基礎較差尚未去看。

《文獻管理與信息分析》

1.輸入網站www.google.com/ncr不會跳轉到英文網頁。

2.基本搜索命令:

1)AND
2)OR
3)- (去除一類的搜索)
4)+(強制搜索)
5)""(精確搜索)
6)~(相關搜索)

3.搜索高級命令:

1)filetype:ppt、pdf或者xsl等等格式搜索,例如:aptamer filetype:ppt
2)site:指定在特定的網站進行搜索,例如:羅紹峯 site:sciencenet.cn

4.google/baidu/bing/360的比較:

1)收錄範圍方面google最好,bing的英文也比百度好,百度搜索中文的功能最好,360收錄結果偏少,但質量相對較高。
2)搜索命令方面google較多,而後是百度,而後是bing,最後是360

5.數據庫的選擇:百度或google搜索數據庫導航

6.WOS數據庫(Web of Science)

1)進入WEB OF KNOWLEDGE平臺,裏面包含了WOS數據庫
2)邏輯算符:AND、OR、NOT
3)臨近算符:NEAR/x(表明所銜接的兩個詞之間詞語數量小於N,例如:canine NEAR/10 virus)、SAME(只在地址字段中檢索,同時要求兩個詞在同一個地址字段中,例如:yale SAME hosp)
4)截詞符:*表示截取零到多個字符、$表示截取零到一個、?表示截取一個字符。
5)scopus數據庫和WOS數據庫差很少,推薦使用WOS數據庫

7.學術搜索引擎

google scholar 獨特命令:author、出版物限制、site、filetype

8.中文數據庫:CNKI、萬方、維普、超星

9.RSS 同步世界最新資訊

10.endnote X7使用場景

1)調研某一個領域在endnote裏把全部文章下載下來,瀏覽以後挑重要的文章閱讀摘要或者全文閱讀。
2)RSS瀏覽文章,以爲重要的下載到一個文件夾,讓endnote自動去識別添加文獻

11.文件管理軟件:Total Commander

TC基本功能:定位、複製與移動、搜索、快速查看、文件的同步與比較、批量更名、壓縮和解壓等等。

12.快速定位核心文件:HistCite

功能:快速繪出一個領域的發展脈絡,快速鎖定某個領域的重要文獻、科學家、機構,洞察某個領域最近進展,找出無指定關鍵詞的重要文獻。

時間緊湊,沒有什麼思考,以上是看視頻時作的一些筆記。

《構建之法》

第二章

1.什麼是單元測試?建立單元測試的主要步驟有哪些?

單元測試:能讓本身負責的模塊功能定義儘可能明確,模塊內部的改變不會影響其餘模塊,並且模塊的質量能獲得穩定的、量化的保證。
主要步驟:
1)設置數據(一個假想的正確的E-mail地址)
2)使用被測試類型的功能(用E-mail地址來建立一個User類的實體)
3)比較實際結果和預期的結果(Assert.IsTure(target != null);)

2.什麼是迴歸測試?

迴歸測試:工程師們在新版本上運行全部已經過的測試用例,以驗證有沒有「退化」狀況發生(例如:在3.1.5版本,模塊A的編號爲125的測試用例經過了,可是在新的版本3.1.6上,卻失敗了,這就是一個倒退),這個過程就是迴歸測試。

3.效能分析工具

有抽樣和代碼注入兩種分析方法
抽樣:具備不須要改動程序,運行較快,很快找到瓶頸,可是不能獲得精確的數據,也不能準確表示代碼中的調用關係樹等特色。
代碼注入:具備能夠精確測量程序中各個數據,可是運行時間大大加長,還會產生很大的數據文件,增長了數據分析的時間。
通常的作法是先用抽樣的方法找到效能瓶頸所在,而後對待定的模塊用代碼注入的方法進行詳細分析。

《深刻理解計算機系統》

因爲基礎較差加上此書過厚,快速閱讀感受什麼也看不懂,打算每週一章章的去學習。

相關文章
相關標籤/搜索