文档库 最新最全的文档下载
当前位置:文档库 › 编程作业1—八数码问题N皇后问题

编程作业1—八数码问题N皇后问题

编程作业1—八数码问题N皇后问题
编程作业1—八数码问题N皇后问题

人工智能基础

编程作业1

https://www.wendangku.net/doc/9412896301.html,/~linlixu/ai2014spring/

完成截止时间:4/20/2014

助教:仲小伟(zhxwmessi@https://www.wendangku.net/doc/9412896301.html,)

李亦锬(daniyitan@https://www.wendangku.net/doc/9412896301.html,)

王臻(wang1231991@https://www.wendangku.net/doc/9412896301.html,)

P1: 十二数码问题(40%)

本问题包括一个5x3的棋盘,12个写有数字的棋子以及一个空位(由0表示),两个障碍位(由-1表示)。与空位上、下、左、右相邻的棋子可以滑动到空位中,任何棋子都不能移动到障碍位中,且障碍位不可移动。游戏的目的是要达到一个特定的目标状态。

以下为一个十二数码游戏的例子:

图一. 十二数码游戏示例

问题表示

本次作业中,状态由一个矩阵表示,0表示空位置,1-12表示棋子,-1表示障碍物,为简化问题,本次作业障碍物的位置固定,即在矩阵的(2,2)和(4,2)位置固定为-1。其余0-12数字任意放置。下图为一个例子:

2 0 3

1 -1 5

4 6 7

8 -1 9

10 11 12

定义4个动作, U代表up,即对空位0棋子上移,D代表down,即对空位0棋子下移,L代表left,即对空位0棋子左移,R代表right,即对空位0棋子右移。所有动作均要合法。

本作业中,需要读取初始状态及目标状态,并实现两个求解八数码问题的算法:A*搜索及迭代深入A*搜索(IDAS),使用以下两种启发函数:

h1(n) = number of misplaced tiles(错位的棋子数)

h2(n) = total Manhattan distance(所有棋子到其目标位置的水平竖直距离和)

最后输出从初始状态到目标状态的动作序列。

迭代A*搜索算法的提出是为了解决A*搜索在空间复杂度上的缺点,将迭代深入的思想用在启发式搜索上。IDA*和典型的迭代深入算法最主要的区别就是所用的截断值是f耗散值(g+h)而不是搜索深度;每次迭代,截断值是超过上一次迭代阶段值的节点中最小的f耗散值。以下为迭代A*搜索算法。

作业要求

1.统一从命令行输入,输出到命令行

2.输入格式为两个5*3的矩阵格式,如下图

上面一个矩阵为初始状态,中间空一行,下面的矩阵为目标状态。其中两个矩阵的(2,2)位置和(4,2)位置固定为-1,为障碍物;其余位置为0—12个数字任意放置,每个数字之间一个空格,每行行末回车。为方便测试,请严格按照上述输入格式。我们会生成许多测试用例,每个测试用例的两个矩阵的障碍物位置固定,即在(2,2)和(4,2)位置设置为-1,其余数字任意放置。

3.输出为动作序列,例如,字母大写,

字母之间隔一个空格。输出的动作序列应为从初始状态开始,到目标状态结束时,中间经过的所有的棋子操作动作。在测试时,我们会从输入状态开始,执行你的输出动作序列,看你的动作序列是否合法,通过此动作序列能否到达目标状态等。

4.实现4个算法,即,使用启发函数h1(n)的A*算法,使用启发函数h2(n)的

A*算法,使用启发函数h1(n)的IDA*算法,使用启发函数h2(n)的IDA*算法。

5.比较使用不同的启发函数h1,h2的A*搜索及迭代深入A*搜索的性能,并分析

性能差异的原因。

6.在windows平台下,使用c或c++编写(不要使用c++ 11的特性)。提交4

个源文件AStar_h1.c/cpp, AStar_h2.c/cpp, IDAStar_h1.c/cpp,

IDAStar_h2.c/cpp , 以及编译之后的相应的可执行文件,程序要能够编译运行,可用readme对你的程序进行说明(如果有必要的话)。

7.严禁抄袭,我们会用软件进行代码查重,4个算法都要求实现,我们会查看

源代码,严禁只实现一个算法,其余3个用该算法代替,虽然最终都能测试通过。一旦发现上述情况,以0分计。

P2: N皇后问题(60%)

8皇后问题:在8*8格的国际象棋上摆放八个皇后,使其不能相互攻击,任意两个皇后都不能处于同一行、同一列或同一斜线上。

上图是两种合理的摆法,点表示没有摆放皇后的位置,“Q”表示摆放皇后的位置。

8皇后问题可以拓展成为N皇后问题:N*N的棋盘上摆放N个皇后,使其不能相互攻击,任意两个皇后都不能处于同一行、同一列或同一斜线上。

这个问题的难点在于,时间复杂度随着问题规模是指数型增长的,高效解决这个问题是本作业的重点。

问题表示:

在向量try[1…N]中存放第1行至第N行皇后摆放的列坐标。即try[i]表示第i 个皇后摆放在(i,try[i])位置上。

若N个皇后不相互攻击,则称try[1…N]是N-promising的。

形式化:对?i,j∈[1,N],若i≠j,有:

try[i]?try[j]?{i?j,0,j?i} (1) 若上式成立,则;

(1)无行冲突,因为第i个皇后放在第i行

(2)无列冲突,try[i]-try[j]不为0

(3)无135°对角线冲突:若第i行和第j列的皇后有此冲突,则try[i]-try[j] = j-i。

(4)无45°对角线冲突:若第i行和第j列的皇后有此冲突,则try[i]-try[j] =i-j。

作业要求:

(1)实现一个N皇后问题的算法。(25%)

输入:皇后个数N。

输出:三个满足问题要求的皇后摆放位置序列try[1..3][1…n]。

函数格式:

size_t **NQueen(size_t Queen_number)

(2)空间复杂度:可解决的问题规模(N)越大越好。(5%)

(3)时间复杂度:在给定规模(N)下,解决速度越快越好。(30%)

采用随机算法的同学,我们将测试一定次数对结果取平均值作为最终结果。

请将你的算法如何节省存储空间,提升算法效率的思想写在说明文档内。

提交格式:

3个文件:

<1>一个P1的.c/.cpp文件,包含as,idas这2个函数相应的部分,和必要的include,其余部分由助教自行添加(包括main函数,结果正确性测试)。需要添加的include如下(如果有其他需要的请同学们自行添加,以下1个是必须添加的,方便我们进行修改):

#include

<2>一个P2的.c/.cpp文件,包含NQueen函数相应的部分,和必要的include,其余部分由助教自行添加(包括main函数,时间统计,结果正确性测试)。需要添加的include如下:

#include

#include

#include

#include

使用linux操作系统的同学,请在自己程序提交之前再添加第二行和第三行。为了保证测试平台的统一,我们会把所有程序都移植到windows下。请同学们避免使用C++的高级特性以及STL(这个应该用不到)中的数据结构和函数,以防实现不一样造成差错。

<3>一个说明文档,包括同学们解决N皇后问题的算法说明,时间、空间复杂度的分析。

请同学们把以上3个文件压缩成名为“学号(字母大写)_姓名”.rar/zip等格式的压缩包。邮件主题为“人工智能第一次实验”,发送到任意一位助教的邮箱。

Caution:

请大家独立完成,我们会严格检查。

国家开放大学C语言程序设计A第一次形考任务及答案

一、选择题(共40分,每小题2分) 题目1 在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为()。 A. main B. MAIN C. name D. function 题目2 C语言源程序文件的缺省扩展名为()。 A. cpp B. exe C. obj D. c 题目3 由C语言目标文件连接而成的可执行文件的缺省扩展名为()。 A. cpp B. exe C. obj D. c 题目4 程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用的分隔符为()。 A. 空格或逗号 B. 逗号或回车 C. 逗号或分号

D. 空格或回车 题目5 每个C语言程序文件的编译错误被分为()。 A. 1类 B. 2类 C. 3类 D. 4类 题目6 不符合C语言规定的复合语句是()。 A. {} B. {;} C. {x=0;} D. {y=10} 题目7 C语言程序中的基本功能模块为()。 A. 表达式 B. 标识符 C. 语句 D. 函数 题目8 在一个函数定义中,函数头包括的3个部分依次为函数类型、函数名和()。 A. 表达式 B. 语句 C. 参数表

D. 函数体 题目9 在一个程序文件中,若要使用#include命令包含一个用户定义的头文件,则此头文件所使用的起止定界符为一对()。 A. 尖括号 B. 双引号 C. 单引号 D. 花括号 题目10 在C语言程序中,多行注释语句使用的开始标记符为()。 A. // B. /* C. */ D. ** 题目11 在printf()函数调用的格式字符串中,若使用格式符为“%c”,则对应输出的数据类型为()。 A. char B. int C. float D. double 题目12 在printf()函数调用的格式字符串中,若使用格式符为“%5d”,则规定对应输出的数据占用的字符位置个数为()。

C++程序设计 第一次作业 三角形计算

第一次作业 一、选择题 1.下面说法中,____不是构造函数的特征 A.构造函数的函数名与类名相同B.构造函数可以重载 C.构造函数可以设置默认参数D.构造函数必须指定类型说明 2.下面对于派生类的描述中,不正确的是____ A. 一个派生类可以作为另一个派生类的基类 B. 派生类至少有一个基类 C. 派生类的成员除了它自己的成员外,还包含了它的基类成员 D. 派生类中继承的基类成员的访问权限到派生类保持不变 二、填空题 1.面向对象程序设计以对象为构造程序的基本单位,具有____、____、____等特点2.按照访问方式,C++类中的成员可以分为____成员、____成员和____成员 三、编程题 1、类和对象 定义一个三角形类Triangle,要求: 定义求三角形面积方法 定义求三角形周长方法 定义打印三角形信息方法,打印周长、面积和三条边长 定义一个函数,比较两个三角形面积,并返回面积较大的三角形的对象引用 补充信息: (1)已知三角形三边a,b,c,则 p=(a+b+c)/2 S=√[p(p-a)(p-b)(p-c)] (2)求平方根的函数原型: math.h头文件,函数原型为double sqrt(double); #include #include #include #include #define random(x) (rand()%x) using namespace std; main() { int i,j; for(j=0;j<=10;j++) { //srand(i++); cout<

Java程序设计在线作业-单选题2

Java程序设计在线作业2 一、单选题(共 10 道试题,共 30 分。) 1. 下列程序的输出结果是import java.io.*; public class abc { public static void main(String args[]) { String s1="Hello!"; String s2=new String("World!"); System.out.println(s1.concat(s2)); } } A. false B. Hello! C. Hello!Wofld! D. 12 2. 在浏览器中执行applet 程序,以下选项中的哪个方法将被最先执行()。 A. init() B. start() C. destroy() D. stop() 3. Java语言的类型是() A. 面向对象语言 B. 面向过程语言 C. 汇编程序 D. 形式语言 4. 下列哪一项不属于Awt布局管理器?() A. GridLayout B. CardLayout C. BorderLayout D. BoxLayout

5. 下面代码的执行结果是什么?( )<% x=3; %><% int x=5; %><%! int x=7; %> x = <%=x%>, <%=this.x%> A. x = 3, 5 B. x = 3, 7 C. x = 5, 3 D. x = 5, 7 6. Java Applet 源程序文件的扩展名为()。 A. .java B. .class C. .html D. .exe 7. 在Java Applet程序用户自定义的Applet子类中,一般需要重载父类的()方法来完成一些画 图操作。() A. start() B. stop() C. init() D. paint() 8. 阅读下面的代码,第10行的语句将调用哪个方法?() 1. class Person { 2. public void printValue(int i, int j) {/*…*/ } 3. public void printV alue(int i){/*...*/ } 4. } 5. public class Teacher extends Person { 6. public void printValue() {/*...*/ } 7. public void printValue(int i) {/*...*/} 8. public static void main(String args[]){ 9. Person t = new Teacher(); 10. t.printValue(10); 11. } 12. } A. 行2 B. 行3 C. 行6

C语言程序设计大作业报告模板

《C语言程序设计》大作业报告 1.目的 掌握所学C语言程序设计的方法,熟悉所学语言的开发环境及调试过程,熟悉所学C语言中的数据类型,数据结构、语句结构、运算方法,巩固和加深对理论课中知识的理解,提高学生对所学知识的综合运用能力。通过综合设计要求达到下列基本技能: 1.培养查阅参考资料、手册的自学能力,通过独立思考深入钻研问题,学会自己分析、解决问题。 2.通过对所选题目方案分析比较,确立方案,编制与调试程序,初步掌握程序设计的方法,能熟练调试程序。 2.作业内容

熟练掌握所学语言的基本知识:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。进一步掌握各种函数的应用等。 3.要求: 1.要求每个同学都要认真对待,积极参与。 2.独立完成,不能抄袭。 3.课程设计结束时每位同学必须完成《大作业报告册》,其中包含设计源 代码和设计思路。 4.不符合要求的程序、设计报告、抄袭的设计报告或源程序代码、在设 计中完全未参与的将作不及格处理。 5.统一格式,A4打印,按时提交。 4.题目:设计要求:编写一个程序,求3x4数组的转置矩阵。要求在main函数里面读数,在change函数里面把矩阵转置。 5.程序设计 设计思路:1是先定义两个数组,一个是a[3][4],另一个是b[4][3]。2是将随便输入的12个数输入到a[3][4]。3是在change函数中将a[3][4]中值通过for循环的镶嵌将数组a[3][4]的值赋值给数组b[4][3]。4在主函数中将数组b[4][3]通过for循环的嵌套输出。 代码

C语言程序设计入门经典例题

1、加法练习程序:由用户通过键盘输入加数和被加数,程序显示加法式子,用户通过键盘作答后,程序给出正确与错误提示信息。要求:利用C的选择语句if条件语句或switch 开关语句,键盘输入数据前,程序会出被输入数据的信息提示。 #include void main(){ int a,b,c; printf("please put an addend:\n");scanf("%d",&a); printf("please put an augend:\n");scanf("%d",&b); printf("please answer the question:a+b=?");scanf("%d",&c); if(a+b==c) printf("very good!"); else printf("wrong! "); } 个人感觉这个程序最不好的地方是,不管回答正确还是回答错误,程都会立即结束,所以我用了do…while实现一个回答错误之后获得再次回答机会的循环,则程序修改如下: #include void main(){ int a,b,c; printf("请输入一个加数:\n");scanf("%d",&a); printf("请输入一个被加数:\n");scanf("%d",&b); do { printf("请回答:a+b=");scanf("%d",&c); if(a+b!=c) printf("请再想一想\n"); } while(a+b==c) printf("回答正确!"); } 2、判闰年程序:判断某一年是否闰年? 要求:程序首先提示用户从键盘输入4位数年份,程序能显示“XXXX年是闰年”或“XXXX年不闰年”的输出信息。 算法:year 是闰年,即year能被4整除但不能被100整除,或 year 能被 400 整除。其对应的C逻辑表达式为:(year % 4 = = 0 && year % 100 != 0) || (year % 400 = = 0) 或: (!(year % 4) && year % 100) || !(year % 400 ) 程序中可设置1个变量leap来代表是否闰年的信息,闰年:leap=1; 不闰年:leap=0。 #include void main() int year; printf("请输入4位数年份:");scanf("%d",&year); if(year%4==0&&year%100!=0||year%400==0)//闰年就是能被4整除但不能被100整除及能被400整除的

C语言课程设计大作业62994

郑州大学 课程报告 课程名称:C语言程序设计 专业班级:(15)班 学生姓名:谢* 学号: 20127611*** 任课教师:赵** 学期: 2012-2013-2 课程报告任务书

开发一个通讯录管理系统,基本信息包括:编号、姓名、性别、出生年月、固定电话、手机号、电子邮件等基本信息(也可以根据自己情况进行扩充)。使之能提供以下基本功能: (1)通讯录等信息录入功能(注:数据等要求用文件保存)--输入 (2)通讯录信息的浏览功能--输出 (3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式): ①按电话号码进行查询②按姓名查询等③按照年龄排序④按姓名排序等(4)通讯录条目的删除与修改等 扩展功能:可以按照自己的程度进行扩展。比如(1)简单的权限处理(2)报表打印功能(3)模糊查询,如姓张的人员等;或者给定电子邮件的部分进行查询等(4)给定指定年龄范围之内的查询等等。 总之,可以根据自己需求进行分析功能,成绩评定按照难度进行区分。 成绩评定教师:

一. 需求分析 1,具有数据的插入、修改、删除、显示和查询功能的电话簿管理程序。 2,数据包括:人名、工作单位、电话号码和E-MAIL地址。 3,可对记录中的姓名和电话号码进行修改。 4,可增加和删除记录。 5,可显示所有的保存记录。 6,可按人名或电话号码进行查询。 分析 建议采用结构体数组和文件系统实现。结构体成员包括人名、工作单位、电话号码和E-MAIL地址。 根据题目的要求程序应该采用结构体数组和文件系统实现。应该有文件的操作功能;在程序中应该包括输入、显示、删除、查询、添加、修改、保存、加载和退出的功能。 二、概要设计 (1).程序的模块组成及各个函数的功能: 程序的模块组成: 主函数:main(); 输出数据函数:printf(); 读取数据函数:scanf(); 显示记录函数:Display(); 删除记录函数:shanchu(); 查找记录函数:chaxun(); 自定义清屏函数:system(“cls”); 自定义输入函数:input(); 字符输入函数:getchar(); 修改数据函数:xiugai(); 保存数据函数:baocun(); 排序数据函数:paixu(); 各函数的主要功能:

国家开放大学C语言程序设计A第一次形考任务与答案(20201127230652)

一、选择题(共40分,每小题2分) 1 题目1 在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为()* A.main B. MAIN C. name D. function 题目2 1 C语言源程序文件的缺省扩展名为()。 A. cpp B. exe C. obj * D.c 题目3 1 由C语言目标文件连接而成的可执行文件的缺省扩展名为()。 A. cpp B. exe C. obj D. c 题目4

程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用的分隔符为() A. 空格或逗号 B. 逗号或回车 C. 逗号或分号

* D.空格或回车 题目5 1 每个C语言程序文件的编译错误被分为()。 A. 1类 ” B.2 类 C. 3类 D. 4类 题目6 不符合C语言规定的复合语句是()。 A. {} B. {;} C. {x=0;} + D.{y=10} 题目7 1 C语言程序中的基本功能模块为()。 A. 表达式 B. 标识符 C. 语句 D. 函数 题目8 在一个函数定义中,函数头包括的3个部分依次为函数类型、函数名和()

B. 语句 C. 参数表 D. 函数体 题目9 1 在一个程序文件中,若要使用#include命令包含一个用户定义的头文件,则此头文件所使用 的起止定界符为一对()。 A. 尖括号 * B.双引号 C. 单引号 D. 花括号 题目10 L 在C语言程序中,多行注释语句使用的开始标记符为()。 A. // + B./* C.*/ D ** 题目11 1 在printf()函数调用的格式字符串中,若使用格式符为“%C',则对应输出的数据类型为()。

计算机程序设计基础教程第一次作业

浙江人才专修学院 成人高等学历教育《计算机程序设计基础教程》课程 作业答题纸 (第一次作业) 学校:班级名称: 学号:____姓名:_____手机号码:_____温馨提示:1、请正确完整的填写以上个人资料,以便学校登记平时成绩;2、第一次作业请于年月日前上交到中河大厦前台、朝晖九区学生处,第二次作业请于年月日前上交到中河大厦前台、朝晖九区学生处,逾期将酌情扣分,未完成作业者平时成绩为零分。(学校期末总评成绩作业占15%) 一、选择题 1.决定控件上文字的字体、字形、大小及效果的属性是() A.Text B.Caption C.Name D.Font 2.如果将布尔常量值TRUE赋值给一个整型变量,则整型变量的值为()A. 0 B.-1 C.TRUE D. FALSE 3.运行时,当用户向文本框输入新的内容,或在程序代码中对文本框的Text 属性进行赋值从而改变了文本框的Text属性值时,将触发文本框的()事件 A.Click B.Dblclick C.Gotfocus D.Change 4.计算结果为0的表达式是() A.Int(2.4)+Int(-2.8) B. Int(2.4)+Round(-2.8) C.Fix(2.4)+Int(-2.8) D. Fix(2.4)+Fix(-2.8) 5.下列各组常量的声明正确的是() A.Const C as 3 B.Const c=1/3 C.Public I=3 D.Puclic I=1/3 6. 以下能判断是否到达文件尾的函数是()。 A) BOF B)LOC C)LOF D)EOF 7. 以下声明语句中错误的是()。 A)Const var1=123 B)Dim var2 = “ABC”C)Dim var3(20) D)Static var4 As Integer 8. 在Visual Basic中,Cls方法可以清除()中的内容。 A)Text B)Label C)Command D)Picture 9. 以下叙述中错误的是()。 A)在工程资源管理器窗口中只能包含一个工程文件及属于该工程的其他文件

