C++第二章笔记

目录

2.1C++基础 

2.1myfurst.cpp示例:

对于 #include的详细理解

对于int main(){}函数的详细理解 

对于using namespace std的详细解释

对于cout和<<的详细解释

endl的详细解释

return的详细解释

//的详细解释

为什么需要分号?

命名空间的作用

2.2C++语句 上

2.2carrots.cpp示例:

什么是表达式

什么是变量和变量名(重点)

声明与定义的区别(重点)

赋值语句和输出运算符<<的扩展

2.3C++语句 下 

 2.3getinfo.cpp

2.4函数 

2.4sqrt.cpp示例:

关于函数详细解释

2.5ourfunc.cpp示例:

2.6convert.cpp示例:

函数的扩展:

总结:

复习题

编程练习


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命名空间。

复习题

  1. 什么是C++程序的模块?
  2. 下面的预处理器编译指令的用途是什么?
    #include<iostream>
  3. 下面的编译指令有什么作用?
    using namespace std;
  4. 什么语句可以打印短语"Hello,world",然后将光标换行并回到行首?
  5. 什么语句可以用来创建名为cheeses的整数变量?
  6. 什么语句可以用来将值32赋给变量cheeses?
  7. 什么语句可以用来从键盘输入的值中读入到变量cheese中?
  8. 什么语句可以用来打印"今天是星期x,所以今天休息",其中x为变量cheeses的当前值?
  9. 下面的函数原型指明了关于哪些的哪些信息?
    int froop(double t);
    void rattle(int n);
    int prune(void);
  10. 定义函数时,在什么情况下不必使用关键字return?
  11. 假设你在main函数下包容以下代码
    cout<<"今天天气真不错"
    而编译器指出cout是一个未知的标识符,导致这种问题的可能原因是什么?指出3种修复这种问题的方法。

编程练习

  1. 编写一个C++程序,显示自己的姓名和年龄。
  2. 编写一个C++程序,要求用户输入一个以long为单位的距离,然后将它转换为码(1long=220码)。
  3. 编写一个C++程序,它使用3个用户自定义的函数(包括main),并生成以下输出:
    今天天气真不错!
    今天天气真不错!
    那我们去郊游吧!
    那我们去郊游吧!
    其中一个函数要调用两次,该函数生成前两行;另一个函数也要调用两次,生成后两行。
  4. 编程一个程序,让用户输入年龄,然后显示该年龄包含多少个月
    输入你的年龄:20
    你的年龄包含:240个月
  5. 编写一个程序,其中main调用一个用户定义的函数(以摄氏度为参数,并返回华氏度):
    请输入要转换的摄氏度:20
    20摄氏度转换为68华氏度
    (华氏度=1.8*摄氏度+32.0)
  6. 编写一个程序,其中main函数调用一个用户定义的函数(以光年值为参数,返回对应的天文单位值):
    请输入要转换的光年值:4.2
    4.2光年值=265608天文值
    (1光年=63240天文单位)
  7. 编写一个程序,要求用户输入小时数和分钟数。在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;
}

  • 26
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值