220223_C++_语法整理_最最最最最入门阶段(至指针前)

220223_C++_语法整理_最最最最最入门阶段(至指针前)


C++的基础语法入门笔记。
来源是runnoob的菜鸟教程等网络资料。
绝非原创,仅作自学自查之用。


Hello,World!

#include <iostream>
// 包含了头文件 <iostream>
// 头文件包含了程序中必需的或有用的信息

using namespace std;
// 告诉编译器使用 std 命名空间。

// main()是主函数,程序从这里开始执行。
int main()
{
    cout << "Hello, world!" << endl;
	// 会在屏幕上显示消息 "Hello World".
	
    return 0;
	// 终止 main( )函数,并向调用进程返回值 0。
}

输出:

Hello, world!

① 上面这段程序中,包含了头文件
头文件包含了程序中必需的或有用的信息。


入门常识

  • 分号

    • 分号是语句结束符,每个语句必须以分号结束。它表明一个逻辑实体的结束。
      C++ 不以行末作为结束符的标识,因此,可以在一行上放置多个语句。
  • 语句块

    • 语句块是一组使用大括号括起来的按逻辑连接的语句。
  • 关键字(保留字)

    • 这些关键字不能作为常量名、变量名或其他标识符名称。

    • asm const else friend new short this unsigned
      auto const_cast enum goto operator signed throw using
      bool continue explicit if private sizeof true virtual
      break default export inline protected static try void
      case delete extern int public static_cast typedef volatile
      catch do false long register struct typeid wchar_t
      char double float mutable reinterpret_cast switch typename while
      class dynamic_cast for namespace return template union
  • 三字符组

    • 三字符组与双字符组是程序设计语言(如C语言)中3个或者2个字符的序列,在编译器预扫描源程序时被替换为单个字符。以解决某些键盘不能输入某些编程必须的字符问题。

    • 三字符组 ??= ??/ ??' ??( ??) ??! ??< ??> ??-
      替换 # \ ^ [ ] | { } ~
  • 注释

    • 单行//
    • 多行/* xxxxxxx */

数据类型

计算机信息量单位

11010100:一个8位(8-bit)二进制数、占一字节(Byte)。

字通常由几个字节构成。
例如286微机的字由2个字节组成,它的字长为16位;
486微机的字由4个节组成,它的字长为32位。

1 Byte(B)= 8 bit
1 Kilo Byte(KB) = 1024B
1 Mega Byte(MB) = 1024 KB
1 Giga Byte (GB)= 1024 MB
1 Tera Byte(TB)= 1024 GB
1 Peta Byte(PB) = 1024 TB

不同数据类型

类型 范围
char 1 个字节 -128 到 127 或者 0 到 255
unsigned char 1 个字节 0 到 255
signed char 1 个字节 -128 到 127
int 4 个字节 -2147483648 到 2147483647
unsigned int 4 个字节 0 到 4294967295
signed int 4 个字节 -2147483648 到 2147483647
short int 2 个字节 -32768 到 32767
unsigned short int 2 个字节 0 到 65,535
signed short int 2 个字节 -32768 到 32767
long int 8 个字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
signed long int 8 个字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long int 8 个字节 0 到 18,446,744,073,709,551,615
float 4 个字节 精度型占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字)
double 8 个字节 双精度型占8 个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字)
long double 16 个字节 长双精度型 16 个字节(128位)内存空间,可提供18-19位有效数字。
wchar_t 2 或 4 个字节 1 个宽字符
类型 描述
bool 存储值 true 或 false。
char 通常是一个字符(八位)。这是一个整数类型。
int 对机器而言,整数的最自然的大小。
float 单精度浮点值。单精度是这样的格式,1位符号,8位指数,23位小数。 2^23 = 8388608,一共七位,这意味着最多能有7位有效数字。
double 双精度浮点值。双精度是1位符号,11位指数,52位小数。2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。
void 表示类型的缺失。
wchar_t 宽字符类型。
\\ 运用类似的代码可以查询不同数据类型的占用空间与数据范围
\\ 以bool型为例
cout << "bool: \t\t" << "所占字节数:" << sizeof(bool);
cout << "\t最大值:" << (numeric_limits<bool>::max)();

定义变量

数据类型 变量名 = 初始值;

int a = 1;
cout << a << endl;

定义常量

①#define 宏常量

#include<iostream>  
#define aaa 7

using namespace std;

int main()
{
    cout << "aaa=" << aaa << endl;
    return 0;
}

②const 修饰变量

const int aaa = 2;

这两者本质上是不同的。

简单来说,#define是不带类型的立即数(不在内存,也不在寄存器,而是在内嵌在指令中的操作数),没有类型检查,会导致一些计算错误。


