青少年编程与数学 01-007 在网页上编写程序 08课题、控制结构2_2
本文介绍了编程中的控制结构。控制结构是编程语言中用于控制程序执行流程的基本元素,包括顺序结构、选择结构、循环结构、跳转结构和异常处理结构。文中通过JavaScript代码示例,详细解释了这些结构的语法和应用,如if语句、switch语句、for循环、while循环、do-while循环以及try…catch…finally异常处理。
四、循环结构
JavaScript中的循环结构允许你重复执行一段代码直到满足特定条件。主要有三种类型的循环结构:for
循环、while
循环和 do...while
循环。
(一)for 循环
for
循环是一种基于计数器的循环,通常用于当你事先知道需要迭代的次数时。
基本语法
for (初始化表达式; 条件表达式; 更新表达式) {
// 循环体:条件为真时重复执行的代码
}
(二)while 循环
while
循环会在给定的条件为真时一直执行代码块。
基本语法
while (条件表达式) {
// 循环体:条件为真时重复执行的代码
}
(三)do…while 循环
do...while
循环至少执行一次代码块,然后检查条件是否为真,如果为真则继续执行。
基本语法
do {
// 循环体:至少执行一次的代码
} while (条件表达式);
(四)代码示例
for 循环示例
// 打印0到9的数字
for (let i = 0; i < 10; i++) {
console.log(i);
}
// 使用for...in遍历对象属性
const person = { name: 'Alice', age: 25, country: 'Wonderland' };
for (const property in person) {
console.log(`${property}: ${person[property]}`);
}
while 循环示例
let count = 0;
while (count < 5) {
console.log('Count is ' + count);
count++; // 重要的是更新计数器以避免无限循环
}
do…while 循环示例
let num = 10;
do {
console.log('Num is ' + num);
num++; // 至少执行一次后,检查条件是否继续循环
} while (num < 10); // 这个条件永远不会为真,因此只会执行一次
(五)循环控制语句
在循环中,有时需要提前退出循环或跳过当前迭代。JavaScript提供了两个控制语句来实现这一点:
- break:立即退出循环。
- continue:跳过当前迭代,继续执行下一次迭代。
break 示例
for (let i = 0; i < 10; i++) {
if (i === 5) {
break; // 当i等于5时,退出循环
}
console.log(i);
}
continue 示例
for (let i = 0; i < 10; i++) {
if (i % 2 === 0) {
continue; // 跳过偶数的迭代
}
console.log(i); // 只打印奇数
}
循环结构是处理重复任务的强大工具,它们在JavaScript编程中非常常见。正确使用循环和循环控制语句可以大大提高代码的效率和可读性。
五、异常处理结构
JavaScript中的异常处理结构允许你捕获和处理可能在程序执行过程中发生的错误。这些结构主要包括 try
、catch
和 finally
块。
try 块
try
块包含可能会抛出异常的代码。如果代码执行过程中没有错误发生,try
块中的代码将正常执行。
catch 块
catch
块用来捕获并处理 try
块中抛出的异常。如果 try
块中的代码抛出了异常,程序将跳转到 catch
块执行。
finally 块
finally
块无论是否发生异常都会执行。通常用于执行清理工作,如关闭文件流、数据库连接等。
基本语法
try {
// 尝试执行的代码
} catch (error) {
// 捕获异常并处理
} finally {
// 无论是否发生异常都会执行的代码
}
throw 语句
throw
语句用于手动抛出一个错误。你可以抛出一个字符串或一个自定义的错误对象。
代码示例
基本异常处理
try {
let result = 10 / 0; // 这将导致一个错误,因为不能除以0
} catch (error) {
console.error('发生了一个错误:', error);
} finally {
console.log('无论是否发生错误,这段代码都会执行。');
}
自定义错误
function divide(a, b) {
if (b === 0) {
throw new Error('除数不能为0');
}
return a / b;
}
try {
let result = divide(10, 0); // 这将抛出一个错误
} catch (error) {
console.error('在除法操作中发生了错误:', error.message);
}
finally 块的使用
let shouldFail = true;
try {
if (shouldFail) {
throw new Error('故意失败');
}
// 一些代码
} finally {
console.log('无论是否抛出异常,这段代码都会执行。');
}
嵌套的 try…catch
try {
try {
// 内部try块
throw new Error('内部错误');
} catch (error) {
console.error('捕获内部错误:', error);
// 可以在这里重新抛出错误,让外部try块处理
throw error;
} finally {
console.log('内部finally执行');
}
} catch (error) {
console.error('捕获外部错误:', error);
} finally {
console.log('外部finally执行');
}
异常处理是编写健壮程序的关键部分。通过使用 try...catch
和 finally
,你可以优雅地处理错误,确保程序的稳定运行,并提供错误发生时的适当反馈。
六、练习
下面是一个综合使用JavaScript中的控制结构的示例代码。这个示例展示了顺序结构、选择结构(if...else
和 switch
)、循环结构(for
和 while
)以及异常处理结构。
// 顺序结构
console.log('程序开始执行。');
// 选择结构 - if...else
let age = 20;
if (age >= 18) {
console.log('你已达到法定成年年龄。');
} else {
console.log('你还未达到法定成年年龄。');
}
// 选择结构 - switch
let fruit = 'apple';
switch (fruit) {
case 'banana':
console.log('Bananas are yellow.');
break;
case 'apple':
console.log('Apples are often red or green.');
break;
case 'mango':
console.log('Mangos are sweet and juicy.');
break;
default:
console.log('This is a different kind of fruit.');
}
// 循环结构 - for
for (let i = 0; i < 5; i++) {
console.log('循环迭代:', i + 1);
}
// 循环结构 - while
let count = 0;
while (count < 3) {
console.log('这是第' + (count + 1) + '次迭代。');
count++;
}
// 异常处理结构
try {
let result = 10 / (age - 20); // 这将导致错误,如果age是20
} catch (error) {
console.error('捕获到一个错误:', error);
} finally {
console.log('无论是否发生错误,这段代码都会执行。');
}
// 综合使用控制结构
function processNumbers(numbers) {
try {
for (let i = 0; i < numbers.length; i++) {
if (numbers[i] === 0) {
throw new Error('数组中不能包含0');
}
console.log('处理数字:', numbers[i]);
}
} catch (error) {
console.error('处理数字时发生错误:', error.message);
} finally {
console.log('处理数字的循环结束。');
}
}
let myNumbers = [1, 2, 3, 0, 5]; // 包含0,将触发异常
processNumbers(myNumbers);
console.log('程序执行完毕。');
这个示例代码中:
- 首先打印一条开始执行的消息。
- 使用
if...else
结构根据年龄判断是否成年。 - 使用
switch
结构根据fruit
变量的值打印不同的信息。 - 使用
for
循环打印循环次数。 - 使用
while
循环打印迭代次数。 - 使用
try...catch...finally
结构捕获并处理可能发生的除以零的错误。 - 定义了一个
processNumbers
函数,它使用for
循环遍历数组,并使用if
结构检查数组中是否有0,如果有则抛出错误。使用try...catch...finally
结构来捕获和处理错误,并确保循环结束后执行清理代码。 - 调用
processNumbers
函数并传入包含0的数组,触发异常。 - 最后打印一条程序执行完毕的消息。
这个示例展示了如何在实际编程中综合使用不同的控制结构来实现复杂的逻辑。
课题作业
- 基础练习:
- 编写一个JavaScript程序,使用顺序结构输出你的个人信息,包括姓名、年龄和爱好。
- 条件判断:
- 编写一个程序,使用if…else语句判断一个数字是正数、负数还是零。
- 选择结构应用:
- 使用switch语句编写一个程序,根据用户输入的月份打印对应的季节。
- 循环结构应用:
- 编写一个for循环,打印从1到100的所有整数,并计算偶数的总和。
- 使用while循环实现一个简单的倒计时程序,从10开始倒数到0。
- 循环控制语句:
- 编写一个程序,使用for循环和continue语句打印出1到20之间的所有奇数。
- 综合应用:
- 编写一个程序,结合使用if语句、for循环、break语句和异常处理结构,实现一个简单的计算器,能够进行加、减、乘、除运算,并处理除以零的错误。
附录一、中国最有影响力的数学家
中国数学史上有许多杰出的数学家,对数学的发展做出了重要贡献。以下是一些中国最有影响力的数学家:
-
刘徽 - 东晋时期的数学家,以《九章算术》的注解而著名,提出了割圆术,为圆周率的计算提供了重要方法。
-
祖冲之 - 南北朝时期的数学家和天文学家,他计算的圆周率值是世界上第一次精确到小数点后七位。
-
秦九韶 - 南宋时期的数学家,著有《数书九章》,其中提出的“秦九韶算法”是多项式计算的重要贡献。
-
李冶 - 金元时期的数学家,著有《测圆海镜》,在天元术(一种数学符号系统)方面有重要贡献。
-
华罗庚 - 20世纪的数学家,是中国现代数学的奠基人之一,对数论、典型群、矩阵几何等领域有深入研究。
-
王元 - 中国数学家,对解析数论有重要贡献,特别是在哥德巴赫猜想的研究上。
-
吴文俊 - 数学家和计算机科学家,对拓扑学和数学机械化有重要贡献。
-
陈景润 - 以对哥德巴赫猜想的研究成果而知名,他证明了“1+2”的结果是该猜想的一个重大进展。
-
周海中 - 20世纪末的数学家,对非线性动力学和复杂系统理论有重要贡献。
-
田刚 - 当代数学家,对微分几何和数学物理有深入研究,特别是在镜像对称性和钙泊问题上。
这些数学家不仅在中国,而且在全球数学界都享有盛誉。他们的研究成果推动了数学理论的发展,并在多个领域产生了深远的影响。