1. 程序员的第一条代码"Hello,world!"

#include <cstdio> //头文件,主要负责输入、输出
using namespace std;//C++标准程序库中的所有标识符都被定义于一个名为std,注意后面的";"
int main(){//主程序,程序的开始,一个程序只能有一个主程序,格式固定
printf("Hello,world!\n");//printf是一个输出语句,功能定义在cstdio文件,名字定义在std
return 0;//固定格式,和int对应,正确执行,返回值0
}

  上面代码是写给程序员看的叫源程序,但计算机并看不懂,所以我们要对上面的代码进行编译,编译错误说明我们没有按照语法规则写代码,需要修改,编译成功,说明没有语法错误,Dev会把源程序转换成计算能够'读懂'的目标程序,然后我们执行目标程序,计算机就能照我们要求办事了。

2. 变量

  程序在运行的时候需要把数据都存储在计算机的内存中,内存中的是由一个个基本的存储单元组合而成,每一个存储单元大小是一个字节,每一个存储单元都有一个内存地址,这个内存地址是一个很长的十六进制数,为了便于操作,我们用一个字符串来代表这些内存地址,我们对变量的操作,就相当于在变量所在的内存地址里存储或取出数据,这些数据是可变的,所以我们称之为变量。

2.1 命名规则:

  1. 变量名必须以字母或下划线打头,名字中间只能由字母、数字和下划线“_”组成
  2. 变量名的长度不得超过255个字符;
  3. 变量名在有效的范围内必须是唯一的。
  4. 变量名不能是保留字(关键字)
  5. 避免冲突,变量尽量首字母大写

2.2 数据类型:

c++中的数据必须有其数据类型,常用的基本数据类型有整形、浮点型、字符型、布尔型。每一种数据类型都有自己的数据范围和在内存中存储大小。

类型 关键字 格式控制符 存储(字节) 范围
短整型 short int %hd 2 \(-2^{15}\)~\(2^{15}-1\)
无符号短整型 unsigned short int %hu 2 \(0\)~\(2^{16}-1\)
整型 int %d 4 \(-2^{31}\)~\(2^{31}-1\)
无符号整型 unsigned int %u 4 \(0\)~\(2^{32}-1\)
长整型 long long %lld 8 \(-2^{63}\)~\(2^{63}-1\)
无符号长整型 unsigned long long %llu 8 \(0\)~\(2^{64}-1\)
单精度浮点型 float %f 4 6~7位有效位数
双精度浮点型 double %lf 8 15~16位有效数
长双精度浮点型 long double %llf 16 18~19位有效数
字符型 char %c 1
布尔型 bool 1 c++有,c无

2.3 变量定义:

用于为变量分配存储空间,还可为变量指定初始值。变量在使用前必须要定义。

int a;//定义一个变量名叫a的变量,这个变量在内存里占据4个字节的存储单元,此内存单元内可能有其他程序结束后留下的数据,所以初值不固定,一般需要初始化。
double b;//定义一个双精度浮点变量b,占8个字节的存储单元
float a;//错误,变量a已存在,不能重复定义
float int;//错误,int位系统关键字不能作为变量名

