【c语言学习概述-基本数据类型】

各大编程语言的主要用途

C/C++C++ 是在C语言的基础上发展起来的,C++ 包含了C语言的所有内容,C语言是C++的一个部分,它们往往混合在一起使用,所以统称为 C/C++。C/C++主要用于PC软件开发、Linux开发、游戏开发、单片机和嵌入式系统。
JavaScriptJavaScript 最初只能用于网站前端开发,而且是前端开发的唯一语言,没有可替代性。近年来由于 Node.js 的流行,JavaScript 在网站后台开发中也占有了一席之地,并且在迅速增长。
JavaJava 是一门通用型的语言,可以用于网站后台开发、Android开发、PC软件开发,近年来又涉足了大数据领域(归功于 Hadoop 框架的流行)。
Go语言Go语言是 2009 年由 Google 发布的一款编程语言,成长非常迅速,在国内外已经有大量的应用。Go 语言主要用于服务器端的编程,对 C/C++、Java 都形成了不小的挑战。
pythonPython 也是一门通用型的语言,主要用于系统运维、网站后台开发、数据分析、人工智能、云计算等领域,近年来势头强劲,增长非常快。
PHPPHP 是一门专用型的语言,主要用来开发网站后台程序。
Objective-C SwiftObjective-C 和 Swift 都只能用于苹果产品的开发,包括 Mac、MacBook、iPhone、iPad、iWatch 等。
汇编语言汇编语言是计算机发展初期的一门语言,它的执行效率非常高,但是开发效率非常低,所以在常见的应用程序开发中不会使用汇编语言,只有在对效率和实时性要求极高的关键模块才会考虑汇编语言,例如操作系统内核、驱动、仪器仪表、工业控制等。

C语言的概述

C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言概念少,词汇少,包含了基本的编程元素,后来的很多语言(C++、Java等)都参考了C语言,说C语言是现代编程语言的开山鼻祖毫不夸张,它改变了编程世界。
C语言是计算机产业的核心语言,也许是机缘巧合,C语言出现后不久,计算机产业开始爆发,计算机硬件越来越小型化,越来越便宜,逐渐进入政府机构,进入普通家庭,C语言成了编程的主力军,获得了前所未有的成功,操作系统、常用软件、硬件驱动、底层组件、核心算法、数据库、小游戏等都使用C语言开发。
软件行业的很多细分学科都是基于C语言的,学习数据结构、算法、操作系统、编译原理等都离不开C语言,所以大学将C语言作为一门公共课程,计算机相关专业的同学都要学习。
C语言被誉为“上帝语言”,它不但奠定了软件产业的基础,还创造了很多其它语言,例如:PHP、Python 等都是用C语言开发出来的,虽然平时做项目的时候看不到C语言的影子,但是如果想深入学习 PHP 和 Python,那就要有C语言基础了。
C++ 和 Objective-C 干脆在C语言的基础上直接进行扩展,增加一些新功能后变成了新的语言,所以学习 C++ 和 Objective-C 之前也要先学习C语言。


c语言大纲

  1. 基本概念
  2. 数据类型、运算符和表达式
  3. 输入输出
  4. 流程控制
  5. 数组
  6. 指针
  7. 函数
  8. 构造类型
  9. 动态内存管理
  10. 10.工具使用(gdb,make)调试技巧
  11. 常用库函数

C语言关键字:

auto :声明自动变量
break:跳出当前循环
case:开关语句分支
char :声明字符型变量或函数返回值类型
const :声明只读变量
continue:结束当前循环,开始下一轮循环
default:开关语句中的“默认”分支
do :循环语句的循环体
double :声明双精度浮点型变量或函数返回值类型
else :条件语句否定分支(与 if 连用)
enum :声明枚举类型
extern:声明变量或函数是在其它文件或本文件的其他位置定义
float:声明浮点型变量或函数返回值类型
for:一种循环语句
goto:无条件跳转语句
if:条件语句
int: 声明整型变量或函数
long :声明长整型变量或函数返回值类型
register:声明寄存器变量
return :子程序返回语句(可以带参数,也可不带参数)
short :声明短整型变量或函数
signed:声明有符号类型变量或函数
sizeof:计算数据类型或变量长度(即所占字节数)
static :声明静态变量
struct:声明结构体类型
switch :用于开关语句
typedef:用以给数据类型取别名
unsigned:声明无符号类型变量或函数
union:声明共用体类型
void :声明函数无返回值或无参数,声明无类型指针
volatile:说明变量在程序执行中可被隐含地改变
while :循环语句的循环条件
1999年12月16日,ISO推出了C99标准,该标准新增了5个C语言关键字:
inline restrict _Bool _Complex _Imaginary
2011年12月8日,ISO发布C语言的新标准C11,该标准新增了7个C语言关键字:
_Alignas _Alignof _Atomic _Static_assert _Noreturn _Thread_local _Generic


