第一篇:Java SE考试--编程题总结
线程和进程的区别:
(1)进程是运行中的程序,拥有自己独立的内存空间和资源;
(2)一个进程可以有一个或多个线程组成,且至少有一个线程称为主线程;(3)线程是最小的处理单位,多个线程共享一块内存和资源;
(4)当一个线程改变了所属进程的变量时,其它线程下次访问该变量时得到这种改变。简述什么是多线程。
线程的最主要功能是多任务处理,即多线程。多线程也就是在主线程中有多个线程在运行,多个线程的执行是并发的,在逻辑上“同时”,而不管是不是物理上的“同时”。
多线程和传统上的单线程在程序设计上的区别在于: 由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,由此带来的线程调度、同步等问题是需要重点留意的。
引入线程的优点: 充分利用CPU资源。2简化编程模型。
3简化异步事件处理。4使GUI更有效率。5节约成本 线程状态:
Thread和Runnable区别:
(1)Thread是类,具有线程的所有方法,其对象就是一个线程对象。但继承Thread,就不能再继承其他的类(Java只支持单一继承)。
(2)Runnable是接口,只提供run()方法。实现该接口的类还可以继承其他类,但其对象不是线程对象,不能直接运行,必须通过Thread将其启动。通过Runnable接口创建线程的步骤如下:
1、实例化实现Runnable接口的类;
2、建立一个Thread对象,并将第一步实例化后的对象作为参数传入Thread类的构造方法;
3、通过Thread类的start()方法建立线程。线程优先级:
(1)线程的优先级代表该线程的重要程度。
(2)当有多个线程同时处于可执行状态并等待获得CPU时间时,线程调度系统根据各个线程的优先级来决定CPU分配时间。
(3)优先级高的线程有更大的机会获得CPU时间。
(4)线程的默认优先级值:Thread.NORM_PRIORITY,值为5。每个新线程均继承创建线程的优先级。setPriority()设置线程优先级。
值为MIN_PRIORITY(1)和MAX_PRIORITY(10)之间的值。getPriority()获取线程的优先级值。线程通信:
(1)线程通信的方法:wait()、notify()和notifyAll()(2)调用notify()方法时可以随机选择一个在该对象调用wait()方法的线程,解除它的阻 塞。
(3)调用notifyAll()方法可以唤醒等待该对象的所有线程。但唤醒时无法控制唤醒哪个线程,唤醒过程完全由系统来控制。
(4)notify()方法和notifyAll()方法只能在同步方法或同步块内部使用。产生死锁的原因主要是:
所谓死锁,是指两个或多个线程都在等待对方释放对象资源而进入的一种不可“调节”的状态。
1、因为系统资源不足;
2、进程运行推进的顺序不合适;
3、资源分配不当等。
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。wait()方法区别于sleep()方法的是:
(1)wait()方法调用时会释放对象锁,而sleep()方法不会(2)sleep()使当前线程进入停滞状态(阻塞当前线程),让出CPU的使用(3)sleep()是Thread类的Static(静态)的方法;(4)wait()方法是Object类里的方法;wait()使用notify或者notifyAlll或者指定睡眠时间来唤醒当前等待池中的线程。
(5)wait()必须放在synchronized block中,否则会在运行时扔出”java.lang.IllegalMonitorStateException“异常。
通信协议指网络中传递、管理信息的一些规范。TCP/IP协议,IPX/SPX协议,NetBEUI协议等。
TCP/IP协议
IP协议:网络层协议,保证计算机之间发送和接收数据,能适应各种网络硬件。无连接,不可靠的协议。
TCP协议:端对端的协议,端与端之间建立连接、发送、接收数据以及终止连接。利用重发技术和拥塞控制机制,向应用程序提供可靠通信连接。
区别与联系:IP协议只保证计算机能发送和接受分组数据,而TCP协议则可提供一个可靠的、可流控的、全双工的信息流传输服务。两个协议统称为TCP/IP协议。
A类地址:0-126,默认掩码:255.0.0.0。B类地址:128-191,默认掩码:255.255。C类地址:192-223,默认掩码:255.255.255.0。D类地址:广播地址,E类地址保留。
常用端口以及对应的服务 7:Echo服务端口
21:FTP服务端口
23:Telnet服务端口 25:SMTP服务端口 80:HTTP服务端口 网络API:
(1)Java中有关网络方面的功能都定义在java.net包中。(2)使用InetAddress类封装IP地址和域名
(3)URL由四部分组成。协议名:指明获取资源所使用的传输协议。主机名:指定获取资源的域名。端口:指定服务的端口。文件路径:指定访问的文件名以及路径。URLConnection类:
(1)通过URL的方法openStream()只能从网络上读取数据,如果如要输出数据,就要用到URLConnection类。(2)URLConnection是个抽象类,代表与URL指定的数据源的动态连接。
(3)URLConnection类提供比URL类更强的服务器交互控制,允许用Post或者Put和其他HTTP请求方法将数据送回服务器。Socket的工作步骤:
1根据指定的地址和端口创建一个Socket对象。
2调用getInputStream()方法或getOutputStream()方法打开连接到Socket的输入/输出流。3客户端与服务器根据一定的协议交互,直到关闭连接。4关闭客户端的Socket。ServerSocket的工作步骤:
1根据指定端口创建一个新的ServerSocket对象。
2调用ServerSocket的accept()方法,在指定的端口监听到来的连接。Accpet()一直处于阻塞状态,知道有客户端试图建立连接。这时accpet()方法返回连接客户端与服务器的Socket对象。
3调用getInputStream()方法或getOutputStream()方法打开连接到Socket的输入/输出流。
4服务器与客户端根据一定的协议交互,直到关闭连接。
5关闭服务器端的Socket。6回到第2步,继续监听下一次的连接。多线程Socket通信实现:
服务器总是在指定的端口监听是否有客户端请求,一旦监听到客户请求,服务器就会启动一个专门的服务线程来响应客户请求,而服务器本身在启动完线程之后马上有进入监听状态,等待下一个客户的到来。synchronized两种使用方式:
1.修饰方法,使调用该方法的线程均能获得该对象的锁。2.放在代码块中,修饰对象,当前代码获得对象的锁。。锁定的是对象,而不是方法或代码块。
Swing的结构:
(1)Swing组件位于javax.swing包中,javax是一个Java扩展包。(2)在javax.swing包中,定义了两种类型的组件:
顶层容器(不包含在其他容器中的容器,JFrame,JApplet,JDialog和Jwindow 4个)和轻量级组件。
Swing组件都是AWT的Container类的直接子类和间接子类。布局:
(1)用来管理组件在容器中的布局格式。
(2)FlowLayout, BorderLayout, GridLayout和CardLayout四种。位于java.awt包中。(3)FlowLayout流布局一般用来安排面板中的按钮。它使得按钮呈水平放置,直到同一条线上再也没有适合的按钮。线的对齐方式由align属性确定。(4)BorderLayout边界布局,JFrame的默认布局。
(5)GridLayout网格布局,类似于表格,按照行列排列所有组件,每个单元格大小一样。添加组件使,按照从左至右,自上而下的顺序加入。
(6)CardLayout卡片布局,将加入到容器的组件看作一叠卡片,只能看到最上面的组件 常用的事件类:
java.awt.event包中常用的事件类:
ActionEvent, AdjustmentEvent, ItemEvent, FocusEvent, KeyEvent, MouseEvent, WindowEvent。java.awt.event包中常用的监听接口:
ActionListener,AdjustmentListener, ItemListener, FocusListener, KeyListener, MouseListener, WindowListener。适配器:
(1)扩展监听接口时,有些事件处理方法是不需要的,但必须重写。
(2)出于简化代码的目的,java.awt.event包中提供了一个抽象适配器类,分别实现每个具有多个事件处理方法的监听接口。
(3)继承适配器后,可以仅重写需要的事件处理方法。事件处理的步骤:
1创建监听类,监听类中,事件处理方法中编写事件处理代码 2创建监听对像。
3利用组件的addXXXListener()方法将监听对象注册到组件上 3者区别联系:
监听类:是一个扩展监听接口的类,可以扩展一个或多个监听接口。
事件处理方法:是监听接口中已经定义好的相应的事件处理方法,要重写。监听对象:是监听类的一个实例对象,具有监听功能。
事件用于实现用户界面的交互,是GUI编程的重要组成部分。Java最新的事件处理方法是基于委派事件模型的。
事件包含3个组件:事件对象、事件源和事件处理程序。
事件是一个描述事件源状态改变的对象,不是通过new 创建的,而是由用户操作触发的。一个事件源可能会生成不同类型的事件。可以将一个事件发送到多个监听器对象。
监听类是实现监听接口的类,监听对象是监听类的实例化对象 在组件中注册监听器的方法是:addXxxxListener()。适配器是实现相关监听接口的类,目的是简化程序代码 创建菜单的步骤:
1创建一个JMenuBar菜单栏对象,将其设置到窗体中。
2创建若干个JMenu菜单对象,将其放置到JMenuBar对象中,或按要求放到其他JMenu对象中。
3创建若干个JMenuItem菜单项对中,将其放置到对应的JMenu对象中。JPopupMenu:弹出式菜单 位置不固定、无标题
(JDialog类)模式对话框:必须首先对该对话框进行响应(单击“确定”或“取消”)后,才能对对话框以外的应用程序进行操时;
无模式对话框:可以不响应对话框,对其以外的程序进行操作。JTable类--表格模型 TableModel:
TableModel本身是个接口,若要实现此接口建立表格非常复杂,因此Java提供了两个类实现了TableModel接口:(1)AbstractTableModel:抽象类,实现了大部分的TableModel方法。AbstractTableModel 类 对 TableModel 接口中大部分方法提供部分实现,它关注监听器的管理,并生成TableModeEvents 事件,以及把他们发送到监听器提供方便。
(2)DefaultTableModel:继承AbstractTableModel,是默认的表格模型类。
(3)要创建一个TableModel,可以简单扩展AbstractTableModel类并且至少实现下列三 个方法 public int getRowCount()、public int getColumnCount()、public Object getValueAt(int row,int column)使用JDBC访问数据库的基本步骤:
1加载JDBC驱动程序(Class.forName(“oracle.jdbc.driver.OracleDriver”);)。2建立数据库连接(Class.forName(“oracle.jdbc.driver.OracleDriver”);Connection conn = DriverManager.getConnection(“jdbc:oracle:thin:@localhost:1521:orcl”, “scott”, “tiger”);)。3创建Statement对象 4执行SQL语句。5 处理返回结果。6 关闭创建的对象 Statement中3个执行方法的不同:
(1)execute():用于执行返回多个结果集、多个更新计数或二者的混合。(2)executeUpdate():用于执行insert、update、delete语句及SQl DDL语句。插、更、删效果是修改表中的行或列,返回值一个整数,即影响行数。对于建立、删除返回值为0。(3)executeQuery():用于产生单个结果集的语句,例如select语句。事务的ACID特性:
数据库中的操作通常是一个独立单元,事务是构成单一逻辑单位的操作集合。已提交事务是指成功执行完毕的事务,未能成功完成的事务成为中止事务,对中止事务造成的变更需要进行撤销处理,成为事务回滚。原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durabilily)。
保存点: 集元数据: 集元数据 Meta Data,是有关数据库和表格结构的信息,如数据库的表、表的列、表的索引、数据类型、对SQL的支持程度等信息。DatabaseMetaData接口
(1)主要用来得到数据库的信息,如:数据库中所有表格的列表、系统函数、关键字、数据库产品名和数据库支持的JDBC驱动名。
(2)通过Connection.getMetaData()方法创建。(3)主要提供了两大类方法:
1.返回类型boolean的,用于检查数据库或驱动器是否支持某项功能。2.用于获取数据库或驱动器本身的某些特征值。
通过Statement实现静态SQL查询
使用PreparedStatement实现动态SQL查询 使用CallableStatement实现存储过程的调用
DatabaseMetaData接口用于得到关于数据库的信息 ResultSetMetaData接口主要用来获取结果集的结构 JDBC默认的事务提交模式是自动提交
通过setAutoCommit()方法控制自动提交模式,使用rollback()方法实现事务回滚 开发RMI--步骤: 定义远程接口。2 实现远程接口。3 编写和实现远程服务类。4 编写客户端程序 RMI机制原理:
2个独立程序。服务器端、客户端 服务器端:(1)创建多个远程对象,(2)调用注册服务程序使得名字与远程对象关联,使得这些远程对象能够被引用,(3)等待客户端调用这些远程对象的方法。客户端:
(1)在服务器上的注册服务程序中用远程对象名称查找一个或者多个远程对象的引用,(2)调用远程对象的方法。
JOptionPane类中四种对话框的静态方法
1消息对话框(showmessagedialog)2输入对话框(input)3确认对话框(Option)4选项对话框(Confirm)Locale常用定义:
Locale类是用来标识本地化消息的重要工具类。该类包含对主要地理区域的地域化特征的封装。通过设定Locale为特定的国家或地区,提供符合当地文化习惯的字体、图标和表达格式。
简述java异常处理机制 :
java提供了两种处理异常的机制:一是捕获异常,二是声明抛出异常.在java运行过程中系统得到一个异常对象时,它会沿着方法的调用栈逐层回溯,寻找处理这个异常的代码,找到后,系统把当前异常对象教给这个方法处理,这就是捕获异常.如果方法中不知道如何处理所出现的异常,则可在定义方法时,声明抛出异常.使用JDBC查询Scott用户的emp表中的所有信息? String sql=“select * from emp”;PreparedStatement stmt =conn.prepareStatement(sql);ResultSet rs = stmt.executeQuery();int columnCount = rs.getMetaData().getColumnCount();//这地方补充了一下 while(rs.next()){ for(int i = 1;i <= columnCount;i++){ System.out.println(md.getColumnName(i)+ “--” + rs.getObject(i));} } JDBC API的三个组成部分: 1 JDBC驱动程序管理器 2 JDBC驱动程序测试包 3 JDBC-OCBC桥
加载JDBC驱动程序中加载驱动程序的一种简单方法是使用Class.forName方法显示加载: Class.forName(“DriverName”);对于JDBC/ODBC桥,加载JDBC-ODBC数据库驱动程序的方法为: Class.forName(“sun.jdnc.odbc.JdbcOdbcDriver”);而对于Oracle数据库,加载数据库驱动程序的方法为: Class.forName(“oracle.jdbc.driver.OracleDriver”);对于Oracle驱动连接的是URL是:
Jdbc:oracle:thin:@serverName:port:instance 通过Oracle驱动获得数据库连接的实力语句:
Class.forName(“oracle.jdbc.driver.OracleDriver”);Connection conn = DriverManager.getConnection(“jdbc:oracle:thin:@localhost:1521:orcl”,”scott”,”tiger”);
多线程Socket通信中多个while循环是用来监听的。
TableModel本身是一个借口,若是要直接实现此接口来建立表格是非常复杂的,因此java中还提供了AbstractTableModel和DefaultTableModel这两个类分别实现TableModel接口。ListSelecyionModel接口中的常量:
static final int SINGLE_SELECTION 单一选择模式 static final int SINGLE_INTERVAL_SELECTION 连续区间选择模式 static final int MULTIPLE_INTERVAL_SELECTION 多重选择模式
简述实现一个自定义的对话框的步骤?
(1)继承JDialog类,在构造方法中传入参数(2)在对话框中添加用户界面组件(3)添加事件处理(4)设置对话框大小
什么是检查型异常,非检查型异常
检查型异常:指编译器要求必须处置的异常,是程序运行时由于外界因素造成的一般性异常 非检查型异常:指编译器不要求强制处理的异常,该异常是因设计或实现方式不当导致的,可以避免这种异常的发生.简述一下使用泛型有什么优点?
答:泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。Java语言引入泛型的好处是安全简单。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
2.简要描述ArrayList,Vector,LinkedList的存储性能和特性? 答:ArrayList支持可随需要而调整的动态数组。其内部封装了一个动态再分配的Object[]数组。每个ArrayList对象有一个capacity,表示存储列表中元素的数组的容量。当元素添加到ArrayList时,它的capacity自动增加。在向一个ArrayList对象添加大量元素的程序中,可使用ensureCapacity()方法增加Capacity,此法可以减少或增加重分配的数量。Vector 由于使用了synchronized 方法(线程安全),通常性能上较ArrayList 差,而LinkedList 使用双向链表实现存储,按序号索引数据需要进 行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。3.简述Collection和Collections的区别。
答:java.util.Collection 是一个集合接口集合接口集合接口集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态静态静态静态多 态方法多态方法多态方法多态方法。此类不能实例化不能实例化不能实例化不能实例化,就像一个工具类个工具类个工具类个工具类,服务于Java的Collection框架。Java代码。
4、List、Map和Set三个接口,存取元素时,各有什么特点? 答:List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值。
5、描述HashMap和Hashtable的区别。答:Hashtable和HashMap类有三个重要的不同之处。第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value。这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值,那么get()将返回null。如果有必要,用containKey()方法来区别这两种情况。
6、简述序列化和反序列化概念?
对象的序列化就是把对象写入到一个输出流中,对象的反序列化是指从一个输入流中读取一个对象。
7、简述适配器与监听接口的区别?
区别:适配器只需要重写需要的事件处理方法,而监听接口需要实现全部的方法。
监听接口中定义了抽象的事件处理方法,这些方法针对不同的操作进行不同的处理。在程序中,通常使用监听类实现监听接口中的事件处理方法。监听接口定义在java.awt.event包中,该包中提供了不同事件的监听接口,这些接口中定义了不同的抽象的事件处理方法。扩展监听接口时,有些事件处理方法是不需要的,但必须重写。
处于简化代码的目的,java.awt.event包中有提供了一套抽象适配器类,分别实现每个具有多个事件处理方法的监听接口。这样继承适配器后,可以仅重写需要的事件处理方法。
第二篇:javase总结
建议开发较大规模的java应用程序都考虑使用mvc模式
首先考虑系统架构,学习使用第三方成熟的jar包,并import到自己的项目中
1、开发时考虑包的规划,model,view层
2、应用结对编程原理进行开发,随时保证程序的可运行性。(针对接口的编程)
3、编译调试代码,注意异常问题的处理
4、注意javadoc文档的编写应该和代码的编写同步进行
5、Log4j日志的记录,Junit单元测试工具的使用
6、代码编写完毕,将其使用jar打包成可执行的jar文件
7、使用Ant自动化编译测试打包部署工具完成代码的最终发布
第三篇:编程题总结
C作业汇总
1.short a,b=32767;/*short类型在内存中占2B*/ a=b+1;问:a的值是多少?并分析原因。
2.有一4位数整数,假设用abcd表示,请把这个4位数的每个数位用表达式表示出来。3.从键盘输入圆的半径r,计算并输出圆的面积s(要求:半径r定义为float型;圆周率定义为符号常量;面积s保留2位小数)#define PI 3.14159 #include
4.输入m>=3的正整数,判断m是否素数。画出算法流程图及NS图
5.有一函数:
x1 x y2x1 1x10
3x-11 x10 写一段程序,输入x,输出y值。
要求x,y声明为float类型,y保留2位小数。#include
if(x<1)
y=x;else
if(x<10)
y=2*x-1;
else
y=3*x-11;
}
printf(“y=%.2fn”,y);
x3x5x7x9,6.课后习题4.17(P159)利用泰勒级数sinxx计算sinx的3!5!7!9!值。要求最后一项的绝对值小于10,并统计出此时累加了多少项。#include
/*记录每个项数*/ int n=1,count=0;/*count记录累加了多少项*/
printf(“请输入x值(弧度):n”);scanf(“%f”,&x);
term=x/n;while(fabs(term)>1e-5)
/* while循环*/ {
sinx+=term;
count++;
n+=2;
term=-term*x*x/((n-1)*n);}
/* do
/*do while循环*/ {
sinx+=term;
count++;
n+=2;
term=-term*x*x/((n-1)*n);}while(fabs(term)>1e-5);
*/
printf(“sin(%.2f)=%.4fn”,x,sinx);printf(“一共累加了:%d项。n”,count);}
7.用牛顿迭代法求下面方程在1.5附近的根:
2x4x3x60 325
牛顿迭代公式:
x1x0f(x0)f(x0)
#include
/*y1记录f(x0),y2记录f(x0)的导数*/
do {
x0=x1;
y1=2*x0*x0*x0-4*x0*x0+3*x0-6;
y2=6*x0*x0-8*x0+3;
x1=x0-y1/y2;}while(fabs(x1-x0)>1e-5);
printf(“the root is:%.2fn”,x1);}
8.写一函数,输入一个16进制整数,输出相应的10进制数。例:从键盘输入2a,输出结果是42。
要求:若输入数据不合法,则输出提示信息。如输入了35g,输出“您输入的16进制数不合法!”。
#include
printf(“请输入一个16进制数字:n”);
while((c=getchar())!='n'){
if(c>='0' && c<='9')
sum=sum*16+c-'0';
else
if(c>='a' && c<='f')
sum=sum*16+c-87;
else
if(c>='A' && c<='F')
sum=sum*16+c-55;
else
{
printf(“您输入的16进制不合法.n”);
exit(0);
} }
printf(“相应的10进制数是:%dn”,sum);} 方法2:用字符串处理的方式 #include
printf(“请输入一个16进制数字:n”);gets(str);
for(i=0;str[i];i++){
if(str[i]>='0' && str[i]<='9')
sum=sum*16+str[i]-'0';
else
if(str[i]>='a' && str[i]<='f')
sum=sum*16+str[i]-87;
else
if(str[i]>='A' && str[i]<='F')
sum=sum*16+str[i]-55;
else
{
printf(“您输入的16进制不合法.n”);
exit(0);
} }
printf(“相应的10进制数是:%dn”,sum);} 方法3:用字符数组及指针处理的方式 #include
{ char str[20],*p=str;int sum=0;
printf(“请输入一个16进制数字:n”);gets(p);
while(*p){
if(*p>='0' && *p<='9')
sum=sum*16+*p-'0';
else
if(*p>='a' && *p<='f')
sum=sum*16+*p-87;
else
if(*p>='A' && *p<='F')
sum=sum*16+*p-55;
else
{
printf(“您输入的16进制不合法.n”);
exit(0);
}
p++;}
printf(“相应的10进制数是:%dn”,sum);} 9.编写一个小函数,其功能是计算两个整数的平均值,该函数要在主函数中调用。
#include
avg=average(x,y);
printf(“%d,%d的平均值是:%.2fn”,x,y,avg);}
float average(int x,int y)
{ return(x+y)/2.0;}
10.有N(N用宏定义为符号常量)个元素的一维整型数组,该数组中各元素值从键盘随机输入。然后,将这个整型数组中的值逆序存放。例如,原来5个元素的顺序为8、1、4、6、5,逆序之后各元素的值是5、6、4、1、8 #define N 5 #include
printf(“输入%d个整数,用空格或回车分隔:n”,N);for(i=0;i scanf(“%d”,&a[i]); printf(“数组原来的值是:n”);for(i=0;i printf(“%dt”,a[i]); for(i=0;i t=a[i]; a[i]=a[N-1-i]; a[N-1-i]=t;} printf(“n逆序之后数组的值是:n”);for(i=0;i printf(“%dt”,a[i]); printf(“n”);} 11.有N(N用宏定义为符号常量)个元素的一维整型数组,该数组中各元素值从键盘随机输入。然后,对该数组元素进行由小到大排序(要求,该功能用函数实现),输出数组中各元素值。最后,从键盘随机输入一个整数,并把该整数插入上述数组中(该功能用函数实现),使得插入该整数后的数组仍然有序,输出数组中各元素的值。#define N 5 #include int i,x;void sort(int array[],int n);void insert(int array[],int n,int x); printf(“输入%d个整数,用空格或回车分隔:n”,N);for(i=0;i scanf(“%d”,&a[i]); sort(a,N); /*调用sort对数组进行排序*/ printf(“n升序排序之后数组的值是:n”);for(i=0;i printf(“%d ”,a[i]); printf(“n输入一个x值插入到数组中:n”);scanf(“%d”,&x); insert(a,N,x); printf(“n插入%d之后数组的值是:n”,x);for(i=0;i printf(“%d ”,a[i]); printf(“n”);} void sort(int array[],int n)/*用选择法对数组array升序排序*/ { int i,j,t,min; for(i=0;i min=i; for(j=i+1;j if(array[j] min=j; if(min!=i) { t=array[i]; array[i]=array[min]; array[min]=t; } } } void insert(int array[],int n,int x){ int i,pos; for(i=0;i pos=i; for(i=n-1;i>=pos;i--) array[i+1]=array[i]; array[pos]=x;} 12.有一整型数组,N(N用宏定义为符号常量)个元素,该数组中各元素值从键盘随机输入。从键盘随机输入一个整数x,删除该数组中值与x相同的所有元素(该功能用函数实现),输出数组中各元素的值。#define N 5 #include printf(“输入%d个整数,用空格或回车分隔:n”,N);for(i=0;i scanf(“%d”,&a[i]); printf(“数组原来的值是:n”);for(i=0;i printf(“%dt”,a[i]); printf(“n请输入要删除的值x:n”);scanf(“%d”,&x); n=delet(a,N,x); /*n值是删除与x相同的元素后,数组剩余元素的个数。*/ printf(“删除%d之后数组的值是:n”,x);for(i=0;i printf(“%d ”,a[i]); printf(“n”); } int delet(int a[],int n,int x){ int i,j; for(i=0,j=0;i if(a[i]!=x) a[j++]=a[i]; return j;} 13.从键盘随机输入一字符串,将所有ASCII值为偶数的字符输出。例如:输入abc123,输出结果是b2(因为b的ASCII值是98,2的ASCII值是50,其他字符的ASCII值都是奇数) #include printf(“输入字符串:n”);gets(str); printf(“ASCII码是偶数的字符有:”);for(i=0;str[i];i++) if(str[i]%2==0)putchar(str[i]); printf(“n”);} 14.从键盘输入两个字符串s1,s2,把s2连接到s1的末尾。不能用strcat函数 #include printf(“输入两个字符串,输入回车键结束:n”);gets(str1);gets(str2); mystrcat(str1,str2); printf(“连接在一起的字符串是:n”);puts(str1); } void mystrcat(char *p1,char *p2){ while(*p1)p1++;while(*p2) *p1++=*p2++;*p1=' ';} 15.从键盘输入一个字符串,把其中最长的单词输出。单词定义为连续的一串英文字母。如输入I am a student.输出结果为student #include { char str[80];int i,start,len=0,lenthest=0,lenstart=0;int word=0; printf(“input a string:n”);gets(str); for(i=0;str[i];i++){ if(str[i]>='a' && str[i]<='z' || str[i]>='A'&&str[i]<='Z') if(!word) { word=1; start=i; } else { len++; } else if(word) { word=0; } } if(len>lenthest){ lenthest=len;lenstart=start;} len=0; printf(“the lenthest word is:n”);for(i=lenstart;i<=lenstart+lenthest;i++) putchar(str[i]); printf(“n”);} 16.有一整型数组,N(N用宏定义为符号常量)个元素,该数组中各元素值从键盘随机输入。编写函数calculate,计算出所有元素的最大值、最小值、平均值,结果在主函数中输出。#define N 5 #include printf(“输入%d个整数,用空格或回车分隔:n”,N);for(i=0;i scanf(“%d”,&a[i]); calculate(a,&max,&min,&avg); printf(“数组中所有元素的最大值、最小值、平均值分别是:n”);printf(“最大值max=%d,n”,max);if(word)if(len>lenthest){ lenthest=len; lenstart=start;} printf(“最小值min=%d,n”,min);printf(“平均值avg=%.2f,n”,avg); } void calculate(int a[],int *pmax,int *pmin,float *pavg){ int i;int sum; *pmax=*pmin=sum=a[0]; for(i=1;i if(a[i]>*pmax) *pmax=a[i]; if(a[i]<*pmin) *pmin=a[i]; sum=sum+a[i];} *pavg=(float)sum/N;} 大家必须掌握每种类型的1-3题。 题号考点要求 48、将两个两位数的整数合并成一个整数 65、两个正整数合并成一个整数 71、两个正整数合并成一个整数 77、两个正整数合并成一个整数 81、两个正整数合并成一个整数 84、两个正整数合并成一个整数 87、两个正整数合并成一个整数 91、两个正整数合并成一个整数 8、s=1+1/(1+2)+1/(1+2+3)+...+1/(1+2+3+.....+n) 9、p=m!/(n!*(m-n)!) 26、连加 68、s=1+1/1!+1/2!+1/3!+........70、s=1/(1*2)+1/(2*3)+...+1/(n*(n+1)) 76、s=1+0.5*x+(0.5*(0.5-1)*x*x/2!+......86、连加 90、连加 92、连加 93、连加 97、连加 100、连加 (2、) 类似素数或者闰年算法 2、求出1到1000之间能被7或11整除、但不能同时被7和11整除的所有整数,并将他们放在a所指的数组中,通过n返回这些数的个数。 58、求n以内同时能被3与7整除的所有自然数之和的平方根s3、求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。 27、求出1到m之间能被7或11整除的整数,放在数组中,通过n返回这些数的个数 63、求n的所有因子(不包括1与自身) 98、计算n以内能被5或9整除的所有自然数的倒数之和 15、w是大于10的无符号整数,若w是n(n>=2)位的整数,则函数求出w的后n-1位的数作为函数值返回。 24、将数字字符串转化为一个整数 16、对变量中的值保留两位小数,对第三位四舍五入 (3、) 1、一维数组中,将低于平均分的人数作为函数值返回,低于平均分的分数放在below所指的数组中。 82、计算一维数组中n门课程的平均分 96、一维数组中每相邻元素之平均值的平方根之和 28、找出一维数组中最大的值和它所在的下标,两者通过形参返回 7、求出数组的最大元素在数组中下标并存放在k所指的存贮单元中。 43、从num个字符串中找出最长的一个字符串,并通过形参指针传回 39、移动数组中的内容,前p个数移动到数组后面 40、移动数组中的内容,前m个字符移动到后面 5、将大于整数m且紧靠m的k个素数存入xx所指的数组中。 20、求出小于变量m的所有素数并放在一个数组中 51、将大于1小于m的非素数存入xx所指数组中,个数通过形参返回 99、计算3到n之间所有素数的平方根之和 29、将字符串中下标为奇数位置上的字母转化为大写 47、字符串中所有下标为奇数的字母转为大写 31、将字符串中除了下标为偶数、同时ASCII码也为偶数的字符外,其余的全都删除;串中剩余字符放在t字符串中 32、除了下标为奇数、同时ASCII码也为奇数的字符外,其余的全都删除;串中剩余字符放在t字符串中 49、将字符串中下标为偶数且ASCII码为奇数的字符删除 19、从字符串中删除指定字符 64、将字符串中ASCII值为奇数的字符删除,剩余字符放在t所指字符串中 72、将字符串中下标为偶数的字符删除 78、字符串中ASCII为偶数的字符删除 35、删除字符串中所有空格 6、删除一个字符串中指定下标的字符。 60、删去一维有序数组中所有相同的数,使之只剩一个 33、删除字符串中尾部*号,使不超过n个 36、把字符串中的前导*号全部移到字符串尾部 45、删除字符串中前导和尾部的*号 56、字符串中,除了尾部*号外,字符串中其余*号全部删除 73、删除字符串中除了前导和尾部*号外的所有*号 83、字符串中尾部*号删除 88、字符串中除了前导*外,删除其余*号 94、字符串中,前导*号全部删除 95、字符串中前导*号不得多于n个 66、删除字符串中所有*号 (4、) 17、字符串内容逆置 23、判断字符串是否为回文 25、比较两个字符串的长度(不能用strlen) 52、实现两个字符串连接 59、将字符串数组中的字符串依次合并到一个字符串中 21、字符串中字符按降序排列(选择法排序) 4、统计在tt字符串中“a”到“z”26个字母各自出现的次数,并依次放在pp所指数组中。 38、求出字符串中指定字符的个数 44、统计长度为2的字符串在另一个字符串出现的次数 62、统计一行字符串中单词个数 11、二维数组构成矩阵,使数组左下半三角元素中的值全部置成042、二维数组,将右上半角元素中的值乘以m80、二维数组中左下半三角中元素中的值乘以312、求出数组周边元素的平均值 14、求出二维数组周边元素之和 18、矩阵行列互换 53、矩阵B=A+A130、求出二维数组中最大元素的值,此值返回给调用函数 55、M行N列的二维数组中的数据,按行的顺序依次放到一维数组中 41、将二维数组中的字符,按列的顺序依次放到一个字符串中 75、二维数组中数按列的顺序放到一维数组中 13、求出二维数组每列中最小元素,并依次放在pp所指一维数组中 37、结构体数组(学号、8门成绩、平均成绩),求出每个学生的平均成绩 34、把结构体数组(学号、成绩)中分数最高的学生放到h数组中,函数返回人数 74、把结构体数组(学号、成绩)中分数最低的学生数据放在h所指数组中 50、结构体数组(学号、成绩),找出成绩最高的学生记录,通过形参返回 54、结构体数组(学号、成绩),低于平均分的学生数据放在b所指数组中 89、结构体数组(学号、成绩),高于等于平均分的学生人数通过形参返回 57、结构体数组(学号、姓名),把指定范围内的学生数据放在所指数组中 67、结构体数组(学号、成绩)返回指定学号的学生数据(查找) 46、结构体数组(学号、成绩),按分数降序排列(选择法排序) 22、链表结构中,找出数值最大的结点,并由函数值返回 85、链表中,求出平均成绩 10、迭代法求方程的实根 61、统计各年龄段人数(建议采用if else) 69、递归函数 2013年普通专升本考试编程题总结 一、数学表达式 1、编写程序,其功能是:计算并输出下列多项式的值: , 将结果存到外存root.txt中。 2、编写程序,其功能是:计算并输出下列多项式的值: 3、编写程序,其功能是:计算并输出下列多项式的值:,并输出结果。例如,若n=20,则S=6.506583。 4、编写程序,计算表达式: 直到。例如x=2.5,则函数值为:12.182494。 5、找出100~999之间的所有“水仙花数”(穷举法、统计) 6、从键盘输入10个数,然后找出其中的最大值和最小值。(找最大数、最小数) 7、任意输入n个数,按由小到大的顺序排列并显示输出。(排序算法--选择法排序) 8、求5的阶乘值(5!=?) 9、计算 t=1!+2!+„„+10!(即求阶乘之和)。 计算 t=1!+2!+„„+10!即求阶乘之和(双循环)。 10、多项式S=1+2+22+23+„„+232,请设计一个程序,求S的值。 二、矩阵的处理 编写程序,完成的功能是: (1)实现B=A+A’,即把矩阵A加上A的转置,存放在矩阵B中。例如用户输入矩阵,其转置矩阵为,程序输出。 (2)求矩阵A对角线元素之和。 三、字符串的处理 1、编写一个程序,它的功能是:将ss字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入“abc4EFg”,则应输出“aBc4EFg”。 2、程序的功能是:将s所指字符串中ASCII值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。 例如,若s所指字符串中的内容为:“ABCDEFG12345”,其中字符B的ASCII码值为偶数、„、字符2的ASCII码值为偶数、„、都应当删除,其它依此类推。最后t所指的数组中的内容应是:“ACEG135”。 3、编写程序,实现将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。例如,原字符串为:def35adh3kjsdf7,执行结果为:defadhkjsdf35374、假定输入的字符串中只包含字母和*号。请编写程序,它的功能是:使字符串中尾部的*号不得多于n个;若多于n个,则删除多于的*号;若少于或等于n个,则什么也不做,字符串中间和前面的*号不删除。 5、(对字符串排序处理)有5个英文单词,分别为:Word,Excel,Powerpoint,Type,Angle,要求设计出如下程序: (1)在键盘上输入数N(本例输入5),把英文单词放入名为X大小为N的数组中 (2)显示出X数组中的英文单词 (3)对数组中的英文单词从小到大排序 (4)显示出排序后X数组中英文单词 三、数据的处理 1、程序的功能是:将两个两位数的正整数a.b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的千位和十位上。 例如,当a=45,b=12时,执行该程序后,c=1524。 2、请编写程序,它的功能是:求出1到1000之间能被7或11整除,但不能同时被7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。 3、编写程序,求Fibonacci数列中大于t的最小的一个数。其中Fibonacci数列F(n)的定义为: F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)。例如:当t=1000时,函数值为:1597。 4、编写程序,实现根据输入的三个边长(整型值),判断能否构成三角形;构成的是等边三角形,还是等腰三角形。若能构成等边三角形函数返回3,若能构成等腰三角形函数返回2,若能构成一般三角形函数返回1,若不能构成三角形函数返回0。 5、编写程序,实现计算并输出3到n之间(含3和n)所有素数的平方根之和。例如,n=100,则输出s=148.874270,注意:要求n的值大于2但不大于100。 6、编写程序,它的功能是:利用以下所示的简单迭代方法求方程:cos(x)-x=0的一个实根。迭代表达式为:xn+1=cos(xn) (1)取x1初值为0.0; (2)x0=x1,把x1的值赋给x0; (3)x1=cos(x0),求出一个新的x1; (4)若x0-xl的绝对值小于0.000001,执行步骤(5),否则执行步骤(2); (5)所求x1就是方程cos(x)-x=0的一个实根,作为函数值返回。 1.有3个数a,b,c,要求按大小顺序把它们打印出来。 2.求1+2+3+„„„+100。 3.判断一个数n 能否同时被3和5整除。 4.将100~200之间的素数打印出来 5.求两个数m和n的最大公约数。 6.求方程式ax2+bx+c=0的根。分别考虑:(1)有两个不等的实根:(2)有两个相等的实根。 8.有一个函数: x(x<1) y=2x-1(1≤x<10) 3x-11(x≥10) 写一个程序,输入x,输出y值。 9.给出一个百分制成绩,要求输出成绩等级‘A’,‘B’,‘C’,‘D’,‘E’。90分以上为‘A’,80-90分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为‘E’。 10.求Fibonacci数列40个数。这个数列有如下特点:第1,2两个数为1,1。 从第3个数开始该数是其前面两个数之和。即:F1=1(n=1)F2=1(n=2)这是一个有趣的古典数学问题:有一对兔子,从出生后第3 个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生 Fn =Fn-1+Fn-2(n≥3)一对兔子。假设所有兔子都不死,问每个月的兔子总数为多少? 11.求100~200间的全部素数。 12.求1!+ 2!+ 3!+ 4!+ „ +20!。 13.(1+2+„+100)+(12+22+„+502)+(1+1/2+„+1/10)。 14.打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为153=13+53+33。 15.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13,„,求出这个数列的前20项之和。 16.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第十天早上想再吃时,就只剩下一个桃子了。求第一天共摘多少桃子? 17.用二分法求下面方程在(-10,10)之间的根。 2x3-4x2+3x-6=0 19.用起泡法对10个数排序(由大到小)。 20.将一个二维数组行和列元素互换,存到另一个二维数组中。 例如:a(2,3)=(1 2 34 5 6) B(3,2)=(1 42 53 6) 21.有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。 22.用筛法求100之内的素数。 23.用选择法对10个整数排序。 24.已有一个排好序的数组,今输入一个数,要求按原来排序的规律将它插入数 组中。 25.将一个数组按逆序重新排放。例如,原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。第四篇:编程题总结
第五篇:2013年普通专升本考试编程题总结