C程序:基本数据类型

程序框架

#include <stdio.h>

int main()

{

​ return 0

}

学函数前,所有代码都在这个框架中间

#include<stdio.h>和头文件

  • #include:这行代码是一条C预处理器指令。通常,C编译器在编译前会对源代码做一些准备工作,即预处理。#include中的#符号表明,C预处理器在编译器接手之前处理这条指令。

  • <stdio.h>: 所有的C编译器软件包都提供stdio.h文件。该文件中包含了供编译器使用的输入和输出函数。#include <stdio.h>的作用相当于把stdio.h文件中的所有内容都输入该行所在的位置。

  • 头文件:在C程序顶部的信息集合被称为头文件,头文件包含了编译器创建最终可执行程序要用到的信

    息。

int main()

  • int:int是一种关键字,在后面会进行介绍。

  • main() :C程序一定从main()函数开始执行,圆括号有什么功能?用于识别main()是一个函数。

花括号

花括号:一般而言,所有的C函数都使用花括号标记函数体的开始和结束。

return

有返回值的C函数要有return语句。该语句以return关键字开始,后面是待返回的值,并以分号结尾。

提高程序可读性

  1. 选择有意义的函数名。
  2. 写注释。在程序中,被/* */两个符号括起来的部分是程序的注释。//符号创建注释,仅限于单行。

​     /* 这是一条C注释。 */     // 这种注释只能写成一行。

  1. 在函数中用空行分隔概念上的多个部分。

  2. 每条语句各占一行。

四则运算

意义C符号
+
-
*
/
取余%
括号()

:取余即两个数相除后取余数

C语言关键字(保留字)

  关键字是C语言的词汇。它们对C而言比较特殊,不能用它们作为标识符(如,变量名)。C语言关键字不用记,随着C语言学习,这些关键字会慢慢熟悉。即使不小心写错,编译器也会报错,所以不用刻意背诵。

变量

 有些数据类型在程序使用之前已经预先设定好了,在整个程序的运行过程中没有变化,这些称为常量。其他数据类型在程序运行期间可能会改变或被赋值,这些称为变量。

定义变量

  定义变量的一般形式:<类型名称><变量名称>

image-20221020110211310

   如图,int price = 0 这一行就定义了变量。变量类型时int,名字是price。

变量的名字

  变量的名字时一种“标识符”,用来识别定义的变量的不同。标识符只能由字母,数字和下划线组成,数字不能出现在第一个位置,C语言的关键字不可以用作标识符。

作用

  变量是用来放数据的地方,当我们需要在程序里保存数据时,就比如上图的价格,就需要一个变量来保存它。

赋值

   price=0是一个式子,这里的“=”是一个赋值运算符,表示将“=”右边的值赋给左边的变量。

初始化

  初始化变量就是为变量赋一个初始值。在C语言中,初始化可以直接在声明中完成。只需在变量名后面加上赋值运算符(=)和待赋给变量的值即可。

位、字节和字

    位、字节和字是描述计算机数据单元或存储单元的术语。这里主要指存储单元。

  • :最小的存储单元是位,虽然1位储存的信息有限,但是计算机中位的数量十分庞大。位是计算机内存的基本构建块。

  • 字节:是常用的计算机存储单位。对于几乎所有的机器,1字节均为8位。

  • :设计计算机时给定的自然存储单位。计算机的字长越大,其数据转移越快,允许的内存访问也更多。

浮点数和整数

整数

在C语言中,整数是没有小数部分的数。即使是2.0也不是整数

浮点数

浮点数与数学中实数的概念差不多。在一个值后面加上一个小数点,该值就成为一个浮点值。计算机把浮点数分成小数部分和指数部分来表示,而且分开储存这两部分。

两者区别

  • 整数没有小数部分,浮点数有小数部分。
  • 浮点数可以表示的范围比整数大。
  • 浮点数损失的精度更多。浮点数通常只是实际值的近似值。例如,7.0可能被储存为浮点值6.99999。

C语言基本数据类型

int类型

  int类型是有符号整型,即int类型的值必须是整数,可以是正整数、负整数或零。

打印字符

  %d指明了在一行中打印整数的位置。%d称为转换说明,它指定了printf()应使用什么格式来显示一个值。

