if语句
if语句的3种形式如下:
第1种形式:
if(表达式) 语句
其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。
第2种形式:
if(表达式)
语句1
else
语句2
其语义是:如果表达式的值为真,则执行语句1,否则执行语句2。
第3种形式:
if(表达式1)
语句1
else if(表达式2)
语句2
else if(表达式3)
语句3
...
else if(表达式m)
语句m
else
语句n
其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句,然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句n,然后继续执行后续程序。
注意事项:
(1)3种形式的if语句中在if后面都有”表达式”,一般为逻辑表达式或关系表达式。在执行if语句时先对表达式求解,若表达式的值为0,则按"假"处理;若表达式的值为非0,则按"真"处理,执行指定的语句。
(2)else子句不能作为语句单独使用,它必须是if语句的一部分,与if配对使用。
(3)if与else后面可以包含一个或多个内嵌的操作语句,当为多个操作语句时要用”{}”将几个语句括起来成为一个复合语句。
(4)if语句可以嵌套使用即在if语句中又包含一个或多个if语句,在使用时应注意else总是与它上面的最近的未配对的if配对。
else子句的配对
在使用if语句的嵌套时,如果使用了else子句,则else子句会采用就近原则,与其最近的if语句进行配对。如果想要将else子句与其他的if语句配对,则需要使用当前else子句与if语句之间的内容用大括号括起来,这样程序会将大括号中的内容作为复合语句处理,就实现了else子句与if语句的配对。
#include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int a, b, c, t; printf("请输入3个数:\n"); scanf_s("%d%d%d",&a,&b,&c); if (a < b) { t = a; a = b; b = t; } if (a < c) { t = a; a = c; c = t; } if (b < c) { t = b; b = c; c = t; } printf("排序如下:\n"); printf("%d,%d,%d\n",a,b,c); system("Pause"); return 0; }
逻辑运算符
&&逻辑与,a&&b,若a,b为真,则a&&b为真。
||逻辑或,a||b,若a,b之一为真,则a||b为真。
!逻辑非,!a,若为真,则!a为假。
三者的优先次序是:!->&&->||,即"!"为三者中最高的。
“==”和”=”之间的区别
“==”为关系运算符,结合方向是”自左至右”;”=”是赋值运算符,结合方向是”自右至左”。
#include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int year; printf("请输入年份:\n"); scanf_s("%d",&year); if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) printf("%d年是闰年\n",year); else printf("%d不年是闰年\n", year); system("Pause"); return 0; }
#include "stdafx.h" #include <iostream> using namespace std; int Weight(int iArray[], int iNum) { int iRet; int iVar = iNum / 3; int jVar,mVar,nVar,kVar; jVar = mVar = nVar = kVar = 0; for (int i = 0; i < iVar; i++) { jVar += iArray[i]; mVar += iArray[i + iVar]; nVar += iArray[i + iVar * 2]; } int* pArray = new int[iVar]; if (jVar>mVar) { kVar = 0; } else if (jVar < mVar) { kVar = 1; } else if (jVar == mVar) { kVar = 2; } if (iVar == 1) { iRet = iVar*kVar; } else { for (int j = 0; j < iVar; j++) { pArray[j] = iArray[j + iVar*kVar]; } iRet = Weight(pArray, iVar) + iVar*kVar; } delete[] pArray; return iRet; } int _tmain(int argc, _TCHAR* argv[]) { int Ball[] = {2,1,1,1,1,1,1,1,1}; int iWeightBall = Weight(Ball, 9); cout << "比较重的小球号码:" << endl; cout << iWeightBall << endl; system("Pause"); return 0; }
break语句
break语句是程序控制跳转语句,可以跳出语句块,常用于switch语句和循环语句中。当程序达到某一条件时,使用break语句进行跳转,跳出当前语句的执行。
#include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int bccd = 98; printf("单价是多少?\n"); int Price; while (1) { scanf_s("%d", &Price); if (Price > bccd) { printf("你猜的价格高了!\n"); } else if (Price < bccd) { printf("你猜的价格低了!\n"); } else { printf("回答正确!\n"); break; } } system("Pause"); return 0; }
switch语句
switch语句能够测试一组有序类型(整型、字符型、枚举型、布尔类型等)的数据,发现匹配的常量时,将执行与该常量关联的语句。switch语句的语法如下:
switch(表达式)
{
case 常量1:
语句;
break;
case 常量2:
语句;
break;
......
case 常量n:
语句;
break;
default:
语句;
}
其中,表达式必须是有序类型,不能是实数或字符串类型。表达式逐一与case语句部分的常量匹配,如果发现有常量与表达式相匹配,则执行当前case部分的语句,直到遇到break语句为止,或者到达switch语句的末尾(没有遇到break语句)。当表达式没有发现与之匹配的常量时,将执行default部分的代码。default语句是可选的,如果代码中没有提供default语句,并且没有常量与表达式匹配,那么switch语句将不执行任何动作。
case语句使用技巧
在switch语句中,如果多个case常量需要进行相同的处理,那么可以将多个case语句组织在一起,中间不加break语句,使多个case语句都可以执行同一个语句块。
#include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { printf("请输入消费金额:\n"); float dMoney; scanf_s("%f",&dMoney); int iMoney = dMoney; switch (iMoney / 500) { case 0: printf("你的消费没有折扣,金额是:%0.2f\n",dMoney); break; case 1: printf("你的消费享受9折,金额是:%0.2f,优惠后的金额是:%0.2f\n",dMoney,dMoney*0.9); break; case 2:case 3: printf("你的消费享受8折,金额是:%0.2f,优惠后的金额是:%0.2f\n", dMoney, dMoney*0.8); break; case 4:case 5: printf("你的消费享受8折,金额是:%0.2f,优惠后的金额是:%0.2f\n", dMoney, dMoney*0.7); break; case 6:case 7: printf("你的消费享受8折,金额是:%0.2f,优惠后的金额是:%0.2f\n", dMoney, dMoney*0.6); break; default: printf("你的消费享受8折,金额是:%0.2f,优惠后的金额是:%0.2f\n", dMoney, dMoney*0.5); break; } system("Pause"); return 0; }
枚举类型
枚举类型能够将一组枚举常量与一个枚举类型名称关联。枚举类型就像是一个常量的集中营,在这个集中营中,常量被冠名为枚举常量,如果参数以某一个枚举类型定义参数类型,那么在调用该函数时,就只有该集中营的枚举类型作为参数通过,虽然其他常量的值和枚举常量的值可以相同,但是由于不属于当前枚举类型这个集中营,所以在作为参数调用函数时不能通过。使用关键字enum定义一个枚举类型。
在定义枚举类型时,可以为各个枚举常量提供一个整数值,如果没有提供整数值,默认第一个常量值为0,第二个常量值为1,依此类推。
为枚举常量赋默认值
enum RecordsetState {RS_OPEN=3,RS_WAIT,RS_CLOSE=6};
上面的语句将枚举常量RS_OPEN设置为3,将枚举常量RS_CLOSE设置为6,没有为RS_WAIT提供默认值,RS_WAIT的数值为前一个枚举常量值加1,因此RS_WAIT的数值为4。
#include "stdafx.h" #include <iostream> using namespace std; typedef enum NUMBER {ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN}; int _tmain(int argc, _TCHAR* argv[]) { NUMBER num = FIVE; switch (num) { case SEVEN: cout << " ************* " << endl; case SIX: cout << " *********** " << endl; case FIVE: cout << " ********* " << endl; case FOUR: cout << " ******* " << endl; case THREE: cout << " ***** " << endl; case TWO: cout << " *** " << endl; case ONE: cout << " * " << endl; } system("Pause"); return 0; }