2.数据的类型,数据的输入和输出

2.1数据类型——常量——变量

1.数据类型

裁缝做衣服时需要用到不同类型的布料:纯棉,化纤等

数据类型分布如下:

C语言中有许多关键字,避免命名的变量与关键字重名。(Clion开发环境重名后会自动提醒大家的,下表列出了许多关键字)

2.常量

常量是指在程序运行过程中,其值不发生变化的量。常量可分为整形,实型(也称浮点型),字符型和字符串型。

3.变量

 

变量代表内存中具有特定属性的一个存储单元,它用来存放数据,即变量的值。这些值在程序的执行过程中时可以改变的。

变量名实际上以一个名字代表一个对应的存储单元地址。编译,链接秩序由编译系统为每个变量名分配对应的内存地址空间。

从变量中取值实际上就是通过变量名找到内存中存储的地址,并从该存储单元中读取数据。

C语言变量的命名规则:字符,数字和下划线三种字符组成,并且第一个字符必须为字母或下划线。

整型数据

符号常量:

以pi为例

 

 将pi直接替换,因为符号常量不可以赋值。

 printf("i size=%d\n",sizezeof(i));  #sizeof可以用来计算某个常量或变量的大小。

 浮点型常量字母e(E)之前必须为数字,且e后面的指数必须为整数。

通过指数形式映射小数形式的意义可以容易理解。

字符型数据

字符型常量

用单括号括起来的一个字符是字符型乘凉,且只能包含一个字符。

字符数据在内存中的存储形式及其使用方法

char字符占用一个字节。

 对于字符型变量,无论是赋ASCII码值还是赋字符,适应%c打印输出得到的都是字符,使用%d打印输出时得到的都是ASCII码值。将小写字母转换成大写字母是,发现小写字符大写字母差值为32。

字符串型常量

 

字符串常量是所有字符的字节+1。

2.2混合运算——printf

1.类型强制转换场景

整型数据进行除法运算时,如果运算结果为小数,那么存储浮点数一定要进行强制类型转换。

当左右操作数都为整型变量时,那么进行的就是整型运算。

所以商为2,赋给f。

这里需要进行强制类型转换,k= (float)i/2;

(float)i 不能称之为变量,只能称之为强制类型转换后的表达式。 

float i=1/3 得到的是0。 

2.printf 函数介绍

printf函数可以输出各种类型的数据,包括整型,浮点型,字符型,字符串型,实际原理是printf函数将这些类型的数据格式化为字符串后,放入标准输出缓冲环区,然后将结果显示到屏幕上。

前面必须加上#include<stdio.h>

%s 

%s 字符串常量

 执行结果如下图所示,看可以看到整数10在不加负号时右对齐,加负号时靠左对齐,%10s代表字符串共占用10个字符的位置,因为printf函数默认靠右对齐,所以“以”hello“字符串相对于左边的起始位置有5个空格的距离,掌握这些内容后,在做OJ作业是,就会很容易的打印格式的控制。

2.3整型常量的不同进制表示

计算机只能存储二进制数,即0和1,而在对应的物理硬件上则是高低电平,为了更加方便的观察内存中的二进制情况。除我们正常使用的十进制外,计算机还提供了十六进制数和八进制数。

首先在计算机中,一字节为8位,1位即二进制的1位,他存储0或1,int型常量的大小位4字节,即32位。

ep:

0101 0101 所以就是八位(bit)也就是一个字节(byte)。

1K=1024个字节

1MB=1024KB

1GB=1024MB

十六进制:0-9及a-f

 那么十进制如何转换为二进制(短除法)

 

 

 反向去除

 十进制转换为16进制

 对应的是  7b

为什么二进制把每四位写到一起:因为每四位表示十六进制的一个数。

格式化输出:

%d 十进制

%0/O 八进制

%x   十六进制

 OCT八进制

HEX 十六进制

decimal 十进制

如果我们执行语句 int i=123,变量i会在内存上分配空间,大小位四个字节

我们会看到i的值以十六进制方式查看内存为7b,其十进制的值为123.

即0x0000 007b,为什么显示结果为7b 00 00 00呢,原因是英特尔的CPU采用了小端方式进行数据存储,因此低位在前,高位在后。

 索引i的地址:&i。

电脑计算器的打开:

win+R  输入calc

选择成程序员的选项。

可以验证是否转录正确。

2.4scanf读取标准输入

常用的数据输入和输出函数

如下图所示,程序员可以给程序输入数据,程序处理后会返回一个输出。

C语言可以通过函数读取标准输入,然后通过函数处理结果打印到屏幕上。

前面我们学习了printf函数,下面详细讲解scanf输入函数。

1. scanf函数的原理

C语言未提供输入/输出关键字,其输入和输出是通过标准函数库来实现的,scanf函数读取键盘输入,键盘输入又被称为标准输入。当scanf函数读取标准输入时 ,如果还没有输入任何内容,那么scanf会被卡住。

执行时输入20,然后回车,显示结果如下。

 

 

 为什么第二个scanf函数不会被阻塞呢?其实因为第二个scanf函数读取了缓冲区‘\n',即scanf(“%c,&c)实现了读取,打印其实输出了换行,所以不会阻塞。

但是如果将上面的例子注释的fflush(stdin)打开,就会发现第二个scanf会阻塞。

下面我们介绍缓冲区原理:

我们将输入的字符先放到缓冲区,等按下回车键换行时才进行实际的I/O操作,典型代表时标准输入缓冲区(stdin)和标准输出缓冲区(stdout),printf使用的是stdout.

 只有字符型

scanf("%c",&c)读取了还在缓冲区中残留的'\n'。

2.多种数据类型类型混合输入

当我们让scanf函数一次读取多种类型的数据时,对于字符型数据要格外小心,因为一行数据中存在字符型数据读取时,读取的字符不会忽略空格和‘\n'(回车符)

使用方法如下:

也就是在%d和%c之间添加一个空格

%5.2f        //当数字位数大于它时,按实际位数输出,位数不足就会在后面补上0,注意小数点也算一位数长。

 

 

 在%c前面没有加空格,字符型数据读取了空格,导致了错误。

2.5OJ网站的使用

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值