❶ 用linux下的c語言編寫冒泡法,給出怎樣編譯與怎樣調試。並給出測試用例。請哪位大俠幫幫忙,謝謝啦
第一步建立一個.C文件。
如:vim test.c
#include <stdio.h>
int main()
{
int a[11]; /* 為了符合習慣, 第0號元素不用 */
int i, j, cup;
printf("Input 10 numbers:\n");
for(i = 1; i < 11; i++)
scanf("%d", &a[i]);
for(i = 1; i <= 9; i++) /* 趟數 */
for(j = 1; j <= 10 - i; j++) /* 每趟要比較數 */
if(a[j] > a[j+1]) /* 前面數大於後面數剛對調 */
{
cup = a[j];
a[j] = a[j+1];
a[j+1] = cup;
}
printf("The sorted numbers:\n");
for(i = 1; i <11; i++)
printf("%d ", a[i]);
return 0;
}
gcc test.c -o test//再用GCC編譯器進行編譯;
出現錯誤信息,根據錯誤提示信息進行修改程序;
如果沒有錯誤:執行#./test
測試運行結果如下:
=============================================
Input 10 numbers:
4 23 68 -29 9 10 -500 799 88 -4↙
The sorted numbers:
-500 -29 -4 4 9 10 23 68 88 799
=============================================
❷ 怎麼用C/C++語言設計一個對一個程序進行自動測試的程序
這是要做OJ嗎……以下用Linux角度考慮。
1.第一步和第二步有何不同?
2.首先編譯工作可以用system調用make腳本。一般限定只有一個代碼文件,所以makefile是固定的,產生的可執行文件也是固定的。通過限定makefile,可以限制編譯時對系統庫和網路庫的調用。
3.用>和<在調用可執行文件時實現輸入輸出重定向。輸出的文件名和標准輸出結果都是預定的。
4.將實際輸出文件和標准輸出文件進行比較。採用類似Special Judge的方式,專門設計一個程序同時讀入兩個輸出文件,逐行比較。
5.為了實現定時功能,可以用子線程方式運行程序,主線程負責檢測時間。時間到了看看子線程有沒有返回,就知道是否TLE。
❸ 怎麼寫java測試代碼
可以用main函數和JUnit來寫測試代碼。main是最早使用的,但是現在更流行的測試工具是JUnit。
JUnit是一個Java語言的單元測試框架。它由Kent Beck和Erich Gamma建立,逐漸成為源於Kent Beck的sUnit的xUnit家族中最為成功的一個。 JUnit有它自己的JUnit擴展生態圈。多數Java的開發環境都已經集成了JUnit作為單元測試的工具。
下面是一些具體的編寫測試代碼的技巧或較好的實踐方法:
1. 不要用TestCase的構造函數初始化Fixture,而要用setUp()和tearDown()方法。
2. 不要依賴或假定測試運行的順序,因為JUnit利用Vector保存測試方法。所以不同的平台會按不同的順序從Vector中取出測試方法。
3. 避免編寫有副作用的TestCase。例如:如果隨後的測試依賴於某些特定的交易數據,就不要提交交易數據。簡單的回滾就可以了。
4. 當繼承一個測試類時,記得調用父類的setUp()和tearDown()方法。
5. 將測試代碼和工作代碼放在一起,一邊同步編譯和更新。(使用Ant中有支持junit的task.)
6. 測試類和測試方法應該有一致的命名方案。如在工作類名前加上test從而形成測試類名。
7. 確保測試與時間無關,不要依賴使用過期的數據進行測試。導致在隨後的維護過程中很難重現測試。
8. 如果你編寫的軟體面向國際市場,編寫測試時要考慮國際化的因素。不要僅用母語的Locale進行測試。
9. 盡可能地利用JUnit提供地assert/fail方法以及異常處理的方法,可以使代碼更為簡潔。
10.測試要盡可能地小,執行速度快。
11.不要硬性規定數據文件的路徑。
12.利用Junit 的自動異常處理書寫簡潔的測試代碼
事實上在Junit 中使用try-catch 來捕獲異常是沒有必要的,Junit 會自動捕獲異常。那些沒有被捕獲的異常就被當成錯誤處理。
13. 充分利用Junit 的assert/fail 方法
assertSame()用來測試兩個引用是否指向同一個對象
assertEquals()用來測試兩個對象是否相等
14. 確保測試代碼與時間無關
15. 使用文檔生成器做測試文檔。
❹ 編寫好一個程序後怎樣測試謝謝
為了使計算機程序得以運行,計算機需要載入代碼,同時也要載入數據,然後由處理器執行指令。整個過程可以總結為編譯、鏈接、裝載、執行。
1、編譯
編譯過程又可以被分為兩個階段:編譯、匯編。
編譯是指編譯器讀取字元流的源程序,對其進行詞法與語法的分析,將高級語言指令轉換為功能等效的匯編代碼。
匯編器是將匯編代碼轉變成機器可以執行的命令,每一個匯編語句幾乎都對應一條機器指令。匯編相對於編譯過程比較簡單,根據匯編指令和機器指令的對照表一一翻譯即可。
2、鏈接
鏈接的主要內容是將各個模塊之間相互引用的部分處理好,使得各個模塊之間能夠正確地銜接。鏈接又分為靜態鏈接和動態鏈接:
靜態鏈接是指在編譯階段直接把靜態庫加入到可執行文件中去,這樣可執行文件會比較大;
動態鏈接則是指鏈接階段僅僅只加入一些描述信息,而程序執行時再從系統中把相應動態庫載入到內存中去。
3、裝載
程序在經過鏈接後,得到了可執行文件,下一步就需要將可執行程序載入到內存中。
由於現代操作系統均採用分頁的方式來管理內存,所以操作系統只需要讀取可執行文件的文件頭,之後建立起可執行文件到虛擬內存的映射關系,而不需要真正的將程序載入內存。
4、運行
載入器將可執行目標文件中的代碼和數據從磁碟復制到內存中,然後通過跳轉到程序的第一條指令或入口點來運行程序。
在程序的運行過程中,CPU發現有些內存頁在物理內存中並不存在並因此觸發缺頁異常,此時CPU將控制許可權轉交給操作系統的異常處理函數,操作系統負責將此內存頁的數據從磁碟上讀取到物理內存中。
❺ 怎樣寫java代碼來編譯運行本地磁碟的一個.java文件
1、確定配置jdk中的bin目錄為環境變數,測試方法:打開cmd,輸入javac,顯示javac相關參數
2、java文件是否有語法問題,如果有,class文件應該是沒有的
3、清空process的輸出流,即
BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream));
try {
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(str + line);
}
br.close();
} catch (IOException e) {
}
❻ 如何編譯並運行C語言程序
1、創建一個文件名為main.c,然後用任意一個款你熟悉的文本編輯軟體,比如說記事本,在裡面輸入下面的代碼,記住,要用文本文件編輯軟體,不能用word的。
c語言小游戲實現原理
1、二維數組實現棋盤
二維數組,用兩個for 循環,隨便輸出一個固定符號做棋盤,如 *
2、判定玩家
設計一個計步變數step, 每走一步 step++, 則玩家=step%2+1;
3、判定輸贏(重點)
設計方向數組 dircX[4] ,dircY[4],因為如果要判斷是否練成五子,只有1豎著2橫著3斜下4斜上
豎著的話就是 x-1,y不變
橫著的話就是x不變,y+1; 斜下: x+1,y+1; 斜上 x-1;y+1
這樣你就可以賦值dircX={-1,0,1,-1} dercY={0,1,1,1}
每當玩家落下一子,就全局判斷每個子的四個方向有沒有第二子,如果有,循環判斷有沒有第三子(利用 x+=dircX[1]),直到五子完成,結束。
❼ 怎麼用VScode 寫並編譯運行C++代碼
配置當然是可以的. 比如最簡單的寫一個編譯 + 運行的命令, 再作為一個任務, 可以指定對應的快捷鍵. 除此之外, 還可以使用 problem matcher 將編譯器報的錯誤反應到文件對應的位置, 非常方便. 之前就試過給 rust 寫編譯任務和 problem matcher 配置, 妥妥的~
實際上你在 VS Code 中按下相關快捷鍵 (比如默認的 Ctrl+Shift+B for build, F5 for debug), 如果沒有相關配置 VS Code 會自動為你生成一個模板,。
❽ 如何使用ANT在命令行進行編譯和測試
一、環境變數
在網上找到ANT的壓縮包,解壓縮以後放到C盤根目錄如下圖
對,就是這個鬼樣子,放在這里就可以用了,不用安裝之類的
環境變數如下圖:
你要定義ANT_HOME,然後讓系統path找到這個ANT_HOME就行了
二、寫build.xml
你的目錄結構如下圖:
源文件 放在src
引用的jar包放在lib
編譯結果安排在classes
接下來就是build.xml了
如下,自己看吧
[html] view plain
<?xml version="1.0"?>
<project name="pojo_0428" default="prepare" basedir=".">
<property name="source.root" value="src"/>
<property name="class.root" value="classes"/>
<property name="lib.dir" value="lib"/>
<!-- class path for compilation and execution -->
<path id="basepath">
<!-- 運行時 class文件的位置 -->
<pathelement location="${class.root}" />
<!-- jar包 -->
<fileset dir="${lib.dir}">
<include name="*.jar"/>
</fileset>
</path>
<!--默認的target -->
<target name="prepare">
<delete dir="${class.root}"/>
<mkdir dir="${class.root}"/>
</target>
<!--編譯 -->
<target name="compile" depends="prepare">
<javac srcdir="${source.root}"
destdir="${class.root}"
debug="on"
optimize="off"
deprecation="on">
<classpath refid="basepath"/>
</javac>
</target>
<!--執行。 案常式序的入口 依賴 compile -->
<target name="run" depends="compile">
<java classname="com.javathink.Student" fork="true">
<classpath refid="basepath"/>
</java>
</target>
</project>
❾ 編譯器本身是如何進行測試的
編譯器最重要的性質就是保證語義的正確。比如,從高級語言翻譯到機器指令之後,指令必須正確的表達原來程序的意思。所以一般編譯器測試都包含一些源程序,用來覆蓋可能出現的各種情況。基本的原則是:原來程序的結果 = 編譯後機器指令運行的結果。機器指令運行的結果很容易知道,運行一下就知道了。可是原來程序的結果你怎麼知道呢?
為了解決這個「原來程序語義」的問題,最好是寫一個解釋器,准確無誤的表達原來的代碼的語義。所以我們的要求就是:
高級語言解釋器(源程序) = 機器執行(機器代碼)
由於處理器其實就是一個用來執行機器代碼的解釋器,這里有一個很美好的對稱關系:
interp1(L1) = interp2(L2)
另外還有一個問題,就是編譯器一般需要經過多個轉化步驟(叫做 pass)才能最後編譯為機器指令。比如,
L2 = pass1(source)
L3 = pass2(L2)
L4 = pass3(L3)
Ln = passN(Ln-1)
machine_code = codegen(Ln)
由於源程序經過了很多步驟猜得到最後的機器指令,如果你使用上面的公式,就會出現以下一些情況:
1. 知道結果錯了,但是卻不知道到底是哪一個 pass 錯了。
2. 結果沒有錯,但是中間卻有 pass 實際上是錯的。但是由於之前的 pass 把輸入程序的一些結構給「優化」掉了,所以錯的那個 pass 其實沒能得到觸發錯誤的那個數據結構。所以測試沒能發現錯誤。如果以後前面的那個 pass 被修改,錯誤就會暴露出來。這是非常難以發現的潛伏的危險。
為了防止這些情況出現,一些編譯器(比如 Chez Scheme 和 Kent Dybvig 的課程編譯器)使用了對每一個 pass 進行測試的做法。具體的方法就是為每一個中間語言都寫一個解釋器,把這語言的語義完全的表示出來。這樣我們就需要檢查一組等式:
L2 = pass1(source)
高級語言編譯器(源程序) = interp2(L2) // 測試 pass1 的正確性
L3 = pass2(L2)
interp2(L2) = interp3(L3) // 測試 pass2 的正確性
這樣一來我們就能獨立的判斷每一個 pass 的正確性了。
這些是基本的語義測試原理。另外除了語義,可能還有一些「表面」一些的測試,它們看代碼本身,而不只看它的語義。比如尾遞歸優化的測試應該確保輸出程序的尾遞歸得到正確的處理,等等。這些是語義測試檢查不到的,因為尾遞歸沒有正確處理的程序大部分也能輸出正確的結果。
普通的單元測試方法也可以用來測試一些編譯器里的輔助函數,但那些不是編譯器特有的,所以就不講了。
另外,就像所有測試的局限性一樣,你沒法枚舉所有可能出現的輸入,所以以上的測試方法其實也不能保證編譯器的完全正確。
❿ 如何使用VS2013編寫C語言 包括編譯連接和運行測試.
1.【文件】—【新建】—【項目】,打開「新建項目」窗口。
2.【模板】選擇【Visual C++】,【win32控制台應用程序】,【名稱】、【位置】、【解決方案名稱】根據自己的需要填寫,不會填的話默認就行。
3.單擊【確定】彈出窗口,單擊【下一步】,在新出現的窗口中,【空項目】前面的方框里打鉤,然後點擊【完成】。
4. 【源文件】—右鍵【添加】—【新建項】,這里【名稱】里給自己的文件取個名字,選擇【C++文件(.cpp)】—【添加】,然後就可以編輯你的程序了。
5.程序寫好後,按【F5】調試,【Ctrl+F5】運行