欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++学习指南笔记

程序员文章站 2022-03-31 18:04:03
第一章 开始学习 C/C++ 第一个程序 代码框架 XP环境下控制台一闪而过的问题 第二章 控制台输入与输出 2.1 控制台输出 2.1.1 输出整数 printf("I am %d \n",33); 2.1.2 用变量表示整数 2.1.3 指定显示宽度 %?d 和 %0?d (问号等于宽度值) 2 ......

第一章 开始学习 c/c++

第一个程序

///////////////ch01_a1////////////
#include <stdio.h>
int main()
{
    printf("hello world! \n");
    return 0;
}

代码框架

#include <stdio.h>
int main()
{
    return 0;
}

xp环境下控制台一闪而过的问题

#include <stdio.h>
#include <stdlib.h>
int main()
{
    printf("hello world! \n");
    // 添加按下任意键关闭控制台
    system("pause")
    return 0;
}

 


 

第二章 控制台输入与输出

2.1 控制台输出

printf("i am qleo \n");
printf("我是谁谁谁 \n");

2.1.1 输出整数

 printf("i am %d \n",33); 

2.1.2 用变量表示整数

int age = 33
printf("i am %d \n",age);
// 同一行打印两个整数
    int a = 10;
    int b = 50;
    printf("a: %d,b: %d \n",a,b);

2.1.3 指定显示宽度 %?d 和 %0?d (问号等于宽度值)

    // 使用 %4d 来显示数字
    printf("number %4d,ok \n",3);
    printf("number %4d,ok \n",33);
    printf("number %4d,ok \n",333);
    // 使用 %04d 来显示数字
    printf("number %04d,ok \n",3);
    printf("number %04d,ok \n",33);
    printf("number %04d,ok \n",333);

C++学习指南笔记

2.1.4 输出小数

// 输出一个小数
printf("x = %lf \n",12.35);
// 输出两个小数
printf("x = %lf,y = %lf \n",12.35,90.01);

2.1.5 用变量表示小数

double a = 12.35;
printf("x = %lf \n",a);

2.1.6 指定小数点后的位置(%.?lf 问号等于小数后的位数)

double a = 12.35719987;
printf("a = %.2lf \n",a);

2.2 控制台输入

可以用 scanf 操作,让用户从控制台输入一个整数或小数。其中,scan 表示输入扫描,f 表示 format,表示接收输入并格式化数据的意思。

2.2.1 输入整数

#include <stdio.h>
int main()
{
    int a = 0;
    scanf("%d",&a);
    printf("got:%d \n",a);
    return 0;
}

2.2.2 输入小数

#include <stdio.h>
int main()
{
    double f = 0;
    scanf("%lf",&f);
    printf("got:%lf \n",f);
    return 0;
}

2.2.3 一次输入多个数

#include <stdio.h>
int main()
{
    int a;
    double x;
    scanf("%d",&a);
    scanf("%lf",&x);
    printf("got:%d,%lf \n",a,x);
    return 0;
}

 


第三章 变量与常量

变量

C++学习指南笔记

常量

当在类型名前面加上关键字 const 后,表示它是一个只读的量.这种变量不能修改它的值,因而称为常量.

#include<iostream>
int main()
{
    const int max_size = 1024;
    printf("a : %d \n",max_size);    // 读取 const 常量的值
    int b = max_size;                // 将 max_size 的值赋值给变量 b
    printf("b:%d \n",b);
    return 0;
}

第四章 数组

数组的定义

 char arr[5]; 

其中 arr 称为"数组变量",简称"数组",它表示5个char型数据 . 把每一个数据称为一个"元素".

数组的基本使用方法

数组的初始值

char arr[5] = {90,91,92,93,94};

访问数组中的元素

#include<stdio.h>
int main()
{
    int values[5] = {1,2,3,4,5};
    values[0] = 11;    // 将第一个元素的值设为11
    printf("%d \n",values[0]);// 打印第一个元素的值
    return 0;
}

用 sizeof 取得数组的大小

int arr[100];
int size = sizeof(arr);// 大小为 100 * 4

 


第五章 字符与字符数组

5.2 字符的表示

char ch = 65;    // 则ch代表的是大写字母 'a'
char ch2 = 49;    // 则 ch2 代表的是数字 '1'
// 显然,如果用 short 或 int 来表示字符就显的大材小用,浪费空间.

5.3 字符的显示

 printf("got:%c \n",65); 

5.4 字符常量

在 c/c++ 代码中,直接用字符常量来代表一个字符的 ascii码,使用单引号表示.

 char ch = 'a'; 