《java程序设计》作业答案

《JA V A程序设计》作业答案 一、选择题 1、编译HelloWorld.java的正确命令是: C) javac HelloWorld.java 2、正确运行HelloWorld.java的正确命令是: A)java HelloWorld 3、下面程序代码,使用多行注释正确的是: C)/* int k=9; int j=8; k = k + j; */ 4、long型的取值范围是: D)-263~263-1 5、下面不属于Java保留字的是: C)malloc 6、下面属于非法的Java标识符的是: D) abc-d 7、对与System.out.println()语句解释合理的是: C)执行后输出一个空行 8、阅读下面的代码,回答问题, for( m = 0 ; m > -2 ; m -- ){….} For循环执行多少次: C)2 9、阅读下面的代码,回答问题, for( m = 0; m < 5; m++ ) { System.out.print( m + "," ); if( m == 3 ) break; } 执行结果是: C)0,1,2,3, 10、阅读下面的代码,回答问题, public class Ex { int x = 1; void m() { int x = 3; System.out.print( "x= " + x); } public static void main( String[] args ) { Ex ex = new Ex();

ex.m(); } } 执行结果是: B)x=3 11、下面语句在编译时不会出现错误信息的是: a) float f = 1.3; b) char c = "a"; c) byte b = 257; d) boolean b = null; e) int i = 10; 12、编译和运行下面的代码,会有什么结果产生: public class MyClass { public static void main(String arguments[]) { amethod(arguments); } public void amethod(String[] arguments) { System.out.println(arguments); System.out.println(arguments[1]); } } a) 错误,静态方法不能直接引用非静态方法b) 错误,主方法有错误 c) 错误,数据定义有错误d) 方法amethod必须被声明为String型 13、编译期间会出错的是: a) import java.awt.*; package Mypackage; class Myclass {} b) package MyPackage; import java.awt.*; class MyClass{} c) /*This is a comment */ package MyPackage; import java.awt.*; class MyClass{} 14、byte型的变量的表示范围为: a) -128 to 127 b) (-2 power 8 )-1 to 2 power 8 c) -255 to 256 d) 依赖Java虚拟机而定 15、在命令行运行命令:java myprog good morning 会有什么结果显示出来: public class myprog{ public static void main(String argv[]) { System.out.println(argv[2]) } } a) myprog b) good c) morning