修饰基本型

  • short int:(或者简写为short)占用的存储空间可能比int类型少,常用于较小数值的场合以节省空间。与int类似,short是有符号类型。
  • long int或long占用的存储空间可能比int多,适用于较大数值的场合。与int类似,long是有符号类型。
  • long long int或long long占用的储存空间可能比long多,适用于更大数值的场合。该类型至少占64位。与int类似,long long是有符号类型。
  • unsigned int或unsigned只用于非负值的场合。这种类型与有符号类型表示的范围不同。例如,16位unsigned int允许的取值范围是0~65535,而不是-32768~32767。所以无符号整型可以表示更大的数,但是不能表示负数。
  • signed在任何有符号类型前面添加关键字signed,可强调使用有符号类型的意图。

int类型选择

  1. 考虑unsigned类型。这种类型的数常用于计数,因为计数不用负数。而且,unsigned类型可以表示更的正数。
  2. 考虑int取值范围。如果一个数超出了int类型的取值范围,且在long类型的取值范围内时,使用long类型。同理选取short等类型。对于那些long占用的空间比int大的系统,使用long类型会减慢运算速度。如非必要,请不要使用long类型。

整数溢出

  当超出(溢出)其相应类型所能表示的最大值时,程序会发生错误且系统不会通知用户。溢出行为是未定义的行为,C 标准并未定义有符号类型的溢出规则。因此,在编程时必须自己注意这类问题。

char类型

  char类型用于储存字符(如,字母或标点符号),但是从技术层面看,char是整数类型。因为char类型实际上储存的是整数而不是字符。计算机使用数字编码来处理字符,即用特定的整数表示特定的字符。

打印字符

  printf()函数用%c指明待打印的字符。,如果用%d转换说明打印 char类型变量的值,打印的是一个整数。而%c转换说明告诉printf()打印该整数值对应的字符。

字符常量

  字符常量是用单引号括起来的单个普通字符或转义字符,属于编程语言,一般采用ASCII码储存。

  C语言将字符常量视为int类型而非char类型。利用字符常量的这种特性,可以定义一个字符常量’F ATE’,即把4个独立的8位ASCII码储存在一个32位存储单元中。如果把这样的字符常量赋给char类型变量grade,只有最后8位有效。

ASCII码

  ASCII码是数字编码的一种,标准ASCII码的范围是0~127,只需7位二进制数即可表示。通常,char类型被定义为8位的存储单元,因此容纳标准ASCII码绰绰有余。

类型大小

  查询类型大小,例如, printf(“Type int has a size of %zd bytes.\n”, sizeof(int));

  C99为类型大小提供%zd转换说明

Type int has a size of 4 bytes.

Type char has a size of 1 bytes.

Type long has a size of 8 bytes.

Type long long has a size of 8 bytes.

Type double has a size of 8 bytes.

Type long double has a size of 16 bytes.

_Bool类型

  用于表示布尔值,即逻辑值true和false。因为C语言用值1表示true,值0表示false,所以_Bool类型实际上也是一种整数类型。它只占一个储存空间,因为对0和1而言,1位的存储空间足够了。

float、double和long double

浮点计数法储存

  浮点数的表示类似于科学记数法。通常,系统储存一个浮点数要占用32位。其中8位用于表示指数的值和符号,剩下24位用于表示非指数部分(也叫作尾数或有效数)及其符号。

  指数计数法是科学记数法在计算机中的写法,e后面的数字代表10的指数。

image-20221023194240508

float

  C标准规定,float类型必须至少能表示6位有效数字,且取值范围至少是10 -37~10 +37。前一项规定指float类型必须至少精确表示小数点后的6位有效数字。

double

  double类型和float类型的最小取值范围相同,但至少必须能表示10位有效数字。一般情况下,double占64位而不是32位。一些系统将多出的 32 位全部用来表示非指数部分,这不仅增加了有效数字的位数(即提高了精度),而且还减少了舍入误差。

long double

  以满足比double类型更高的精度要求。不过,C只保证long double类型至少与double类型的精度相同。

浮点型常量

  浮点型常量的基本形式是:有符号的数字(包括小数点),后面紧跟e或E,最后是一个有符号数

表示10的指数。

  正号可以省略。可以没有小数点(如,4e6)或指数部分(如,19.28),但是不能同时省略两者。可以省略小数部分(如,3.E16)或整数部分(如,.2),但是不能同时省略两者。注意,不要在浮点型常量中间加空格。

  默认情况下,编译器假定浮点型常量是double类型的精度。在浮点数后面加上f或F后缀可覆盖默认设置,编译器会将浮点型常量看作float类型,如2.3f。

