C++学习6——菜鸟教程自学

看了一下路线,之前学的算是基础中的基础,接下来的才算是真正的基础。

C++循环

        C++提供了四种循环类型:while循环;for循环;do... while循环;嵌套循环

        循环控制语句:break语句;continue语句;goto语句

        无限循环:在某些条件下,可以将for循环的某些条件表达式留空变成无限循环。

#include<iostream>
using namespace std;

int main()
{

for( ; ; )
{
printf("This loop will run forever.\n");
}
return 0;
}

        (提示:可以使用ctrl+c终止一个无限循环)

C++判断

        C++提供了五种判断语句类型:if语句;if...else语句;嵌套if语句;switch语句;嵌套switch语句。

        ?:运算符:可以用来替代if...else语句。

C++函数

        函数是一组执行同一个任务的语句。函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。

定义函数

return_type function_name(parameter str)
{
body of function
}

        返回类型:函数返回值的数据类型。如果只是执行操作而不返回数值,则类型为void。

        函数名称:为函数的实际名称。函数名和函数列表一起构成了函数签名。

        参数:参数就像占位符。参数是可选的。

        函数主体:函数主体包含一组定义函数并执行任务的语句。

//函数返回两个数中较大的那个数

int max(int num1, int num2)
{
//局部变量声明
int result;

if (num1 > num2)
result = num1;
else
result = num2;

return result;
}

        (函数的声明是重要的,而参数的名称是次要的)

调用函数

        程序调用函数时,程序的控制权会被转移给被调用的函数。被调用的函数执行已定义的任务,当函数的返回语句被执行时,或到达函数的结束括号时,会把程序控制权交还给主程序。

#include<iostream>
using namespace std;

//函数声明
int max(int num1, int num2);

int main()
{
//局部变量声明
int a = 100;
int b = 200;
int ret;

//调用函数来获取最大值
ret = max(a,b);

cout << "Max value is : " << ret <<endl;
return 0;
}

//函数返回两个数中较大的数值

int max( int num1, int num2)
{
//局部变量声明
int result;
if (num1 > num2)
result = num1;
else
result = num2;

return result;
}

函数参数

        若函数要使用参数,必须声明接受参数的变量,这些变量称为函数的形式参数。

        形式参数类似于函数内部的其他局部变量,在进入函数的时候被创建,退出函数时被销毁。

        当调用函数时,有三种函数传递参数方式:传值调用(把参数的实际值赋给函数的形式参数,在这种情况下,修改函数内的形式参数对实际参数没有影响);指针调用(该方法把参数的地址赋值给形式参数,在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会传递给实际参数);引用调用(该方法把参数的引用赋值给形式参数。在函数内,该引用用于访问调用到的实际参数。这意味着,修改形式参数会影响实际参数。)

参数的默认值

        定义一个函数时,可以为参数列表后面的每一个参数指定默认值。当调用函数时,如果实际参数的值留空,则使用这个默认值。

Lambda函数与表达式

        匿名函数,也称为Lambda表达式。

C++数字

C++定义数字

C++数学运算

        除了运算符,还有内置的数学函数提供使用。如

        double cos(double);

        double sin(double);

        double tan(double);

        double log(double);

        double pow(double,double);

        double hypot(double,double);

        double sqrt(double);

        int abs(int);

        double fabs(double);

        double floor(double);

        

C++随机数

  

        C++随机数生成器,有两个相关的函数,一个是rand(),该函数只返回一个伪随机数。另一个是srand()函数,生成随机数前必须先调用。

#include<iostream>
#include<ctime>
#include<cstdlib>

using namespace std;

int main()
{
int i,j;

//设置种子
srand((unsigned)time(NULL));
/*生成10个随机数*/
for ( i = 0; i < 10; i++)
{
//生成给实际的随机数
j = rand();
bout << "随机数: " << j <<endl;
}

return 0;
}

      

C++数组

        C++支持数组结构,它可以存储一个固定大小的相同类型的元素顺序集合。用来存储一些列数据,但是往往被认为是一系列相同类型的变量。

        

声明数组

        声明数组,需要指定元素的类型和元素的数量。

初始化数组

        C++中,可以逐个初始化数组,也可以使用一个初始化语句。若省略了数组的数目,则数目为元素的数目。

访问数组元素

        数组元素可以通过数组名称加索引进行访问。元素的索引是放在方括号内,跟在数组名称的后面。

#include<iostream>
using namespace std;

#include<iomanip>
using std::setw;

