“C++ 编程入门班” 练习三

来自汉语教学技术研究与应用
跳转到导航 跳转到搜索


本课学习目标

  • 完成所有基本程序结构(顺序、分支、循环)语句的学习
    • switch语句
    • 循环结构中break和continue语句的使用
  • 复习巩固各程序结构的语句
    • 进一步熟悉同类结构中不同语句之间的区别(例如switch语句和 if语句、if-else语句的区别,while循环和do-while循环的区别)
    • 结构的嵌套
    • 使用流程图


预习部分

预习说明

自行输入【例3.1】,编辑至运行通过。

自行输入【例3.4】,编辑至运行通过。 注意观察有、无 break语句时,运行次数的区别。

switch语句

switch(开关)语句提供了一种比较简洁的方式来处理多分支。

switch语句的语法格式:

switch(表达式)
{
	case 常量: 
		分支1处理语句; 
		break; 
	case 2: 
		分支2处理语句; 
		break;
	case 3: 
		分支3处理语句; 
		break;
	……
		……	
	default:
		其它情况处理语句; 
}

【例3.1】使用switch语句转换数字为星期名称

#include <iostream>
using namespace std;

int main()
{	
	int weekday = 0; 
	cin >> weekday; //接收用户输入	
		
	switch(weekday)
	{
		case 1: 
			cout << "星期一" <<endl; 
			break; 
		case 2: 
			cout << "星期二" <<endl;
			break;
		case 3: 
			cout << "星期三" <<endl;
			break;
		case 4: 
			cout << "星期四" <<endl;
			break;
		case 5: 
			cout << "星期五" <<endl;
			break;
		case 6: 
			cout << "星期六" <<endl;
			break;
		case 7: 
			cout << "星期天" <<endl;
			break;
		default:
			cout << "请输入正确的数字!" <<endl; 
	}		
    
	return 0;
	
}

可以对比【例3.2】、【例3.3】来理解switch的优点。

【例3.2】使用嵌套的if-else语句

#include <iostream>
using namespace std;

int main()
{	
	int weekday = 0; 
	cin >> weekday; //接收用户输入	
	
	if(weekday == 1)
		cout << "星期一" <<endl; 
	else if(weekday == 2)
			cout << "星期二" <<endl; 
		else if(weekday == 3)
				cout << "星期三" <<endl; 
			else if(weekday == 4)
					cout << "星期四" <<endl; 		
				else if(weekday == 5)
						cout << "星期五" <<endl; 
					else if(weekday == 6)
							cout << "星期六" <<endl; 		
						else if(weekday == 7)
								cout << "星期天" <<endl; 		
							else
								cout << "请输入正确的数字!" <<endl;    
			 
	return 0;
	
}
【例3.2】使用多重嵌套的if-else语句,即使层层缩进,也不易阅读,结构过于复杂。

【例3.3】使用无嵌套的if语句

#include <iostream>
using namespace std;

int main()
{	
	int weekday = 0; 
	cin >> weekday; //接收用户输入	
	
	if(weekday == 1)
		cout << "星期一" <<endl; 
	if(weekday == 2)
		cout << "星期二" <<endl; 
	if(weekday == 3)
		cout << "星期三" <<endl; 
	if(weekday == 4)
		cout << "星期四" <<endl; 		
	if(weekday == 5)
		cout << "星期五" <<endl; 
	if(weekday == 6)
		cout << "星期六" <<endl; 		
	if(weekday == 7)
		cout << "星期天" <<endl; 		
	if(weekday < 1 || weekday > 7) // ||表示“或”
		cout << "请输入正确的数字!" <<endl;     
	return 0;
	
}
【例3.3】使用无嵌套的if语句,相比【例3.2】结构简洁,但是每个分支都要执行,增加了程序运行时间。

break语句

break 语句用于跳出循环,如果已经满足某个条件,或者以及达到运行目的,可以用break提前停止当前循环。

【例3.4】质数的判断

#include <iostream>
using namespace std;

int main()
{
	int n =0;
	int count=0;//
	int flag = 1; //1: 是质数  0:不是质数 
	
	cout << "请输入一个大于2的整数:" <<endl;
	cin >> n; 
	for(int i=2;i<n;i++)
	{	
		count++; 
		if(n % i == 0) 
		{ 
			flag = 0;
			break; //只要有一个数能被整除,就可以确定不是质数了
		} 
	}    
	cout << "运行了" << count << "次判断" <<endl;
	if(flag == 1)
		cout << n << "是质数" <<endl;
	else
		cout << n << "不是质数" <<endl;
	
	return 0;	
}
可以把第18行的break注释或删除,比较一下运行次数的不同。

课堂练习说明

注明“需要自行输入”的,需要自己打字,完成代码编写。

可以先复制代码到编辑器,然后设置为注释,再看着打字。

使用桌面上的极速浏览器(最新版本的Chrome 浏览器,不是360浏览器)可以避免把行号一起复制

如果使用其它浏览器,复制后带上了行号,可以按住 Alt 竖选文本,快速删除行号

课堂练习

实例:数字菜单

【例3.5】使用do-while嵌套switch实现的数字菜单

#include <iostream>
using namespace std;

int main()
{
	//接收用户选择
	int choice = 0; 	
	do{	
		//输出菜单
		cout << "1 2 3 4 5 0" <<endl;  
		
		cout << "请选择需要的操作:" <<endl; 
		cin >> choice ; 
		
		switch(choice)
		{
			case 1: 
				cout << choice <<endl; 
				break; 
			case 2: 
				cout << choice <<endl;
				break;
			case 3: 
				cout << choice <<endl; 
				break;
			case 4: 
				cout << choice <<endl; 
				break;
			case 5: 
				cout << choice <<endl; 
				break;
			case 0: 
				cout << choice <<endl; 
				break;
			default:
				cout << "请输入正确的数字!" <<endl; 
		}	
	} while(choice!=0);
	
	cout << "退出主程序!" <<endl; 
	return 0;	
}

continue 语句

【例3.6】2层for循环,查找1-100内的质数

#include <iostream>
using namespace std;

int main()
{
	int n =0;
	int count=0;//	(内层)循环计数	
	
	cout << "查找1-100内的质数" <<endl;
	
	
	for(int n=2;n<=100;n++)
	{
		int flag = 1; //1: 是质数  0:不是质数 
		
		for(int i=2;i<n;i++)
		{	
			count++; 
			if(n % i == 0) 
			{		
				flag = 0;		
				break;
			} 
		} 
		if(flag == 0)
			continue;
			
		cout << n << "是质数" <<endl;		
	}	
       
	cout << "运行了" << count << "次判断" <<endl;	
	
	return 0;	
}

基本程序结构复习

基本程序结构复习: 流程图演示

使用ProcessOn绘制基本程序结构: https://www.processon.com/