C语言程序设计实习报告

手机通讯录管理系统一、设计题目的任务和内容 任务:本程序是非数值计算型算法设计,我设计出了通讯录管理系统的基本功能,并设计了简单的界面。本程序主要考察对自定义函数的熟悉程度,本程序主要使用的是数组的相关操作,包括结构体数组的输入、输出、查找、删除等。我设计的这个通讯录系统也初步实现了人员信息的显示、删除、查找、修改、添加等必要的功能。 具体要求: ◆建立通讯录信息,信息包含、姓名、分类(1、办公类2、个人类3、商务类)、电话、 电子邮箱等; ◆将通讯录保存在文件中; ◆查看功能:可按1、办公类2、个人类3、商务类分类查询,当选中其中一类时,显示出 此类所有数据中的姓名和电话号码。 ◆增加功能:能录入新数据。当录入重复姓名和电话号码时,则提示数据录入重复并取消 录入;当通讯录中超过15条信息时,存储空间已满,不能录入新数据;录入的新数据能按递增的顺序自动进行条目编号。 ◆修改功能:选中某个人的姓名是,可对此人的相应数据进行修改。 ◆删除功能:选中某个人的姓名是,可对此人的相应数据进行删除并自动调整后续条目编 号。 系统功能需求分析: 查询:查询通讯录记录 添加:添加通讯录记录 显示:显示通讯录记录 删除:删除通讯录记录 修改:修改通讯录记录