C语言规范

缩进

每一层代码块需要进行缩进,用tab制表符进行缩进而不是按多个空格

空格

  1. 逗号“,”后面一般加空格
  2. 双目和三目运算符与操作数之间加空格(单目运算符和操作数之间一般不加)
  3. 关键字和自定义标识符之间加空格

换行

  1. 每一条语句结束一般都换行(除了for循环里面的三个表达式)
  2. 在变量定义和功能模块之间空行 函数定义之间加空行
  3. 预处理命令后面一般加空行
  4. 不同的逻辑代码块之间一般加空行

注释

  1. 多行注释 //
  2. 单行注释 //
  3. #if 0 注释部分 endif

标识符命名规则
语法要求:
只能以数字、字母、下划线组成(不是说一个名字里面必须包含着三种元素)
不能以数字开头
不能使用C语言的关键字
习惯建议:
“顾名思义”、多个单词组成中间加下划线、普通变量和函数名全小写字符、宏名一般全大写、组合数据类型名一般首字母大写、不要同名。

c语言使用平台

ubuntu20.04,vim编辑,gcc

c语言的编译过程

c源文件—预处理—编译—汇编—链接—可执行文件
gcc -E 预处理
gcc -S编译
gcc -C汇编
gcc 链接
./filrname执行
一般直接gcc filename -o 目标文件名生成可执行文件
再./filrename执行
另一种make
make 目标文件名 自动生成可执行文件
再./filename
12

我的第一条C语言:

//包含stdio.h头文件
#include <stdio.h>

//函数定义
int function(int a)
{
        return a+10;
}

//任何的C语言程序都以main函数为入口函数
int main(void)
{
        //变量的定义
        int a = 100;
        //调用printf函数
        printf("hello world. a = %d\n", function(a));
        //给函数的调用者返回的数据。0表示正常退出,-1表示异常退出
        return 0;
}

注:当是 int main() 时,main() 的返回值是 int 类型,所以是 return 0; 现在 C 标准里规定 main() 返回值必须为 int,所以必须写成是 int main()。

当是 void main() 时,main() 的返回值是空,所以可以不写或者是 return; 但这是以前的写法了,现在很少用 void main() 了。

基本概念

  1. 必须严格包含头文件
  2. 以函数为单位编写程序
  3. 声明部分+实现部分
  4. return 0;
  5. 合理使用注释和空格、空行

算法:解决问题的方法/步骤(流程图、NS图、有限状机FSM)
程序:用编程语言实现算法
防止写越界,防止内存泄漏,谁打开谁关闭,谁申请谁释放

数据类型,运算符和表达式​​

​​​

数据类型(基本数据类型)​​​​​​

基本类型最主要的特点是,其值不可以在分解为其他类型。也就是说,基本数据类型是自我说明的。
构造类型根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个构造类型的值可以分解成若干个“成员”或者 “元素“。每个成员都是一个基本数据类型或者又是一个构造类型。在C语言中,构造类型有数组类型、结构体类型、联合体类型。
指针类型指针是一种特殊的,同时又是具有重要作用的数据类型。它的值用来表示某个变量在存储器中的地址。虽然指针变量的取值类似于整型量,但这是两个类型不同的量,因此不能相提并论。
空类型-在调用函数的时,通常应向调用者返回一个函数值。这个返回的函数值是具有一定的数据类型的,应在函数定义及函数说明中给以说明,例如在例题中给出的max函数定义中,函数头为: int max(int a,intb );其中” int “ 类型说明这个函数的返回值为整型量。但是,也有一类函数,调用后并不需要向调用者返回函数值,这种函数可以定义为”空类型“。其类型说明符为void。-

在这里插入图片描述

注意,各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主。

以下列出了32位系统与64位系统的存储大小的差别(windows 相同):
在这里插入图片描述
说明:数据类型所占字节数随机器硬件不同而不同。1个字节等于8位
基本数据类型的注意事项:

常量和变量