int main()
{
int n[ 10]; //n是一个包含10个整数的数组

//初始化数组元素
for ( int i = 0; i < 10; i++)
{
n[i ] = i + 100; //设置元素i为 i + 100 
}
cout << "Element" << setw(13) << "value" << endl;

//输出数组中每个元素的值
for ( int j = 0; j < 10; j++)
{
cout << setw(7) << j <<setw(13) << n[ j ] << endl;
}
return 0;
}

C++中数组详解

        多维数组:C++支持多维数组,其中最简单的是二维数组;

        指向数组的指针:可以通过指定不带索引的数组名称来生成一个指向数组中第一个元素的指针;

        传递数组给函数:可以通过指定不带索引的数组名称来给函数传递一个指向数组的指针;

        从函数返回数组:C++允许从函数返回数组。

C++字符串

        

        C++提供了两种类型的字符串表示形式:C风格字符串;C++引入的string类类类型

C风格字符串

        实际上是使用null字符\0终止的一个一维字符数组。

        c++中有大量的函数可以操作以null为结尾的字符串。

        strcpy(s1,s2);        复制字符串s2 到字符串s1;

        strlen(s);         返回字符串s的长度;

        strcmp(s1,s2);        如果s1和s2是相同的,则返回0;如果s1<s2,则返回值小于0;反之大于0;

        strchr(s1,ch);        返回一个指针,指向字符串s1中字符ch第一次出现的位置;

        strstr(s1,s2);        返回一个指针,指向字符串s1中字符串s2的第一次出现的位置。

C++中的string类型

        c++标准库提供了string类类型,支持上述所有的操作,另外还增加了很多其他的功能。

C++指针

C++指针可以用于简化一些C++编程任务的执行,还有一些任务,例如动态内存分配,没有指针无法执行。

每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。

#include<iostream>