字符与字符串

字符型变量char用于显示单个字符,用单引号 ' ' 引起。
字符串型变量string用于显示单个字符,用双引号 " " 引起。

char a = '2';
char s2[] = "123141241";
string s = "12aaaaasdasdaaaa3";

ASCII码表

ASCII 控制字符 ASCII 字符 ASCII 字符 ASCII 字符
0 NUT 32 (space) 64 @ 96
1 SOH 33 ! 65 A 97 a
2 STX 34 " 66 B 98 b
3 ETX 35 # 67 C 99 c
4 EOT 36 $ 68 D 100 d
5 ENQ 37 % 69 E 101 e
6 ACK 38 & 70 F 102 f
7 BEL 39 , 71 G 103 g
8 BS 40 ( 72 H 104 h
9 HT 41 ) 73 I 105 i
10 LF 42 * 74 J 106 j
11 VT 43 + 75 K 107 k
12 FF 44 , 76 L 108 l
13 CR 45 - 77 M 109 m
14 SO 46 . 78 N 110 n
15 SI 47 / 79 O 111 o
16 DLE 48 0 80 P 112 p
17 DCI 49 1 81 Q 113 q
18 DC2 50 2 82 R 114 r
19 DC3 51 3 83 S 115 s
20 DC4 52 4 84 T 116 t
21 NAK 53 5 85 U 117 u
22 SYN 54 6 86 V 118 v
23 TB 55 7 87 W 119 w
24 CAN 56 8 88 X 120 x
25 EM 57 9 89 Y 121 y
26 SUB 58 : 90 Z 122 z
27 ESC 59 ; 91 [ 123 {
28 FS 60 < 92 / 124 |
29 GS 61 = 93 ] 125 }
30 RS 62 > 94 ^ 126 `
31 US 63 ? 95 _ 127 DEL
// 强制转换char类型至int,查看ASCII值
#include<iostream>  
using namespace std;
int main()
{
    char a = '1';
    cout << (int)a << endl;
    return 0;
}

转义字符

表示一些不能显示出来的ASCII字符。

转义字符 含义 ASCII码值(十进制)
\a 警报 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 数字0 000
\ddd 8进制转义字符,d范围0~7 3位8进制
\xhh 16进制转义字符,h范围09,af,A~F 3位16进制

输入与输出

这里只简单举几个例子。

① cout cin

C++ 库定义了大量的类(Class),cout 和 cin 就分别是 ostream和 istream 类的对象,
由标准库的开发者提前创建好的,可以直接拿来使用。
使用cin与cout需要包含头文件iostream。
cout和cin是ostream和istream的对象

使用 cout 进行输出时需要紧跟<<运算符,使用 cin 进行输入时需要紧跟>>运算符
其中endl表示换行,与C语言里的\n作用相同

#include<iostream>  
using namespace std;

int main()
{
    int x;
    float y;
    cout << "Please input an int number:" << endl;
    cin >> x;

    return 0;
}

② printf scanf

#include<iostream>  
using namespace std;

int main()
{
	int a;
	scanf("%d",&a);
	printf("a=%d\n",a);

	
	float b;
	scanf("%f",&b);
	printf("b=%f\n",b);
	
	double c;
	scanf("%lf",&c);
	printf("c=%lf\n",c);
	printf("c=%3.5lf\n",c);
	
    return 0;
}

// 输入11
// 12345678912345678900000
// 123456789.123456791

// a=11
// b=12345679377913908035584.000000
// c=123456789.123457
// c=123456789.12346


运算符

运算符类型 作用
算术运算符 用于处理四则运算 + - * / % ++ --
赋值运算符 用于将表达式的值赋给变量 = += -= *= /= %=
比较运算符 用于表达式的比较,并返回一个真值或假值 == != < > <= >=
逻辑运算符 用于根据表达式的值返回真值或假值 ! && ||

三种结构

1. 顺序结构

没啥可说的。

2. 选择结构

语句 描述
if 语句 一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。
if...else 语句 一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。
嵌套 if 语句 您可以在一个 ifelse if 语句内使用另一个 ifelse if 语句。
switch 语句 一个 switch 语句允许测试一个变量等于多个值时的情况。
嵌套 switch 语句 您可以在一个 switch 语句内使用另一个 switch 语句。
if(boolean_expression)
{ }
else
{ }
#include <iostream>
using namespace std;
 
int main ()
{
    char grade;
    cout << "Please input an int number:" << endl;
    cin >> grade;
    
   switch(grade)
   {
   case 'A' :
      cout << "很棒!" << endl; 
      break;
   case 'B' :
      cout << "还行" << endl;
   case 'C' :
      cout << "不太好" << endl;
      break;
   default :
      cout << "无效的成绩" << endl;
   }
   cout << "您的成绩是 " << grade << endl;
 
   return 0;
}

// 输入1
// Please input an int number:
// 无效的成绩
// 您的成绩是 1

// 输入A
// Please input an int number:
// 很棒!
// 您的成绩是 A

3. 循环结构

while
while()
{}
do{...} while(...)
do
{....
} while
for
for(int i = 0; 条件; 末尾循环体)
{
循环语句;
}

跳转语句

break

跳出选择结构与循环结构。

break;
continue
continue;

跳过本次循环,进入下一次循环。

goto

无条件跳转语句。

goto FLAG

.......

FLAG:
......

建议少用goto。


数组

定义数组

C当中,数组从0开始编号。

一维数组

int a[10];

//利用下标赋值
a[0] = 100;
a[1] = 99;
a[2] = 85;

//利用下标输出
cout << score[0] << endl;
cout << score[1] << endl;
cout << score[2] << endl;
#include <iostream>
using namespace std;

int main()
{

    int a[4] = { 10, 2,}; // 这里也可写a[] = {xx,xx,xx,xx}

    for (int i = 0; i < 5; i++)
    {
        cout <<"序号 "<<i<<"  " << a[i] << " ";
    }

    system("pause");
    return 0;
}

//序号 0  10 序号 1  2 序号 2  0 序号 3  0 序号 4  -858993460 请按任意键继续. . .
// ☆ 可见a[10]被分配了其他数字,但没有使用价值。a[11]会报错。

二维数组

#include <iostream>
using namespace std;

int main()
{
    int a[3][2] = 
    {
        {1,2},
        {11,22},
        {111,222}
    };
//当然可以一个个赋值

    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 2; j++)
        {
            cout << j << "行" << i << "列 " << a[i][j] << "\t";
        }
        cout << endl;
    }

    cout << "二维数组内存字节数: " << sizeof(a) << endl;
    cout << "二维数组一行内存字节数: " << sizeof(a[0]) << endl;
    cout << "二维数组元素内存字节数: " << sizeof(a[0][0]) << endl;
    cout << "二维数组首地址:" << a << endl;
    cout << "二维数组第一行地址:" << a[0] << endl;
    cout << "二维数组第二行地址:" << a[1] << endl;
    cout << "二维数组第二行地址:" << a[2] << endl;
    cout << "二维数组第一个元素地址:" << &arr[0][0] << endl;
    cout << "二维数组第二个元素地址:" << &arr[0][1] << endl;

    system("pause");
    return 0;
}

//0行0列 1        1行0列 2
//0行1列 11       1行1列 22
//0行2列 111      1行2列 222

函数

返回值类型 函数名 (参数列表)
{
   函数体语句
   return表达式
}
---------------------
举例:求和函数
#include <iostream>
using namespace std;

int add(int num1, int num2)
{
    int sum = num1 + num2;
    return sum;
}

int main()
{
    int a = 1;
    int b = 2;
    
    cout << "sum = " <<add(a,b)<<endl;

    system("pause");
    return 0;
}
---------------------
举例:交换数字
#include <iostream>
using namespace std;

void swap(int num1, int num2)
{
    cout << "交换前:" << endl;
    cout << "num1 = " << num1 << endl;
    cout << "num2 = " << num2 << endl;
    int temp = num1;
    num1 = num2;
    num2 = temp;
    cout << "交换后:" << endl;
    cout << "num1 = " << num1 << endl;
    cout << "num2 = " << num2 << endl;
    //return ; 当函数声明时候,不需要返回值,可以不写return
}

int main()
{
    int a = 1;
    int b = 2;

    swap(a, b);

    system("pause");
    return 0;
}

函数常见的形式:① 无参数无返会值;② 有参数无返会值;③ 无参数有返会值;④ 有参数有返会值。

c++中,常见的分文件使用函数:

  1. 创建后缀名为.h的头文件
  2. 创建后缀名为.cpp的源文件
  3. 在头文件中写函数的声明
  4. 在源文件中写函数的定义
//swap.h文件
#include<iostream>
using namespace std;
//实现两个数字交换的函数声明
void swap(int a, int b);

//swap.cpp文件
#include "swap.h"
void swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
}

变量作用域

局部变量

在函数或一个代码块内部声明的变量,称为局部变量。它们只能被函数内部或者代码块内部的语句使用。

全局变量

在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。

全局变量可以被任何函数访问。也就是说,全局变量一旦声明,在整个程序中都是可用的。下面的实例使用了全局变量和局部变量

上一篇:Linux下制作Ubuntu系统的U盘启动版LiveCD和直接硬盘启动LiveCD


下一篇:习题 5.4 有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。