C语言基础之数据类型与输入/输出

数据在计算机内部的表示

常用的进位制

R进制数只采用R个基本数字符号,R称为数制的基数,数制中每一固定位置对应的单位值称为,进位原则是逢R进1.

比如二进制,那么基数就是2,数字符号就是0,1

再比如八进制,则基数为8,数字符号为0,1,…,7(共8位).

注意在16进制中,基数为16很自然,但是数字符号应该是0,1,2,…,15,然而以为数只能到9,所以16进制的10用A来表示,11用B来表示,这样子一直下去,到15用F表示.

数值与字符在计算机中的表示

计算机中数值型数据的编码

  • 机器数与真值

通常一个数的最高位为符号位,用0表示正,1表示负,称为数符 

若机器的字长为8位,则$D_7$为符号位,$D_6$到$D_0$为数值位,比如$(11100001)2=(-97){10}$

机器数机器内存放的正负符号数码化的数

比如真值$(-1100001)_2$的机器数是11100001

另外为了运算方便,机器数中的负数有3种表示方法:原码补码反码 

  • 定点数和浮点数

定点数分为定点整数定点小数,利用浮点数可以扩大实数的表示范围,即科学计数法.

计算机中字符型数据的编码

  • ASCII码

  • 汉字编码

字符集和保留字

基本符号集

  • 数字10个

    0,1,2,…,9

  • 大小写字母各26个 

  • 下划线

  • 特殊符号

标识符

  • 用户标识符

即用户自定义的变量名字,要求由字母,数字,下划线组成,且不能以数字开头区分大小写 

  • 保留字

自带的,比如char,int等,总计32个 

  • 预定义标识符

#define#include 之类的,挺有用的 

C语言的数据类型

  • 基本类型

整型(int,short,long)+实型(float,double)+字符型(char)

  • 构造类型

数组类型+结构体类型(struct)+共用体类型(union)+枚举类型(enum)

  • 指针类型

指针类型(*)

  • 空类型

空类型(void)

常量

数值常量

  • 整型常量 

八进制整型常量必须以0开头,数码取0~7,通常是无符号数

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

十进制整型常量无前缀,数码为0~9

  • 实型常量

也就是我们所说的浮点数 

小数形式+指数形式(科学计数法)

字符常量和字符串常量

  • 字符常量

单引号括住,可作为整数常量来处理(指ASCII值),a='a'+1=97+1=98 

还有一些不可显示的字符,如换行,回车等,以反斜杠开头 

注意转移字符的使用,比如'\"'表示双引号,'\\'表示反斜杠

  • 字符串常量

双引号括住,比如”I love China!”

注意转义字符的使用:比如he said he is a "super man"可以表示为"he said he is a \"super man \"",程序如下:

1
2
3
4
5
6
#include "stdio.h"
void main()
{
printf("he said he is a \"super man\"");

}

输出结果:

1
he said he is a "super man"

不同于字符常量的是,字符串常量以'\0'结束,但不显示'\0',从而C语言中字符串的长度不受限制

符号常量

#define PI 3.1415926诸如此类,必须大写

变量

变量3要素:变量名+变量的存储单元+变量(存储单元存放)的值

变量的定义

定义变量3要素:存储类型(auto,static)+数据类型+变量名 

通常我们省略的存储类型,默认是auto,即都会把变量存放在动态存储区(栈区),这种变量在程序运行过程中实时分配和释放.

static定义的变量的存储方式是静态存储的,静态局部变量是放在静态存储区的,在整个程序运行期间都不释放,跟全局变量一样长期占用内存。但是静态局部变量和全局变量还是不一样的,比如说,静态局部变量只能在所定义的函数内引用,静态局部变量在函数调用结束后是仍然存在的,但不能被其他函数引用。静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已经有了初值,以后每次调用函数时不再对其重新复制,而只是保留上次函数调用结束时的值。在定义静态局部变量时,如不赋初值,则编译时自动赋初值为0。有时在程序设计中定义一个全局变量,只限于被所在源文件引用,而不想让其他文件引用,则可在定义全局变量前面加static,即静态全局变量。(此段引用自https://blog.csdn.net/he__yuan/article/details/79477882) 

  • 整型变量

基本型int,占4字节

短整型short int 或者short,占2字节 

长整型long int 或者long,占4字节,与基本型一样 

无符号型unsigned

对于无符号型,由于没有符号位,所以不能表示负数 

  • 实型变量

单精度类型(float,占4字节)和双精度类型(double,占8字节)

- 字符变量

char,占1字节,每个字符只能防放一个字符,由于C语言中没有字符串变量,如果需要把字符串放在变量中,就需要一个字符型数组来实现

比如下面这各个,我将字符串常量“china”赋给a这个变量,由于上述原因,a只能接受一个字符,故产生异常:

1
2
3
4
5
6
7
8
#include "stdio.h"
void main()
{
char a="china";

printf("%d",a);

}

输出:

1
2
3
4
p0.c: In function ‘main’:
p0.c:4:8: warning: initialization makes integer from pointer without a cast [-Wint-conversion]
char a="china";
^~~~~~~

而将”china”这个字符串改为字符’a’,再次运行: 

1
2
3
4
5
6
7
#include "stdio.h"
void main()
{
char a = 'a';

printf("%d", a);
}

就能正常输出’a’的ASCII码的值了,即97.

变量的存储

存储某变量的内存空间的首地址称为变量的地址,变量地址用&变量名来表示,&表示取地址,即取存储空间首地址

注意:虽然地址的值在形式上和整型数一样,也可以用十进制或者十六进制表示,但意义不一样.整型数有算数,关系,逻辑等运算,而地址只有有限的算数运算和关系运算.

还有,地址的值一定是一个整型量.

变量的初始化

直接举个栗子:

1
2
3
int a,b;
a=1;
b=2

等价于

1
int a=1,b=2;

数据的输入和输出

C语言的所有输入和输出操作都是调用标准I/O库函数 

格式输入/输出函数

  • 格式输入函数

printf(格式控制字符串,输出项表)

  • 格式输入函数

scanf(格式控制字符串,输入项地址表)

字符输入/输出函数

  • 字符输出函数

putchar(ch)ch可以使整型变量或者字符型变量.

这将输出字符,比如:

1
2
3
4
5
6
7
8
#include "stdio.h"
void main()
{
char a = 'a';
int b=97;
putchar('\n');
putchar(a);
}

这将输出两个a,各占一行,即

1
2
a
a

提示:97是’a’的ASCII码. 

  • 字符输入函数

getchar(),无参数

举个例子就清楚了:

1
2
3
4
5
6
7
#include "stdio.h"
void main()
{
char a ;
a=getchar();
putchar(a);
}

输入a,程序将输出a

凡希 wechat
喜欢所以热爱,坚持干货分享,欢迎订阅我的微信公众号
呐,请我吃辣条