3. 输入、输出

  • c语言格式化输入输出:scanf、printf

    1. 需要包含头文件
    2. 是格式化输入输出,每一种数据类型都有其格式控制符,必须严格对应
    3. 书写比较麻烦,但联赛建议大家使用,因为其比输入输出流要快。

    3.1 格式化输入scanf

    1. 函数原型:int scanf(const char *format,...);
    2. 函数返回值:成功格式化解析的格式。
    3. 调用格式:scanf("<格式化字符串>",<地址列表>);
    4. 注意格式控制符和地址列表要一一对应
    int a,b,c;//定义三个整型变量a,b,c
    c=scanf("%d%d",&a,&b);//格式化字符串要用双引号引起来,注意取地址符&
    1. "*"符:用以表示该输入项,读入后不赋予相应的变量,即跳过该输入值。
    scanf("%d%*d%d",&a,&b);//输入1 2 3时,1赋予a,3赋予b,2被跳过
    1. 宽度:用十进制整数指定输入的宽度(即字符数)。
    scanf("%3d%3d",&a,&b);//输入12345678时,a=123,b=456
    1. 在输入多个数值数据时,格式控制串中的间隔则可用空格,TAB作间隔
    scanf("%d%d",&a,&b);
    scanf("%d %d",&a,&b);
    scanf("%d %d",&a,&b);
    //以上三种方式一样的,均可
    1. 如果格式控制串中有非格式字符则输入时也要输入该非格式字符。
    scanf("%d,%d",&a,&b);//输入时两个数之间也必须用","隔开,如:12,13
    1. 如输入的数据与输出的类型不一致时,虽然编译能够通过,但结果将不正确
    scanf("%d%d",&a,&b);//输入:12 ab时,a=12而b的值不正确

    3.2 格式化输出printf

    1. 函数原型:int printf(const char *format,[argument]);
    2. 函数返回值为整型。若成功则返回输出的字符数,输出出错则返回负值。
    3. 调用格式:printf("<格式化字符串>", <参量表>);
    4. 要求格式字符串和各输出项在数量和类型上应该一一对应
    int a,b,c;//定义三个整型变量
    scanf("%d%d%d",&a,&b,&c);//从键盘输入三个整数分别赋给a,b,c
    printf("%d %d %d",a,b,c);//输出三个变量,用空格隔开,注意变量列表和地址列表的区别
    1. 非格式字符串原样输出,在显示中起提示作用。
    printf("a=%d b=%d c=%d",a,b,c);//非格式字符都会原样输出
    1. 转义字符
    printf("%d %d %d\n",a,b,c);//"\n"是转义字符,表示换行
    1. 场宽,即输出的最小宽度,变量值宽度超过最小场宽,用实际宽度显示
    printf("%5d %6d\n",a,b);//变量a,b输出最少占5个字符,不够左边补格
    prinf("%-5d %6d\n",a,b);//变量a最少占5个字符,不够右边补空格,b同上
    printf("%5d %5d\n",a,b);//如果a或b本身超过了5个字符,则按实际宽度输出
    1. 精度,即实数保留的小数位数
    float x,y;
    printf("%5.2f %5.2\n",x,y);//5表示场宽,同上,.2表示保留2位小数位
    printf("%-5.2f\n",x);//不够5位(包括小数点),右边补空格

4. 运算符

4.1 赋值运算符"="

语法:变量=表达式

  1. 赋值语句的左边必须是变量,左边是表达式。eg:a=a+b*c+3;
  2. 赋值语句是先把右边的表达式运算出一个具体的值,然后把这个值存储在左边变量所申请的内存地址里
  3. 由于赋值运算符“=”右边的表达式也可以是赋值表达式,因此, 变量=变量=…=表达式;是成立的。eg:a=b=c=5;
  4. 如果左边的变量类型和右边的表达式求出的结果类型不一致,将把右边的值转换成左边的类型再赋值。

4.2 算术运算符

假设变量A=10,B=20

运算符 描述 实例
+ 把两个操作数相加 A + B 将得到 30
- 从第一个操作数中减去第二个操作数 A - B 将得到 -10
* 把两个操作数相乘 A * B 将得到 200
/ 分子除以分母 B / A 将得到 2
% 取模运算符,整除后的余数 B % A 将得到 0
++ 自增运算符,整数值增加 1 A++ 将得到 11
-- 自减运算符,整数值减少 1 A-- 将得到 9
  1. 两整数相除,答案是其商,也为整数.eg: 3/2 结果为:1
  2. 除数或被除数有一个为实数,答案为实数eg:3.0/2 结果为:1.5
  3. %只能对整数取余.eg:3%2 结果为:1
  4. 自加、自减运算
int a,b,i=1;
a=i++;//变量i先把自己的值赋值给变量a,然后i自己加1,变成2,所以a==1,i==2
b=++i;//变量i先把自己加1变成3,然后把值赋值给变量b,所以b==3,i==3
//i--;--i;同上

