第1关:批量打印 ASCII 码
任务描述
本关任务:掌握使用 while 语句实现循环结构的方法,并编写一个程序,输出所有字母的 ASCII 码及其对应的字符。
相关知识
完成本关任务,你需要学习以下知识:
-
while 循环语法;
-
ASCII 码;
-
字符强制类型转换。
while 循环语法
while 语句是 Java 实现循环控制结构的一种基本语句。while 语句的关键点在于“循环控制”以及“循环体”,“循环控制”定义了重复多少次,而“循环体”则定义了每次重复执行的动作。
while 循环语法如下:
while(循环继续的条件){
语句(组)
}
在这里, 当循环继续的条件为 true 的时候,则执行一遍循环体(即花括号中的部分)中的语句(组)。执行完毕后再判断循环继续的条件,直到判断结果为 false ,退出循环。
可见,通过设计循环继续的条件
,我们能够得到合适的循环控制;而设计 while 语句括号中的语句(组)
,我能够控制每次循环的动作。 例如如下语句:
/** 代码清单 1 */
int count = 0;
while(count < 100){
System.out.println("Welcome to Java");
count++;
}
执行代码清单 1
,会输出 100 行 Welcome to Java
。
图 1. while 语句执行流程
“循环控制”是 count < 100
,而在执行 while 语句之前,count
的值是0
,直到count
变量的值增加至 100 时, count < 100
的结果是 false ,因此循环体中的语句会被执行。
而循环体中包含两条语句(代码清单 1
中的第 4、5行),分别输出字符出Welcome to Java
和使得count
自增 1。因此,不断的循环会不断的输出字符串,并使得count
不断的加 1。直到count < 100
这个循环控制条件不再成立,才退出 while 语句,此时已经循环了 100 次,故输出了 100 行Welcome to Java
。
ASCII 码
本关的任务是对 ASCII 码的批量输出,如果你还不了解什么是 ASCII 码,那么以下介绍会给你一个大概的认识。 ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准 ISO/IEC 646。ASCII 第一次以规范标准的类型发表是在 1967 年,最后一次更新则是在 1986 年,到目前为止共定义了 128 个字符。
需要注意的是, ASCII 码在计算机中用 8 bit 表示,只能表示 128 个字符,码的范围从 0 到 127。
简言之,就是用一个字节(8 bit,对应十进制范围 0(全零) 到 127(全一))来表示 128 个字符。 例如,字母表中的 A
,其 ASCII 码是 65(十进制),然后 B
是 66。还有小写的 a
,其 ASCII 码是 97。
字符强制类型转换
完成本关任务,你需要根据数字,输出对应的 ASCII 码,因此可能会用到以下字符强制类型转换的知识。 char
型数据可以转换成任意一种数值类型,反之亦然。将整数转换成 char
型数据时,只用到该数据的低十六位,其余部分都被忽略。以下给出例子:
char letter = (char)0XAB0041; // 此时会截取低位进行赋值
System.out.print(letter);
输出: A
char letter = (char)65; // 十进制数 65 会被赋值给变量
System.out.print(letter);
输出: A
int code = (int)'A'; // 'A' Unicode 码会被赋值给变量
System.out.print(code);
输出: 65
编程要求
根据提示,在右侧编辑器 Begin-End 区域补充代码,实现批量输出 ASCII 码中字母表的功能。具体要求如下:
-
输入两个
int
类型的数,代表 ASCII 码开头和结尾的位置,代表标识范围; -
然后根据输入标识的范围依次输出 ASCII 码中字母部分的字符。字母表范围是从 65(
A
)到 90 (Z
)以及从 97(a
)到 122(z
)的部分。输出标识范围于字母表范围重合的部分,并按 ASCII 码从小到大的顺序; -
输出的字符各占一行,每行先输出十进制 ASCII 码,然后输出对应字符,中间 1 个空格连接。输出末尾有换行。
测试说明
平台会对你编写的代码进行测试: 预期输入:65 122
预期输出:
65 A
66 B
67 C
68 D
69 E
70 F
71 G
72 H
73 I
74 J
75 K
76 L
77 M
78 N
79 O
80 P
81 Q
82 R
83 S
84 T
85 U
86 V
87 W
88 X
89 Y
90 Z
97 a
98 b
99 c
100 d
101 e
102 f
103 g
104 h
105 i
106 j
107 k
108 l
109 m
110 n
111 o
112 p
113 q
114 r
115 s
116 t
117 u
118 v
119 w
120 x
121 y
122 z
代码如下
package step1;
import java.util.Scanner;
public class PrintAscii
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
int begin = input.nextInt();
int end = input.nextInt();
input.close();
//请在指定位置填写代码。
/********* Begin *********/
if(begin<65)
begin=65;
else if(begin>122)
begin=122;
if(end<65)
end=65;
else if(end>122)
end=122;
while(begin<=end)
{
if(begin<=90)
{
char ascll = (char)begin;
System.out.println(begin + " "+ ascll);
begin++;
}
else
{
int k;
k=begin+6;
if(k<=end)
{
char ascll = (char)k;
System.out.println(k + " "+ ascll);
begin++;
}
else
break;
}
}
/********* End *********/
}
}
第2关:计算平均数
任务描述
本关任务:进一步巩固使用 while 编写循环结构的技能,并编写一个程序,实现若干整数求平均数的功能。
相关知识
为了完成本关任务,你需要掌握以下知识:
-
平均数;
-
while 循环的标记值控制。
平均数
平均数的求法为:所有数的和除以数的个数。 例如如下数字: 1 2 3 4 5 6
以上 6 个数的平均数为: (1+2+3+4+5+6)/6
while 循环的标记值控制
while 循环写法的特性之一,是可以通过标记值来灵活的控制循环的次数,对于一些循环次数不确定的场景,十分方便。 例如,不断的读取控制台输入的整数,直到读取到 0 为止。
/** 代码清单 1 */
Scanner input = new Scanner(System.in);
int data = input.nextInt();
while(data != 0){
data = input.nextInt();
}
通过代码清单 1
所示的写法,我们就实现了一种循环读取控制台输入的功能。直到读取到了某种约定好的输入,才终止循环。
编程要求
根据提示,在右侧编辑器 Begin-End 区域补充代码,实现若干整数求平均数。具体要求如下:
-
输入若干的非 0 整数,直到输入数字 0 才认为输入结束;
-
针对输入的若干的非零整数,输出其平均数;
-
结果保留小数点后 2 位,末尾无换行。
测试说明
平台会对你编写的代码进行测试:
测试输入:
5 5 5 5 5 0
; 预期输出:5.00
测试输入:
0
; 预期输出:0.00
代码如下
package step2;
import java.util.Scanner;
public class Mean
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
Double mean = 0.0;
int num = input.nextInt();
int count = 0;
Double sum = 0.0;
//请在指定位置填写代码。
/********* Begin *********/
while(num !=0)
{
sum=sum+num;
count++;
mean = sum/count;
num = input.nextInt();
}
/********* End *********/
System.out.print(String.format("%.2f", mean));
}
}