打印浮点值

  printf()函数使用%f转换说明打印十进制记数法的float和double类型浮点数,用%e打印指数记数法的浮点数。如果系统支持十六进制格式的浮点数,可用a和A分别代替e和E。打印long double类型要使用%Lf、%Le或%La转换说明。

浮点值的上溢和下溢

  • 上溢:当计算导致数字过大,超过当前类型能表达的范围时,就会发生上溢。在这种情况下会赋一个表示无穷大的特定值,而且printf()显示该值为inf或infinity。

  • 下溢:float类型的数以指数和尾数部分来储存。存在这样一个数,它的指数部分是最小值,即由全部可用位表示的最小尾数值。该数字是float类型能用全部精度表示的最小数字。现在把它除以 2。通常,这个操作会减小指数部分,但是假设的情况中,指数已经是最小值了。所以计算机只好把尾数部分的位向右移,空出第1 个二进制位,并丢弃最后一个二进制数。以十进制为例,把一个有4位有效数字的数(如,0.1234E-10)除以10,得到的结果是0.0123E-10。虽然得到了结果,但是在计算过程中却损失了原末尾有效位上的数字。这种情况叫作下溢。

NAN(not a number的缩写)

  给函数传递一个值,如果超出这个函数参数限定范围,该函数的行为是未定义的。在这种情况下,该函数将返回NaN值,printf()函数可将其显示为nan、NaN或其他类似的内容。

复数和虚数

  C语言有3种复数类型:float_Complex、double_Complex和long double _Complex。

  类似地, C语言的3种虚数类型是float_Imaginary、double _Imaginary和long double _Imaginary。

打印字符

  单引号只适用于字符、数字和标点符号,浏览ASCII表会发现,有些ASCII字符打印不出来。例如,一些代表行为的字符(如,退格、换行、终端响铃或蜂鸣)。

  C语言提供了以下种方法表示这些字符。

  1. 使用ASCII码。
  2. 使用转义序列

转义序列

  单引号只适用于字符、数字和标点符号,浏览ASCII表会发现,有些ASCII字符打印不出来。这时候需要使用特殊的符号序列表示一些特殊的字符。这些符号序列叫作转义序列。

  把转义序列赋给字符变量时,必须用单引号把转义序列括起来。

  注意,无论是普通字符还是转义序列,只要是双引号括起来的字符集合,就无需用单引号括起来。

image-20221022191921577

活跃位置

  标准中的活跃位置指的是显示设备(屏幕、电传打字机、打印机等)中下一个字符将出现的位置。平时常说的屏幕光标位置就是活跃位置。

转义序列解析

  • 警报(\a):在程序中把警报字符输出在屏幕上的效果是,发出一声蜂鸣,但不会移动屏幕光标。

  • 输出设备控制字符:\b、\f、\n、\r、\t和\v是常用的输出设备控制字符。

    • 退格符(\b)把活跃位置移到前一格;
    • 换页符(\f)把活跃位置移至下一页的开始处;
    • 换行符(\n)把活跃位置移至下一行的开始处;
    • 回车符(\r)把活跃位置移动到当前行的开始处;
    • 水平制表符(\t)将活跃位置移至下一个水平制表点;
    • 垂直制表符(\v)把活跃位置移至下一个垂直制表点。
  • 打印字符:\ \、\ ‘、 \ "用于打印\、’、"字符。

  • 最后两个转义序列(\0oo和\xhh)是ASCII码的特殊表示。

字符**:\b、\f、\n、\r、\t和\v是常用的输出设备控制字符。

  • 退格符(\b)把活跃位置移到前一格;

  • 换页符(\f)把活跃位置移至下一页的开始处;

  • 换行符(\n)把活跃位置移至下一行的开始处;

  • 回车符(\r)把活跃位置移动到当前行的开始处;

  • 水平制表符(\t)将活跃位置移至下一个水平制表点;

  • 垂直制表符(\v)把活跃位置移至下一个垂直制表点。

  • 打印字符:\ \、\ ‘、 \ "用于打印\、’、"字符。

  • 最后两个转义序列(\0oo和\xhh)是ASCII码的特殊表示。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值