第一章 C++编程基础——1.4条件语句和循环语句


  本文主要介绍C++中条件语句和循环语句的相关用法。
  一个程序基本上从 main()的第一行语句开始执行,程序里的每行语句都只会被执行一次。了解 if语句的应该知道, if语句让我们依据某个表达式的结果来决定是否执行一条或多条连续语句,当然我们也可以借助 else来连续检验对个测试条件。
  至于循环语句,能够让我们依据某个表达式结果,重复执行一条或连续多条语句。
  【代码已上传至自己github,供参考: github

1、条件语句

  if语句中的条件表达式必须写在括号()内,如果表达式运算结果true,则执行if后的语句,例如:

if(usr_rsp=='N'||usr_rsp=='n')
	guess_again=false;

  如果想要执行多条语句,可以在if后用大括号{}的形式将语句扩住(也叫语句块),例如:

if(usr_guess==next_elem){
	//语句从这里开始执行
	num_right++;
	guess_right=true;
}//语句从这里结束

  注意点:若忘加语句块或者是忘加{}if语句的控制范围就会缩小,例如:

if(usr_guess==next_elem)
	num_right++;//if后面表达式为true时会执行该语句
	guess_right=true;//不管if后面条件表达式是否为true,该语句都会执行

  if语句也可以配合else来使用,else来表示if语句的测试条件不成立时,需要程序给出的结果(或者说执行单行语句或语句块),例如:

if(usr_guess==next_elem){
	//用户猜对了执行某个语句
}
else{
	//用户猜错执行某个语句
}

  关于else的用法还有第二种(也就是不涉及大括号{}),将else与多条if语句相结合。例如,用户猜错后,希望输出的响应能够依据用户所猜过的次数而有所变化,可以通过三条独立if语句来检验:

if(guess_num==1):
	cout << "Oops!Nice guess but not quiye it! \n" << endl;
if(guess_num==2):
	cout << "Hmm.Sorry.Wrong a second time.\n" << endl;
if(guess_num==3):
	cout << "Ah,this is harder than it looks.\n" << endl;

  注意点:这种方式有个缺点,三条语句都会判断过去,比如guess_num==1,程序会从第一条if判断,符合第一条,但是也会往下继续判断。所以,可以利用else-if的方式:

if(guess_num==1):
	cout << "Oops!Nice guess but not quiye it! \n" << endl;
else
if(guess_num==2):
	cout << "Hmm.Sorry.Wrong a second time.\n" << endl;
else
if(guess_num==3):
	cout << "Ah,this is harder than it looks.\n" << endl;
else
	cout << "It must be getting pretty frustrating by now! \n" << endl;

  这样第一条语句会先被求值,如果为true,紧接后面语句会执行,剩下的else-if子句就不会再判断了。
  我们也可以对用户猜错部分进一步更新,通过嵌套的方式处理用户猜错时的程序代码,例如:

if(usr_guess==next_elem){
	//用户猜对了
}
else{
	//用户猜错了
	if(guess_num==1):
		cout << "Oops!Nice guess but not quiye it! \n" << endl;
	else
	if(guess_num==2):
		cout << "Hmm.Sorry.Wrong a second time.\n" << endl;
	else
	if(guess_num==3):
		cout << "Ah,this is harder than it looks.\n" << endl;
	else
		cout << "It must be getting pretty frustrating by now! \n" << endl;
	//是否再试一次
	cout << "Want to try again?(y/n):";
	cin >> usr_rsp;
	if (usr_rsp == 'N' || usr_rsp == 'n')
		guess_again = false;
}

  其中else-if我们可以用switch替换,例如:

switch (guess_num){
	case(1):
		cout << "Oops!Nice guess but not quiye it! \n" << endl;
		break;
	case(2):
		cout << "Hmm.Sorry.Wrong a second time.\n" << endl;
		break;
	case(3):
		cout << "Ah,this is harder than it looks.\n" << endl;
		break;
	default:
		cout << "It must be getting pretty frustrating by now! \n" << endl;
		break;
}

  注意点:switch后面紧跟(),放入表达式(对象名也可以视为表达式),表达式为整数形式,后面紧跟一组caseswitch后表达式计算后,依次和每个case标签表达式进行比较,过程和上述else-if类似。若所有case标签都不满足,则执行的default后的语句。
* break和continue的区别:
  break语句:用在switch语句和循环语句中,功能是:立即从包含他的switch语句体或包含它的最内层的循环体中退出,开始按顺序执行后面的语句。
   continue语句:是用在循环语句中,功能是:立即结束本次的循环执行,转到判断循环条件的语句用来判断是否进行下一次循环。

#include<iostream>
using namespace std;
void main() {
	int i = 0;
	while (i < 10) {
		if (i++ == 5)break;
		cout << "Hello\n";
	}
}
//输出结果是5条hello
#include<iostream>
using namespace std;
void main() {
	int i = 0;
	while (i < 10) {
		if (i++ == 5)continue;
		cout << "hello\n";
	}
}
//输出结果是9条hello

  因为在含break语句的代码中,执行了break后马上退出了循环体,程序运行结束。结果是输出了5行字符串。
  当i=5,执行continue语句后,马上退出本次循环 ,循环体后面的语句被跳过。但是循环并没用终止,而是从i=6开始继续执行下一次循环,即continue只是跳过了i=5时应执行的语句,继续往后执行。

2、循环语句

  只要条件表达式一直成立,循环语句会不断执行单一遇见或者整个语句块。我们利用两个循环来实现一个案例:

int main() {
	int num = 1;
	int usr_guess;  //用户猜测的数字
	bool num_seq = true; //显示下一组数列
	bool guess_again = true; //用户想再猜一次
	bool got_it = false; //用户是否猜对
	int guess_num = 0;  //用户猜的总次数
	int guess_right = 0;//用户猜对次数
	char usr_rsp;      //用户的回答  内循环用
	char try_again;    //用户的回答  外循环用
	double usr_score = 0.0;//评分比值,采用double双精度类型
	const int max_tries = 3;//设置最多猜测次数
	int try_cnt = 0;//猜的次数与最多次数比较

	while(num_seq==true) {

		//用户猜错且想再次猜
		while (guess_again == true && got_it == false && (try_cnt++ <= max_tries)) 
		{
			
			std::cout<< "please input your num:" << endl;
			std::cin >> usr_guess;
			guess_num++;

			//如果猜错正确
			if (usr_guess == num) {
				std::cout << "Your guess is right!" << endl;
				got_it = true;
				guess_right++;
			}
			//用户猜错
			else {
				//判断猜的次数  switch
				switch (try_cnt)
				{
				case(1):
					std::cout << "Oops!Nice guess but not quiye it! \n" << endl;
					break;
				case(2):
					std::cout << "Hmm.Sorry.Wrong a second time.\n" << endl;
					break;
				case(3):
					std::cout << "Ah,this is harder than it looks.\n" << endl;
					break;
				default:
					std::cout << "It must be getting pretty frustrating by now! \n" << endl;
					break;
				}
				//是否再试一次
				std::cout << "Want to try again?(y/n):";
				std::cin >> usr_rsp;
				if (usr_rsp == 'N' || usr_rsp == 'n')
					guess_again = false;
			}
		}//内层循环结束

			std::cout << "want to try another num again?(y/n):";
			std::cin >> try_again;
			if (try_again=='N'||try_again=='n')
				num_seq = false;
	}//外循环结束
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cqy阳

预祝上岸,感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值