【无标题】

C语言数据类型和变量

一. 引言

本章主要讲解了数据类型,,变量,占位符,scanf,printf

二. 数据类型

主要分两类:内置类型,自定义类型
在这里插入图片描述
ubsigned int占位符:%u
ubsigned int占位符:%lu
ubsigned int占位符:%llu

sizeof是⼀个关键字,也是操作符,专⻔是⽤来计算sizeof的操作符数的类型⻓度的,单位是字节。
sizeof 操作符的操作数可以是类型,也可是变量或者表达式

sizeof(类型)
sizeof表达式

1.计算结果是size_t型,统一表示返回类型
2.sizeof后面为表达式时,括号可以省略
3.sizeof后面为表达式时,表达式不参与计算,根据表达式的类型得出大小
大小(字节):
char:1
_Bool:1
short:2
int:4
long:4
long long:8
float:4
double:8
long double:8

三.signedunsigned

signed:包含正负值
unsigned:包含零和正整数
int=signed int
unsigned好处是同样长度的内存表示最大整数,大了一倍
unsigned intint可以省略

unsigned a;

char!=signed char

四.变量

变量创建与初始化:

int a;
int a=0;

变量分为:全局变量和局部变量( 变量名相同,局部优先
局部变量放在内存栈区
全局变量放在内存静态区
在这里插入图片描述

五.scanfprintf介绍

printf() 的占位符有许多种类,与 C 语⾔的数据类型相对应。下⾯按照字⺟顺序,列出常⽤的占位
符,⽅便查找,具体含义在后⾯章节介绍。
%a :⼗六进制浮点数,字⺟输出为⼩写。
%A :⼗六进制浮点数,字⺟输出为⼤写。
%c :字符。
%d :⼗进制整数。// int
%e :使⽤科学计数法的浮点数,指数部分的 e 为⼩写。
%E :使⽤科学计数法的浮点数,指数部分的 E 为⼤写。
%i:整数,基本等同于 %d 。
%f :⼩数(包含 float 类型和 double 类型)。//float %f double - %lf
%g :6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的 e
为⼩写。
• %G :等同于 %g ,唯⼀的区别是指数部分的 E 为⼤写。
• %hd :⼗进制 short int 类型。
• %ho :⼋进制 short int 类型。
• %hx :⼗六进制 short int 类型。
• %hu :unsigned short int 类型。
• %ld :⼗进制 long int 类型。
• %lo:⼋进制 long int 类型。
• %lx :⼗六进制 long int 类型。
• %lu :unsigned long int 类型。
• %lld :⼗进制 long long int 类型。
• %llo :⼋进制 long long int 类型。
• %llx :⼗六进制 long long int 类型。
• %llu :unsigned long long int 类型。
• %Le :科学计数法表⽰的 long double 类型浮点数。
• %Lf :long double 类型浮点数。
%n :已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。
%o :⼋进制整数。
%p :指针(⽤来打印地址)。
%s :字符串。
%u :⽆符号整数(unsigned int)。
%x :⼗六进制整数。
%zd : size_t 类型。
%% :输出⼀个百分号。

占位符宽度设置:%md不满m位自动加空格
左对齐在%后面加-,默认右对齐。
对于⼩数,这个限定符会限制所有数字的最⼩显⽰宽度

#include <stdio.h>
int mian()
{
	printf("%12f\n",123.45);
	return 0;
}

对于上述代码,浮点数最少占位12位,浮点数显示精度是小数点后6位,所以123.45会在头部添加两空格。


默认情况下,printf()对正数不显示+对负数显示-,如果要显示+,在%后加上+

#include <stdio.h>
int main()
{
	printf("%+d\n",12);//输出+12;
	printf("%+d\n",-12);//输出-12;
	return 0;
}

输出小数控制位数:保留两位小数:%.2f,可以与宽度占位符一起使用

#include <stdio.h>
int main()
{
	printf("%6.2d\n",0.5);
	return 0;
}

输出字符串最小宽度为6,小数为2,所以头部两空格。
还可以这样写:

#include <stdio.h>
int main()
{
	printf("%*.*d\n",6,2,0.5);
	retunr 0;
}

%.[m]s输出部分字符串(防止字符串溢出)

#include <stdio.h>
int main()
{
	printf("%.5s/n","hello world");//输出hello
	return 0;
}

scanf() 处理数值占位符时,会⾃动过滤空⽩字符,包括空格、制表符、换⾏符等。
scanf() 处理⽤⼾输⼊的原理是,⽤⼾的输⼊先放⼊缓存,等到按下回⻋键后,按照占位符对缓存
进⾏解读。
解读⽤⼾输⼊时,会从上⼀次解读遗留的第⼀个字符开始,直到读完缓存,或者遇到第⼀个不符合条
件的字符为⽌。

#include <stdio.h>
int main()
{
	int x;
	float y;
	//用户输入"   -13.45e12# 0"
	scanf("%d",&x);//-13
	printf("%d\n",x);
	scanf("%f",&y);//。45e12
	printf("%f\n",y);
	return 0;
}

首先scanf()会跳过空格%d-读取到3结束.不属于有效字符,第二次调用从.开始到2结束#不属于有效字符
scanf()如果在成功读取任何数据之前,发⽣了读取错误或者遇到读取到jiang⽂件结尾,则返回常量 EOF (-1)。
%c不会忽略空白字符,总是返回当前第一个字符
强制跳过空白字符这样写scanf(" %c",&ch),%c前面加空格,表示跳过零个或多个空格
%s遇到空⽩字符(即空格、换⾏符、制表符等)会停止,会在末尾存放一个空字符\0


赋值忽略符*:加在%后面,该占位符不会返回值,解析后被丢弃

#include <stdio.h>
int main()
{
	int year;
	int month;
	int day;
	scanf("%d%*c%d%*c%d",&year,&month,&day);//2022-2-10
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值