using namespace std;
int main()
{
int var1;
int var2[10];

cout << "var1 的变量地址: ";
cout << &var1 << endl;

cout << "var2 的变量地址: ";
cout << &var2 << endl;

什么是指针?

指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。就像其他变量或者常量一样,必须在使用指针存储其他变量地址之前,对其进行声明。指针变量的声明的一般形式为:

type *var-name;

这里,type为指针的基类型,必须是一个有效的c++数据类型,var-name是指针变量的名称。用来声明指针变量的星号*与乘法中使用的星号是相同的。

所有指针的值是实际数据类型,不管是什么类型,它们的值都是一样的,都是一个代表内存地址的长的十六进制数。不同数据类型的指针之间唯一的不同是,指针所指向的便来给你或常量的数据类型不同。

C++中使用指针

使用指针时会频繁进行以下几个操作:定义一个指针变量、把变量地址赋值给指针、访问指针变量中可用地址的值。这些是通过使用一元运算符*来返回位于操作数所指定地址的变量的值。

#include<iostream>

using namespace std;

int main()
P
{
int var = 20; //实际变量的声明
int *ip; //指针变量的声明

ip = &var; //在指针变量中存储var的地址

cout << "Value of var variable: ";
cout << var << endl;

//输出在指针变量中存储的地址
cout << "Address stored in ip variable:";
cout << ip << endl;

//访问指针中地址的值
cout << "Value of *ip variable: ";
cout << ip <<endl;

return 0;
}

C++指针详解

C++中与指针相关的一些重要概念:

        C++ Null指针        C++支持空指针,Null是一个定义在标准库中的值为0的常量;

        C++指针的算数运算        可以对指针进行四种运算:++,--,+,-;

        C++指针vs数组        指针和数组之间有着密切的关系;

        C++指针数组        可以定义用来存储指针的数组;

        C++指向指针的指针        C++允许指向指针的指针;

        C++传递指针给函数        通过引用或地址传递参数,使传递的参数在调用函数中被改变;

        C++从函数返回指针        C++允许函数返回指针到局部变量、静态变量和动态内存分配。

C++引用

引用变量是一个别名,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。

C++引用vs 指针

        引用与指针很容易混淆,但是它们有三点不同:

        不存在空引用,引用必须连接到一块合法内存;

        一眼引用被初始化为一个对象,就不能被指向另一对象。指针可以在任何时候指向另一个对象;

        引用必须在创建时被初始化。指针可以在任何时候被初始化。

C++中创建引用

变量名称是附着在内存位置中的标签,可以把引用看作是附着在内存位置中的第二个标签。因此,可以通过原始的变量名称或引用来访问变量内容。

&读作引用。

#include<iostream>

using namespace std;

int main()
{
//声明简单的变量
int i;
double d;

//声明引用变量
int& r = i;
double& s = d;

i = 5;
cout << "Value of i :" << i << endl;
cout << "Value of i reference :" << r << endl;

d = 11.7;
cout << "Value of d :" << d <<endl;
cout << "Value of d reference: " << s <<endl;

return 0;
}

引用通常用于函数参数列表和函数返回值。下面有两个与C++引用相关的重要概念:

        把引用作为参数        C++支持把引用作为参数传递给函数,这比一般的参数更安全;

        把引用作为返回值        可以从C++函数中返回引用,就像返回i其他数据类型一样。

C++日期和时间

C++标准库没有提供所谓的日期类型。C++继承了C语言用于日期和时间的操作的结构和函数。引用<ctime>头文件,有四个与时间相关的类型:clock_t、time_t、size_t和tm。前三种类型可以将系统时间和日期表示为某种整数,tm把日期和时间以C结构的形式保存。

        关于日期和时间的重要函数:

        time_t(time_t*time);        该函数返回系统的当前日历时间;

        char*ctime(const time_t*time);        返回一个表示当时时间的字符串指针;

        struct tm*localtime(const time_*time);        返回一个指向表示本地时间的tm结构的指针;

        clock_t clock(void);        返回程序执行起,处理器时钟所使用的时间;

        char*asctime(const struct tm*time);        返回一个指向字符串的指针,字符串指向结构中所存储的时间;

        struct tm*gmtime(const time_t*time);        返回一个指向time的指针,time为tm结构,用UTC或GMT表示;

        time_t mktime(struct tm*time);        返回日历时间;

        double difftime(time_t time2, time_t, time1);        返回time1和time2之间相差的时间秒数;

        size_t strftime();        可用于格式化日期和时间为指定格式。

当前日期和时间

#include<iostream>
#include<ctime>

using namespace std;

int main()
{
//基于系统的当前日期/时间
time_t now = time(0);


//把now转化为字符串形式
char* dt = ctime(&now);
cout << "本地日期和时间:" << dt << endl;
//把now转换为tm结构
tm *gmtm = gmtime(now);
dt = asctime(gmtm);
cout << "UTC日期和时间" << dt << endl;

使用结构tm格式化时间

        tm结构在C/C++中处理日期和时间的相关操作时,显得尤为重要。tm结构以C结构的方式保存日期和时间。大多数与时间相关的函数都使用了tm结构。

#include<iostream>
#include<ctime>

using namespace std;

int main()
{
//基于当前的系统的当前日期/时间
time_t now= time(0);
cout << "1970到目前经过秒数" << now << endl;

tm *ltm = localtime(&now);

//输出tm结构的各个组成部分
cout << "年: " << 1900 +ltm-> tm_year <<endl;
cout << "月:" << 1+ltm->tm_mon << endl;
cout << "日:" << ltm-> tm_today <<endl;
cout << "时间: " << ltm->tm_hour << ":" ;
cout << ltm->tm_min <<" :" ;
cout << ltm-> tm_sec << endl;
}

C++基本的输入输出

C++标准库提供了一组丰富的输入/输出功能。C++的I/O发生在流中,流是字节序列。如果字节流从设备流向内存,叫做输入操作,如果字节流从内存流向设备,叫做输出操作。

I/O库头文件

        <iostream>        该文件定义了cin、cout、cerr和clog对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流;

        <iomanip>        该文件通过所谓的参数化的流操纵器(比如stew和setprecision),来声明对执行标准化I/O有用的服务;

        <fstream>        该文件为用户控制的文件处理声明服务。

标准输出流(cout)

预定义的对象cout是iostream类中的一个实例。cout对象”连接“到标准输出设备,通常是显示屏。

标准输入流(cin)

预定义的对象cin是iostream类的一个实例。cin对象附属到标准输入设备,通常是键盘。与流提取运算符>>结合使用。

标准错误流(cerr)

预定义的对象cerr是iostream类的一个实例。cerr对象附属到标准错误设备,通常也是显示屏,但是cerr对象是非缓冲的且每个流插入到cerr都会立即输出。

#include<iostream>

using namespace dtd;
int main()
{
char str[] = "Unable to read ...";

cerr << "Error message : " << str << endl;
}

标准日志流(clog)

预定义的对象clog是iostream类的一个实例。clog对象附属到标准错误设备,通常也是显示屏,但是clog对象是缓冲的。这意味着每个流插入到clog都会先存在缓冲区,直到缓冲填满或者缓冲区刷新时才会输出。

(cerr用来显示错误消息,而其他的日志消息用clog流来输出。)

大概花了四个多小时,在比较低的效率下,也算是得到很多新的认识。但是重头戏显然并不在之前。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流鱼a_ec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值