4.3 关系运算符

下表显示了 C++ 支持的关系运算符。假设变量 A = 10,变量 B=20,则:

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

4.4 逻辑运算符

下表显示了 C++ 支持的关系逻辑运算符。假设变量 A = 1,变量 B = 0,则:

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

5. 常量

  • 常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。常量就像是常规的变量,只不过常量的值在定义后不能进行修改。

5.1 整数常量

  • 整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。

  • 整数常量也可以带一个后缀,后缀是 UL 的组合,U 表示无符号整数 unsignedL 表示长整数 long int。后缀可以是大写,也可以是小写,U 和 L 的顺序任意。

  • 下面列举几个整数常量的实例:

    212         //合法的
    215u //合法的
    0xFeeL //合法的
    078 //非法的:8 不是八进制的数字
    032UU //非法的:不能重复后缀

5.2 浮点常量

  • 浮点常量由整数部分小数点小数部分指数部分组成。

  • 浮点型常量有多种写法。其基本形式是首先写整数部分(可以带符号),接着写小数部分,然后写 e或者 E,最后再写一个有符号整数

  • eE 被称为阶码标志,eE 后面的有符号整数被称为阶码。阶码代表 10 的阶码次方。\(eg: 1.2E+5\) 等价与\(1.2*10^5\) 。

  • 下面列举几个浮点常量的实例:

    3.14159       // 合法的
    3.14159e+5 // 合法的,等价与 3.14159*10^(5)
    3.14159e5 // 合法的,等价与 3.14159*10^(5),可以省略'+'
    314159E-5 // 合法的,等价与 314159*10^(-5)

    字符串常量

5.3 字符常量

  • 字符常量是括在单引号中,例如,'x'可以存储在 char 类型的简单变量中。

  • 字符常量可以是一个普通的字符(例如 'x')、一个转义序列(例如 '\t'),或一个通用的字符(例如 '\u02C0')。

  • 在 C 中,有一些特定的字符,当它们前面有反斜杠时,它们就具有特殊的含义,被用来表示如换行符(\n)或制表符(\t)等。

  • 下表列出了一些这样的转义序列码:

    转义序列 含义
    \|\
    ' '
    " "
    ? ?
    \a 报警铃声
    \b 退格键
    \f 换页符
    \n 换行符
    \r 回车
    \t 水平制表符
    \v 垂直制表符
    \ooo 一到三位的八进制数
    \xhh 一个或多个数字的十六进制数
  • 下面的实例显示了一些转义序列字符:

    #include <cstdio>
    int main() {
    printf("Hello\tWorld");
    return 0;
    }

5.4 字符串常量

  • 字符串字面值或常量是括在双引号 "" 中的。一个字符串包含类似于字符常量的字符:普通的字符、转义序列和通用的字符。
  • 您可以使用空格做分隔符,把一个很长的字符串常量进行分行。

5.5 定义常量

5.5.1使用 #define 预处理器,也叫宏定义。
  • 定义:#define 常量名 常量表达式
  • 一个标识符被宏定义后,该标识符便是一个宏名
  • 在程序中出现的是宏名,在该程序被编译前,先将宏名用被定义的字符串替换,这称为宏替换,替换后才进行编译,宏替换是简单的替换。
  • define命令定义带参数的宏定义。其定义的一般形式为:#define 宏名(参数表) 常量表达式

  • 注意常量表达式尽量要加括号,不然会得到意外的结果,一般不建议使用复杂的表达式
#define 常量名 常量表达式
eg:
#include <cstdio>
#define LENGTH 10
#define WIDTH 5
#define add(x,y) (x+y)//注意要加括号不然会出现
#define NEWLINE '\n'
int main() {
int area;
area = LENGTH * WIDTH;
printf("value of area : %d\n", area);
printf("%c\n", NEWLINE);
printf("%d\n", 5*add(LENGTH,WIDTH));//如果不加括号会有意外惊喜
return 0;
}
5.5.2 使用 const 关键字。
  • 您可以使用 const 前缀声明指定类型的常量,如下所示:

    const 数据类型 变量名 = 常量表达式;