常量:在程序执行过程中,其值不会发生改变
变量:在程序执行过程中,其值会发生改变
它们可与数据类型结合起来;例如:整型常量,整型变量,浮点常量,浮点变量,字符常量,字符变量,枚举常量,枚举变量等。

常量和符号常量

符号常量:

即 用标识符代表一个常量。

在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。

   符号常量在使用之前必须先定义,其一般形式为:

    #define 

其中,#define 也是一条预处理命令(预处理指令都以”#”开头),称为宏定义命令,
功能:把这个标识符定义为它后面的常量值,一旦定义后,以后的程序中所有出现该标识符的地方均取代该常量值。
习惯 上,符号常量的标识符用大写字母,变量标识符用小写字母,以此来区别

#include<stdio.h>
#define PRICE  15

int main()
{
	int number,total ;
	number=10;
	total = number*PRICE;
	printf("总价为:%d",total);
}

符号变量优点:在作用域内,其值不能改变,不能再赋值;含义清楚,一改全改。

变量

变量:其值可以改变的量
一个变量应该有一个名字,在内存中占据一定的存储单元。变量定义必须放在变量使用之前。
一般放在函数体的开头。要区分变量名和变量值是两个不同的概念。
例如:
int a = 3;
a 变量的名称
3 变量的值
0x0010ff 变量的地址

整型常量

即整常数,在C语言中,使用的整常数有八进制,十六进制和十进制三种。

十进制整常数

十进制整常数没有前缀,其数码为 0 ~9。

例如237,-857,65535, 1787

八进制整常数

八进制整常数必须以0开头,即以0作为八进制数的前缀。数码取值为0-7.八进制数通常是无符号数。

例如:015(十进制为13),0101(十进制为65)

十六进制整常数

十六进制整常数的前缀为0x或者0X,其数码取值为0-9,A-F或a~f。

例如:OX2A(十进制为42), 0XA0(十进制为160), 0XFFFF(十进制为65535)

整型变量

在十六位字长的机器上,基本整型的长度也为16位,因此表示的数的范围也是有限定的,

十进制无符号整型常数的范围为0-65535,有符号数为-32768-+32767。

八进制无符号数的表示范围为0-0177777。

十六进制无符号数的表示范围为0X0~ 0XFFFF或 0x0~0xFFFF。。

整型变量的分类

(这里占多少个字节跟系统和编译器规定有关)

1.基本型: 类型说明符为 int ,在内存中占四个字节

2.短整型: 类型说明符为short int 或者short。所占字节和取值范围均与基本型相同。

3.长整型: 类型说明符为 long int 或者long,在内存中占四个字节。

4.无符号型: 类型说明符为 unsigned。

整型数据的储存

内存中以二进制存储(常识: 一个字节byte = 八位bit )
数值是以补码表示的:

正数的补码和原码相同;
负数的补码:将该数的绝对值的二进制形式按位取反再加1

例如:求- 10 的补码

10的原码                 :    0000 1010

取反                         :    1111  0101

再加1,得-10的补码: 11111 0110(第一位是符号位)

整型变量的定义:

变量定义的一般形式为:

类型说明符 变量名标识符 变量名标识符 ……;

例如:

      int a,b,c; (a,b,c均为整型变量)

      long x,y;    (x,y 为长整型变量)

      unsigned p,q ;   (p,q 为无符号整型变量)

在书写变量定义时,要注意:

1.允许在一个类型说明符后,定义多个相同类型的变量,各变量名之间用“,”隔开,类型说明符和变量名之间至少用一个空格间隔。

2.最后一个变量名之后必须以 “;”结尾。

3.变量定义必须放在变量使用之前。一般放在函数体的开头部分。(注意区分全局变量)

实型数据(浮点型)

在C语言中,实数只采用十进制。它有两种形式:十进制小数形式,指数形式。

1.十进制数形式: 由数码0~9 和小数点组成。

例如:0.0 , 25.0 , 5.789 , 0.13 , 5.0 , 300. ,-264.89均为合法的实数,必须要有小数点

2.指数形式:由十进制数,加阶码标志, “e” 或 “E”以及 阶码(只能为整数,可以带符号)组成

一般形式为:
a E n (a 为十进制数, n为十进制整数)

如:2.1E5 (等于 2.1 *105)     3.7E-2(等于 3.7*10-2)

浮点型数据的存储方式及分类

实型数据一般占4个字节(32位)内存空间。按指数形式存储。

例如:
实数3.14159在内存中的存放形式如下
符号 小数部分 指数部分
+(-) 3.14159 1