二、总体设计思路 本系统首先设计出了主函数,然后根据去要实现的功能分别设计拉,显示、删除、查找、修改、添加功能的子函数。在显示的函数设计过程中首先运用拉文件的读取等必要的知识通过把文件的内容读取到内存然后打印出来。删除函数的设计是首先从文件内找到要删除的人,然后通过写一个实现删除目的的FOR循环将该人从内存里删除,然后再用写的方式打开文件,将内存内的信息写入文件,实现删除。查找也是先打开文件,用一个字符串对比的方法找出用户要查找的人,然后打印出来。修改也大体和删除相同,添加函数在设计时通过申请一片空间,然后通过指针将需要添加的信息添加进去,从而实现添加功能。 系统功能模块图: 输入新信息:可输入新的数据。 添加:可以添加通讯录记录,依次输入姓名、电话号码、分类、电子邮箱后,会提示是否继续添加。 删除:输入姓名删除,输入欲删除的那个人的名字后,会自动删除他(她)的记录内容 查询:可按1、办公类2、个人类3、商务类分类查询 修改:输入欲修改的那个人的名字后,再依次输入姓名、电话号码、分类、电子邮箱即可完成修改。 下面就是总的程序流程图:

C语言程序设计第一次月考试题

C语言程序设计第一次月考试题(2011.9) 班级:姓名:总分: 一、选择题(每小题3分,共60分) 1.一个C语言程序是由() A)一个主程序和若干子程序组成B)函数 C)若干过程组成D)若干子程序组成 2.下面4个选项中,均是C语言关键字的选项是() A)auto enum include B)switch typedef continue C)singed union scanf D)if struct type 3. 下面4个选项中,均是不合法的用户标识符的选项是() A)A P_0 do B)float 1a0 -A C) b—a goto int D) _123 temp INT 4.下面4个选项中,均是不合法的整形常量的选项是() A)- - 0f1 - oxfff 0011 B)- oxcdf 017 12,456 C) – 018 999 5e2 D)-0x48eg -068 03f 5. 下面4个选项中,均是不合法的浮点数的选项是() A)160.0.12 e3 B)123 2e4.2 .e5 C)-.18 123e4 0.0 D)-e3 .234 1e3 6.下面4个选项中,均是不合法的转义字符的选项是() A)‘\‖‘?\\‘?\xf‘B)‘\1011‘?\‘?\a‘ C) ?\011‘?\f‘?\}‘D)‘\abc‘?\101‘?x1f‘ 7.下面不正确的字符串常量是() A)‘abc‘B)‖12‘12‖C) ‖0‖D)‖‖ 8.Int k=7, x=12; 则以下能使值为3的表达式是() A)x%=(k%=5) B)x%=(k- k%5) C) x%=k-k%5 D)(x%=k) – (k%=5) 9.若x、i、j和k都是int型变量,则执行表达式x=(i=4,j=16,k=32)后x的值 是() A) 4 B)16 C)32 D)52 10.假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是( ) A) 7 B) 8 C)6 D)2 11.已知各变量的类型说明如下: Int k, a, b; unsigned long w=5; double x=1.42; 则以下不正确的表达式是() A) x%(-3) B)w+=-2 C) k=(a=2,b=3, a+b) D)a+=a-=(b=4)*(a=3) 12.已知字母A的ASCII码为65,且定义c2为字符型变量,则执行语句c2=‘A‘+‘6‘-?3‘;后;c2中的值为() A) D B) 68 C)不确定的值D) C

