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