其他分享
首页 > 其他分享> > 2019-9-6基本数据类型以及声明、输入输出

2019-9-6基本数据类型以及声明、输入输出

作者:互联网

主要包括整数类型、浮点数类型以及复数类型介绍。

1.输出和输入函数

C语言使用输入(键盘)和输出功能(监视器),需要标准输入/输出头文件(stdio.h)的支持。
#include <stdio.h>
这是一条预处理器指令,它会将stdio.h文件里面拷贝到代码中。

C语言并没有内置输入输出,而是采取头文件这样可取的方式,是因为在许多应用环境里,如单片机、嵌入式系统等,并没有输出和输入模块(往往通过外设实现)。

C语言是由函数为基本模块构成的,第一个被调用的函数是 main() 函数,而且总是这个函数开始(例外当然有,VS 里面通过项目->属性->配置属性->连接器->高级->入口点,可以改为你想做入口点的函数名。更多具体参考。)

C语言总是从main()函数开始的吗?

main()函数声明样式有多种,推荐使用

int main(void)

诸如:

main()  //c90 标准勉强接受

void main()  //编译器也许接受,也许不接受

与其写一些调皮式代码,不如坚持标准,这样就能避免无谓麻烦。

C语言有两种注释风格,一种是单行注释,另一种是多行注释。

//这是单行注释

/*
这是多行注释
*/

/*
x=5;
/*多行注释要注意匹配问题(上面一行也被注释掉了)
*/

C语言的函数开始和结束是用花括号{ }标识的,(暂未见过其他方式)。

printf()函数

printf("I am a simple \n");

括号内为实际参数,\n为转义序列,用于表达一些难以输入的字符。

putchar()函数

putchar('a');//会输出字符a。

getchar()函数

char c;
c=getchar();//会获取一次键盘按键值,并返回赋值给变量c。

scanf()函数

int num;
scanf("%d",&num);//获取键盘按键,并输入到变量num
2.标识符

C语言所有的变量必须声明才能使用,声明可以放在函数体内的任意位置(一定要在使用前)、(老规则要求全在顶部)。变量具有作用域,即根据声明的位置,在一定的范围内起作用(日后再说)。

变量的命名虽是随意的,但是最好具有一定的意义。使用的字符是有限制的,最好不超过63个字符。(超过这数目会发生什么?可能编译器会忽略多的字符,但具体情况是未知。)

可以使用的字符:字母、数字、下划线_
且名称的第一个字符必须是字符或者下划线,不能是数字。

下划线开始的字符大多是内部标识符,尽量避免使用下划线开头的字符。

关键字

版本关键字
c90auto,break,case,char,continue,default,do,double,else,extern,float,for,goto
c90if,inline,int,long,register,restrict,return,short,sizeof,static,struct,switch
c90typedef,union,unsigned,void,while
c99const,enum,signed,volatile
c11_Alignas,_Alignof,_Atomic,_Bool,_Complex,_Generic
c11_Imaginary,_Noreturn,_Static_assert,_Thread_local

这些关键字不能用于标识符。除此之外,还有保留标识符,如输入、输出函数名等。

3.变量和常量

常量在整个程序的运行期间不会发生改变的值。

int a=100;//100是常量,a是变量,在运行期间可能发生改变。
char c='c';//与上面相同

这些常量和变量都有对应的数据类型:

基本数据类型关键字
整数int,char,short( int),long (int),long long (int),unsigned (int)…signed(int)…
浮点数float,double,long double
复数float_Complex,double_Complex,long double_Complex
虚数float_Imaginary,double_Imaginary,long double_Imaginary
布尔类型true,false

(复数或许需要头文件complex.h的支持)

计算机中最小的储存单元是位,一字节有8位,每位只能储存0或1,每种数据类型都有对应大小,并且在不同的计算机也不同。

整数和浮点数的储存方式不相同。整数7储存位0…00000111,即4+2+1=7。浮点数3.14159储存为(符号)+(0.314159)+(指数)。可以明显看出,浮点数需要考虑精度方面的问题(中间储存有效数字的位数有限)。

声明int变量很简单:

int ern;			//不初始化
int hogs,cows,goats;		//一次声明多个变量
int books=15;			//初始化赋值
int pens=100,pages=15;		//声明多个变量并赋初始值
int x,y=10;			//x没有赋值,y赋值10.

C语言把不含小数点和指数的整数视为整数,且大多数为int类型,除非是很大的整数。

int类型对应的格式符为%d

int类型的常量也可用八进制或十六进制表示,需要加前缀0、0x、0X,第一个是八进制,后面两个是十六进制。
对应的输出格式符:

%o显示八进制,%#o显示前缀

%x显示十六进制,%#x、%#X显示前缀

C语言规定short类型不能大于int类型long 类型不能小于int 类型

选取整数类型应根据实际情况确定,如计算机字长、运行速度、应用对象等

在整数类型常量后面加上后缀l/L,ll/LL,ul/ull…
l,L表示long,u/U表示unsigned。
可以把整数类型常量储存为对应的类型(编译器也能自动识别)。

如果整数类型超出储存的最大长度,就会发生溢出现象。

一般来说会从起点继续,如循环一般(有符号和无符号最小值不同)。但具体情况却可能不同,因为这是无法预知的。

输出格式符

%h 显示short类型

%u 显示unsigned类型

%l 显示long类型

%o显示八进制

%x显示十六进制

注意:上面的修饰可以相互搭配,由具体情况决定。但这些后缀都是小写的,这与常量后缀不同。

使用错误的转换符会发生什么?也许能输出正确的值,也许不能,不过最大的可能是出现一些莫名其妙的值(也许你可以发现其中的奥妙)。

char 类型也可算成是整数类型,不过只有一字节,即取值-127-127。不过ASCII值在0-127之间,储存它绰绰有余。但是对于汉字字符是远远不够的,一个汉字字符通常是两个char类型的大小。

char类型的声明和int类型一样。

char grade='a';//'a'是字符常量,其值为a在字符中相应的代码值
		//'a'的值不一定是ASCII中a对应的值,但大多数情况是的。

字符常量是以int类型存储的,不过只有低八位是有效的(char 类型只会取后八位值,但是其他类型呢?会取全部值还是部分值?这也许要考虑到实际情况。)

char grade = 'ABCD';//grade值为'D'.

转义序列

表示含义
\a警报(ANSI C)
\b退格
\f换页
\n换行
\r回车
\t水平制表符
\v垂直制表符
\反斜杠\
\ ’单引号
\ ‘’双引号
?问号
\0oo八进制
\xhh十六进制

\a 警报,取决于计算机的硬件。

换页符 把活跃位置移到当前行的开始处。

水平制表符、垂直制表符在显示屏幕上不一定起作用。

可以用八进制和十六进制表示ASCII码,格式如上表所示。

注意:字符串中的转义序列无需用单引号括起来

char c ='a';
printf("%d,%c",c,c);//前面输出数值,后面输出字符。

可移植类型 头文件stdint.h 和 inttypes.h(C99)

精准宽度整数类型
精准宽度控制的类型

类型名printf()说明符/scanf()说明符
int8_tPRId8/SCNd8
int16_tPRId16/SCNd16
int32_tPRId32/SCNd32
int64_tPRId64/SCNd64
uint8_tPRIu8/SCNu8
uint16_tPRIu16/SCNu16
uint32_tPRIu32/SCNu16
uint64_tPRIu64/SCNu64

最小宽度类型
保证了一种类型的大小至少是某位。

类型名printf()说明符/scanf()说明符
int_least8_tPRILEASTd8/SCNLEASTd8
int_least16_tPRILEASTd16/SCNLEASTd16
int_least32_tPRILEASTd32/SCNLEASTd32
int_least64_tPRILEASTd64/SCNLEASTd64
uint_least8_tPRILEASTu8/SCNLEASTu8
uint_least16_tPRILEASTu16/SCNLEASTu16
uint_least32_tPRILEASTu32/SCNLEASTu32
uint_least64_tPRILEASTu64/SCNLEASTu64

最快最小宽度类型

类型名printf()说明符/scanf()说明符
int_fast8_tPRIFASTd8 /SCNFASTd8
int_fast16_tPRIFASTd16/SCNFASTd16
int_fast32_tPRIFASTd32/SCNFASTd32
int_fast64_tPRIFASTd64/SCNFASTd64
uint_fast8_tPRIFASTu8/SCNFASTu8
uint_fast16_tPRIFASTu16/SCNFASTu16
uint_fast32_tPRIFASTu32/SCNFASTu32
uint_fast64_tPRIFASTu64/SCNFASTu64

最大宽度类型

类型名printf()说明符/scanf()说明符
intmax_tPRIdMAX/SCNdMAX
uintmax_tPRIuMAX/SCBuMAX

可储存指针类型的

类型名printf()说明符/scanf()说明符
intptr_tPRIdPTR/SCNdPTR
uintptr_tPRIuPTR/SCBuPTR

扩展整数常量
未完待续

标签:字符,int,输入输出,数据类型,long,char,说明符,2019,类型
来源: https://blog.csdn.net/Once_day/article/details/108432189