6. 自动类型转换

  • 一个表达式中出现不同类型间的混合运算,较低类型将自动向较高类型转换。

  • 不同数据类型之间的差别在于数据的表示范围及精度上,一般情况下,数据的表示范围越大精度越高,其类型也越“高级”。

  • 整型类型级别从低到高依次为:

    int -> unsigned int -> long -> unsigned long -> long long -> unsigned long long
  • 浮点型级别从低到高依次为:

    float -> double
  • 操作数中没有浮点型数据时:

    • 当 char、unsigned char、short 或 unsigned short 出现在表达式中参与运算时,一般将其自动转换为 int 类型
    • 特殊情况下 unsigned short 也可能转换成 unsigned int(如 Turbo C2.0 中,short 和 int 所占字节数相同,unsigned short 的正数表示范围比 int 大,故将其转换为 unsigned int)。
  • 橾作数中有浮点型数据时:

    • 当操作数中含有浮点型数据(float 或 double)时,所有操作数都将转换为 double 型。

      3+5.3f+1.7 //算术表达式中操作数 1.7 为双精度浮点数,故先把 3 和单精度浮点数 5.3 自动提升为双精度浮点数后,参与运算。运算结果为双精度浮点数 10.0。
  • 赋值运算符两恻的类型不一致时:

    • 当赋值运算符的右值(可能为常量、变量或表达式)类型与左值类型不一致时,将右值类型可能提升或降低为左值类型

    • 右值超出左值类型范围时:将把该右值截断后,赋给左值。

      double d=5.1f;//右值单精度浮点型常量 5.1 提升为双精度浮点型后,再赋值给 d
      int i=5.1; //右值双精度浮点型 5.1 降低为左值整型,即 5.1 舍弃小数部分后,把 5 赋给整型变量 i,这种情况会丢失精度
      char c; //char 占8位,表示范围-127〜128
      c=1025; //1025 对应二进制形式:100 0000 0001,超出了8位,所以c为1
  • 当 return 后的表达式类型与函数的返回值类型不一致时,也会自动把 return 后表达式的值转换为函数类型后,再返回。

  • 当函数调用时,所传实参与形参类型不一致时,也会把实参自动转换为形参类型后再赋值。

7. 强制类型转换

  • 虽然自动类型转换不需要人工干预,使用方便,但有利也有弊,尤其当自动类型转换是从较高类型转换为较低类型时,将会降低精度或截断数据,可能得不到预期的结果。

  • 其一般形式为: (类型说明符) (表达式)

  • 表达式如果只有一个变量可以省略小括号

    #include <cstdio>
    int main() {
    int sum = 17, count = 5;
    double mean,ans;
    mean = (double) sum / count;//把变量sum强制转换成实数
    ans = (double) (sum + count)/2;//先计算sum+count的值,然后把int型结果抓成double
    printf("Value of mean : %f\n", mean );
    }
  • 类型转换只是临时性的,无论是自动类型转换还是强制类型转换,都只是为了本次运算而进行的临时性转换,转换的结果也会保存到临时的内存空间,不会改变数据本来的类型或者值

8. 常用的算术转换

常用的算术转换是隐式地把值强制转换为相同的类型。如果操作数类型不同,则它们会被转换为下列层次中出现的最高层次的类型

