C语⾔学习第003课——整形、字符型、浮点型、字符串、输⼊输出⽅法与格
式、类型转换
定义⼀个整型变量
signed int a =10定义⼀个有符号正整数(signed⼀般可以省略)
unsigned int a =10定义⼀个⽆符号整数(这个时候10前⾯不能加符号)
int a =0123定义⼋进制数据以0开头
int a =0x123定义⼗六进制数据以0x开头
在计算机定义数据时,不可以直接定义⼆进制
整形变量输出使⽤的占位符
%d 有符号的⼗进制int类型占位符
%hd 短整型short占位符
%ld 长整型long占位符
%lld 长长整型long long占位符
%o(字母)输出⼋进制的int类型
%x ⼗六进制的int类型占位符,字母以⼩写输出
%X ⼗六进制的int类型占位符,字母以⼤写输出
%u ⼗进制的⽆符号数占位符
%hu ⽆符号短整型占位符
%lu ⽆符号长整型占位符
%llu ⽆符号长长整型占位符
整型输⼊和输出
需求:键盘输⼊⼀个整型数字,存放到⼀个整型变量中,再将该整型变量打印出来
#include<stdio.h>
int main(){
int a;
scanf("%d",&a);
printf("%d\n",a);
}
解析:
int a;定义⼀个整形变量a
scanf("%d",&a); scanf函数表⽰通过键盘输⼊赋值,
%d是占位符,表⽰输⼊的数据将会是⼀个整形数据
&a &表⽰取地址&a表⽰取出a变量对应的内存地址
整⾏代码表⽰将键盘输⼊的数据存放在变量对应的内存地址中
printf("%d\n",a);打印常⽤句式
注意:整形数据在内存中存放格式为两部分,⼀部分是符号部分,⼀部分是数值部分
使⽤scanf函数,可能会有编译报错4996,这相当于是⼀个不确定性的异常,因为⽆法确定⽤户从键盘输⼊了什么东西,有可能是个汉字解决办法:在代码第⼀⾏加上浮点型变量float
#define _CRT_SECURE_NO_WARNINGA
或者加⼀个宏定义
#pragma warning(disable:4996)
整型⼤⼩
short短整型2字节
int整形4字节
long长整型 windows为4字节,Linux为4字节(32位)8字节(64位)
long long长长整型8字节
注意:
整形数据在内存中占⽤的字节数与选择的操作系统有关,虽然C语⾔没有明确规定整形数据的长度,但long类型整数的长度不能短于int 类型,short类型整数的长度不能长于int类型
当⼀个⼩的数据类型赋值给⼤的数据类型,不会出错,因为编译器会⾃动转化,但当⼀个⼤的类型赋值给⼀个⼩的数据类型,有可能会丢失⾼位。
sizeof 计算数据类型在内存中占⽤的字节(BYTE)⼤⼩,他不是⼀个函数,不需要导⼊任何头⽂件,
⽤法:sizeof(数据类型)
sizeof(变量名)
sizeof变量名
字符型
定义:
char ch ='a';
字符型也叫char类型,定义时,需要⽤单引号把字符括起来
打印 %c 占位符
⼤⼩ 1个字节
char变量实际上并不是把该字符本⾝放到内存单元中去,⽽是将该字符对应的ASCII编码放到变量的存储单元中,char的本质就是⼀个字节⼤⼩的整型
ASCII表⼏个特殊需要记住的:‘0’ = 48 ‘A’ = 65 ‘a’ = 97
实型(浮点型)
float
定义:
float a =3.14f;
⼤⼩:4字节
double
定义:
double b =3.14(后边啥也不跟,默认double类型)
⼤⼩:8字节
注意:浮点型数据,存储在内存中的格式分为符号位,指数位,⼩数位
上⾯的两种定义⽅式是传统⽅式的赋值,还有⼀种⽅式是科学法赋值
float c =3.2e3f;//3.2*10的三次⽅也就是3.2*1000
float d =100e-3f;//100*10的-3次⽅ 100*0.001 = 0.1
%e 占位符以科学计数法打印当前⼩数
float a =3210.456;
printf("%e",a);//3.210456e03
字符串常量
字符串是内存中⼀段连续的char空间,以’\0’(数字0)结尾
字符串常量是由双引号括起来的字符序列,如“china”
字符串常量与字符常量的不同 :
'a'为字符常量在内存中存储为 ‘a’
“a” 为字符串常量在内存中存储为'a''\0'
每个字符串的结尾,编译器会⾃动的添加⼀个结束标志位’\0’,即"a"包含两个字符’a’和’\0’
举例:
char* b ="hello world!";
printf("%s\n",b);输出 hello world!
char* b ="hello\0 world!";
printf("%s\0",b);输出 hello
%s 是占位符,表⽰输出⼀个字符串,遇到\0停⽌输出
扩展:
char b[11]="hello world";
字符串加上\0总共长度是12,但是定义b的时候长度只有11,这样字符串最后⾯的\0就会被舍弃,这种情况打印b 会出现hello world之后全是乱码,每次都不⼀样
字符的输⼊与输出
printf()输出⼀个字符串
putchar()输出⼀个char,参数可以是变量,字符,数字(ASCII范围内)转义字符
getchar() 接收⼀个char,输⼊很多字符的话,只接收最后⼀个
格式化输⼊与输出
int a =10;
printf("===%d===\n",a);========>===10===正常输出
printf("===%5d===\n",a);========>===10===%5d 表⽰该⼗进制数最⼩宽度为5,并且默认右对齐
printf("===%-5d===\n",a);========>===10===%-5d 表⽰该⼗进制数最⼩宽度为5,并且左对齐
printf("===%05d===\n",a);========>===00010===%05d 表⽰该⼗进制数最⼩宽度为5,并且前⾯补零
int a =123456;
printf("===%5d===\n",a);========>===123456===假如该数有6位,但是最⼩宽度为5,输出按数字来,⽽不是按占位符来
float b =3.14f;
printf("===%f===\n",b);========>===3.14===正常输出
printf("===%7.2f===",b);========>=== 3.14===7表⽰整个浮点数的最⼩宽度,.2表⽰⼩数点后保留两位
printf("===%-7.2f===",b);========>===3.14===左对齐
printf("===%07.2f===",b);========>===0003.14===位数不够,前⾯补零
类型转换
有两种⽅式:
⾃动转换(隐式转换):遵循⼀定的规则,由编译系统⾃动完成。
double d =3.14f;
强制类型转换:把表达式的运算结果强制转换成所需要的数据类型,不会四舍五⼊
类型转换的原则:占⽤内存字节数少的类型,向占⽤内存字节数多的类型转换,以保证精度不降低:
char,short -> signed int -> unsigned int -> long -> double <- float
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论