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;
}