一、c++语言基础的更多相关文章

  1. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...

  2. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...

  3. C#语言基础

    第一部分 了解C# C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.NET的应用而开发的.体现了当今最新的程序设计技术的功能和精华..NET框架为C#提供了 ...

  4. C语言基础回顾

    第一章 C语言基础 1.  C语言编译过程 预处理:宏替换.条件编译.头文件包含.特殊符号 编译.优化:翻译并优化成等价的中间代码表示或汇编代码 汇编:生成目标文件,及与源程序等效的目标的机器语言代码 ...

  5. 黑马程序员_ C语言基础(二)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 概览 今天基础知识分为以下几点内容(注意:循环.条件语句在此不再赘述):   1.Hello W ...

  6. C#语言基础— 输入与输出

    C#语言基础— 输入与输出 1.1函数的四要素:名称.输入.输出.加工 1.2主函数:输出语句.输入语句: Static viod Main(string[] stgs)//下划线部分可以自己指定 { ...

  7. 【GoLang】GO语言系列--002.GO语言基础

    002.GO语言基础 1 参考资料 1.1 http://www.cnblogs.com/vimsk/archive/2012/11/03/2736179.html 1.2 https://githu ...

  8. R语言基础:数组&列表&向量&矩阵&因子&数据框

    R语言基础:数组和列表 数组(array) 一维数据是向量,二维数据是矩阵,数组是向量和矩阵的直接推广,是由三维或三维以上的数据构成的. 数组函数是array(),语法是:array(dadta, d ...

  9. OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  10. Java学习总结(二)----Java语言基础

    1.     Java语言基础 2.1 关键字 定义:被java语言赋予特殊含义的单词 特点:关键字中的字母都为小写 用于定义数据类型的关键字 class,interface,byte,short,i ...

随机推荐

  1. Orleans[NET Core 3.1] 学习笔记(四)( 2 )获取Grain的方式

    简介 在这一节,我们将介绍如何在Silo和Client中获取Grain及调用Grain Grain获取方式 从Grain内部获取: //根据特定的Key值创建或获取指定的Grain IStudent ...

  2. ES6中map数据结构

    key值可以任意值或对象,value值可以是任意值或对象 let json={ name:'eternity', skill:'java' }; let map=new Map(); map.set( ...

  3. LINUX下EFIBOOTMGR的使用,删除UEFI主板多余启动项和添加启动项

    用uefi装了几次次archlinux,搞的uefi启动选项下多出来好多启动项..这东西重格硬盘也是不好用的.发现以下方法可以解决. efibootmgr   //显示efi的启动项 删除一个引导项 ...

  4. java的jdbc连接数据库,读取表中数据

    连接数据库操作步骤如下 架包 jar 建表 源码解析 1:架包 jar根据自己本版本选择正确jar包,本例采用maven 管理局,在pom.xml 中添加如下代码,自动下载架包 <depende ...

  5. 极其实用的JS单行代码

    个人博客 地址:https://www.wenhaofan.com/a/20190629211647 1.强制布尔值 要将变量强制转换为布尔值而不更改其值: const myBoolean = !!  ...

  6. Fabric智能合约(base)

    这里的智能合约仅包含Init函数和Invoke函数. 为什么一定是这两个方法? 因为在源码中的智能合约模块有这样的接口,如果要完成智能合约的相关编程,就需要实现源码中定义的接口,接口中定义了这两个方法 ...

  7. 轻量级RPC设计与实现第五版(最终版)

    在最近一段时间里,通过搜集有关资料加上自己的理解,设计了一款轻量级RPC,起了一个名字lightWeightRPC.它拥有一个RPC常见的基本功能.主要功能和特点如下: 利用Spring实现依赖注入与 ...

  8. Python_基础数据类型

    一,首先介绍一下变量 1. 变量是什么 在Python中,变量的概念基本上和初中代数的方程变量是一致的. 2. 变量命名规则 由数字.字母.下划线组成 不能以数字开头 要具有描述性 要区分大小写 禁止 ...

  9. Python之pptx实现添加内容与删除(移动)页操作

    问题背景 大量表格数据需要生成指定格式的ppt文件,内容以文字和表格为主,首尾页与内容有固定格式.博主不熟悉VBA操作,希望通过模板用Python完成自动化. 基本思路 使用xlrd模块读取xlsx文 ...

  10. ng-指令

    在 Angular 中最常用的指令分为两种,它们分别是 属性型指令 和 结构型指令. NgClass 作用:添加或移除一组 CSS 类 NgStyle 作用:添加或移除一组 CSS 样式 NgMode ...