小数部分占的位(bit)数愈多,数的有效数字愈多,精度愈高

指数部分占的位数愈多,则能表示的数值范围愈大

实型变量分类

实型变量分为: 单精度(float 型),双精度(double 型),和 长双精度(long double 型) 三类。

在Torbo C 中
单精度型占四个字节(32位)内存空间,其数值范围为 3.4E -38 ~ 3.4E +38只能提供七位有效数字。

双精度型占八个字节(64位)内存空间,其数值范围为 1.7E-3.8 ~1.7E +308,可提供16位有效数据。

实型数据的舍入误差

由于实型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的,

#include<stdio.h>

void main()
{
  float  a,b;
  a = 123456.789e5;
  b=a+20;
  printf("%f\n",a);
  printf("%f\n",b);
}

#include <stdio.h>

#include <stdio.h>

void main()
{
      short int a,b;
      a = 32767;
       b = a+1;
       printf("%d,%d\n",a,b);
}

字符型数据

字符常量

用单引号括起来的一个字符。例如 ‘a’ , ‘b’ , ‘=’ , ‘+’ 都是合法的字符常量

在C语言中,字符常量有以下特点:

1.字符常量只能用单引号括起来,不能用双引号或其他括号

2.字符常量只能是单个字符,不能是字符串

3.字符可以是字符集中任意字符,但数字被定义为字符型之后就不能参与数值运算。

如 ‘5’和 5 是不同的。‘5’ 是字符常量,不能参与运算。

字符变量

字符变量用来存储字符常量,即单个字符。

字符变量的类型说明符是char。字符变量类型定义的格式和书写规则都与整型变量相同。
例如:Char a ,b ;

转义字符

转义字符是一种特殊的字符常量。转移字符以反斜杠 “\”开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称为 “转义”字符。例如,在前面各例题printf 函数的格式中用到的 “\n” 就是一个转义字符,表示的是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。
在这里插入图片描述
每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。
字符值是以ASCII码的形式存放在变量的内存单元之中的。 如x的十进制ASCII码是 120, y的ASCII码是121。对字符变量a,b,赋予’x’和’y’值: a = ‘x’ ; b = 7 ;实际上是在a,b两个单元内存放 120 和55 的二进制代码。
​​ASCII码

字符串常量

是由一对双引号括起的字符序列,例如“CHINA”,”C program”

字符串常量和字符常量是不同的量。他们之间主要有以下区别:

1.字符常量由单引号括起来,字符串常量由双引号括起来。

2.字符常量只能是单个字符,字符串常量则可以含一个或多个字符。

3.可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。
例如: 可以char a = ‘a’ 但是不能 char a = “a” ;

4.字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字节数+1. 增加的一个字节中存放字符 “\0”(ASCII 码为0),这是字符串结束的标志。
例如"a"和’a’

a\0

\0是字符串结束标志

变量赋初值

类型说明符 变量1 = 值1,变量2 = 值 2, ······;例如:

	int b ,c = 5;

    float x = 3.2,y=3f,z = 0.75;

    char chl = ‘K’, ch2 = ‘P’;

不同类型数据混合运算

变量的数据类型是可以转换的。转换的方法有两种,一种是自动转换,一种是强制转换。自动转换发生在不同的数据类型的量混合运算时,由编译系统自动完成。自动转换遵循以下规则。

1.若参与运算量的类型不同,则先转换成同一类型,然后进行运算。

2.转换按数据长度增加的方向进行,以保证精度不降低。如int 型和long 型运算时,先把int 量转成long 型后再进行运算。

3.所有的浮点型运算都是以双精度进行的,即使仅含有float单精度运算的表达式,也要先转换成double型,再作运算。

4.Char型和 short型参与运算时,必须先转换成int 型。

t b ,c

在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。

如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分将四舍五入向前舍入。

类型自动转换的规则:
在这里插入图片描述

强制类型转换

强制类型转换是通过类型转换运算来实现的。

其一般形式为:

(类型说明符) (表达式)

其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。

例如:

(float)a     把 a 强制转换为实型

(int )(x+y)  把x+y的结果转换为整型

在使用强制转换时应注意以下问题:

1.类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int )(x+y)写成 (int)x+y 则表示把x 转换成int 型之后再与 y 相加了。

2.无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。float x = 3.2,y=3f,z = 0.75;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夜晚烟火

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

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

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

打赏作者

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

抵扣说明:

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

余额充值