❶ 用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】运行