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,这相当于是一个不确定性的异常,因为无法确定用户从键盘输入了什么东西,有可能是个汉字
解决办法:在代码第一行加上

#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

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值