选中后先按ctrl+K 再按ctrl+C 是注释
按住ctrl+K 再按ctrl+U是取消注释
选中后先按ctrl+K 再按ctrl+C 是注释
按住ctrl+K 再按ctrl+U是取消注释
1、解决方案、项目、程序集和命名空间:
解决方案:一个稍微复杂一点的软件,都需要很多模块来组成,为了体现彼此之间的层次关系,利于程序的复用,往往需要多个项目,每个项目实现不同的功能,最后将这些项目组合起来,就形成了一个完整的解决方案。形象地说,解决方案就是一个容器,在这个容器里,分成好多层,好多格,用来存放不同的项目。一个解决方案与项目是大于等于的关系。
项目:在.Net下,一个项目可以表现为多种类型,如控制台应用程序,Windows应用程序,类库(Class Library),Web应用程序,Web Service,Windows控件等等。
程序集:通俗的说,一个项目也就是一个程序集。一个程序集也可以体现为一个dll文件,或者exe文件。
命名空间:为了避免一个项目中,可能会存在的相同对象名的冲突。
2、锁死控制台窗口
cin.get();
While循环
while循环是循环结构的一种,可以通过while()括号中设定条件,该循环会在满足设定的条件时重复执行循环体内的函数。while循环的基本结构如下:
while(condition){
loop body;
}
其中condition表示条件,loop body表示循环体。
遍历一个数组的操作如下:
array<int,10> testArray;
int i = 0;
while(i < testArray.size()){
std::cout << testArray[i] << endl;
i++;
}
宏
定义宏的操作如下:
#define STR return 0;
可以指定一个字符串来代替另外的一些字符串。如:
#define END return 0;
#define FSTRING string
当定义了宏时,能够在使用被替换的字符串时键入宏名称来代替被替换的字符串。
在为一个数据类型定义一个宏或函数时,不能使用";"符号结束。
类型别名
用宏来实现类型别名外能够使用typedef来实现,操作如下:
typedef int UInt
需要使用";"符号结束。
typedef只能为数据类型定义别名。
do-while循环
do-while循环与while循环类似,区别在于do-while的函数体在条件判断语句的前面,所以无论条件满足与否,都会执行一次循环体。基本结构如下:
do{
loop body;
}while(condition);
其中,loop body表示循环体,condition表示条件。
使用do-while遍历数组的操作如下:
array<int, 10> testArray;
int i = 0;
do{
cout << testArray[i];
i++;
}while(i < testArray.size());
遍历数组的新方式
遍历数组的新方式操作如下:
array<int, 10> testArray;
for(int temp : testArray){
cout << temp << endl;
}
此方式只能够进行遍历操作,如果要使用此操作进行赋值,操作如下:
array<int, 10> testArray;
for(int& temp : testArray){
temp = 10;
}
多维数组
声明多维数组的基本结构如下:
int testArray[2][2]{
{11,22},
{33,44}
};
std::array<array<int, 2>,2> testArray2;
testArray2[0] = {{11,22}};
testArray2[1] = {{33,44}};
上述代码声明了一个2维数组testArray和testArray2,可以将第一个"[]"内的数字看做行数,第二个"[]"内的数字看做列数。
多维数组的声明和遍历操作如下:
#include <iostream>
#include <cstdio>
#include <string>
#include <array>
using namespace std;
int main()
{
array<int, 10> testArray{11,22,33,44,55,66,77,88,99,00};
array<int, 10> testArray2{22,33,44,55,66,77,88,99,00,11};
array<int, 10> testArray3{33,44,55,66,77,88,99,00,11,22};
array<array<int, 10>, 3> testArrayTotal;
testArrayTotal = { testArray, testArray2, testArray3 };
for (int i = 0; i < testArrayTotal.size();i++){
for (int j = 0; j < 10; j++){
cout << testArrayTotal[i][j] << "\n";
}
cout << "," << endl;
}
}
练习题
1.int i;
for(i = 0; i < 5; i++)
cout << i;
cout << endl;
这段代码将输出:
01234
2.int j;
for(j = 0; j < 11; j += 3)
cout << j;
cout << endl << j << endl;
这段代码将输出:
0369
12
3.int j = 5;
while(++j < 9)
cout << j++ << endl;
这段代码将输出:
6
8
4.int k = 8;
do
cout << "k = " << k << endl;
while(k++ < 5);
这段代码将输出:
k = 8;
5.
#include <iostream>
#include <cstdio>
#include <string>
#include <array>
using namespace std;
int main()
{
int result = 1;
for (int i = 0; i < 7; i++)
{
cout << result << " ";
result *= 2;
}
}
6.
#include <iostream>
#include <cstdio>
#include <string>
#include <array>
using namespace std;
int main()
{
int a = 0;
int b = 0;
int total = 0;
cout << "Enter a number:";
cin >> a;
cout << "Enter another number that larger than first one:";
cin >> b;
for (; a <= b; a++) {
total += a;
}
cout << "The sum of integers between two numbers is:" << total << endl;
}
7.
#include <iostream>
#include <cstdio>
#include <string>
#include <array>
using namespace std;
int main()
{
int temp = 0;
int sum = 0;
cout << "Enter a number(Enter zero mean quit program):";
cin >> temp;
while (temp != 0) {
sum += temp;
cout << "Current sum is:" << sum << endl;
cout << "Enter a number(Enter zero mean quit program):";
cin >> temp;
}
}
常量
常量是固定不变的量,如某个字符、数字或者true、false等。
常量的声明需要使用const限定符,如下:
const int i = 100;
常量一旦声明之后,就无法在其他代码段修改其值,必须转到声明行进行修改。
浮点型
浮点型是小数,分为单精度float和双精度double以及long double。float类型包含符号位1位、指数位8位和尾数位23;double类型包含符号位1位,指数位11位和尾数位52位;
C++中的科学计数法
可使用科学计数法表示浮点型数据,如1340000000可表示为1.34e+9。
e后面的符号表示小数点的左移或右移,如1.2e-6就等于0.0000012。
算数运算符
算数运算符有 +、-、*、/和%,分别为加、减、乘、除和取余(求模),用于数字类型数据的计算。
运算结果受赋值变量的数据类型的影响,如运算符两边的数据为浮点型,但接收结果的变量为整型,则结果不会采用四舍五入的方式取整,而是会向下取整,如下:
float a = 1.5;
float b = 2.3;
实际上a + b应该等于3.8,但如果接收结果的变量c为整型int时:
int c = a + b;
变量c的值为3.8向下取整的3。
关于取余运算符,在C++中,要求运算符两边的变量或常量均为整型数据。
关于优先级,与数学当中的优先级基本一致。
类型转换
int -> float 不发生变化。
float/double -> int 向下取整。
尽量避免将超过数据类型取值范围外的值赋值给变量。
float + int 的情况下会视值的大小进行类型转换,值小的转换为值大的数据类型。
强制类型转换
1)在常量或变量前加上要转换的数据类型并使用括号括起来,如:
int i = (int)12.9;
此为C语言标准。
2)在常量或变量前加上要转换的数据类型并使用括号将常量或变量括起来,如:
int j = int(12.9);
此为C++语言标准。
两种转换规则均与上述类型转换规则相同,浮点转到整型会进行向下取整。
auto关键字
自动推断类型的关键字,它将会根据值来对变量设置数据类型。它不允许在声明变量时不设置默认值,必须在声明的同时为变量设置默认值。
auto关键字无法精确的指定变量的具体数据类型,所以默认值可能出现混淆时,就只能声明具体数据类型的变量。
练习题
1、让用户输入自己的身高(米),将它转换为厘米输出。
答:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
float height = 0.0f;
cout << "Enter your height in meter:";
cin >> height;
cout << "Your height in centimeter is: " << height * 100.0f <<"cm" << endl;
}
2、编写一个程序,让用户输入秒数,将他转换为天-小时-分钟-秒并打印出来。
答:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int second = 0;
cout << "Enter a second(integer):";
cin >> second;
//1h = 60m = 3600s 1d = 24h
cout << "The converted result is: "
<< second / 60 / 60 / 24<< "day(s), "
<< second / 3600 % 24<< "hour(s), "
<< second / 60 % 60<< "minute(s), "
<< second % 60<< "second(s)."<<endl;
}
3、要求用户输入一个班级的男生和女生的人数,输出女生的比例(百分比)。
答:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int male = 0;
int female = 0;
cout << "Enter the count for male in the class:";
cin >> male;
cout << "Enter the count for female in the class:";
cin >> female;
cout << "The percentage of female in the class is:"
<< (float)female / (float)(female + male) * 100.0f
<< "%." << endl;
}
数组
数组是存储若干个相同数据类型的值的容器,数组有3要素,1是数组存储的数据类型,2是数组的名字,3是数组的长度。
数组的声明
数组的声明如下:
type arrayName[elementsCount];
type是数组存储的数据类型,arrayName是数组的名字,elementsCount是数组的长度。数组的长度必须大于0。
数组的初始化
以整型为例,数组的初始化如下:
1)声明数组时指定数组长度并完全初始化,如:
int exArray[4] = {11,22,33,44};
2)声明数组时指定数组长度并部分初始化,如:
int exArray[4] = {11,22};
未初始化的数组元素的默认值为0。
3)声明数组时不指定数组长度,如:
int exArray[] = {11,22,33,44,55};
此时,数组会根据声明的元素个数为数组设置长度。
4)声明数组时指定数组长度并初始化,且不使用赋值运算符,如:
int exArray[]{11,22,33,44};
此为C++11的标准。
数组的索引(下标)
C++中,数组的下标从0开始到数组的长度减去1结束,如:
int exArray[]{11,22,33,44};
该数组的下标为0~3。
数组里的值通过数组下标来调用,如:
需要调用上述数组的低3个元素时,如下操作:
int ex = exArray[2];
数组的下标必须是存在的,不得小于0且不得大于数组的长度。注意,C++中下标越界不会报错。
修改数组元素的值得方式与调用数组元素的方式相似,如:
exArray[2] = 104;
字符串
C语言风格字符串
C语言当中没有实际的字符串,是通过字符类型的数组实现字符串,如:
char exArray[] = {'e','x','a','m','p','l','e','\0'};
\0在C语言表示字符串的结束。
不以\0结束的字符数组将会在输出数组的时候输出乱码。
上述方式过于繁琐,在声明字符串时可以使用以下方法:
char exArray[] = "example";
此方法会解析双引号括起来的字符串并生成字符数组,并且自动添加\0。此时数组的长度为字符的个数+1,\0同样被视为一个数组元素。
长字符串可以分割为多个字符串,如:
char exArray[] = "Example string.""This is the second string.";
使用cin函数需要注意的点
用户输入的制表符、空格都会被cin视为输入的结束。
可以使用cin.getline(array, value);来避免上述问题。
C++string类库
使用string类库需要include<string>。引入类库后可直接使用string声明一个字符串,如:
string str;
string str2 = "Example";
未声明的字符串会默认为空字符串。可以对字符串类型的变量赋值,如:
string str;
string str1 = "Example";
str = str1;
获取用户输入的字符串赋值给字符串变量需要使用getline()方法,如下:
string str;
getline(cin,str);
获取字符串中的第i个字符的操作如下:
string str = "Example";
char c = str[2];
注意,i不能越界,必须大于0且小于字符串的长度。
字符串变量之间可以进行加法运算,通过"+"运算符连接两个字符串,如:
str1 = "Example";
str2 = " string";
string str3 = str1 + str2;
str3的值为"Example string"。
可以通过string.size()获取字符的个数。
"i"
与"I"
,"function"
与"Function"
等等。"nMinValue"
和 "nMaxValue"
,"GetName()"
和"SetName()"
….Value1,Value2
等,除非逻辑上的确需要编号。这是为了防止程序员偷懒,不肯为命名动脑筋而导致产生无意义的名字(因为用数字编号最省事)。HandleXXX
命名,例如:HandleTimerEvent
;不推荐采用java风格,例如 handleTimerEvent
;除了标准c风格代码,不推荐用下划线,例如,handle_event
。apBuffer
名称。用aBuffer
即可。mpBuffer
名称。用mBuffer
即可。int i
;p
打头,例如void* pBuffer;
g_
最为前缀。总述:
auto的原理就是根据后面的值,来自己推测前面的类型是什么。
auto的作用就是为了简化变量初始化,如果这个变量有一个很长很长的初始化类型,就可以用auto代替。
注意点:
1.用auto声明的变量必须初始化。(auto是根据后面的值来推测这个变量的类型,如果后面没有值,自然会报错)
2.函数和模板参数不能被声明为auto(原因同上)
3.因为auto是一个占位符,并不是一个他自己的类型,因此不能用于类型转换或其他一些操作。