CAD程序设计课程第一次作业

第一作业练习 一、目的要求 1、了解如何启动,熟悉编程界面。 2、在环境下编辑并运行程序。 3、环境下查找程序错误。 4、了解赋值与求值函数及主要计算函数的功能、格式及应用。 二、作业内容 1、按下列步骤试运行程序 1)启动 启动后,可采用以下任一种方法进入: : 或者 菜单→→→ 2)在文本编辑区键入以下程序

该程序的功能是定义一个画矩形的函数,此函数有四个形参:x 、y 、p1 及分别代表矩形的长、宽、基点和线宽,用户调用该函数时用实际的数值赋予该四个形参即可画出任意尺寸的矩形。注::程序中可能存在错误请自行查找 3)保存文件: 下拉菜单→→保存该文件,取名为: 4)文件装入内存 : ( “”) 程序如无语法错误,将返回函数名;如有语法错误,将返回错误提示用户需回到编辑器中,修改程序。注意:如果用函数加载,后面的文件需要标明盘符/文件夹等 5) 运行应用程序 在图形窗口中:: ( 80 60 ‘(40 40) 0.4)并回车,程序执行结果自动画出,基点在40,40点,宽80, 高60,线粗0.4的矩形。

2、用表达式计算下列各式 1).7154.2 程序段:( x ( 2.154 (/ 1.0 7))) 结果: 1.11585 2). 44.7856.3445 .1133.1877.1655.23??-? 程序段:( x (/ (- (* 23.55 16.77) (* 18.33 11.45))(* 34.56 78.44))) 结果: 0.0682636 3).3 23299.855.278.634.355.4+?+ 程序段: ( x ( (+ ( 4.55 2) (/ (* 3.34 ( 6.78 3)) (+ ( 2.55 2) ( 8.99 3)))) 0.5)) 结果:4.70346 4).521 程序段:( x ( ( 5 21))) 结果:20.9849 5)45

Java程序设计课程作业

Java程序设计课程作业 第一章绪论 1、安装Java SDK到你的电脑中。 2、选择安装一种Java开发工具到你的电脑中。Jcreater、NetBeans、Eclipse 3、编译并运行一个“Hello World”Java程序。 程序代码: // public class App2_1 { public static void main(String[]args) { System.out.println("hello Word"); } } 4、编译并运行一个Java Applet程序。 答:编译成功,不过浏览器不显示自己的Applet程序,还在学习中,错误的原因是自己电脑上java的安全设置的原因,修改后运行成功。 第二章Java语法基础 1、下列表达式是否有错?若有错,请说明何处出现何种错误;若无错,请给出其值。 (1) 3+4<<2^-8 没有错误,运行结果为-28 (2) 36>>2*4&48<<8/4+2 运行结果为0

有错误,||这个运算规律是两边均为boolean型 (4) 2*4&&0<2||4%2 有错误,||这个运算规律是两边均为boolean型 2、任意准备一份学生成绩表,其中包括至少3门课程、每门课程至少10名同学的成绩。请编写程序完成以下功能:(1) 统计并输出各门课程的平均成绩。(2) 输出等级表:优、良、中、及格及不及格。 import java.util.*; class student{ String num; doublemath; doubleenglish; doublechinese; } publicclass Test{ publicstaticvoid main(String[]agrs){ student stu[]=new student[11]; for(int i=0;i<10;i++) stu[i]=new student(); Scanner reader=new Scanner(System.in); System.out.println("请依次输入十个同学的数学,英语。语文的成绩:"); for(int i=0;i<=10;i++){ System.out.println("第"+(i+1)+"同学的数学,英语。语文的成绩:"); stu[i].math=reader.nextInt(); stu[i].english=reader.nextInt(); stu[i].chinese=reader.nextInt(); } double sum=0; for(int i=0;i<10;i++) sum=sum+stu[i].math; float A=(float)sum/10; System.out.println("数学平均成绩:"+A); //int sum;

C语言程序设计习题及答案

C语言程序设计 一、选择题(共40分,每小题2分) 1、以下叙述不正确的是() A、一个C源程序可由一个或多个函数组成 B、一个C源程序必须包含一个main函数 C、C程序的基本组成单位是函数 D、在C程序中,注释说明只能位于一条语句的后面 2、下列四个选项中,是不合法的用户标识符的选项是() A、abc B、12AC C、sun D、 A2 3、设有语句int a=4;则执行了语句a+=a- =a*a后,变量a的值是() A、-24 B、0 C、4 D、16 4、下列运算符中优先级最高的是() A、< B、+ C、&& D、== 5、在C语言中,运算对象必须是整型数的运算符是() A、% B、/ C、%和/ D、 + 6、以下关于运算符的优先顺序的描述正确的是() A、关系运算符<算术运算符<赋值运算符<逻辑与运算符 B、逻辑与运算符<关系运算符<算术运算符<赋值运算符 C、赋值运算符<逻辑与运算符<关系运算符<算术运算符 D、算术运算符<关系运算符<赋值运算符<逻辑与运算符 7、在C语言中,如果下面的变量都是int类型,则输出的结果是()sum=pad=5;pAd=sum++,pAd++,++pAd; printf(“%d\n”,pad);

A、7 B、6 C、5 D、4 8、x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是() A、 INPUT x、y、z; B、scanf(“%d%d%d”,&x,&y,&z); C、 scanf(“%d%d%d”,x,y,z); D、read(“%d%d%d”,&x,&y,&z); 9、假定从键盘输入23456< 回车 >,下面程序的输出结果是:() void main ( ) { int m,n; scanf(“%2d%3d”,&m,&n); printf(“m=%d n=%d\n”,m,n); } A、m=23 n=45 B、m=234 n=56 C、m=23 n=456 D、语句有错误 10、若运行时,给变量x输入12,则以下程序的运行结果是() main( ) { int x,y; scanf(“%d”,&x); y=x>12x+10:x-12; printf(“%d\n”,y); } A、 0 B、 22 C、 12 D、10 11、C语言中while和do-while循环的主要区别() A、do-while的循环体至少执行一次 B、while 的循环控制条件比do-while的循环控制条件严格 C、do-while允许从外部转到循环体内

CAD程序设计课程第一次作业讲解学习

第一作业Visual LISP练习 一、目的要求 1、了解如何启动Visual LISP,熟悉VLISP编程界面。 2、在Visual LISP环境下编辑并运行程序。 3、Visual LISP环境下查找VLISP程序错误。 4、了解VLISP赋值与求值函数及主要计算函数的功能、格式及应用。 二、作业内容 1、按下列步骤试运行程序 1)启动Visual LISP 启动AutoCAD后,可采用以下任一种方法进入VLISP:Command: VLISP或者VLIDE 菜单→Tools→AutoLISP→Visual LISP Editor 2)在文本编辑区键入以下程序

