数据类型和运算符作业
一、填空题
1.Java语言规定标识符由字母、下划线、美元符号和数字组成,并且第一个字符不能是 数字 。
2.Java中整型变量有byte、short、int和long四种,不同类型的整数变量在内存中分配的字节数不同,数值范围也不同。对于int型变量,内存分配 4 个字节。
3.在Java中浮点型变量有float和double两种,对于float型变量,内存分配4个字节,尾数可精确到7位有效数字,对于double型变量,内存分配 8 个字节。
4.char c=’a’;System.out.println(c+1);运行结果为: 98 。
5.&&是短路与运算符,如果左侧表达式的计算结果是false,右侧表达式将不再进行计算。
6.下面的语句是声明一个变量并赋值:boolean b1=5!=8; b1的值是___true____。
7.使用位运算符来实现运算效率最高,所以最有效率的方法算出2乘以8等于多少的语句是 int a = 2,b; b = a<<3; 。
8.基本数据类型的类型转换中,要将double类型的常量3.14159赋给为整数类型变量n的语句是___double d = 3.14159; int n = (int) d;___________。
9.八进制整数012表示十进制的 10___,十六进制数0x3C表示十进制的__60___。
10.一个十进制整数转换成八进制数后是1234,则它转为十六进制数后是 29c 。
二、选择题
-
在Java中,以下错误的变量名是( D )。(选择一项)
A constant
B. flag
C. a_b
D. final -
以下选项中属于合法的Java标识符的是( C D )。(选择两项)
A. public
B. 3num
C. name
D. _age -
在Java中,byte数据类型的取值范围是( A )。(选择一项)
A -128 ~ 127
B. -228 ~128
C. -255 ~ 256
D. -255 ~ 255 -
下面的代码段中,执行之后i和j的值是( C )。(选择一项)
int i=1; int j;
j=i++;A 1,1
B. 1,2
C. 2,1
D. 2,2 -
下面Java代码的执行结果是( C )。(选择一项)
public class Test {
public static void main(String args[]) {
System.out.println(100 % 3);
System.out.println(100%3.0);
}
}A 1 1.0
B. 1 1
C. 1.0 1.0
D. 33 33.3 -
下面的赋值语句中错误的是( A )。(选择一项)
A float f = 11.1;
B. double d = 5.3E12;
C. double d = 3.14159;
D. double d = 3.14D; -
在Java中,下面( A B )语句能正确通过编译。(选择两项)
A System.out.println(1+1);
B. char i =2+‘2’;
System.out.println(i);
C. String s=“on”+‘one’;
D. int b=255.0; -
以下Java运算符中优先级别最低的两个选项是( A B )。(选择二项)
A 赋值运算符= 4
B. 条件运算符 ?: 3
C. 逻辑运算符| 2
D. 算术运算符+ 1 -
关于以下Java程序中错误行的说明正确的是( B )。(选择一项)
public class Test2 {
public static void main(String[] args) {
short s1=1; //1
s1=s1+1; //2
s1+=1; //3
System.out.println(s1);
}
}A 1行错误
B. 2行错误
C. 3行错误
D. 1行,2行,3行都错误
三、判断题
1.Java中变量名不区分大小写,number和NuMbEr代表同一个变量。( 错 )
2.在编译Java源程序时,计算机根本不会去识别各个变量名的具体含义,因此命名规范对编写Java程序而言不是必要的,而且有可能会降低编写Java源程序的效率。( 错 )
3.Java语言中不同数据类型的长度是固定的,不随机器硬件不同而改变。( 对 )
4.char类型变量可以存储一个Unicode字符,在内存中占2个字节,该字符可以是一个汉字。( 对 )
5.运算符||和&&既是逻辑运算符,也是位运算符。根据两侧操作数的类型判断是逻辑运算符还是位运算符。( 错 )
6.^ 是异或位运算符,运算规则是如果两个操作数相同,结果是0,否则结果是1。( 错 )
7.赋值运算符优先级别低于条件运算符,条件运算符优先级别低于算术运算符。( 对 )
8.赋值和条件运算符是运算级别最低的两种运算符,都具有自右向左的结合性。( 对 )
9.整型常量的默认类型是int类型,浮点常量的默认类型是float类型。( 错 )
10.00101010 & 00010111语句的执行结果为00111111( 错 )
四、简答题
1.Java是一种强类型语言,说明Java的数据类型分类。
Byte、int、double、float、char、String、long、short
2.i++和++i的异同之处
相同点:最终都会将i加1
不同点:i++变量执行后加1
++i变量执行前加1
3.运算符||和|的异同之处
相同点:||和|都可以用作逻辑或的运算符,表示逻辑与(or),只要有一方为true, 则结果为true。否则,当运算符两边的表达式的结果都为false时,整个运算结果 才为false。
区别:”||“执行过程中会出现“短路”的现象。即若符号”||”前的表达式如果 为true,那么后面的那个表达式将不会被执行,直接返回true。
4.Java中基本数据类型转换的规则
数据类型分类:主要分为 基本类型、引用类型两大类;
(1)布尔型和其它基本数据类型之间不能相互转换;
(2)byte型可以转换为short、int、、long、float和double;
(3)short可转换为int、long、float和double;
(4)char可转换为int、long、float和double;
(5)int可转换为long、float和double;
(6)long可转换为float和double;
(7)float可转换为double;
五、编码题
(1)输入自己的名字,年龄和性别,分别用不同的变量接收,并将输入的信息做输出。
Scanner sc = new Scanner(System.in);
System.out.println(“Please your name here:”);
String name = sc.next();
System.out.println(“Please your age here:”);
int age = sc.nextInt();
System.out.println(“Please your sex here:”);
String sex = sc.next();
System.out.println("Your name is "+name);
System.out.println("Your age is "+age);
System.out.println("Your sex is "+sex);
图1 运行截图
(2)输入圆形半径,求圆形的周长和圆形的面积,并将结果输出。
//求面积
static double seekarea(double r) {
double s;
s = 3.14 * r * r;
return s;
}
//求周长
static double seekPerimeter(double r) {
double c;
c = 2 * 3.14 * r;
return c;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入圆形半径:");
double r = sc.nextDouble();
double s = seekarea(r);
double c = seekPerimeter(r);
System.out.println("圆形的半径为:"+r);
System.out.println("圆形的周长为:"+c);
System.out.println("圆形的面积为:"+s);
}
图2 运行截图
1.某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。结果如图所示。
static int encryption(int number) {
int cnumber;
int ge = (number % 10 + 5) % 10;
int shi = (number / 10 % 10 + 5) % 10;
int bai = (number / 10 / 10 % 10 + 5) % 10;
int qian = (number / 10 / 10 / 10 % 10 + 5) % 10;
cnumber = qian * 1 + bai * 10 + shi * 100 + ge * 1000;
return cnumber;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个4位正整数:");
int number = sc.nextInt();
int cnumber;//转换后的电话数据
if (number >= 1000 & number <= 9999) {
cnumber = encryption(number);
System.out.println("加密后的数字为:" + cnumber);
} else {
System.out.println("输入错误!!!");
}
}
六、可选题
1.网上查询资料,了解如下内容
1)ASCII、ISO8859-1、GB2312、GBK、GB18030、BIG5、UNICODE、ANSI等字符集的特点
ASCII码:用7位表示,只能表示128个字符,0~31表示控制字符如回车、退格、删除等;32~126表示打印字符即可以通过键盘输入并且能显示出来的字符,其中48~57为0到9十个阿拉伯数字,65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等,具体可以参考ASCII标准表。
ISO8859-1:扩展了ASCII编码,在ASCII编码之上又增加了西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号,它是向下兼容ASCII编码的。ISO-8859-1也是单字节编码,但它是一个8位的容器,它能表示256个字符
GB2312:GB2312主要收录了6763个汉字、682个符号。GB2312覆盖了汉字的大部分使用率,但不能处理像古汉语等特殊的罕用字,所以后来出现了像GBK、GB18030这种编码
GBK:是向下兼容GB2312编码的,也就是说GB2312编码的汉字可以用GBK正常解码不会出现乱码,但用GBK编码的汉字用GB2312解码就不一定了
GB18030:是现在最新的内码字集于2000年发布,并于2001年强制执行,包含了中国大部分少数民族的语言字符,收录汉字数超过70000余个。它主要采用单字节、双字节、四字节对字符编码,它是向下兼容GB2312和GBK的,虽然是我国的强制使用标准,但在实际生产中很少用到,用得最多的反而是GBK和GB2312。
UNICODE:UNICODE在制定时计算机容量已不是问题,所以设计成了固定两个字节,所有的字符都用16位表示,包括之前只占8位的英文字符等,所以会造成空间的浪费,UNICODE在很长的一段时间内都没有得到推广应用。
UTF-8:它是UNICODE的一种可变长度字符编码的实现,它可以使用1~6个定长字节来编码UNICODE字符。UTF-8对ASCII字符使用单字节存储,单个字符损坏也不会影响后面的字符,所以UTF-8非常适合在网络上面传统,也是现在使用最广泛的编码之一。
2)常用进制(二进制、八进制、十六进制、十进制)的特点及其转换
特点:十进制:逢十进一,生活中常用的数值。
二进制:逢二进一,计算机系统使用的数制,只有0和1两个数。
八进制:逢八进一,采用0,1,2,3,4,5,6,7八个数字,在编程语言中通常用数字0开头表示八进制数。
十六进制:逢十六进一,采用0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F十六个数字,A-F分别表示十进制中的10-15,在编程语言中常用0x开头来表示十六进制数。
进制之间转换:
整数:十进制转换成其他进制;
转换规则:除进制数取余,倒序排序,高位补0.
小数:乘以进制数取整,顺序排列
负数:十进制转二进制:转换规则:将该负数的正数进行取反,然后加1。
十进制转其他进制则通过先转换从成二进制再转换成相应进制
3)原码、反码、补码含义、作用及其转换
含义:
原码:所谓原码就是机器数,是加了一位符号位的二进制数(因为数值有正负之分),正数符号位为0,负数符号位为1.
反码:反码的表示方式是用来处理负数的,符号位置不变,其余位置相反.
补码:虽然反码的出现解决了正负数的加减问题, 但却让0这个数字有了两种"形态": “0"和”-0", 但这是不合逻辑的,只应该有一个0,所以人们就又发明了补码.
转换:
正数:
正数的原码与反码,补码都相同.
负数:
原码转反码: 符号位不变,其余位取反. 如: -6的原码为:10000110, 反码为11111001.
反码转补码: 直接补1即可. 如: -5的反码为:11111010, 补码为11111011.
原码转补码: 符号位不变,其余各位取反后补1, 也就是反码补1.
补码转原码: 退1后,除符号位各位取反.或先计算该负数绝对值的二进制。之后对其每个数“取反”,然后加一。
2.利用”异或”运算的性质,对几个字符进行加密并输出密文,然后再解密。加密算法是:密钥是字符’8’,明文的每个字符和密钥进行异或运算,得到密文。密钥和密文的每个字符再次进行异或运算,重新得到明文。结果如图所示。
//加密原文 解密密文就是将 密文再传入Encryption函数即可
static String Encryption(String text){
char[] text1 = text.toCharArray();
char ciphertext = ‘8’;
for(int i =0;i<text.length();i++){
text1[i] = (char) (text.charAt(i)^ciphertext);
}
text = String.valueOf(text1);
return text;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入需要加密的原文:");
String text = sc.next(); //原文
String text1 = Encryption(text); //加密后的原文
String text2 = Encryption(text1); //解密后的原文
System.out.println("加密前的原文:"+text);
System.out.println("密文:"+text1);
System.out.println("解密后的原文:"+text2);
}