第一篇:《Java6程序设计实践》教程课后答案_清华大学出版社
第1章:习题集: 填空题
1.多态2.java.exe 3.jdb.exe 4.标准字节码5.Java 6.独立于平台
二、选择题
1.B 2.A 3.B 4.A 5.A 6.C 7.C 8.D 9.C 第2章: 参考答案: 实验指导:
2.5.1. 第一处需要的代码:yourGuess>realNumber
第二处需要的代码:yourGuess=input.nextInt();第三处需要的代码:yourGuess iArray[i] = iArray[j];iArray[j] = iTemp;2.5.2. 第一处需要的代码:iArray[i] < iArray[j] 2.5.3. 第一处需要的代码:continue lable;第二处需要的代码:System.out.print(“ ”+(i+j));第二处需要的代码:System.out.print(j + “*” + i + “=” +(i*j)+ “t”);2.5.4. 第一处需要的代码:System.out.print(“t”);习题集: 一、填空题 1.i=i+1 sum=sum+1 i<100 2.while do while for 3.9 4. The symbol is an a.The symbol is a b.The symbol is c.The symbol is not a,b,or c.Switch is completed 5.sum=0 pos++ 二、选择题 1.D 2.A 3.D 4.A 5.D 6.A 7.B 三、简答题 2、there is no this value 3.Message four i is 1,2,3 i is 1,2,3 i is 1,2,3 i is 4 第3章 参考答案: 实验指导: 3.10.1. 第一处需要的代码:balance+=saveAccount; 第二处需要的代码:balance+=calculateInterst(Days);第三处需要的代码:ba.setMoney(save_value);第四处需要的代码:ba.accountInterst(365); 8.B 9.C ba.setInterstRate(interst_rate);3.10.2. 第一处需要的代码:minute=this.m_Minute;second=this.m_Second;第二处需要的代码:s=d.getMinutes()+“:”+d.getSeconds()+“:”+d.getTime();3.10.3. 第一处需要的代码:super(number,pass);balance=bal;第二处需要的代码:connect 3.10.4. 第一处需要的代码:super(pass, motor);this.make=make;this.model=model;第二处需要的代码:am.run();习题集: 一、填空题 1.类2.代码和数据3.点4.实例变量5.Test te=new Test();6.对象实例化7.值、引用 8.the original is data is:-1 now the data is:10 9.I am parent I am child I am child 二、选择题 1.B 2.A 3.C 4.C 三、简答题 6. A abstract和final修饰符不能同时使用 B 未给出类型定义,final int MAX_NUMBER=10;C 常量不能修改 D 静态方法值能访问静态变量,static int data。或者把方法标志为非静态方法,int getData()E 构造方法无返回值,把void去掉 F 抽象类不能进行实例化,把abstract去掉 G 子类不能继承父类的私有成员,应把Parent类中的mine属性的private修饰符去掉。H 父类对象不能与之类形式参数结合,可以颠倒过来。如下代码所示: class Parent { } class Child extends Parent{ } class UseChild{ } public static void main(String[] args){ Child c=new Child();System.out.println(UseChild.getMine(c));static int getMine(Parent p){ } return(p.mine);int mine;int mine; 5.A 6.A 7.C 8.A 9.D 10.C 11.A 12.C 13.C } 第4章 实验指导 4.5.1. 第一处需要的代码:public void print(){System.out.println(“hello”);}yourGuess>realNumber 第二处需要的代码:Hello h = new Hello();h.print();第二处需要的代码:public void start(){ System.out.println(“Du du...”);} 4.5.2. 第一处需要的代码:public void stop(){ System.out.println(“Network stop!”);} 第三处需要的代码:SoundCard sc=new SoundCard();mb.usePCICard(sc);4.5.3. 第一处需要的代码:this.userAccount = acc;this.userPassword = pass;第二处需要的代码:public void show(){ System.out.println(resultMessage);} 第三处需要的代码:user.connect();user.show();填空题 1.javac –d.Test.java 2.package 3.public 4. package com.my.test;public void inPut(){System.out.println(“n hi,keybroad has be input into then mainbroad!n”);} public void inPut(){System.out.println(“n hi,netCardBroad has be input into then mainbroad!n”);} publicvoid getMainMessage(Extendbroadable ext){ext.inPut();} 5.Constants.MAX_COUNT 6.interface B extends A{ public void printB();} 11.D 12.A 选择题 1.C 2.D 3.B 4.C 5.B 6.C 7.C 8.B 9.D 10.D 简答 (1) 1、接口是类似于类的结构,它只包含常量和抽象方法。在某些情况下,接口类似于抽象类,但是抽象类能够包含常量和抽象方法,还能够包含变量和具体方法。(2) 1、在接口中,数据可以是常量;而抽象类可以有数据字段。 2、在接口中方法只有无实现的签名,而抽象类可以有具体的方法。 3、因为定义在接口中的所有方法都是抽象方法,Java不要求将抽象修饰符放在4、接口中的方法签名中,但是在抽象类中要将抽象修饰符放在抽象方法之前。(3) 1、可以更好的组织类。 2、减少类名的冲突问题,同一包中的类名不能重复,不同包中的类名可以重复; 3、对包中的类起了一定的保护作用; (4) 1、直接引用指定的类,如import java.util.Vector; 2、引用一个包中的多个类,如import java.awt.*。更确切的说,它并不是引用java.awt中的所有类,而只引用定义为public的类,并且只引用被代码引用的类,所以这种引用方法并不会降低程序的性能; 3、*号代替类名,在不能代替包名,如import java.awt.*,只引用java.awt下的类,而不引用java.awt下的包; 4、import java.awt.F*,这种使用方法是错误的; 5、import语句在所有类定义之前,在package定义之后; 6、import只告诉编译器及解释器哪里可以找到类、变量、方法的定义,而并没有将这些定义引入代码中; 第5章 参考答案: 实验指导: 5.6.1. 第一处需要填写的代码:i 1.equalsIgnoreCase 2.Hello I like Java!3.char值4.java.util.Date 5.HELLO!6.False 7.a#a#a## 8.xyz345 9.int len=str.length(); 二、选择题 1.B 2.A 3.A 4.B 5.D 6.A 7.B 8.D 三、简答题 1. 字符串的容量是:28 用过setLength(200)后 字符串的长度是:200 使用了charAt(2):w 2. 中国: The Money is: ¥30,215.00 The Number is: 121.66667 3.good and gbc 4.strawberry plum persimmon pear peach peach orange grape fig banana apple 第6章 实验指导 6.4.1. 第一处需要的代码:number1 = Integer.parseInt(firstNumber);number2= Integer.parseInt(secondNumber);yourGuess>realNumber 第二处需要的代码:NumberFormatException ex 6.4.2. 第一处需要的代码:catch(IOException e){System.out.println(“catch ”+e.toString());} 第二处需要的代码:catch(NumberFormatException e){System.out.println(“catch ”+e.toString());} 填空题: 1.Welcome to java The finally clause is executed 2.Welcome to java The finally clause is executed 3.catch(NumberFormatException e){} 4.仍然执行 c>='A'&&c<='Z' i++; sum++;10.i=0;i int temp=str.charAt(i);5.ArithmeticException 6.IOException 7.数据转换错误异常 8.statement1,statement2 二、选择题 1.C 2.B 3.C 4.D 5.C 6.B 7.C 第7章 实验指导: 7.7.1. 第一处需要填写的代码:panel.setVisible(true);第二处需要填写的代码:group.add(radioButton1); group.add(radioButton2);第三处需要填写的代码:mainPanel.add(panel);7.7.2. 第一处需要填写的代码:commentTabPane = new JTabbedPane();第二处需要填写的代码:tabAddComponent.add(nameLabel);第三处需要填写的代码:queryCom();7.7.3. 第一处需要填写的代码:System.exit(0);第二处需要填写的代码:new Counter();7.7.4. 第一处需要填写的代码:setVisible(true);第二处需要填写的代码:frame.getContentPane().add(new JTextArea());习题集: 填空题 1.btn[i]=new JButton(strname[i]);BorderLayout.EAST、BorderLayout.WEST、BorderLayout.SOUTH、BorderLayout.NORTH、BorderLayout.CENTER 2.frame.setContentPane(new CalculatorPanel().createPane());int y = 0;y < 4;y++、button = new JButton(lables[y][x]);3.frame.getContentPane().add(new TreePanel().createComponent());node01.add(node0102);int i = 0;i < names.length;i++、panel.add(new JLabel(names[i]));4.jframe.setVisible(true);Container contentpane=jframe.getContentPane();text.append(s);5.Container contentPanel = frame.getContentPane();frame.setVisible(true);add(part2());panel.setVisible(true);6.Panel pan=new Panel(); 二、选择题 1.D 2.A 3.B 4.B 5.A 6.D 7.C 第8章 实验指导: 8.6.1. 第一处需要的代码:contentPane.addMouseListener(this);contentPane.addMouseMotionListener(this); 第二处需要的代码:g.drawLine(startx,starty,endx,endy);第二处需要的代码:(e.getActionCommand()).equals(“按我有声音喔”)第二处需要的代码:e.getSource()==tree 第二处需要的代码:x=Double.parseDouble(tf1.getText().trim());8.6.2. 第一处需要的代码:Container contentPane = f.getContentPane();8.6.3. 第一处需要的代码:treeModel.insertNodeInto(leafnode,node1,node1.getChildCount());8.6.4. 第一处需要的代码:b0.addActionListener(new Bt());习题集: 一、填空题 1.程序符号 2.授权事件模型 3.actionPerformed(ActionEvent e),itemStateChanged(ItemEvent e)4.事件适配器 5.new WindowAdapter(),System.exit(0); 二、选择题 1.D 2.C 3.D 4.B 5.A 第9章 参考答案: 实验指导: 9.4.1. 第一处需要填写的代码:g_2d.setStroke(bs);g_2d.setColor(Color.yellow);g_2d.draw(hourLine);第二处需要填写的代码:secondLine.setLine(120,120,(int)pointSX[a],(int)pointSY[a]);9.4.2. 第一处需要填写的代码:signal.setRed(0);signal.setYellow(1);第二处需要填写的代码:g.setColor(Color.green);习题集: 填空题: 1.Drawstring 2.add(p1)3.toString(i)4.public void paint(Graphics g){ 5.int count=1;count 1.A 2.B 3.B 4.B 第10章 实验指导: 10.6.1. 第一处需要填写的代码:tempStr=bufReader.readLine();第二处需要填写的代码:s*=i;10.6.2. 第一处需要填写的代码:filePrex == null 第二处需要填写的代码:int j = 0;j < children.length;j++ 10.6.3. 第一处需要填写的代码:inStream,outStream 第二处需要填写的代码:copyBut,0,copyLen 10.6.4. 第一处需要填写的代码:tempStr=inObj.readLine();习题集: 一、填空题: 1.Hello!I like Java!2.110 110 110 110 110 3.InputStreamReader 4.HelloWorld!5.year%4==0&&year%100!=0||year%400==0 6.String s=“information to Appendn mon!n”; 二、选择题: 1.D 2.A 3.A 4.B 5.D 6.B 7.B 8.D BufferedReader readLine()第11章 参考答案: 实验指导: 11.6.1.第一处需要填写的代码:Class.forName(DBDRIVER);conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);第二处需要填写的代码:conn = getConnection();stmt = conn.createStatement();第三处需要填写的代码:stmt.executeUpdate(“insert into t_test values('ew','dgf','dfg');”); stmt.executeUpdate(“insert stmt.executeUpdate(”insert into into t_test t_test values('dg','df','fdg');“); values('dfg','dfg','dfg');”);stmt.executeUpdate(“insert into t_test values('gdf','df','df');”);第四处需要填写的代码:stmt.executeUpdate(“delete from t_test;”);11.6.2.第一处需要填写的代码:pstmt=conn.prepareStatement(“insert into t_grade values(?,?,?);”);pstmt.setString(1,name);pstmt.setString(2,course);pstmt.setString(3,grade);pstmt.execute();第二处需要填写的代码:rs = stmt.executeQuery(“select * from t_grade”); while(rs.next()){System.out.print(“姓名:”+rs.getString(“name”)); System.out.print(“ 课程:”+rs.getString(“course”));System.out.println(“ 成绩:”+rs.getString(“grade”));} conn.close();stmt.close();rs.close();} } 第三处需要填写的代码:try{ catch(SQLException e){ e.printStackTrace();11.6.3.第一处需要填写的代码:conn = getConnection();stmt = conn.createStatement();stmt.executeUpdate(“delete from t_grade where name = '”+name+“'”);第二处需要填写的代码:pstmt = conn.prepareStatement(“update t_grade set course = ?,grade=? where name = '”+name+“'”);pstmt.setString(1,course);pstmt.setString(2,grade);pstmt.execute();习题集: 一、填空题: 1.建立与数据库的连接、处理结果集 2.executeUpdate 3.CallableStatement 4.conn.createStatement();、rs.next();5.conn.createStatement(ResultSet.Type_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE):、rs.updateRow(); 二、选择题: 1.B 2.A 3.B 4.B 5.C 6.A 7.A 8.C 第1章: 1.6习题集: 一、填空题 1.多态2.java.exe 3.jdb.exe 4.标准字节码5.Java 6.独立于平台 二、选择题 1.B 2.A 3.B 4.A 5.A 6.C 7.C 8.D 9.C 第2章: 实验指导: 2.5.1. 第一处需要的代码:yourGuess>realNumber 第二处需要的代码:yourGuess=input.nextInt();第三处需要的代码:yourGuess iArray[i] = iArray[j];iArray[j] = iTemp;2.5.2. 第一处需要的代码:iArray[i] < iArray[j] 2.5.3. 第一处需要的代码:continue lable;第二处需要的代码:System.out.print(“ ”+(i+j));第二处需要的代码:System.out.print(j + “*” + i + “=” +(i*j)+ “t”);2.5.4. 第一处需要的代码:System.out.print(“t”);2.6习题集: 一、填空题 1.i=i+1 sum=sum+1 i<100 2.while do while for 3.9 4. The symbol is an a.The symbol is a b.The symbol is c.The symbol is not a,b,or c.Switch is completed 5.sum=0 pos++ 二、选择题 1.D 2.A 3.D 4.A 5.D 6.A 7.B 三、简答题 2、there is no this value 3.Message four i is 1,2,3 i is 1,2,3 i is 1,2,3 i is 4 8.B 9.C 第3章 实验指导: 3.10.1. 第一处需要的代码:balance+=saveAccount;第二处需要的代码:balance+=calculateInterst(Days); 第三处需要的代码:ba.setMoney(save_value); ba.setInterstRate(interst_rate);第四处需要的代码:ba.accountInterst(365); second=this.m_Second;第二处需要的代码:s=d.getMinutes()+“:”+d.getSeconds()+“:”+d.getTime(); balance=bal;第二处需要的代码:connect this.make=make;this.model=model;第二处需要的代码:am.run();3.11习题集: 一、填空题 1.类2.代码和数据3.点4.实例变量5.Test te=new Test();6.对象实例化7.值、引用 8.the original is data is:-1 now the data is:10 9.I am parent I am child I am child 二、选择题 1.B 2.A 3.C 4.C 三、简答题 6. A abstract和final修饰符不能同时使用 B 未给出类型定义,final int MAX_NUMBER=10;C 常量不能修改 D 静态方法值能访问静态变量,static int data。或者把方法标志为非静态方法,int getData()E 构造方法无返回值,把void去掉 F 抽象类不能进行实例化,把abstract去掉 G 子类不能继承父类的私有成员,应把Parent类中的mine属性的private修饰符去掉。H 父类对象不能与之类形式参数结合,可以颠倒过来。如下代码所示: class Parent { } class Child extends Parent{ } class UseChild{ } static int getMine(Parent p){ } return(p.mine);int mine;int mine; 5.A 6.A 7.C 8.A 9.D 10.C 11.A 12.C 13.C 3.10.4. 第一处需要的代码:super(pass, motor);3.10.3. 第一处需要的代码:super(number,pass);3.10.2. 第一处需要的代码:minute=this.m_Minute; public static void main(String[] args){ } Child c=new Child();System.out.println(UseChild.getMine(c));第4章 实验指导 4.5.1. 第一处需要的代码:public void print(){System.out.println(“hello”);}yourGuess>realNumber 第二处需要的代码:Hello h = new Hello();h.print();第二处需要的代码:public void start(){ System.out.println(“Du du...”);} 第三处需要的代码:SoundCard sc=new SoundCard();mb.usePCICard(sc);4.5.3. 第一处需要的代码:this.userAccount = acc;this.userPassword = pass;第二处需要的代码:public void show(){ System.out.println(resultMessage);} 第三处需要的代码:user.connect();user.show();4.6习题集: 一、填空题 1.javac –d.Test.java 2.package 3.public 4. package com.my.test;public void inPut(){System.out.println(“n hi,keybroad has be input into then mainbroad!n”);} public void inPut(){System.out.println(“n hi,netCardBroad has be input into then mainbroad!n”);} publicvoid getMainMessage(Extendbroadable ext){ext.inPut();} 5.Constants.MAX_COUNT 6.interface B extends A{ public void printB();} 二、选择题 1.C 2.D 3.B 4.C 5.B 6.C 7.C 8.B 9.D 10.D 11.D 12.A 三、简答 (1) 1、接口是类似于类的结构,它只包含常量和抽象方法。在某些情况下,接口类似于抽象类,但是抽象类能够包含常量和抽象方法,还能够包含变量和具体方法。(2) 1、在接口中,数据可以是常量;而抽象类可以有数据字段。 2、在接口中方法只有无实现的签名,而抽象类可以有具体的方法。 3、因为定义在接口中的所有方法都是抽象方法,Java不要求将抽象修饰符放在4、接口中的方法签名中,但是在抽象类中要将抽象修饰符放在抽象方法之前。(3) 1、可以更好的组织类。 2、减少类名的冲突问题,同一包中的类名不能重复,不同包中的类名可以重复; 3、对包中的类起了一定的保护作用; (4) 1、直接引用指定的类,如import java.util.Vector; 2、引用一个包中的多个类,如import java.awt.*。更确切的说,它并不是引用java.awt中的所有类,4.5.2. 第一处需要的代码:public void stop(){ System.out.println(“Network stop!”);} 而只引用定义为public的类,并且只引用被代码引用的类,所以这种引用方法并不会降低程序的性能; 3、*号代替类名,在不能代替包名,如import java.awt.*,只引用java.awt下的类,而不引用java.awt下的包; 4、import java.awt.F*,这种使用方法是错误的; 5、import语句在所有类定义之前,在package定义之后; 6、import只告诉编译器及解释器哪里可以找到类、变量、方法的定义,而并没有将这些定义引入代码中; 第5章 实验指导: 5.6.1. 第一处需要填写的代码:i 一、填空题 1.equalsIgnoreCase 2.Hello I like Java!3.char值4.java.util.Date 5.HELLO!6.False 7.a#a#a## 8.xyz345 9.int len=str.length(); c>='A'&&c<='Z' i++;10.i=0;i int temp=str.charAt(i); sum++; 二、选择题 1.B 2.A 3.A 4.B 5.D 6.A 7.B 8.D 三、简答题 1. 字符串的容量是:28 用过setLength(200)后 字符串的长度是:200 使用了charAt(2):w 2. 中国: The Money is: ¥30,215.00 The Number is: 121.66667 3.good and gbc 4.strawberry plum persimmon pear peach peach orange grape fig banana apple 第6章 实验指导 6.4.1. 第一处需要的代码:number1 = Integer.parseInt(firstNumber);number2= Integer.parseInt(secondNumber);yourGuess>realNumber 第二处需要的代码:NumberFormatException ex 6.4.2. 第一处需要的代码:catch(IOException e){System.out.println(“catch ”+e.toString());} 第二处需要的代码:catch(NumberFormatException e){System.out.println(“catch ”+e.toString());} 6.5习题集: 一、填空题: 1.Welcome to java The finally clause is executed 2.Welcome to java The finally clause is executed 3.catch(NumberFormatException e){} 4.仍然执行 5.ArithmeticException 6.IOException 7.数据转换错误异常 8.statement1,statement2 二、选择题 1.C 2.B 3.C 4.D 5.C 6.B 7.C 第7章 实验指导: 7.6.1. 第一处需要填写的代码:panel.setVisible(true);第二处需要填写的代码:group.add(radioButton1); group.add(radioButton2);第三处需要填写的代码:mainPanel.add(panel);7.6.2. 第一处需要填写的代码:commentTabPane = new JTabbedPane();第二处需要填写的代码:tabAddComponent.add(nameLabel);第三处需要填写的代码:queryCom();7.6.3. 第一处需要填写的代码:System.exit(0);第二处需要填写的代码:new Counter();7.6.4. 第一处需要填写的代码:setVisible(true);第二处需要填写的代码:frame.getContentPane().add(new JTextArea());7.7习题集: 一、填空题 1.btn[i]=new JButton(strname[i]);BorderLayout.EAST、BorderLayout.WEST、BorderLayout.SOUTH、BorderLayout.NORTH、BorderLayout.CENTER 2.frame.setContentPane(new CalculatorPanel().createPane());int y = 0;y < 4;y++、button = new JButton(lables[y][x]);3.frame.getContentPane().add(new TreePanel().createComponent());node01.add(node0102);int i = 0;i < names.length;i++、panel.add(new JLabel(names[i]));4.jframe.setVisible(true);Container contentpane=jframe.getContentPane();text.append(s);5.Container contentPanel = frame.getContentPane();frame.setVisible(true);add(part2());panel.setVisible(true);6.Panel pan=new Panel(); 二、选择题 1.D 2.A 3.B 4.B 5.A 6.D 7.C 第8章 实验指导: 8.6.1. 第一处需要的代码:contentPane.addMouseListener(this);contentPane.addMouseMotionListener(this); 第二处需要的代码:g.drawLine(startx,starty,endx,endy);第二处需要的代码:(e.getActionCommand()).equals(“按我有声音喔”)第二处需要的代码:e.getSource()==tree 第二处需要的代码:x=Double.parseDouble(tf1.getText().trim());8.6.2. 第一处需要的代码:Container contentPane = f.getContentPane();8.6.3. 第一处需要的代码:treeModel.insertNodeInto(leafnode,node1,node1.getChildCount());8.6.4. 第一处需要的代码:b0.addActionListener(new Bt());8.7习题集: 一、填空题 1.程序符号 2.授权事件模型 3.actionPerformed(ActionEvent e),itemStateChanged(ItemEvent e)4.事件适配器 5.new WindowAdapter(),System.exit(0); 二、选择题 1.D 2.C 3.D 4.B 5.A 第9章 参考答案: 实验指导: 9.4.1. 第一处需要填写的代码:g_2d.setStroke(bs);g_2d.setColor(Color.yellow);g_2d.draw(hourLine);第二处需要填写的代码:secondLine.setLine(120,120,(int)pointSX[a],(int)pointSY[a]);9.4.2. 第一处需要填写的代码:signal.setRed(0);signal.setYellow(1);第二处需要填写的代码:g.setColor(Color.green);习题集: 填空题: 1.Drawstring 2.add(p1)3.toString(i)4.public void paint(Graphics g){ 5.int count=1;count 1.A 2.B 3.B 4.B 第10章 实验指导: 10.6.1. 第一处需要填写的代码:tempStr=bufReader.readLine();第二处需要填写的代码:s*=i;10.6.2. 第一处需要填写的代码:filePrex == null 第二处需要填写的代码:int j = 0;j < children.length;j++ 10.6.3. 第一处需要填写的代码:inStream,outStream 第二处需要填写的代码:copyBut,0,copyLen 10.6.4. 第一处需要填写的代码:tempStr=inObj.readLine();习题集: 一、填空题: 1.Hello!I like Java!2.110 110 110 110 110 3.InputStreamReader 4.HelloWorld!5.year%4==0&&year%100!=0||year%400==0 6.String s=“information to Appendn mon!n”; 二、选择题: 1.D 2.A 3.A 4.B 5.D 6.B 7.B 8.D 第11章 参考答案: 实验指导: 11.6.1.第一处需要填写的代码:Class.forName(DBDRIVER);conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);第二处需要填写的代码:conn = getConnection();stmt = conn.createStatement();第三处需要填写的代码:stmt.executeUpdate(“insert into t_test values('ew','dgf','dfg');”); stmt.executeUpdate(“insert stmt.executeUpdate(”insert into into t_test t_test values('dg','df','fdg');“); values('dfg','dfg','dfg');”);stmt.executeUpdate(“insert into t_test values('gdf','df','df');”);第四处需要填写的代码:stmt.executeUpdate(“delete from t_test;”);11.6.2.第一处需要填写的代码:pstmt=conn.prepareStatement(“insert into t_grade values(?,?,?);”);pstmt.setString(1,name);pstmt.setString(2,course);pstmt.setString(3,grade);pstmt.execute();第二处需要填写的代码:rs = stmt.executeQuery(“select * from t_grade”); while(rs.next()){System.out.print(“姓名:”+rs.getString(“name”)); System.out.print(“ 课程:”+rs.getString(“course”));System.out.println(“ 成绩:”+rs.getString(“grade”));} conn.close();stmt.close();rs.close();} } BufferedReader readLine()第三处需要填写的代码:try{ catch(SQLException e){ e.printStackTrace();11.6.3.第一处需要填写的代码:conn = getConnection();stmt = conn.createStatement();stmt.executeUpdate(“delete from t_grade where name = '”+name+“'”); 第二处需要填写的代码:pstmt = conn.prepareStatement(“update t_grade set course = ?,grade=? where name = '”+name+“'”);pstmt.setString(1,course);pstmt.setString(2,grade);pstmt.execute();11.7习题集: 一、填空题: 1.建立与数据库的连接、处理结果集 2.executeUpdate 3.CallableStatement 4.conn.createStatement();、rs.next();5.conn.createStatement(ResultSet.Type_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE):rs.updateRow(); 二、选择题: 1.B 2.A 3.B 4.B 5.C 6.A 7.A 8.C、 C语言程序设计教程课后习题答案 第一章 C语言程序设计概述 -习题答案 算法的描述有哪些基本方法? 答 1、自然语言 2、专用工具C语言程序的基本结构是怎样的?举一个例子说明。 答 1、C语言程序由函数构成; 2、“/*”与“*/”之间的内容构成C语言程序的注释部分; 3、用预处理命令#include、#define可以包含有关文件或预定义信息; 4、大小写字母在C语言中是有区别的; 5、除main()函数和标准库函数外,用户也可以自己编写函数,应用程序一般由多个函数组成,这些函数指定实际所需要做的工作。C语言有什么特点? 答 1、具有结构语言的特点,程序之间很容易实现段的共享; 2、主要结构成分为函数,函数可以在程序中被定义完成独立的任务,独立地编译代码,以实现程序的模块化; 3、运算符丰富,包含的范围很广; 4、数据类型丰富; 5、允许直接访问物理地址,即可直接对硬件进行损伤,实现汇编语言的大部分功能; 6、限制不太严格,程序设计自由度大,这样使C语言能够减少对程序员的束缚; 7、生成的目标代码质量,程序执行效率高,同时C语言编写的程序的可移植性好。★指出合法与不合法的标识符命名。 答 AB12--√ leed_3--a*b2--× 8stu--× D.K.Jon--× EF3_3--√ PAS--√ if--× XYZ43K2--√ AVE#XY--× _762--√ #_DT5--× C.D--×说明下列Turbo C热键的功能。 答 F2:源文件存盘 F10:调用主菜单 F4:程序运行到光标所在行(用于调试程序)Ctrl+F9:编译并链接成可执行文件 Alt+F5:将窗口切换到 DOS 下,查看程序运行结果。说明下列Turbo C方式下输入并运行下列程序,记录下运行结果。 ①main() {printf(“********************n”);printf(“ welcome you n”);printf(“ very good n);printf(”********************n“);} ②main() { int a,b,c,t;printf(”please input three numbers;“);scanf(”%d,%d,%d“,&a,&b,&c);/*教材S是错误的*/ t=max(max(a,b),c);printf(”max number is:%dn“,t);} int max(int x, int y){ int z;if(x>y)z=x;else z=y;return(z);} 答 运行结果: ******************** welcome you very good ******************** 运行结果: please input three numbers;3,1,4 /*左侧下划线内容为键盘输入*/ max number is:4 7 一个C程序是由若干个函数构成的,其中有且只能有一个___函数。 答 main()8 在Turbo C环境下进行程序调试时,可以使用Run下拉菜单的___命令或按___键转到用户屏幕查看程序运行结果。 答 1、User screen 2、Alt+F5 9 ★C语言对标识符与关键字有些什么规定? 答 1、标识符用来表示函数、类型及变量的名称,它是由字母、下划线和数字组成,但必须用字母或下划线开头。 2、关键字是一种语言中规定具有特定含义的标识符,其不能作为变量或函数名来使用,用户只能根据系统的规定使用它们。C源程序输入后是如何进行保存的? 答 是以C为扩展名保存的纯文本文件。 第二章 C语言程序的基本数据类型与表达式 -习题答案 ★指出下列常数中哪些是符合C语法规定的。 答 ''--× '101'--× ”“--× e3--× 019--√ 0x1e--√ ”abn“--√ 1.e5--×(2+3)e(4-2)--× 5.2e2.5--×请找出下列程序中的错误,改正后写出程序运行结果。 ①void main(){int x,y=z=5,aver;x=7 AVER=(x+y+z)/3 printf(”AVER=%dn“,aver);} ②void main() { char c1='a';c2='b';c3='c';int a=3.5,b='A' printf(”a=%db='“endn”,a,b);printf(“a%cb%cbc%ctabcn”,c1,c2,c3);} 答 main(){int x,y=5,z=5,aver;x=7;aver=(x+y+z)/3;printf(“AVER=%dn”,aver);} 运行结果:AVER=5 ②main() { char c1='a', c2='b', c3='c';int a=3,b='A';printf(“a=%d,b='%c'”end“n”,a,b);printf(“a%cb%cbc%ctabcn”,c1,c2,c3);} 运行结果:a=3,b='A'“end” aabcc abc 3 写出下列赋值的结果,表格中写了数值的是要将它赋给其他类型的变量,将所有的空格填上赋值后的数据(实数保留到小数点后两位)。int 99 -1 char 'h' unsigned int float 55.78 long int 答 int 99 104 66 55 68-1 char 'c' 'h' 'B' '7' 'D' unsigned int 99 104 66 55 68 65535 float 99.00 104.00 66.00 55.78 68.00-1.00 long int 99 104 66 55 68-1 ★写出程序运行结果。 ①void main(){int i,j;i=8,j=10;printf(“%d,%d,%d,%dn”,i,j,++i,j++);} ②main() { int a=1,b=2,c=30;;printf(“%d,%d,%d,%dn”,a=b=c,a=b==c,a==(b=c),a==(b==c));} 注意:a=b=c,a=b==c之间应为逗号,教材有误 答 运行结果: 9,11,9,10 运行结果: 30,1,0,0 ③void main() {int a=10,b=20,c=30,d;d=++a<=10||b-->=20||c++;printf(“%d,%d,%d,%dn”,a,b,c,d);} 答 运行结果: 11,19,30,1 ★写出下面表达式的值(设a=10,b=4,c=5,d=1,x=2.5,y=3.5)。⑴a%=(b%=3) ⑵n++,a+=a-=a*=a ⑶(float)(a+c)/2+(int)x%(int)y ⑷a*=b+c ⑸++a-c+b++ ⑹++a-c+++b ⑺a ⑼a+b,18+(b=4)*3,(a/b,a%b) ⑽x+a%3*(int)(x+y)%2/4+sizeof(int)⑾a 答 ⑴0 ⑵0 ⑶9.500000 ⑷90 ⑸10 ⑹10 ⑺'A' ⑻2 ⑼4.5 ⑽1 ⑾0 ⑿20 ⒀0 下列每组表达式中,被执行后结果完全等价的是哪些(设a、b、m是已被赋值的整型变量)? ①m=(a=4,4*5)与m=a=4,4*5 ②(float)(a/b)与(float)a/b ③(int)a+b与(int)(a+b)④m%=2+a*3与m=m%2+a*3 ⑤m=1+(a=2)+(b=3)与a=2,b=3,m=1+a+b 答 ①前面是赋值表达式,而后面的是一个逗号表达式,所以一定不同; ②前面的表达式中a/b结果为一整数,结果已经取整,精度可能受到影响,之后强制float后才为浮点型,后面的是先将a转换为float后再与b相除,其值保证了精度,所以不同。 ③因为a、b均为整数,其前后两个表达式的计算结果是一致的。 ④前一表达式是一算术表达式,而后者为一赋值表达式,此为一点不同;另外,前一表达式的m只被赋过一次值,后一表达式中的m曾两次被赋值,第一次赋值时与第一表达式中的值一致,第二次赋值后即不再相同。⑤前后表达式的计算结果应该是一致的:a=2, b=3, m=6 7 条件表达式x>0?x:-x的功能是什么? 答 如果x的值是一正数,则表达式的值为x值;如果x的值是一非正数,则表达式的值为-x。其实该表达式的值即为x的绝对值,C语言中提供了一个函数fabs(x)即可完成此功能,该函数包含在math.h头文件中。用一个条件表达式描述从a、b、c中找出最大都赋给max.答 max=a>(b>c?b:c)?a:(b>c?b:c);9 ★若x为int型变量,则执行以下语句后x的值为()。x=6;x+=x-=x*x;A.36 B.-60 C.60 D.-24 答 B.10 ★若有以下类型说明语句: char w;int x;float y;double z;则表达式w*x+z-y的结果为()类型。A.float B.char C.int D.double 答 D.第三章 顺序结构程序设计 -习题答案 变量k为float类型,调用函数scanf(“%d”,&k),不能使变量k得到正确数值的原因是___。 答 格式修饰符与变量类型不一致。因为%d输入的数据类型应该为十进制整数,而&k为占用4个字节的float类型变量的地址。★a=1234,b=12,c=34,则执行“printf(“|%3d%3d%-3d|n”,a,b,c);”后的输出是___。 答 |1234 1234 | 分析如下: ①%3d为右对齐输出变量,且指定输出变量的值宽度为3个字符位,如果变量实际位数小于3,则左端补空格,如果变量实际位数大于3,则按实际长度输出,不受限制。 ②%-3d为左对齐输出变量,在输出变量时,如是变量实际位数小于3,则在右端补空格,否则按实际输出。★设有“int a=255,b=8;”,则“printf(“%x,%on”,a,b);”输出是___。答 ff,10 ①如果“printf(“%X,%on”,a,b);”则输出为FF,10。说明在输出十六进制字母时,其大小写受格式修饰符的限制,如果是“%x”则输出小写,如果是“%X”则输出大写。 ②如果希望在输出十六进制时输出前导符0x或0X,则以上输出语句应改“printf(“%#x,%on”,a,b);”为或“printf(“%#X,%on”,a,b);”。本条解释不必须掌握。★以下程序输出的结果是___。main(){ int a1=1,a2=0,a3=2;printf(“%d,%d,%dn”,a1,a1+a2+a3,a3-a1);} 答 1,3,1 5 printf函数中用到格式符%5s,其中5表示输出字符占用5列。如果字符串长度大于5,则按___输出;如果字符串长度小于5,则按___输出。 答 ①实际 ②左端补空格 6 ★已定义变量如下: int a1,a2;char c1,c2;若要求输入a1、a2、c1和c2的值,正确的输入函数调用语句是___。 答 scanf(“%d,%d,%c,%c”,&a1,&a2,&c1,&c2);7 输入两个整型变量a、b的值,输出下列算式以及运算结果___。a+b、a-b、a*b、a/b、(float)a/b、a%b 每个算式占一行。如a=10,b=5,a+b输出为:10+5=15 答 设int a=10,b=5;以下为输出语句及结果: ①printf(“%d+%d=%dn”,a,b,a+b);10+5=15 ②printf(“%d-%d=%dn”,a,b,a-b);10-5=5 ③printf(“%d*%d=%dn”,a,b,a*b);10*5=50 ④printf(“%d/%d=%dn”,a,b,a/b);10/5=2 ⑤printf(“%(float)d/%d=%fn”,a,b,(float)a/b);(float)10/5=2.000000 ⑥printf(“%d%%%d=%dn”,a,b,a%b);10%5=0 8 ★输入一个非负数,计算以这个数为半径的圆周长和面积。答 #define PI 3.1415926 main(){ float r,l,area;printf(“Input a positive:”);scanf(“%f”,&r);l=2*PI*r;area=PI*r*r;printf(“l=%ftarea=%fn”,l,area);} 9 输入任意一个3位数,将其各位数字反序输出(例如输入123,输出321)。 答 main(){ int x,y;printf(“Input a number(100-999):”);scanf(“%d”,&x);y=100*(x%10)+10*(x/10%10)+x/100;/*注意分析此处算法*/ 1.239页1题小时钟 procedure TForm1.Timer1Timer(Sender: TObject);var xt,yt:integer;h,m,s,ms:word;begin decodetime(time,h,m,s,ms);xt:=paintbox1.clientwidth div 2;yt:=paintbox1.clientheight div 2;paintbox1.refresh;paintbox1.canvas.moveto(xt,yt);paintbox1.canvas.pen.width:=3;paintbox1.canvas.lineto(xt+round(sin((60*h+m)/(12*60)*2*pi)*100), yt-round(cos((60*h+m)/(12*60)*2*pi)*100));paintbox1.canvas.moveto(xt,yt);paintbox1.canvas.pen.width:=2;paintbox1.canvas.lineto(xt+round(sin(m/60*2*pi)*140), yt-round(cos(m/60*2*pi)*140));paintbox1.canvas.moveto(xt,yt);paintbox1.canvas.pen.width:=1;paintbox1.canvas.lineto(xt+round(sin(s/60*2*pi)*180), yt-round(cos(s/60*2*pi)*180));end;end.2.239页3题求两点间的距离 procedure TForm1.Button1Click(Sender: TObject);begin paintbox1.Refresh;formpaint(sender);end;procedure TForm1.FormPaint(Sender: TObject);var xt,yt:integer;ax,ay,bx,by:integer;begin xt:=paintbox1.ClientWidth div 2;yt:=paintbox1.Clientheight div 2;paintbox1.canvas.MoveTo(xt,0);paintbox1.canvas.lineTo(xt,2*yt);paintbox1.canvas.MoveTo(0,yt);paintbox1.canvas.lineTo(2*xt,yt);ax:=strtoint(edit1.text);ay:=strtoint(edit2.text);bx:=strtoint(edit3.text);by:=strtoint(edit4.text); edit5.Text:=floattostr(sqrt((ax-bx)*(ax-bx)+(ay-by)*(ay-by))); paintbox1.canvas.MoveTo(xt+ax*10,yt-ay*10); paintbox1.canvas.lineTo(xt+bx*10,yt-by*10);end;end.3.226页5题输入学生成绩 var Form1: TForm1;type studentrecord=record xh,xm:string[6];xb:boolean;yy,sx,dz:integer;end; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var t:studentrecord; f,f1:file of studentrecord;p1,p2:boolean;begin assignfile(f,'c:my documentsstu.dat');reset(f); assignfile(f1,'c:my documentsstu1.dat');rewrite(f1); while not eof(f)do begin read(f,t); p1:=(t.sx>=85)and(t.yy>=85)and(t.dz>=85); p2:=t.sx+t.yy+t.dz>=270;if p1 or p2 then write(f1,t);end; closefile(f);closefile(f1);end; procedure TForm1.FormCreate(Sender: TObject); var t:studentrecord;f:file of studentrecord;xingbie:string;begin assignfile(f,'c:my documentsstu.dat');reset(f); while not eof(f)do begin read(f,t);if t.xb then xingbie:='男' else xingbie:='女'; listbox1.Items.Add(t.xh+' '+t.xm+' '+xingbie+' '+inttostr(t.sx)+ ' '+inttostr(t.yy)+' '+inttostr(t.dz));end; closefile(f);end; procedure TForm1.Button2Click(Sender: TObject);begin close;end;end.4.226页8题保存获得奖学金者 var Form1: TForm1;type studentrecord=record xh,xm:string[6];xb:boolean;yy,sx,dz:integer;end; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);var t:studentrecord;f,f1:file of studentrecord;p1,p2:boolean;begin assignfile(f,'c:my documentsstu.dat');reset(f);assignfile(f1,'c:my documentsstu1.dat');rewrite(f1);while not eof(f)do begin read(f,t);p1:=(t.sx>=85)and(t.yy>=85)and(t.dz>=85);p2:=t.sx+t.yy+t.dz>=270;if p1 or p2 then write(f1,t);end;closefile(f);closefile(f1);end;procedure TForm1.FormCreate(Sender: TObject);var t:studentrecord;f:file of studentrecord;xingbie:string;begin assignfile(f,'c:my documentsstu1.dat');reset(f);while not eof(f)do begin read(f,t);if t.xb then xingbie:='男' else xingbie:='女';listbox1.Items.Add(t.xh+' '+t.xm+' '+xingbie+' '+inttostr(t.sx)+ ' '+inttostr(t.yy)+' '+inttostr(t.dz));end;closefile(f);end;procedure TForm1.Button2Click(Sender: TObject);begin close;end;end.5.166页22题素数 procedure TForm1.Button1Click(Sender: TObject);type sushuset=set of byte;var sushu:sushuset;i,j,n,m,k:longword;s,s0:string;begin n:=strtoint(edit1.text);m:=strtoint(edit2.text);if n mod 2=0 then n:=n+1;k:=m-n; if k>255 then showmessage('范围太大,请重新输入区间端点!')else begin sushu:=[0..k];for i:=2 to n-1 do for j:=n to m do if j mod i =0 then sushu:=sushu-[j-n];for i:=n to m div 2 do for j:= i+1 to m do if j mod i =0 then sushu:=sushu-[j-n];s:='';s0:=''; for i:=n to m do if i-n in sushu then begin if length(s0+' '+inttostr(i))>60 then begin s:=s+s0+chr(13);s0:='' end; s0:=s0+' '+inttostr(i);end;s:=s+s0;label1.caption:=s; groupbox1.Top:=(panel1.Top-groupbox1.height)div 2;end;end; procedure TForm1.FormCreate(Sender: TObject);begin groupbox1.Top:=(panel1.Top-groupbox1.height)div 2;end; procedure TForm1.Edit1KeyPress(Sender: TObject;var Key: Char);var j:set of char;begin j:=['0'..'9',#8]; if not(key in j)then key:=#0;end;end.6.148页12题整除的数 implementation {$R *.dfm} function d7(x:integer):boolean;begin if x mod 7=0 then d7:=true else d7:=false;end; function d17(x:integer):boolean;begin if x mod 17=0 then d17:=true else d17:=false;end; procedure TForm1.FormActivate(Sender: TObject);var n:integer;begin for n:=1000 to 4000 do if d7(n)and d17(n)then memo1.Lines.Add(inttostr(n));end;end.7.148页17题求斐波那契数列问题 implementation {$R *.dfm} function fib(n:integer):int64;begin case n of 1,2:fib:=1;else fib:=fib(n-1)+fib(n-2);end;end;procedure TForm1.Button1Click(Sender: TObject);var k:integer;begin memo1.lines.clear;for k:=1 to strtoint(edit1.text)do memo1.lines.add(format('%2d %3d',[k,fib(k)]));end;end.8.120页10题,判断是否是闰年 procedure TForm1.Button1Click(Sender: TObject);var y,m:integer;begin y:=strtoint(edit1.text);m:=strtoint(edit2.text);label3.Caption:='';if((y mod 4 = 0)and(y mod 100 <> 0))or(y mod 400=0)then label3.Caption:=edit1.text+'年是闰年,' else label3.Caption:=edit1.text+'年不是闰年,';case m of 3,4,5:Label3.Caption:=Label3.Caption+edit2.Text+'月份是春天,';6,7,8:Label3.Caption:=Label3.Caption+edit2.Text+'月份是夏天,';9,10,11:Label3.Caption:=Label3.Caption+edit2.Text+'月份是秋天,';else Label3.Caption:=Label3.Caption+edit2.Text+'月份是冬天,';end; case m of 1,3,5,7,8,10,12:Label3.Caption:=Label3.Caption+'共有31天,'; 4,6,9,11:Label3.Caption:=Label3.Caption+'共有30天,';else if((y mod 4 = 0)and(y mod 100 <> 0)or(y mod 400=0))then Label3.Caption:=Label3.Caption+'共有29天,' else Label3.Caption:=Label3.Caption+'共有28天,';end;end;end.9.120页11题求和的 procedure TForm1.Button1Click(Sender: TObject);var n,k,j:integer;s:int64;begin n:=strtoint(edit1.text);j:=0;s:=0; for k:=1 to n do begin j:=j+k;s:=s+j;end; panel2.Caption:=format('s = %d',[s]);edit1.setfocus;end; procedure TForm1.Edit1KeyPress(Sender: TObject;var Key: Char);var b:boolean;begin b:=(key<>#8)and(key<#48)or(key>#57); if b then key:=#0;end;end.10.120页12题男人,女人,小孩各有多少人 procedure TForm1.Button1Click(Sender: TObject);var x,y,z:integer;p:string;begin memo1.clear;for x:=0 to 16 do for y:=0 to 24 do begin z:=30-x-y; if 3*x+2*y+z/1=50 then begin p:=format('%3d %3d %3d',[x,y,z]); memo1.lines.add(p);end;end;end;end.11.98页2题求长方体的表面积 procedure TForm1.Button1Click(Sender: TObject);var s,l,k,h:double;begin l:=strtofloat(edit1.text);k:=strtofloat(edit2.text);h:=strtofloat(edit3.text);s:=2*l*k+2*k*h+2*l*h;label1.Caption:=floattostr(s);end;end.12.98页5题计算圆的面积和周长 procedure TForm1.Edit1KeyPress(Sender: TObject;var Key: Char);var r:real;b:boolean;begin b:=(key<>#8)and(key<>'.')and(key<>#13)and(key<#48)or(key>#57);if b then key:=#0;if key =#13 then begin if edit1.text='' then edit1.text:='0';r:=strtofloat(edit1.text);if radiobutton1.Checked then label1.Caption:=format('圆的面积为: %f',[pi*r*r]);if radiobutton2.Checked then label1.Caption:=format('圆的周长为: %f',[2*pi*r]);if radiobutton3.Checked then label1.Caption:=format('圆的面积为: %f'+chr(13)+ '周长为: %f',[pi*r*r,2*pi*r]);edit1.SelectAll;end;end;procedure TForm1.RadioButton1Click(Sender: TObject);var sender0:tobject;key:char;begin sender0:=edit1;key:=#13;form1.edit1keypress(sender0,key);end;procedure TForm1.RadioButton2Click(Sender: TObject);var sender0:tobject;key:char;begin sender0:=edit1;key:=#13;form1.edit1keypress(sender0,key);end;procedure TForm1.RadioButton3Click(Sender: TObject);var sender0:tobject;key:char;begin sender0:=edit1;key:=#13; form1.edit1keypress(sender0,key);end;end.13.98页6题统计奇数和偶数的个数 procedure TForm1.Button1Click(Sender: TObject);var k,j,n:word;begin k:=0; n:=combobox1.items.count;for j:=1to n do if strtoint(combobox1.items[j-1])mod 2 = 0 then k:=k+1; label1.caption:=format('共有: '+#13+'%d个偶数,'+#13+'%d个奇数。',[k,n-k]);end; procedure TForm1.Button2Click(Sender: TObject);begin combobox1.items.clear;end; procedure TForm1.ComboBox1KeyPress(Sender: TObject;var Key: Char);begin if(key =#13)and(combobox1.text<>'')then //按 combobox1.items.insert(0,combobox1.text); //按 combobox1.selstart:=0;combobox1.text:='';end; if key = #27 then if combobox1.itemindex<>-1 then combobox1.items.Delete(combobox1.itemindex);end;end.14.98页8题设置倒计时的时间,并进行倒计时 procedure TForm1.Timer1Timer(Sender: TObject);var m,n,s,h:integer;begin timer1.Tag:=timer1.Tag-1;m:=timer1.Tag;if m<0 then begin timer1.enabled:=false; showmessage('预定的时间到了!');edit1.Text:='0';end else begin s:=m; n:=s div 60;s:=s mod 60;h:=n div 60;n:=n mod 60; maskedit1.text:=format('%d:%d:%d',[h,n,s]); if n <> strtoint(edit1.text)then edit1.Text:=inttostr(n);end;end; procedure TForm1.Button1Click(Sender: TObject);begin timer1.enabled:=True; timer1.Tag:=strtoint(edit1.Text)*60;end;end. 《C语言程序设计教程》课后题答案 第一章 一选择题 1.A 2.B 3.C 4.D 5.B 6.C 二.填空题 1.程序 2.算法 3.main或主 4.编译 5.编译 6..obj 7.库函数 8.文本或ASCII码 三、编程题 1.参考代码如下: #include printf(“金n木n水n火n土n”);} 2.参考代码如下: #include scanf(“%d%d”,&a,&b); printf(“%d+%d=%dn”,a,b,a+b); printf(“%d-%d=%dn”,a,b,a-b); printf(“%d*%d=%dn”,a,b,a*b); printf(“%d/%d=%dn”,a,b,a/b);} 3.参考代码如下: #include float a,b,h,s; scanf(“%f%f%f”,&a,&b,&h); s=(a+b)*h/2; printf(“s=%fn”,s);} 第二章 一选择题 答案及分析: 1.B,略 2.A,-8在内存中是以补码(设两个字节)形式存储的 3.A,C语言有32个关键字(参见课本第18页),且C语言标识符是区分大小写字母的 4.A,略 5.D,八进制数据中不能出现数码8 6.B,字符常量应该用单引号括起来,答案D超出了ASCII取值范围(ASCII的取值范围为[0,255]) 7.C,该字符串中转义字符有三个:、22和 n,普通字符有三个:a、,和0,所以字符串长度为6 8.C,略 9.D,C语言没有read函数和%D格式符号,且scanf函数第二个形参为地址列表 10.B,根据题意,scanf函数输入数据时分隔符号不应该是逗号,应该是空格或回车符,且输入数据时分一行或几行均可 11.A,scanf函数中不允许出现%8.4,%6.2和%8这样的格式符号 12.C,既要保证5位小数位,还得保证整数位不变,这样数据12345.67800用10列不能完全显示出来,按C语言规定,12345.67800原样输出 13.B,printf函数中格式符号%d,%o,%x表示对应的整型数据分别按十进制,八进制和十六进制输出 14.C,按C语言规定,scanf函数形参双引号中,如果包含非格式符号,在输入数据时要求原样输入 二.填空题 答案及分析: 1.int float double(略) 2.65,89,printf函数中如果格式符号是%d,则输出相应字符的ASCII十进制数值 3.a=98,b=765.000000,c=4321.000000,scanf函数中的格式符号%2d%3f%4f,表示将键盘输入的数据9876543210按2,3,4位分割,然后再分别赋给变量a,b,c 4.scanf(“%lf%lf%lf”,&a,&b,&c);double类型的变量对应的格式符号是%lf 三、编程题 1.参考代码如下: #include int a=97; printf(“%cn”,a); printf(“%dn”,a); printf(“%on”,a); printf(“%xn”,a);} 程序分析:通过printf函数中不同的格式符号,即%c(字符),%d(十进制),%o(八进制),%x(十六进制)输出相应的值。2.参考代码如下: #include int h,m,minute; scanf(“%d:%d”,&h,&m); minute=h*60+m; printf(“minute=%dn”,minute);} 程序分析:输入形式为10:27,故scanf函数双引号中两个格式符号%d之间必须加入“:”。3.参考代码如下: #include float r=6371000,s,v; s=4*3.1415926*r*r; v=3.1415926*4/3*r*r*r; printf(“s=%fnv=%f”,s,v);} 程序分析:C语言中的π不代表3.1415926,可以用各种常量的形式体现出来。4.参考代码如下: #include int m100,m50,m20,m10,m5,m1,m; scanf(“%d”,&m); m100=m/100; m50=(m-m100*100)/50; m20=(m-m100*100-m50*50)/20; m10=(m-m100*100-m50*50-m20*20)/10; m5=(m-m100*100-m50*50-m20*20-m10*10)/5; m1=m-m100*100-m50*50-m20*20-m10*10-m5*5; printf(“%d元发工资,人名币各票面的张数为:n”,m); printf(“100元的张数:%dn”,m100); printf(“50元的张数:%dn”,m50); printf(“20元的张数:%dn”,m20); printf(“10元的张数:%dn”,m10); printf(“5元的张数:%dn”,m5); printf(“1元的张数:%dn”,m1);} 程序分析:人民币的面值分别为100元,50元,20元,10元,5元和1元,工资4367元除以100后得到的商就为100元张数,余数再除以50,得到的商为50元的张数,余数再除20,„„,以此类推就会得出人民币各面值相应的张数。5.参考代码如下: #include float r1,r2,r3,r; scanf(“%f%f%f”,&r1,&r2,&r3); r=r1*r2*r3/(r1*r2+r2*r3+r1*r3); printf(“三个电阻并联后的总电阻为%fn”,r);} 程序分析:首先将计算并联电阻值的公式变换一下;再就是考虑要保留小数位,故变量类型设置为实型,注意格式符号为%f。6.参考代码如下: #include int x,a,b,c,d,y; scanf(“%d”,&x); a=x%10; b=x/10%10; c=x/100%10; d=x/1000; y=a*1000+b*100+c*10+d; printf(“%d逆置各位数后的值为%dn”,x,y);} 程序分析:1234除以10的余数就是4,商再除以10的余数就是3,1234除以100再除以10取余就是2,1234除以1000就是1。也可以用其他的表达式求出各位数值,例如输入数据1234中的4,可以用公式a=x-d*1000-c*100-b*10来计算。7.参考代码如下: #include float F,C; printf(“请输入华氏温度:”); scanf(“%f”,&F); C=5.0/9*(F-32); printf(“华氏温度%f对应的摄氏温度为%fn”,F,C);} 程序分析:5/9的值为0,所以要写成5.0/9,5/9.0或5.0/9.0,还要注意变量类型为实型,且对应的格式符号为%f。8.参考代码如下: #include char ch1,ch2,ch3; printf(“请输入三个数字字符:”); scanf(“%c%c%c”,&ch1,&ch2,&ch3); printf(“将数字字符转换为数字%d,%d,%dn”,ch1-'0',ch2-48,ch3-'0');} 程序分析:通过键盘输入三个数字字符时要连续输入,不要加任何分隔符号,例如121等,另外,数字字符输出时遇到格式符号%d将输出相应数字字符的ASCII值,但任何一个数字字符的ASCII值减去字符0的ASCII值,再对应%d格式符号输出时,就是数字字符对应的数字,例如'2'-'0'=2。 9.不能得到指定的输出结果,参考代码如下: void main(){ int a, b, c,x, y; scanf(“%d%d%d”,&a,&b,&c); x=a*b; y=x*c; printf(“a=%d,b=%d,c=%dn”,a,b,c); printf(“x=%d,y=%dn”,x,y);} 程序分析:scanf(“%d,%d,%d”,a,b,c);scanf函数第二类形参是地址列表,所以语句改为scanf(“%d,%d,%d”,&a,&b,&c);而这个语句对应的键盘输入形式为2,3,4。为了满足题目要求,scanf语句改为scanf(“%d%d%d”,&a,&b,&c)。另外,printf函数双引号只能出现一对,且双引号中需要在相应的位置上添加a=等这样的字符串才能原样输出;还有整型变量对应格式符号是%d等。 第三章 一选择题 1.A 2.C 3.C 4.D 5.C 6.B 7.C 8.B 9.A 10.A 11.A 12.B 13.D 14.A 15.B 16.C 17.C 18.C 19.C 20.C 21.C 22.B 23.C 24.C 25.A 26.B 27.A 28.A 29.C 30.A 31.C 32.C 二.填空题 1.非零 零 2.passwarm 3.525252 4.fabs(x)>5 5.x%y==0 6.if((1<=x&&x<=10||200<=x&&x<=210)&&x%2==1)printf(“%d”,x);7.k=1 8.Right!1 Right!1 9.$$$ a=0 10.a=2,b=1 11.0 “%f%f” a=b;13.“%c”,&ch 'A'<=ch&&ch<='Z' ch 14.死循环 15.345 16.7 3-1 17.x>=0 x j%3!=0 24.b=i+1 25.8 5 2 26.d=1.0 k++ k<=n 三、编程题 1.参考代码如下: #include y=x;else if(x==0) y=x-1;else if(x>0&&x<10) y=x+1;printf(“y=%f”,y);} 2.参考代码如下: #include float a,b,c; printf(“请输入三角形三边的长度:n”); scanf(“%f%f%f”,&a,&b,&c); if(a+b>c&&b+c>a&&a+c>b) if(a==b&&a==c) printf(“该三角形是等边三角形n”); else if(a==b&&a!=c) printf(“该三角形是等腰三角形n”); else printf(“该三角形是一般三角形n”); else printf(“不能构成三角形n”);} 3.参考代码如下: #include float M,N,menoy; printf(“请输入购买金额:”); scanf(“%f”,&M); if(M<100) N=0; else if(M>=100&&M<200) N=1.5; else if(M>=200&&M<300) N=2.5; else if(M>=300&&M<400) N=3.5; else if(M>=400&&M<500) N=4.5; else if(M>=500&&M<600) N=5.5; else N=6; menoy=M*(1-N/100); printf(“实际支付金额:%f,返还的金额:%fn”,menoy,M-menoy);} 4.参考代码如下: #include float M,N,menoy; int in; printf(“请输入购买金额:”); scanf(“%f”,&M); in=M/100; switch(in) { case 0:N=0;break; case 1:N=1.5;break; case 2:N=2.5;break; case 3:N=3.5;break; case 4:N=4.5;break; case 5:N=5.5;break; default :N=6;break; } menoy=M*(1-N/100); printf(“实际支付金额:%f,返还的金额:%fn”,menoy,M-menoy);} 5.参考代码如下: #include float x,max; printf(“Enter a number:”); scanf(“%f”,&x); max=x; while(x>0) { printf(“Enter a number:”); scanf(“%f”,&x); if(x>max) max=x; } if(max>0) printf(“The largest number entered was %fn”,max);} 6.参考代码如下: #include float M,N,menoy; printf(“请输入购买金额:”); scanf(“%f”,&M); while(M>0) { if(M<100) N=0; else if(M>=100&&M<200) N=1.5; else if(M>=200&&M<300) N=2.5; else if(M>=300&&M<400) N=3.5; else if(M>=400&&M<500) N=4.5; else if(M>=500&&M<600) N=5.5; else N=6; menoy=M*(1-N/100); printf(“实际支付金额:%f,返还的金额:%fn”,menoy,M-menoy); printf(“请输入购买金额:”); scanf(“%f”,&M); } } 7.参考代码如下: #include float number,positivesum=0,negativesum=0,total=0; int i; for(i=1;i<=10;i++) { scanf(“%f”,&number); if(number>=0)positivesum+=number; else negativesum+=number; total+=number; } printf(“positive sum %f,negative sum %f,total %fn”,positivesum,negativesum,total);} 8.参考代码如下: #include int i,sum=0,k=1; for(i=1;i<=101;i+=2) { sum=sum+k*i; k=-k; } printf(“1-3+5-7+...-99+101=%dn”,sum);} 9.参考代码如下: #include float i,sum=0,k=1; for(i=1;k>=1e-4;i++) { sum=sum+k; k=k/i; } printf(“e=%fn”,sum);} 10.参考代码如下: #include float i,sum=0,n=2,d=1,temp; for(i=1;i<=20;i++) { sum=sum+n/d; temp=n; n=n+d; d=temp; } printf(“sum=%fn”,sum);} 11.参考代码如下: #include float apple,watermelon,pear; for(apple=1;apple<100;apple++) for(watermelon=1;watermelon<10;watermelon++) { pear=100-apple-watermelon; if(fabs(apple*0.4+watermelon*4+pear*0.2-40.0)<1e-6) printf(“apple:%.0f,watermelon:%.0f,pear:%.0fn”,apple,watermelon,pear); } } 12.参考代码如下: #include int i,j,k; for(i=1;i<10;i++) for(j=0;j<10;j++) for(k=0;k<10;k++) if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) printf(“%dn”,i*100+j*10+k);} 或: #include int a,b,c,i; for(i=100;i<1000;i++) { a=i/100; b=i/10%10; c=i%10; if(i==(a*a*a+b*b*b+c*c*c)) printf(“%dn”,i); } } 13.参考代码如下: #include int a,b,c,d; for(a=1;a<10;a++) for(b=0;b<10;b++) for(c=0;c<10;c++) for(d=0;d<10;d++) if(a*1000+b*100+c*10+d==(a*10+b+c*10+d)*(a*10+b+c*10+d)) printf(“%dn”,a*1000+b*100+c*10+d);} 或: #include int a,b,c,d,i; for(i=1000;i<10000;i++) { a=i/1000; b=i/100%10; c=i/10%10; d=i%10; if(i==(a*10+b+c*10+d)*(a*10+b+c*10+d)) printf(“%dn”,i); } } 14.参考代码如下: #include int i,j; for(i=1;i<=4;i++)//先控制打印前4行 { for(j=1;j<=4-i;j++) printf(“ ”); for(j=1;j<=2*i-1;j++) printf(“*”); printf(“n”); } for(i=1;i<=3;i++)//再控制打印后3行 { for(j=1;j<=i;j++) printf(“ ”); for(j=1;j<=2*(4-i)-1;j++) printf(“*”); printf(“n”); } } 第四章 一选择题 1.A,如果没有给s[1]赋值,按C语言规定,s[1]下标变量中的数据是一个随机数 2.C,“China”字符串末尾还有一个 ,故占6个字节 3.D,scanf函数中格式符号若是%c,则把输入的第一个字符'1'赋给变量c,然后遇到格式符号%d,则把后续的23(遇到空格结束)赋值给变量i,遇到格式符号%s,则把后续的字符串“456”(遇到空格结束)赋值给变量s 4.D,C语言规定,数组在定义时就已经分配好了所占内存空间,所以int x[5]在内容中占的字节数为4*5=20 5.B,内层循环变量j每次都从0开始,使得在外层循环变量i每取一个值时,n[0]和n[1]的值都得重新计算 6.B,这是求十进制数18对应二进制数的程序,将每次18除以2得到的余数依次放到数组a[0]到a[4]中,最后按a[4]到a[0]这样的顺序输出 7.B,第一个for循环给a[0]到a[9]赋值为0到9,第二个for循环给p[0]到p[2]赋值为0,2,6,第三个for循环使k=k+p[0]*2+p[1]*2+p[2]*2=5+4+12=21 8.D,C语言规定,定义二维数组时不能省略第二维下标值,但可以省略第一维下标值 9.B,略 10.A,每行的第4列元素的值都为0 11.C,略 12.D,C语言规定,字符数组不能用s=“abcd”这样的赋值语句赋值 13.C,float类型的变量对应格式符号通常为%f,不是%d 14.A,每行的第3列元素的值均为0 15.D,略 16.C,A这种赋值形式无法放置字符串末尾的 ,B和D不符合C语言规定,即字符数组不能用s=“good”这样赋值语句赋值 17.A,这是字符数组str初始化的形式,str[0]到str[5]分别为字符s,t,r,i,n,g,str[6]到str[11]的值均为 ,函数strlen是统计字符串包含字符的个数,遇到 (不包括 )结束,所以str长度为6 18.C,x数组比y数组多了一个字符 19.A,数组名就是数组第一个元素的地址,所以scanf(“%s”,&s);中得删除数组名前面的& 20.D,puts和putchar函数只有一个参数,printf函数中格式符号%s应该对应的是数组名 21.D,程序功能是输出第2和第3个字符串 22.A,双层循环完成的功能是求s的值,s=(((a[0][0]*10+a[0][2])*10+a[1][0])*10+a[1][2]=(((6*10+3)*10+8)*10+5=6385 二.填空题 1.a=1234 b=5 答案分析:C语言规定,使用scanf函数通过键盘输入数据时,除了格式符号和转义字符,其他符号要原样输入。 2.Hello 答案分析:b[5]=0等于b[5]= ' ',是因为字符 的ASCII值就是0,而printf(“%sn”,b);的功能是输出字符串,但遇到空格或 等字符时结束输出,所以答案为Hello。 3.j<3;b[j][i]=a[i][j];i<3 答案分析:通过两个数组下标变量位置的变换来完成程序功能。 4.a[age]++ i=18;i<=25 答案分析:用数组a来存储每个年龄段的人数,并通过a[age]++来实现。5.c[i]=n%base;b[d] 答案分析:十进制整数转换为n进制采用的是除以n取余法,使用变量base存放某个进制的值,c数组存放每次计算的余数。最后一个for循环输出不同进制所对应的数码符号。6.break;i>=8 答案分析:如果找到某个数,则通过break语句终止循环。7.-850,2,0 答案分析:程序功能是查找并输出二维数组中最小值及其下标值。8.a[i]>b[j] i<3 j<5 答案分析:数组a和b的长度可以相等或不等,通过i<3或j<5来看哪个数组的值还没有放进c数组中。 9.a[i][j] j=0;j<4;j++ j==3 printf(“n”); 答案分析:用数组a最后一列,即第4列来保存每行的和,通过printf(“n”);语句来控制按3行来输出。10.fi 答案分析:略 11.GDABC 答案分析:略 12.s[i++] 答案分析:while(s[i])表示当s[i]中的字符不为 时进入循环体,否则退出while循环。 13.ahAMa 答案分析:通过scanf(“%s”,a);给字符数组赋值时遇到空格或回车符号将终止输入。程序功能是将字符串中的字符a,大写变成小写,小写变成大写,其他字符保持不变。14.LBLMNP 答案分析:执行strcat(a,b);语句后,a数组的值为“ABLMNP”,b数组的值为“LMNP”;在执行while(a[j++]!=0)b[j]=a[j];时,b[j]中的j值是前面a[j++]中j++执行后的值,即while循环首先执行b[1]=a[1]= 'B',然后是b[2]=a[2]= ' L',b[3]=a[3]= 'M',„„,b[0]中的字符保持不变,仍是' L'。15.' ' i++ 答案分析:因为while(str[i])是通过字符串末尾的 来判断字符串是否读取结束,所以字符数组str最后要有一个字符串结束符号 。16.b[j]=a[j][0];b[j]=a[j][k] 答案分析:用b数组存储每行中的最大字符,最终b[0]存放第一行字符中的最大字符,b[1] 存放第一行字符中的最大字符,„„。b[j]=a[j][0]的作用是在查找一串字符中最大字符前,先把这串字符第一个字符放到b[j]中,然后通过循环和条件判断来实现最大字符的查找。17.a[k++]=a[j] 答案分析:略 三、编程题 1.参考代码如下: #include int array[31],total=0; int i,j=1; for(i=0;i<30;i++) { array[i]=2*j; j++; total=total+array[i]; } array[30]=total/30; for(i=0;i<31;i++) printf(“%d,”,array[i]);} 答案分析:由于平均值要放在数组array的末尾,所以在定义数组时要多定义一个元素,即array[31]。另,为了保持数组类型一致性,故平均值也只取整数值。2.参考代码如下: #include int i,j,k,a[20],temp; srand(time(NULL)); for(i=0;i<20;i++) { a[i] = rand()% 101;//产生[0,100]之间的随机数,取整后赋给a[i] printf(“%d ”,a[i]); } printf(“n”); for(i=0;i<19;i++) { k=i; for(j=i+1;j<20;j++) if(a[j] if(k!=i)temp=a[i],a[i]=a[k],a[k]=temp; } for(i=0;i<20;i++) printf(“%d ”,a[i]);} 程序分析:略 3.参考代码如下: #include int i,maxi,a[30]; srand(time(NULL)); for(i=0;i<30;i++) { a[i] = rand()% 101; //产生[0,100]之间的随机数,取整后赋给a[i] printf(“%d ”,a[i]); } printf(“n”); maxi=0; for(i=1;i<30;i++)第二篇:Java6程序设计实践教程实验指导+课后答案
第三篇:C语言程序设计教程课后习题答案
第四篇:完整的delphi程序设计教程课后习题答案
第五篇:《C语言程序设计教程》课后题答案