算法(第四版)(有问题望大家指出,虚心接受大家批评,望可以和大家一起进步-。-)
注:编码都是在一个项目中完成的,每一道题都是一个新类中的函数,最后全部放在了一个主函数中,主函数在本文的在最后。
1.1 基础编程模型
练习1.1
1.1.1 给出下列表达式的值
a.(0+15)/2
b.2.0e-6*100000000.1
c.true&&false||true&&true
编码
public class Text1_1_1 {
void print1_1_1 ()
{
System.out.println((0+15)/2);
System.out.println(2.0e-6*100000000.1);
System.out.println(true&&false||true&&true);
}
}
答案
7
200.0000002
true
1.1.2 给出以下表达式的类型和值
a.(1+2.236)/2
b.1+2+3+4.0
c.4.1>=4
d.1+2+"3"
编码
public class Text1_1_2 {
void print1_1_2() {
System.out.println((1+2.236)/2);
System.out.println(1+2+3+4.0);
System.out.println(4.1>=4);
System.out.println(1+2+"3");
}
}
答案
1.618 10.0 true 33
1.1.3 编写一个程序,从命令行得到三个整数参数。如果他们都相等则打印equal,否则打印not equal 。
编码
import java.util.Scanner; public class Text1_1_3 { void judge_int_num() { Scanner scanner=new Scanner(System.in); int int_number1=scanner.nextInt(); int int_number2=scanner.nextInt(); int int_number3=scanner.nextInt(); if(int_number1==int_number2&&int_number1==int_number3) System.out.println("equal"); else System.out.println("not equal"); scanner.close(); } }
1.1.4下列语句各有什么问题(如果有的话)?
a.if(a>b) then c=0;
b.if a>b {c=0};
c.if(a>b) c=0;
d.if(a>b) c=0 else b=0;
答案
a->错误-> Java中无then,不能用then表明其因果的逻辑关系。
b->错误->其中的a>b为判断,因用括号括住。
c->正确。
d->错误->c=0后无;,因添加;号。
1.1.5编写一段程序,如果double类型的变量x和y都严格位于0和1之间则打印true,否则打印false。
编码
1.1.6 下面这段程序会打印出什么?import java.util.Scanner; public class Text1_1_5 { void judge_doublenum_0or1() { boolean flag = false; //定义一个布尔型变量,判断其是否位于0-1之间 Scanner scanner =new Scanner(System.in); double x=scanner.nextDouble(); double y=scanner.nextDouble(); if((x>=0&&x<=1)&&(y>=0&&y<=1)) flag=true; System.out.println(flag); scanner.close(); } }
答案int f=0; int g=1; for(int i=0;i<=15;i++) { StdOut.println(f); //经过网上查阅,发现StdOut.println();跟System.out.println();没有貌似什么区别,是个api f=f+g; g=f-g; }
1.1.7 分别给出一下代码段打印出的值0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 //斐波那契数列
编码//a. double t = 9.0; while (Math.abs(t - 9.0/t) > .001) t = (9.0/t + t) / 2.0; StdOut.printf("%.5f\n", t); //b. int sum = 0; for (int i = 1; i < 1000; i++) for (int j = 0; j < i; j++) sum++; StdOut.println(sum); //c. int sum = 0; for (int i = 1; i < 1000; i *= 2) for (int j = 0; j < 1000; j++) sum++; StdOut.println(sum);
答案public class Text1_1_7 { void print_a() { double t=9.0; while(Math.abs(t-9.0/t)>.001) t=(9.0/t+t)/2.0; System.out.printf("%.5f\n",t); } void print_b() { int sum=0; for(int i=1;i<1000;i++) for(int j=0;j<1;j++) sum++; System.out.println(sum); } void print_c() { int sum=0; for(int i=1;i<1000;i*=2) for(int j=0;j<100;j++) sum++; System.out.println(sum); } }
1.1.8 下列语句会打印出什么结果?给出解释3.00009 //.001为0.001 999 //第一层一共循环999次,第二层1次/第一层循环 1000 //第一层一共循环10次,2^10=1024>1000 , 第二层100次/第一层循环
编码a.System.out.println('b'); b.System.out.println('b'+'c'); c.System.out.println((char)('a'+4));
答案public class Text1_1_8 { void print_text() { System.out.println('b'); System.out.println('b'+'c'); System.out.println((char)('a'+4)); } }
b //'b'为字符型直接输出 197 //'b'+'c' 字符与字符相加就是acsll码和acsll码相加,即答案为98+99=197 e //字符+数字,先将字符转换为acsll与4相加,而后又强行转换为(char)型,即为e。
1.1.1-1.1.9的主函数代码:
注:代码都可以直接运行,都进行过调试
public class Text_algorithms1_1 { public static void main(String[] args) { // 第一题 System.out.println("1.1.1给出下表达式的值"); Text1_1_1 a=new Text1_1_1(); a.print1_1_1(); //第二题 System.out.println("1.1.2给出下列表达式的类型和值"); Text1_1_2 b=new Text1_1_2(); b.print1_1_2(); //第三题 System.out.println("1.1.3编写一个程序,输入三个整数参数。相等输出equal,否则输出not equal"); Text1_1_3 c=new Text1_1_3(); c.judge_int_num(); //第五题 System.out.println("编写一段程序,如果double类型的变量x和y都严格位于0和1之间则打印true,否则打印false。"); Text1_1_5 d=new Text1_1_5(); d.judge_doublenum_0or1(); //第六题 System.out.println("下面这段程序会打印出什么?"); Text1_1_6 e=new Text1_1_6(); e.What_print(); //第七题 System.out.println("分别给出一下代码段打印出的值"); Text1_1_7 f=new Text1_1_7(); f.print_a(); f.print_b(); f.print_c(); //第八题 System.out.println("下列语句会打印出什么结果?给出解释"); Text1_1_8 g=new Text1_1_8(); g.print_text(); //第九题 System.out.println("编写一段代码,将一个正整数N用二进制表示并转化为一个String类型的值s"); Text1_1_9 h=new Text1_1_9(); System.out.println("输入一个十进制数返回一个二进制"); Scanner scanner=new Scanner(System.in); int decimal_num=scanner.nextInt(); System.out.println(h.decimalToBinary(decimal_num)); } }