该程序的功能是定义一个画矩形的函数,此函数有四个形参:x 、y 、p1 及lw分别代表矩形的长、宽、基点和线宽,用户调用该函数时用实际的数值赋予该四个形参即可画出任意尺寸的矩形。注::程序中可能存在错误请自行查找 3)保存文件: 下拉菜单→File→Save 保存该文件,取名为:box.lsp 4)文件装入内存 command: (l oad “box”) 程序如无语法错误,将返回函数名box;如有语法错误,将返回错误提示用户需回到VLISP 编辑器中,修改程序。注意:如果用load函数加载,后面的文件需要标明盘符/文件夹等5) 运行应用程序 在AutoCAD图形窗口中:Command: (box 80 60 ‘(40 40) 0.4)并回车,程序执行结果自动画出,基点在40,40点,宽80, 高60,线粗0.4的矩形。

2、用VLISP 表达式计算下列各式 1).7154.2 程序段:(setq x (expt 2.154 (/ 1.0 7))) 结果: 1.11585 2). 44.7856.3445 .1133.1877.1655.23??-? 程序段:(setq x (/ (- (* 23.55 16.77) (* 18.33 11.45))(* 34.56 78.44))) 结果: 0.0682636 3).3 23299.855.278.634.355.4+?+ 程序段: (setq x (expt (+ (expt 4.55 2) (/ (* 3.34 (expt 6.78 3)) (+ (expt 2.55 2) (expt 8.99 3)))) 0.5)) 结果:4.70346 4).Log521 程序段:(setq x (log (expt 5 21))) 结果:20.9849 5).tag45

Java程序设计大作业实验报告

目录 一、前言 (2) 二、需求分析 (3) 三、系统总体设计 (3) 3.1系统总体设计系统思路 (3) 3.2数据库设计 (4) 3.2.1 login1表的设计和数据 (4) 3.2.2 student表的设计和数据 (5) 3.2.3 course表的设计和数据 (5) 3.2.4 score表的设计和数据 (5) 3.3系统功能模块设计 (6) 四、系统详细设计 (7) 4.1登录模块 (7) 4.2 学生模块 (7) 4.3 教师模块 (7) 4.4 管理员模块 (8) 五、系统测试及运行结果 (9) 5.1 主界面 (9) 5.2 学生管理中心界面 (9) 5.3 教师管理中心界面 (10) 5.4 管理员管理中心界面 (10)

5.5 查询课表界面 (11) 5.6 查询成绩界面 (11) 5.7 查询教学情况界面 (11) 5.8 查询所有学生成绩界面 (12) 5.9 学生信息管理界面 (12) 5.10 学生成绩管理界面 (13) 5.11 用户管理界面 (13) 六、实验总结 (14) 七、参考文献 (14) 一、前言 随着计算机在人们生活中的普及和网络时代的来临,对信息的要求日益增加,学生信息管理业务受到了较为强烈的冲击,传统的手工管理方式传统的手工管理方式已不能适应现在的信息化社会。如何利用现有的先进计算机技术来解决学生信息管理成为当下的一个重要问题,学生信息管理系统是典型的信息管理系统,其开发主要就是针对前台的页面展示以及后台数据的管理。对于前者,要求应用程序功