5.5 字符数组

字符有以下两种初始化方法.

(1) 像普通数组一样初始化

    char str[6] = {'h','e','l','l','o','\0'};

(2) 特殊的初始化方法

 char str[6] = "hello"; 

需要注意的是,当用字符数组来存储字符串时,必须以 '\0' 结尾.把 '\0' 称为字符串的结束符.它的 ascii 码数值为 0 .注意, '\0' 和 0 这两种写法是完全等效的.

5.5.1 输出字符串

char str[6] = "hello";
printf("string:%s \n",str);

5.5.2 输入字符串

可以使用 gets 来获取字符串 . 

 1 #include <stdio.h>
 2 int main()
 3 {
 4     /*用户在控制台输入一个字符串,
 5     按回车键结束,
 6     所有输入的字符被存储到 buf 数组中    
 7     */
 8     char buf[128];
 9     gets(buf);
10     printf("got:%s \n",buf);
11     return 0;
12 }

5.5.4 字符串的截断

利用字符串的结束符,可以轻易地截断一个字符串.

char buf[32] = "hello,world";
buf[5] = 0;
printf("result:%s \n",buf);

由于 buf[5] 被设置成了结束符,所以字符串 buf 的有小部分就是 "hello" 了.

5.6 转义字符

所有的转义字符和所对应的意义:
转义字符
意义
ascii码值(十进制)
\a
响铃(bel)
007
\b
退格(bs) ,将当前位置移到前一列
008
\f
换页(ff),将当前位置移到下页开头
012
\n
换行(lf) ,将当前位置移到下一行开头
010
\r
回车(cr) ,将当前位置移到本行开头
013
\t
水平制表(ht) (跳到下一个tab位置)
009
\v
垂直制表(vt)
011
\\
代表一个反斜线字符''\'
092
\'
代表一个单引号(撇号)字符
039
\"
代表一个双引号字符
034
\? 代表一个问号 063
\0
空字符(null)
000
\ddd
1到3位八进制数所代表的任意字符
三位八进制
\xhh
1到2位十六进制所代表的任意字符
二位十六进制
注意:区分,斜杠:"/" 与 反斜杠:"\" ,此处不可互换 
 

第六章 表达式与操作符

6.1 算术操作符

运算符 描述 实例
+ 把两个操作数相加 a + b 将得到 30
- 从第一个操作数中减去第二个操作数 a - b 将得到 -10
* 把两个操作数相乘 a * b 将得到 200
/ 分子除以分母 b / a 将得到 2
% 取模运算符,整除后的余数 b % a 将得到 0
++ 自增运算符,整数值增加 1 a++ 将得到 11
-- 自减运算符,整数值减少 1 a-- 将得到 9

6.2 赋值操作符

运算符 描述 实例
= 简单的赋值运算符,把右边操作数的值赋给左边操作数 c = a + b 将把 a + b 的值赋给 c
+= 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 c += a 相当于 c = c + a
-= 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 c -= a 相当于 c = c - a
*= 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 c *= a 相当于 c = c * a
/= 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 c /= a 相当于 c = c / a
%= 求模且赋值运算符,求两个操作数的模赋值给左边操作数 c %= a 相当于 c = c % a
<<= 左移且赋值运算符 c <<= 2 等同于 c = c << 2
>>= 右移且赋值运算符 c >>= 2 等同于 c = c >> 2
&= 按位与且赋值运算符 c &= 2 等同于 c = c & 2
^= 按位异或且赋值运算符 c ^= 2 等同于 c = c ^ 2
|= 按位或且赋值运算符 c |= 2 等同于 c = c | 2

6.3 关系表达式

运算符 描述 实例
== 检查两个操作数的值是否相等,如果相等则条件为真。 (a == b) 不为真。
!= 检查两个操作数的值是否相等,如果不相等则条件为真。 (a != b) 为真。
> 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 (a > b) 不为真。
< 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 (a < b) 为真。
>= 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 (a >= b) 不为真。
<= 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 (a <= b) 为真。

6.5 逻辑表达式

运算符 描述 实例
&& 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 (a && b) 为假。
|| 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 (a || b) 为真。
! 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 !(a && b) 为真。

杂项运算符

运算符 描述
sizeof 返回变量的大小。例如,sizeof(a) 将返回 4,其中 a 是整数。
condition ? x : y 。如果 condition 为真 ? 则值为 x : 否则值为 y。
, 会顺序执行一系列运算。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值。
.(点)和 ->(箭头) 用于引用类、结构和共用体的成员。
cast 把一种数据类型转换为另一种数据类型。例如,int(2.2000) 将返回 2。
&  返回变量的地址。例如 &a; 将给出变量的实际地址。
*  指向一个变量。例如,*var; 将指向变量 var。

