/* 語句塊 用花括號括起來的語句 */
#include <iostream>
int main()
{
using namespace std;
int x = 20;
{
int y = 100;
cout << x << endl; //ok
cout << y << endl; //ok
} //以上就是一個語句塊,y變量定義在語句塊裏面,因此y只能在改語句塊中使用,在語句塊以外是不能使用的
cout << x << endl; //ok
//cout << y << endl; //invalid
return 0;
}ios
/*新變量就會隱藏舊變量,另外注意cout和endl新的聲明方法*/
#include <iostream>
int main()
{
using std::cout; //cout新的聲明方法
using std::cin; //endl新的聲明方法
using std::endl; //endl新的聲明方法
char zero;
int x = 20;
{
cout << x << endl; //打印20
int x = 100;
cout << x << endl; //打印100
}
cout << x << endl; //打印20c++
cin >> zero;
return 0;
}express
/*將字符串的內容反轉*/
#include <iostream>
#include <string>
void main()
{
using namespace std;
cout << "輸入一個單詞: ";
string word; //定義一個字符串變量word
cin >> word;
cout <<"輸入單詞的個數爲:"<< word.size() << endl; //打印輸入的單詞的個數
for (int i = 0, j = word.size() - 1; i < j; i++, j--) //減1是由於數組的索引是從0開始的
{
char temp;
temp = word[j]; //將輸入的單詞最後一個字母賦給temp
word[j] = word[i]; //將輸入的單詞的第一個單詞賦到單詞最後一個位置上
word[i] = temp; //將輸入的單詞最後一個字母賦到單詞第一個位置上
}
cout <<"反轉後的單詞形式爲:"<< word << endl;
cout << "Done" << endl;
cin >> word; //防止DOS閃退
}數組
/*逗號運算符*/
/*
01)經常使用於將兩個或者更多的表達式放到一個for循環表達式中
02)逗號運算符確保先計算第一個表達式,而後計算第二個表達式(換句話說,逗號運算符就是一個順序點)
如:i=20,j=2*i; 是安全的 先計算i=20再去計算j的值
03)逗號運算符的優先級是最低的
cata = 17,240; //cata=17 即"="的優先級比","的優先級高
cata = (17,240); //cata=240
*/安全
/* c風格類字符串的比較 */
/*
01)char word = "mate"; //數組名word只是數組的地址
word == "mate"; //用引號括起來的也是地址,因此兩個地址判斷是否相等,結果是確定不相等的
02)使用c風格字符串庫中的strcmp()函數來比較,改函數接受兩份字符串地址爲參數,這意味着參數能夠是指針、字符數組名或字符串常量
若是str1和str2相同,那麼表達式strcmp(str1,str2)==0爲true
若是str1和str2不相同,那麼表達式strcmp(str1,str2)!=0和strcmp(str1,str2)均爲true
若是兩個字符串不相同,則該函數返回1
若是str1在str2的前面,那麼strcmp(str1,str2)<0 返回1
若是str1在str2的後面,那麼strcmp(str1,str2)>0 返回1
*/函數
#include <iostream>
#include <cstring> //for strcmp()spa
int main()
{
using namespace std;
char zero;
char word[] = "?ate"; //定義數組,剛剛忘了在word以後加中括號致使報錯
for (char ch = 'a'; strcmp(word,"mate"); ch++) //若是word不和mate相等,那麼strcmp函數返回1,循環繼續進行
{
cout << word << endl;
word[0] = ch; //將word數組中的第一個數用ch替換下來
}
cout << "最終匹配的字符串數組word是:" << word << endl;
cin >> zero; //防止DOS閃退
return 0;
}指針
/* string類字符串的比較 */
因爲string類函數重載(重定義)了這些運算符,所以string類字符串能夠使用
關係運算符進行比較
string類重載了運算符!=的方式讓咱們可以使用它
#include <iostream>
#include <string> //for string classc++11
int main()
{
using namespace std;
string word = "?ate"; //定義string類字符串
for (char ch = 'a'; word != "mate"; ch++) //直接用關係運算符!=進行比較
{
cout << word << endl;
word[0] = ch;
}
cout <<"最終匹配的字符串word是:"<< word << endl;
cin >> word;
return 0;
}blog
/* 類型別名typedef和#define */
/*
01)使用預處理器#define
如:#define BYTE char //使BYTE成爲char的別名,注意後面沒有分號
02)使用關鍵字typedef
如:typedef char byte; //使byte成爲char的別名,注意後面有分號
typedef char* byte_pointer; //讓byte_pointer成爲char指針的別名
03)在定義不少變量時,使用預處理器的方法不適用
如:#define FLOAT_POINTER float* //讓FLOAT_POINTER成爲char指針的別名
FLOAT_POINTER pa,pb; //有問題 至關於float* pa,pb;可是typedef不會出現這樣的問題
04)和#define相比,typedef是一種更好的選擇
05)typedef不會建立新類型,而只是在已有的類型建立一個新的名字
*/
/* do while 循環*/
/*
01)句法:
do
body
while(test-expression); //注意這裏是有一個分號的
02)先執行循環體body,再去判斷test-expression是否成立,若成立,則再次執行循環體body;不然跳出循環
03)
*/
#include <iostream>
int main()
{
using namespace std;
char zero;
int i; //不能定義在循環體內,不然在while的條件判斷中i是不可用的
do
{
cout << "請輸入一個數字:" << endl;
cin >> i;
}
while (i != 7); //若是輸入的數字是7那麼退出循環,注意這裏是有一個分號的
cout << "my favorate number is:" << i << endl;
cin >> zero; //防止DOS閃退
return 0;
}
/* c++11:基於範圍的for循環 */
#include <iostream>
void main()
{
char zero;
double prices[] = {4.99,10.99,6.87,7.99,8.79}; //建立一個double型數組,可是這樣建立的數組怎麼樣去算數組中數據的個數不太簡單
//sizeof()和strlen()用於字符串字符串
//可以使用vector和array等容器,使用size()函數獲得元素的個數
std::cout << "數組佔的字節數數爲:" << sizeof(prices) << std::endl;
for (double x : prices)
std::cout <<"原始數據爲:"<< x << std::endl; //打印prices數組中的元素
for (double &x : prices)
x = x * 0.8; //改變數組中的值 每一個值都乘以0.8
for (int i = 0; i < 5; i++)
std::cout << "乘上0.8後的數組數據爲:" << prices[i] << std::endl;
std::cin >> zero; //防止DOS閃退
}
/* 循環和文本輸入 */
//01原始的cin輸入
#include <iostream>
void main()
{
using namespace std;
int count = 0; //初始化初始計數值
cout << "請輸入字符,以#號結束,並按回車發送給cin:";
char ch,zero;
cin >> ch; //能夠這樣輸入seek run# wwdd而後按下回車,此時會將s賦給ch剩餘的字符將會保存在輸入流中,等待着下次的cin
while (ch != '#')
{
cout << "輸入的字符爲:" <<ch; //這裏不加換行符,那麼就能夠完整的打印出#號前的單詞,且無空格
count++; //計算輸入的字符數 ++count也能夠
cin >> ch; //cin在讀取全部類型的數據時,會自動忽略回車和空格****** 因此上面打印的時候不會顯示空格
}
cout << count << "chracters read" << endl;
cin >> zero; //防止DOS閃退
}
/* 循環和文本輸入 */
02cin.get(char)函數輸入(這樣輸入不會忽略空格)
/*
注意:因爲c++支持被稱爲函數重載的OOP特性,因此cin.get()、cin.get(char)和cin.get(name,Arsize)是不同的函數
OOP特性(函數重載)容許建立多個同名函數,條件是他們的參數列表是不同的
如:使用cin.get(name,Arsize)函數,那麼編譯器就會找到使用char*和int做爲參數的cin.get()函數版本
使用cin.get(char)函數,那麼編譯器就會找到使用char做爲參數的cin.get()函數版本
使用cin.get()函數,那麼編譯器就會找到不使用參數的cin.get()函數版本
*/
#include <iostream>
void main()
{
using namespace std;
char ch,zero;
int count = 0;
cout << "請輸入字符,以#號結束,並按回車發送給cin:";
cin.get(ch);
while (ch != '#')
{
cout <<ch; //這裏不加換行符,那麼就能夠完整的打印出#號前的單詞,且因爲是cin.get()方法輸入,因此有空格
cin.get(ch);
count++;
}
cout <<endl<< count << "chracters read" << endl; //這裏也會把空格算上
cin >> zero; //防止閃退
}
/* 二維數組 */
//int maxtemps[4][5]=
//{
// {96,100,87,85,65},
// {100,85,96,87,98},
// {97,101,91,95,94},
// {87,89,98,56,98}
//}; //定義並初始化一個4行5列的二維數組,注意最後的分號勿忘
#include <iostream>
const int Cities = 5;
const int Years = 4; //定義兩個不可修改的變量
int main()
{
using namespace std;
const char* cities[Cities] = //定義指針數組,存儲5個字符串的地址,使用指針數組的方法和使用普通數組方法是同樣的
{ //若是不用指針數組,那麼須要這樣定義:const char cities[25]={"..."} 這樣的意思是將每一個字符串的最大長度限制爲24個字符
"Gribble City", //每一個都須要佔用25個字符的位置,5個就是125個字符的空間,所以指針數組更節省空間一些
"Gribbletown", //固然使用 const string cities[Cities]={"..."}也是比較節省空間的
"New Gribble",
"San Gribble",
"Gribble Vitle"
}; //使用const的意思是數組內容不可修改
int maxtemps[Years][Cities]=
{
{96,100,87,85,65},
{100,85,96,87,98},
{97,101,91,95,94},
{87,89,98,56,98}
}; //定義並初始化一個4行5列的二維數組,注意最後的分號勿忘、
cout << "Maximum tempratures for 2008-2010\n\n";
for(int city=0; city<Cities; city++)
{
cout << cities[city] << "\t"; //指針數組的使用方法和普通數組的使用方法是同樣的*****
for (int year = 0; year < Years; year++)
{
cout << maxtemps[year][city] << "\t"; //\t表示水平製表 使數據比較整齊
}
cout << endl;
}
cin.get(); //防止DOS閃退
}
效果以下: