/* 语句块 用花括号括起来的语句 */
#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闪退
}
效果以下: