2019-9-6基本数据类型以及声明、输入输出
作者:互联网
主要包括整数类型、浮点数类型以及复数类型介绍。
1.输出和输入函数
C语言使用输入(键盘)和输出功能(监视器),需要标准输入/输出头文件(stdio.h)的支持。
#include <stdio.h>
这是一条预处理器指令,它会将stdio.h文件里面拷贝到代码中。
C语言并没有内置输入输出,而是采取头文件这样可取的方式,是因为在许多应用环境里,如单片机、嵌入式系统等,并没有输出和输入模块(往往通过外设实现)。
C语言是由函数为基本模块构成的,第一个被调用的函数是 main() 函数,而且总是这个函数开始(例外当然有,VS 里面通过项目->属性->配置属性->连接器->高级->入口点,可以改为你想做入口点的函数名。更多具体参考。)
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个字符。(超过这数目会发生什么?可能编译器会忽略多的字符,但具体情况是未知。)
可以使用的字符:字母、数字、下划线_
且名称的第一个字符必须是字符或者下划线,不能是数字。
下划线开始的字符大多是内部标识符,尽量避免使用下划线开头的字符。
关键字
版本 | 关键字 |
---|---|
c90 | auto,break,case,char,continue,default,do,double,else,extern,float,for,goto |
c90 | if,inline,int,long,register,restrict,return,short,sizeof,static,struct,switch |
c90 | typedef,union,unsigned,void,while |
c99 | const,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_t | PRId8/SCNd8 |
int16_t | PRId16/SCNd16 |
int32_t | PRId32/SCNd32 |
int64_t | PRId64/SCNd64 |
uint8_t | PRIu8/SCNu8 |
uint16_t | PRIu16/SCNu16 |
uint32_t | PRIu32/SCNu16 |
uint64_t | PRIu64/SCNu64 |
最小宽度类型
保证了一种类型的大小至少是某位。
类型名 | printf()说明符/scanf()说明符 |
---|---|
int_least8_t | PRILEASTd8/SCNLEASTd8 |
int_least16_t | PRILEASTd16/SCNLEASTd16 |
int_least32_t | PRILEASTd32/SCNLEASTd32 |
int_least64_t | PRILEASTd64/SCNLEASTd64 |
uint_least8_t | PRILEASTu8/SCNLEASTu8 |
uint_least16_t | PRILEASTu16/SCNLEASTu16 |
uint_least32_t | PRILEASTu32/SCNLEASTu32 |
uint_least64_t | PRILEASTu64/SCNLEASTu64 |
最快最小宽度类型
类型名 | printf()说明符/scanf()说明符 |
---|---|
int_fast8_t | PRIFASTd8 /SCNFASTd8 |
int_fast16_t | PRIFASTd16/SCNFASTd16 |
int_fast32_t | PRIFASTd32/SCNFASTd32 |
int_fast64_t | PRIFASTd64/SCNFASTd64 |
uint_fast8_t | PRIFASTu8/SCNFASTu8 |
uint_fast16_t | PRIFASTu16/SCNFASTu16 |
uint_fast32_t | PRIFASTu32/SCNFASTu32 |
uint_fast64_t | PRIFASTu64/SCNFASTu64 |
最大宽度类型
类型名 | printf()说明符/scanf()说明符 |
---|---|
intmax_t | PRIdMAX/SCNdMAX |
uintmax_t | PRIuMAX/SCBuMAX |
可储存指针类型的
类型名 | printf()说明符/scanf()说明符 |
---|---|
intptr_t | PRIdPTR/SCNdPTR |
uintptr_t | PRIuPTR/SCBuPTR |
扩展整数常量
未完待续
标签:字符,int,输入输出,数据类型,long,char,说明符,2019,类型 来源: https://blog.csdn.net/Once_day/article/details/108432189