C++语句

C++语句部分

一、简单语句

    

;//表示一条空语句
while(1)
	;//其实不是while语句结束了,而应该理解成while循环中一直在执行一条空语句
ival+5;//虽然没什么作用(没有赋值对象),但这个语句是合法的
语句块(复合语句)
while(val<10)
{
	val++;
	sum+=val;
}由于规定while语句后面只能跟一个语句,所以这个花括号表示将括号内的语句视为一条复合语句,也被称为“块”。
其他关于if-else语句、switch-case语句等花括号都表示这个意思
注意块语句不需要也不能以分号来结束语句
while(1){}  while(1);
以上空快等同于空语句

条件语句

悬垂else

    解释为:else总是和离它最近的、没有配对的if语句进行配对,从而消除程序的二义性。

if(grade%10 >= 3)
	if(grade%10 > 7)
		lettergrade += '+';
else
	lettergrade += '-';
注意C++语言可不是用缩进来划分语句块的,以上的else和第二行的if语句进行匹配

switch-case语句

switch (ch)
{
	case 1: //语句判定匹配条件,这里必须是常量表达式 constexpr
		++cnt;
		sum+=cnt;
		cout<<sum;
		break;
	case 2:
		--cnt;
		sum+=cnt;
		cout<<sum;
		break;
}
需要注意的是:之前你总是习惯将case下面,break之前当成一个语句块,
但实际上case语句的作用域并不是仅仅有一条语句,实际上,当case满足
条件之后将一直执行下去,在发现break之前不断出,在当前case语句之
后的case下面的语句块也将被执行(即使不满足匹配条件)。
所以说:case之后不要加花括号当成语句块来处理,这是没必要的,同样
也是“不大气”的。
case 1:
	string name;
	int ival;
	break;
case 2:
	ival = 0;
	break;
注意:以上这种变量定义在一个作用域内,但使用它时是在作用域之外,则不允许这种跳转。
还要区分:块内和块外,块内有没有被初始化?!没被初始化就是允许的???(待解决)

迭代语句

    首先我建议你分清楚迭代递归

while语句以及do-while

while语句

    形式是
while(condition)
    statement;
    condition为真时执行statement,condition不能为空,当condition第一次就为假,则statement一次都不执行。
    其中condition部分是允许定义变量的,不会编译报错。

do-while语句

    形式是
do{
    statement;
}while(condition);
需要注意有一点与while不同的是,do-while语句中statement;无论如何都会被执行一次,condition是被之后判断的。所以说不允许在condition部分定义变量并将其应用于statement

for语句

传统for语句

    形式是
for(init-statemen; condition; expression)
    statement;
    其中init-statemen是可以被省略的,其中的初始化定义可以在for语句外面,但是用于分割的语句结束的分号不能少。

以下要特别强调for语句的执行顺序!
1、首先是init-statemen,在循环开始时,这个只执行一次
2、其次是条件判断condition
    a)条件为true则执行statement;
    a)条件为false则直接断出
3、最后执行expression
    想强调的就是第3、点,expression是最后执行的!!!这有利于你搞清for语句最后断出时一些变量/语句的最终状态。

for(decltype(v.size()) i, sum = 100; i!= sum; ++1)
	//...
注意:for语句中开始的初始化定义可以有多个变量,但是类型声明只能有一个,即变量只能是同一类型的。
范围for语句

    形式是
for(declaration: expression)
    statement;

    其中expression是一个序列,比如:一个vector、一个数组、一个string等等这些C++中的容器。而declaration则将在之后的循环中代表其中的序列元素。

示例代码
vector<int> v = {0,0,1,2,4,1,2,3};
for(auto a: v)
	cout<<a<<endl;//将整个vector打印出

跳转语句

    简述:
break语句:用于断出最近的一个迭代语句(for、while、do-while),以及switch语句。
continue语句:用于终止当点循环中的当前一次迭代(同样是最近的),但是仍会继续执行迭代,从下一次迭代开始继续执行,不允许在switch-case语句中单独使用,当switch-case语句外层存在迭代时才允许再其中使用continue语句。
goto语句:有点汇编语言的意味,当前不做解释,之后有用到时进行理解补充。

try语句以及异常处理

简述:
    异常是指存在于运行时的反常行为,这些行为超出了函数正常功能的范围。典型的异常包括失去数据库连接以及遇到意外输入等。处理反常行为可能是设计所有系统最难的一部分.
以下try-throw-catch联动使用示例

while (cin >> i_1 >> i_2)
{
	try {
		if (i_2 == 0)
			throw runtime_error("你输入了一个0值的除数,我们选择跳过");
		cout << "相除结果是:" << i_1 / i_2 << endl;
	}
	catch (runtime_error err) {
		cout << err.what() << endl;
		cout << "要继续吗,输入【Y】继续循环" << endl;
		char temp;
		cin >> temp;
		if (temp != 'Y')
			break;
	}
}
以上:try语句块是进行“测试”的,给出一些条件,看看程序是否可以正常执行
	如果不能正常执行,(如此输入会产生错误),那么我们抛出(throw)一个类型的error
	注意,如果此时发生了错误,也并不会打印输出,也不会继续执行之后try语句块中的语句
而是直接跳转到之后的catch语句块中继续执行。
	进入catch语句块中可以用cout << err.what() << endl;的方式打印出刚刚发生的错误
信息,以及完成之后的处理工作。
	其中err (异常类型)只定义了一个名为what的成员函数,没有任何参数,返回值是一个指
向C风格字符串的const char*,用于返回描述异常的文本信息。
	
catch语句块可以是一系列的,因为throw语句抛出的错误类型不一定相同,如下附带介绍一些类型的**标准异常**int ch = 0;
	try {
		switch (ch)
		{
		case 1:
			exception("exception");
		case 2:
			runtime_error("runtime_error");
		case 3:
			range_error("range_error");
		case 4:
			overflow_error("overflow_error");
		case 5:
			underflow_error("underflow_error");
		case 6:
			logic_error("logic_error");
		case 7:
			domain_error("domain_error");
		case 8:
			invalid_argument("invalid_argument");
		case 9:
			length_error("length_error");
		case 0:
			out_of_range("out_of_range");
		default:
			break;
		}
	}
	catch (exception err) {
		//....
	}
	catch (invalid_argument err) {
		//....
	}
	catch (out_of_range err) {
		//....
	}
	//... ...

待解决的问题

1、于if-else语句、switch-case语句等其中{}代表的是语句块,那么用于函数定义时的{}代表的是什么含义呢?
2、switch-case语句的第二个语句块,没搞懂关于块内语句初始化以及相关的作用域的问题
3、关于while语句以及do-while语句中的定义变量,试过直接定义后编译不报错,但是具体使用过程中呢?你要实践一下试试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值