能完备,易于使用,界面简单;而对于后者,则要求数据库具有一致性、完整性,并能够依据前台的操作来对应操作后台数据库达到一定的安全性。 本学生信息管理系统主要采用的纯JAVA代码实现图形界面系统的开发,以及数据库知识进行数据的查询,删除,插入和更新。本系统主要分为三个部分:学生模块、教师模块、管理员模块。其中学生模块实现的功能:查询课表信息和查询成绩。教师模块实现的功能:查询课表信息、查询教学情况和查询所有学生的各科成绩。管理员模块实现的功能:课表信息的管理、学生信息管理、学生成绩管理和用户信息管理。 二、需求分析 用JAVA语言实现学生信息管理系统的图形界面的编程。主要实现以下几个重要功能: ①实现三种不同身份(学生、教师、管理员)登录学生信息管理系统。(其中的数据信息保存在数据库中)

C语言大作业学生信息管理系统

《程序设计综合课程设计》报告 学生姓名: ______ ______ ______ ______________________ 学生班级: ______________________ ____________ ____________ 学生学号: ____________ 指导教师: ______ 2014年6 月 22 日

目录 前言 (2) 第1章Visual C++6.0简介及其优点 (3) 第2章课程设计的目的和要求 (4) (4) 2.2课程设计的要求 (5) 第3章课程设计任务内容 (6) 3.1 需求分析 (6) 3.2可行性分析 (6) 第4章软件使用说明 (7) 第5章总结 .................................................. 错误!未指定书签。附录源程序 学生信息管理系统 前言 学生信息档案的管理对于学校的管理者来说至关重要,学生信息是高等学校非常重要的一项 数据资源,是一个教育单位不可缺少一部分。特别是近几年来,国家政策的调整,我国高等 院校大规模的扩招,给高等院校的教学管理、学生管理、后勤管理等方面都带来不少的冲击。 其包含的数据量大,涉及的人员面广,而且需要及时更新,故较为复杂,难以单纯地依靠人 工管理,而且传统的人工管理方式既不易于规范化,管理效率也不高,目前我国各类高等院 校中还有相当一部分学生档案管理还停留在纸介质的基础上,尤其是中、小学对学生档案的 管理更是落后,这样的管理机制已经不能适应时代发展的要求,其管理方法将浪费许多人力 和物力。随着科学技术的不断提高,计算机科学与技术日渐成熟,计算机应用的普及已进入 人类社会生活的各个领域,并发挥着越来越重要的作用。这种传统的手工管理模式必然被以 计算机为物质基础的信息管理方法所取代。 作为计算机应用的一部分,使用计算机对学生档案进行管理,有着手工管理所无法比拟 的优点,如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。 这些优点能够极大地提高学生档案管理的效率,也是学校向科学化、正规化管理发展的必要 条件,更是各个高等院校与世界接轨的重要条件。

java语言程序设计作业答案

Java语言程序设计(郑莉) 第二章习题答案 1.什么是对象、类,它们之间的联系? 答:1)对象是包含现实世界物体特征的抽象实体,它反映系统为之保存信息和与它交互的能力。对象是一些属性及服务的封装体,在程序设计领域,可以用“对象=数据+作用于这些数据上的操作”来表示。现实生活中对象是指客观世界的实体;在程序中对象是指一组变量和相关方法的集合。 2)类是既有相同操作功能和相同的数据格式的对象的集合与抽象! 3)两者的关系:对象是类的具体实例.。 4.请解释类属性、实例属性及其区别。 答:实例属性,由一个个的实例用来存储所有实例都需要的属性信息,不同实例的属性值可能会不同。 5.请解释类方法、实例属性及其区别。 答:实例方法表示特定对象的行为,在声明时前面不加static修饰符,在使用时需要发送给一个类实例。 类方法也称为静态方法,在方法声明时前面需加static修饰符,类方法表示具体实例中类对象的共有行为。 区别:实例方法可以直接访问实例变量,调用实例方法,实例方法可以直接访问类变量,调用类方法;类方法可以直接调用类变量和类方法,类方法不能直接调用实例变量和实例方法; 6.类的访问控制符有哪几种?具体含义及其区别。 答:类的访问控制符只有public(公共类)及无修饰符(默认类)两种。 区别:当使用public修饰符时表示所有其他的类都可以使用此类;当没有修饰符时,则只有与此类处于同一包中的其他类可以使用类。 7类成员的访问控制符有哪几种?他们对类成员分别有哪些访问限制的作用? 答: 类成员的访问控制符有public,private,protecte及无修饰符. public(公有的):用public修饰的成分表示公有的,也就是它可以被其他任何对象访问(前提是对累成员所在的类访问有访问权限). P rivate(保护的):类中限定为private的成员只能被这个类本身访问,在类外不可见。proteced(保护的)用该关键字修饰的成分是受保护的,只可以被同一类及其子类的实例对象访问。 无修饰符(默认的):public,private,protected这个三个限定符不是必须写的。如果不写,则表明是“friendly”,相应的成分可以被所在保重的各类访问。 8简述构造方法的特点? 答: 构造方法主要有以下特点: (1)构造方法的方法名与类名相同; (2)构造方法没有返回类型(修饰符void也不能有); (3)构造方法通常被声明为公有的(public);

相关文档
相关文档 最新文档