目录
2.1C++基础
2.1myfurst.cpp示例:
#include<iostream> //导入标准库 int main() //程序入口 { //函数体 using namespace std; //使std中所有名字可见 cout << "学习C++一段时间."; //cout打印:"学习C++一段时间." cout << endl; //endl起到换行作用 cout << "你不会后悔的!" << endl; //cout打印:"你不会后悔的!"并输出一个换行符 return 0; //程序结束后返回0 }
- //:注释的标记符,编译器会忽略//标识的内容。注释能提高代码的可读性。
- #include:这是一条预处理器编译指令 ,作用是将iostream文件里的内容复制粘贴到该行。
- int main():程序的入口函数,也称为函数头或主函数。C++的任何程序都先从main函数开执行。
- using namespace :也是一条编译指令,在此处作用是使std命名空间中所有名字都可见。
- { }:在此处表示函数体。
- cout:c++向屏幕打印信息的一个工具。
- endl:拥有换行符的作用,即光标跳转到下一行的行首。
- return:返回语句。此处作用将终止main函数的执行,并且返回一个0。
对于 #include<iostream>的详细理解
- #标识告诉编译器这是一条预处理器指令,#includ的作用是将iostream文件里的所有内容都导入到源代码文件中,导入的位置将从定义#include<iostream>的位置开始到结束。
- iostream是c++定义的库文件,这种文件也称为头文件。iostream定义了cout的实现,也就是说,iostream文件里有着实现cout这个功能的代码。如果程序不引入iostream文件,将无法使用cout。
- <>它不是iostream的一部分,作用是告诉编译器将从系统路径寻或编译器设置的路径找iostream文件。文件都有自己的路径,取决于这个文件放在哪,如果编译器找不到路径,就算有#include<iostream>这条代码也使用不了cout
对于int main(){}函数的详细理解
- int是C++内置的数据类型,表示整数类型。数字10,-100,746,0这些数据的类型都是int,因为它们都是整数。int在这里表示main函数的返回类型为整数类型,即上面代码返回一个整数0。
- main是入口函数的名称,C++的函数可以被其他函数调用。而main函数将被启动代码调用。
- 函数后面的括号()表示一个参数列表,且它也表示这段代码是一个函数,比如:int max是一个变量,而int max()是一个函数。看到数据类型+名字+()将表示这是一个函数。
- { }函数体的标记,它的作用是表示{ }里面包含代码都是这个函数的。
- int main(){}函数与其函数体中的代码构成了main函数的定义。
对于using namespace std的详细解释
- using namespace的作用是将std名称空间中所有的名字都不需要书写std::前缀。如果没有条指令,使用cout或endl时将需要这样写:std::cout,std::endl。
- std是一个叫做std命名空间,里面包含了C++自定义的实现。因为iostream文件中的代码都放在了std命名空间中,所以如果没有using namespace std这条指令。使用cout和endl时都必须加上std::的前缀,表示cout和endl来命名空间std。
对于cout和<<的详细解释
- cout定义在iostream文件中,且位于std命名空间。它将<<后面的信息输出到终端(屏幕)。它输出信息后不会自动换行,如果需要换行可以配合endl使用。
- <<是输出运算符,它将后面跟着的信息输入到cout中,并由cout将后面的信息输出的终端。
endl的详细解释
- endl也定义在iostream文件中,且位于std命名空间。endl也称为一个控制符,它的作用是将光标移动到下一行行首的位置。
return的详细解释
- return是一条返回语句,作用是终止函数的执行,如果main函数没有书写return语句,它将默认添加一条return语句。return语句跟函数的返回类型有关,比如int main(),它的返回类型是int,那么return将返回一个整数,如:-1,10,0都可以。
- return后面跟着的值称为返回值,如果函数的返回类型是void,return将不带任何返回值。例如有一个void func()函数,可以这样书写一条func函数的返回语句:return;
- 如果return的返回值与返回类型不同,编译器将尝试执行强制类型转换,把返回值强行转换成与函数返回类型相同类型的返回值。如果强制类型转换失败,就无法通过编译。
//的详细解释
- 从//标记的这一行皆为注释,如果下一行需要写一个注释那就必须在下一行使用//标识。因为//标记只能让一行变成一条注释信息。
- 注释是程序员才能看到的,对于编译器而言,它会忽略掉注释,并且在预处理器阶段回删除掉。
为什么需要分号?
- 语句是程序需要执行的操作,每一条语句都是一条指令。为了理解源代码,编译器需要知道书写的代码是不是一个整体(一条完整的语句),所以C++使用分号(;)表示这段代码是一条完整的语句。
命名空间的作用
- 如果你也定义了一个叫做func的函数,另一个人也定义了一个和你一模一样的func函数,那么编译器将不知道使用哪个函数,给你报重定义错误或者二义性错误。所以为了方便你定义的函数和别人的不冲突,你可以把你的func函数放到一个叫asd的空间中,另一个人可以把他的func函数放到一个叫jkl的空间中。如果你想使用你的func函数就:asd::func表示这是定义在asd空间中的函数。所以std命名空间也是一个道理,C++为了防止程序员定义的其他实现与C++自定义的实现名字冲突,所以C++就把自定义的实现都放在std命名空间。
补充:
/* */:C语言注释,C++也可以使用,它可以注释多行,从/*开始到*/结束
#include<iostream> int main() { /*注释 这是 一条 注释*/ return 0; }
换行符:“\n”,也可以使用换行符\n进行换行操作。例如:cout << "学习C++一段时间.\n";它的作用与endl相同,都是让光标移动到下一行的行首。
2.2C++语句 上
2.2carrots.cpp示例:
#include<iostream> int main() { int value; //声明且定义一个变量 value = 25; //为变量赋值 std::cout << "爸爸今年"; std::cout << value; //打印value的值 std::cout << "岁. "; std::cout << "妈妈今年"; value = value - 1; //把vlaue的值-1此时为24 std::cout << value; std::cout << "岁"; std::cout << "\n"; return 0; }
- int value;声明语句,它声明且定义了一个叫value的变量。此时变量value存储的值为随机数。
- value=25;赋值语句,它将数值25赋给变量,此时变量value存储的值为25。
- value=value-1;也是一条赋值语句,value-1是一条算术表达式,它的作用是将value的值减去-1,并且得到结果24,24是这条算术表达式的结果,并把24赋给变量value。整条指令的意思是:将value变量的值减去-1,并且存储回value变量中。
- std::cout << value;输出语句,它将value存储的值输出到终端并显示这个值。
- std::cout << "\n";\n是换行符,它的作用与endl的作用一样。
- 等于号(=)是赋值运算符,它将左边的值存到右边的变量的内存空间中。
什么是表达式
- 一条能产生值的指令就是一条表达式。如算术表达式。
- 赋值语句也是一个表达式也能产生一个值,总称为赋值语句表达式。例如:value=value-1;这条赋值语句表达式的值为最终要赋予的。结合上面的代码,这里的value=value-1赋值表达式的结果为24;
#include<iostream> #include<cstdio> int main0() { int value1; //赋值表达式结果为100 std::cout << (value1 = 100) << std::endl; //赋值表达式结果为200 printf("%d", value1 = 200); return 0; }
什么是变量和变量名(重点)
- 既能读又能写的内存对象(内存空间)叫做变量。
- 变量名是一块内存空间的别名,内存空间存储的是数据,而变量名是这块内存空间的别名。一块内存地址为0x0000 0001的内存空间,它存储的值为100,那么变量名就是这块内存空间的别名。我们可以通过变量名找到这块内存空间,并访问它存储的数据。
- int value;这条语句可以理解为:在内存中寻找一块大小为int类型的内存空间,并且value是这块内存空间的别名。
声明与定义的区别(重点)
- 声明是:告诉编译器有这个变量或者函数的存在,但是它还没拥有内存空间。
- 定义是:在定义时为一个变量或者函数分配一块合适大小的内存空间。变量名和函数名是这块内存空间的别名
- 对于int value;来说,它既是声明也是定义,因为声明value这个标识符为一个int变量值的变量名的同时,并为它分配了一块int类型大小的内存作为内存空间。
- 声明不一定是定义,但定义包含了声明。
赋值语句和输出运算符<<的扩展
#include<iostream> int main() { int value1, value2; //同时声明两个变量,需要使用逗号(,)分隔 value1 = value2 = 10; //同时给多个变量赋值,顺序又从右到左 //可以使用输出运算符(<<)将数据串联起来并让cout逐一的接收这些数据 std::cout << "value=" << value1 << "value2=" << value2 << std::endl; return 0; }
- 定义变量时,可以同时定义多个变量:int value1, value2;
- 赋值时也可以同时为多个变量赋值:value1 = value2 = 10;
- 打印输出时也可以使用多个输出运算符把要输出的信息串联起来:std::cout << "value=" << value1 << "value2=" << value2 << std::endl;
2.3C++语句 下
2.3getinfo.cpp
#include<iostream> int main() { using namespace std; int value; cout << "请输入一个数字:"; cin >> value; //cin为输入工具,从键盘获取输入按回车结束输入,获取的值保存到变量value中 cout << "你输入的数字为:" << value << endl; value = value + 2; cout << "数字+2后为:" << value << endl; return 0; }
- cin为c++输入工具,作用是从输入设备中读取值(键盘)把读取到的值保存到变量中。cin也是定义在iostream文件中,位于std命名空间。
- 输入运算符(>>)的作用是将cin读取到的值存储到变量value中。它与<<输出运算符一样,也可以串联多个变量。
2.4函数
2.4sqrt.cpp示例:
#include<iostream> #include<cmath> using namespace std; int main() { double area; //double为小数类型,也称为浮点型 cout << "输入一个小数:"; cin >> area; double side = sqrt(area); //调用函数sqrt计算area的平方根的结果,并把这个结果返回保存到side。 cout <<area<< "的平方根为:" << side << endl; return 0; }
- double是浮点类型,可以存储小数的类型。
- sqrt函数是C++自定义众多函数中的一个,它计算一个浮点数的平方根并将结果返回。括号( )里面的area表示实参,它的作用是把area的值传给sqrt的形参,sqrt内部有个形参接收实参的值。
- sqrt函数的原型为:double sqrt(double X)括号中的 double X表示定义一个double类型的形参X用于接收实参area的值。
- sqrt函数定义在文件cmath中。使用时可以使用#include<cmath>将它包含进来。
- double side = sqrt(area);像这样的语句,在定义变量的同时给它赋值的操作叫做初始化。而赋予的值也称为初始值。
关于函数详细解释
- 函数原型和函数定义的区别:原型描述了函数的基本信息(函数接口),而定义实现了整个函数的功能。
- 在函数括号中传来传去的值叫做参数。对于主调函数来说是实参,对于被调函数来说就是形参。
- 函数调用完毕后会返回一个值,这个值就叫做函数的返回值。
2.5ourfunc.cpp示例:
#include<iostream> using namespace std; void simon(int); //函数原型也叫函数声明,告诉编译器存在一个叫simon的函数,并且它的返回类型为void,形参为int int main() { simon(3); //调用一个名为simon的函数,simon由于是main函数调用的也称为被调函数,而main称为主调函数 int val; cout << "输入一个整数:"; cin >> val; simon(val); //将val传递给形参sun。 return 0; } void simon(int sum) { cout << "传进来的整数为:" << sum << endl; }
- void simon(int);声明函数原型,告诉编译器你定义了一个叫做simon的函数,并且函数的类型是void,形参的类型是int。void表示它不需要返回值。
- void表示无类型,不能定义一个void类型的变量。编译器没有设计为void类型的变量分配内存的功能。由于simon是void类型的函数,所以return可以默认不写。
- simon(3);这条指令也称为函数调用表达式,如果函数有形参需要传入形参才能调用起来。这里使用数值3作为实参并调用函数。
- simon(val);与上面不同的是,它使用一个变量名作为实参,其效果与 simon(3)相同,不同的是传递的数值。
- void simon(int sum){cout << "传进来的整数为:" << sum << endl;}这是函数实现的代码,也称函数定义。函数的定义就是函数能执行的功能。
- 由于simon没有返回值,不能用一个变量接收它,如:int val=simon(10);是错误的。
2.6convert.cpp示例:
#include<iostream> using namespace std; int stonetolb(int); int main() { int stone; cout << "输入一个整数:"; cin >> stone; int opunds = stonetolb(stone); //用变量opunds接收stonetolb函数的返回值。 cout << "opunds=" << opunds << endl; return 0; } int stonetolb(int sts) //定义一个有返回值的函数 { return 14 * sts; //将传进来的值*14在返回给主调函数。 }
- int stonetolb(int);函数原型说明,stonetolb函数是一个返回类型为int,形参类型为int的函数。
- return 14 * sts;将sts的值*14再返回。return可以返回一个表达式,不管是简单的表达式还是复杂的表达式。
函数的扩展:
- double pow(double m,double n)功能为计算 m的n次方,并把结果返回。第1个参数为底数,第2个参数为指数。
- int rand(void)功能是返回一个随机整数。
- 函数的定义包括:函数的类型,函数的名字,函数的形参列表,函数体。
总结:
- 在C++中,每条完整的指令都称为语句。所有的语句都以分号结束。
- C++程序由一个函数或多个函数的模块组成。
- C++程序从main函数执行。
- C++有多种类型的语句,包括:
- 1.声明语句
- 2.定义语句
- 3.返回语句
- 4.输入语句
- 5.输出语句
- 6.赋值语句
- 7.函数调用语句
- 8.函数声明语句
- C++有多种表达式语句,包括:
- 1.算术表达式。
- 2.赋值表达式。
- 3.函数调用表达式。
- C++提供了cout和cin作为输出和输入工具,它们都定义在iostream文件中,位于std命名空间。
复习题
- 什么是C++程序的模块?
- 下面的预处理器编译指令的用途是什么?
#include<iostream> - 下面的编译指令有什么作用?
using namespace std; - 什么语句可以打印短语"Hello,world",然后将光标换行并回到行首?
- 什么语句可以用来创建名为cheeses的整数变量?
- 什么语句可以用来将值32赋给变量cheeses?
- 什么语句可以用来从键盘输入的值中读入到变量cheese中?
- 什么语句可以用来打印"今天是星期x,所以今天休息",其中x为变量cheeses的当前值?
- 下面的函数原型指明了关于哪些的哪些信息?
int froop(double t);
void rattle(int n);
int prune(void); - 定义函数时,在什么情况下不必使用关键字return?
- 假设你在main函数下包容以下代码
cout<<"今天天气真不错"
而编译器指出cout是一个未知的标识符,导致这种问题的可能原因是什么?指出3种修复这种问题的方法。
编程练习
- 编写一个C++程序,显示自己的姓名和年龄。
- 编写一个C++程序,要求用户输入一个以long为单位的距离,然后将它转换为码(1long=220码)。
- 编写一个C++程序,它使用3个用户自定义的函数(包括main),并生成以下输出:
今天天气真不错!
今天天气真不错!
那我们去郊游吧!
那我们去郊游吧!
其中一个函数要调用两次,该函数生成前两行;另一个函数也要调用两次,生成后两行。 - 编程一个程序,让用户输入年龄,然后显示该年龄包含多少个月
输入你的年龄:20
你的年龄包含:240个月 - 编写一个程序,其中main调用一个用户定义的函数(以摄氏度为参数,并返回华氏度):
请输入要转换的摄氏度:20
20摄氏度转换为68华氏度
(华氏度=1.8*摄氏度+32.0) - 编写一个程序,其中main函数调用一个用户定义的函数(以光年值为参数,返回对应的天文单位值):
请输入要转换的光年值:4.2
4.2光年值=265608天文值
(1光年=63240天文单位) - 编写一个程序,要求用户输入小时数和分钟数。在main函数种,将这两个值传递给一个void函数,以下面格式显示:
请输入小时数:
请输入分钟数:
时间:9:28
练习答案:
第一题
#include<iostream> //编写一个C++程序,显示自己的姓名和年龄。 int main() { //第一种直接输出 std::cout << "我的名字是XXX,年龄为18"<<std::endl; //第二种用变量保存年龄 int age = 20; std::cout << "我的名字是XXX,年龄为"<<age<< std::endl; return 0; }
第二题
/* 编写一个C++程序,要求用户输入一个以long为单位的距离, 然后将它转换为码(1long=220码)。 */ int main() { //第一种 /*int val; cout << "请输入一个整数:"; cin >> val; int sum = val * 220; cout << val << "long = " << sum << "码" << endl;*/ //第二种 int val; cout << "请输入一个整数:"; cin >> val; cout << val << "long = " << val*220 << "码" << endl; return 0; }
第三题
#include<iostream> //编写一个C++程序,它使用3个用户自定义的函数(包括main),并生成以下输出 void func1(); void func2(); int main() { func1(); func1(); func2(); func2(); return 0; } void func1() { using std::cout; using std::endl; cout << "今天天气真不错!" << endl; } void func2() { using namespace std; cout << "那我们去郊游吧!\n"; }
第四题
#include<iostream> //编程一个程序,让用户输入年龄,然后显示该年龄包含多少个月 using namespace std; int main() { int age; cout << "请输入年龄:"; cin >> age; cout << "你的包含:" << age * 12 << "个月" << endl; return 0; }
第五题
#include<iostream> using namespace std; //编写一个程序,其中main调用一个用户定义的函数(以摄氏度为参数,并返回华氏度) //华氏度=1.8*摄氏度+32.0 double func(double val); int main() { double val; cout << "请输入要转换的摄氏度:"; cin >> val; //也能这样调用函数 cout << val << "摄氏度转换为" << func(val) << "华氏度" << endl; return 0; } double func(double val) { return 1.8 * val + 32.0; }
第六题
#include<iostream> using namespace std; //编写一个程序,其中main函数调用一个用户定义的函数(以光年值为参数,返回对应的天文单位值) //1光年=63240天文单位 double func(double val); int main() { double val; cout << "请输入要转换的光年值:"; cin >> val; cout << val << "光年值 = " << func(val) << "天文值" << endl; return 0; } double func(double val) { return val*63240; }
第七题
#include<iostream> using namespace std; //编写一个程序,要求用户输入小时数和分钟数。在main函数种,将这两个值传递给一个void函数,以下面格式显示 void func(int val1, int val2); int main() { int val1, val2; cout << "请输入小时数:"; cin >> val1; cout << "请输入分钟数:"; cin >> val2; func(val1, val2); } void func(int val1, int val2) { cout << "时间:" << val1 << ":" << val2 << endl; }