c++ 中的运算符优先级

类别  运算符  结合性 
后缀  () [] -> . ++ - -   从左到右 
一元  + - ! ~ ++ - - (type)* & sizeof  从右到左 
乘除  * / %  从左到右 
加减  + -  从左到右 
移位  << >>  从左到右 
关系  < <= > >=  从左到右 
相等  == !=  从左到右 
位与 and  从左到右 
位异或 xor  从左到右 
位或 or  从左到右 
逻辑与 and  &&  从左到右 
逻辑或 or  ||  从左到右 
条件  ?:  从右到左 
赋值  = += -= *= /= %=>>= <<= &= ^= |=  从右到左 
逗号  从左到右 


第七章 语句

7.2 if 语句

int x = 61;
if(x >= 60)
{
printf("pass ! \n");
}else
{
printf("fail ! \n");
}

7.2.3 完全形式 if...else if...else if...else

#include <stdio.h>
int main()
{
    int x = 71;
    if(x >= 90)
    {
        printf("got a \n");
    }else if(x >= 80)
    {
        printf("got b \n");
    }else if(x >= 70)
    {
        printf("got c \n");
    }else if(x >= 60)
    {
        printf("got d \n");
    }else
    {
        printf("got e \n");
    }
    printf("that's over \n");
    return 0;
}

7.3 switch 语句

#include <stdio.h>
int main()
{
    int day = 2;
    switch(day)
    {
        case 1:
            printf("go to office \n");
            break;
        case 2:
            printf("go out \n");
            break;
        default:
            printf("stay at home \n");
    }    
    return 0;
}

7.4 for 语句

#include <stdio.h>
int main()
{
    int a[100];
    int i;
    for (i = 0; i < 100; i++)
    {
        a[i] = i + 1;
    }
    return 0;
}

7.5 while 语句

#include <stdio.h>
int main()
{
    int a[100];
    int i = 0;    // 初始化
    while(i < 100)
    {
        a[i] = i + 1;
        i++;    // 后置过程
    }
    return 0;
}

7.6 do…while 语句

除了 for 语句 、while 语句之外,还有一种 do...while 语句可用于表示循环.其基本形式为:

do
{
    statement;
}while(expr);

其中,expr 表达式,statement 是一条但语句或者复合语句.

语法规则:

(1) 执行 statement.

(2) 若 expr 的值为真,则执行 (1) .如 expr 为假,则退出 while 语句.

简而言之:先执行一轮,再检测 expr 的值,如果 expr 为真则接着执行下一轮.如果为假则结束循环.


第八章 函数

8.2 初步认识函数

return_type name(arguments)
{
   body
}

其中,

name:函数名.最好起一个有意义的名字.

arguments:参数列表.每个参数以逗号分开,如 int a, int b.

return_typr:返回值类型.

body:函数体.即函数的具体实现.

8.8 函数声明与函数定义

当一个 cpp 文件里有多个函数,且它们之间有调用关系时,那么它们的先后顺序就变得复杂.需要保证,一个函数调用之前,该函数已经被定义.

8.8.1 函数的声明

函数的声明,在形式上就是把函数定义中的函数体去掉,只保留函数名、参数列表、返回值类型,并以分号结束。例如:

int is_alpha(char ch);
void print_ascii();

当一个函数被声明后,它就可以被直接调用,而不一定要把函数定义也放在前面。这就解决了函数调用顺序问题。通常把各个函数写在前面,然后函数定义就不需要保证顺序了。


 

第九章 指针

9.2 指针的概念

#include <stdio.h>
int main()
{
    int a = 10;
    int b = 11;
    int* p;
    p = &a;            // p 指向变量 a 的地址
    p = &b;            // 修改 p 的值,现在指向变量 b 的地址
    return 0;
}

9.3 星号操作

#include <stdio.h>
int main()
{
    int a = 10;
    int b = 11;
    int* p = &a;        // p 指向 a
    *p = 0xa0a0a0a0;    // 写操作:修改 p 指向的内存地址
    *p = 0x13141516;    // 写操作:修改 p 指向的内存地址
    int b = *p;            // 读操作:读取 p 指向的内存的值
    int c = *p + 2;        // 读操作:读取 p 指向的内存的值
    return 0;
}

9.4 指针与数组