【C语言】第二讲 数据类型和变量

一、数据类型

1. 分类

(1)内置类型

  1. 字符
  • [signed]char 有符号字符
  • unsigned char 无符号字符
  1. 整型
  • 短整型
    • [signed] short [int]
    • unsigned short [int]
  • 整型
    • [signed] int
    • unsigned int
  • 长整型
    • [singed] long [int]
    • unsigned long [int]
  • 更长的整型(C99引入)
    • [signed] long long[int]
    • unsignedlong long[int]
  1. 浮点型
  • float 单精度
  • double 双精度
  • long double
  1. 布尔类型(C99引入)
  • _Bool 包含头文件<stdbool.h>
  • 变量取值:true(1) or false(0)
_Bool love=true;
if(love)
	printf("Zhengzhouyue loves Fuyusen!\n");

(2)自定义类型

  1. 数组
  2. 结构体(struct
  3. 枚举(enum
  4. 联合体(union

2. signed unsigned

  • 修饰字符型和整型
  • signed包含负值
  • unsigned非负值
  • 二者取值范围不同
  • char默认是否带±号,由当前系统决定,有可能是signed也有可能是unsigned(即char不等同signed char
  • int等同于signed int

3. 取值范围

  • SCHAR_MIN,SCHAR_MAXsigned char的min、max
  • SHRT_MIN,SHRTshort的min、max
  • INT_MIN,INT_MAXint的min、max
  • LONG_MIN,LONG_MAXlong
  • LLONG_MIN,LLONG_MAXlong long
  • UCHAR_MAXunsigned char的max
  • USHRT_MAXunsigned short的max
  • UINT_MAXunsigned int的max
  • ULONG_MAXunsigned long的max
  • ULLONG_MAXunsigned llong的max

二、变量

经常变化的值----变量

1. 创建

  • 初始化:创建时给数值
char ch='z';
double x= 47.68;
double x= 47.68f;  //等价于↓
float x=47.68;

2. 分类

(1)全局变量

适用范围广

(2)局部变量

大括号内

  • 二者同名时,局部变量优先使用

(3)两种变量在内存中的存储位置

  • 栈区 —— 局部变量、函数参数
  • 堆区 —— 动态内存管理、malloccallocreallocfree函数
  • 静态区 —— 全局变量、静态变量

三、操作符

1. 算术操作符

+ - * / %均为双目操作符

(1)/

  • 整数除法:两边是整数
    • 尽管变量类型是float,结果也只返回整数部分,丢弃小数部分
float x=6/4;
int y=6/4;
printf("%f\n",x);  //输出1.000000
printf(%d\n",y);   //输出1
  • 小数除法:至少一个是浮点数
float x=6.0/4;   //或6/4.0
printf("%f\n",x);  //输出1.500000

(2)%

  • 不能用于浮点数
  • 结果的±号由第一个运算数的正负决定
printf("%d\n", 11 % -5); // 1
printf("%d\n",-11 % -5); // -1
printf("%d\n",-11 % 5); // -1

2. 赋值操作符

  • 创建时给值——初始化
  • 创建好后给值——赋值
int a=100;  //初始化
a=200;      //赋值

==表示相等

(1)连续赋值

从右向左依次赋值,且式子要在最右边

int a=5;
int b=2;
int c=0;
c=b=a+3;  //不可写成c=a+3=b,a+3必须在最右边

(2)复合赋值符

a+=3;//a=a+3;

+= -= *= /= %=
>>= <<= &= |= ^=

3. 单目操作符:++、–、+、-

辨析
y=++x:x’=x+1 , y= x+1=x’
y=x++:y=x , x’=x+1
y=–x:x’=x-1 ,y= x-1=x’
y=x–:y=x , x’=x-1

4. 强制类型转换

int a=(int)3.14;//将3.14强制转换为整型,**只取整数部分**

四、输入输出函数

1. printf函数

  • 头文件#include <stdio.h>
  • 运行结束后,光标停留在输出结束的地方

(1)占位符

  • printf()函数可以输入占位符:%d(代入值必须为整数)、%s(代入的是字符串)

printf()的参数和占位符一一对应关系,若有n个占位符⇒printf()的参数有n+1个;若参数个数<对应占位符,则会输出内存中的任意值

  • 常用占位符
    %c:字符。
    %p:指针。
    %s:字符串。
    %zd: size_t 类型。
    %d:⼗进制整数。

    %f:⼩数(包含 float 类型和 double 类型)。
    %o:⼋进制整数。 %x:⼗六进制整数。 %u:⽆符号整数(unsigned int)。 %i:整数,基本等同于 %d 。
    %a:⼗六进制浮点数,字⺟输出为⼩写。 %A :⼗六进制浮点数,字⺟输出为⼤写。
    %e:使⽤科学计数法的浮点数,指数部分的 e 为⼩写。 %E:使⽤科学计数法的浮点数,指数部分的 E 为⼤写。
    %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:已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。 %%:输出⼀个百分号。

(2)输出格式

  • 最小宽度——%bf
printf("%5d\n",123); //输出为“  123”(123前面空两格)

输出的值默认右对齐(所以输出内容前面会有空格),如果要改为左对齐,则在%后插入-号:

printf("%-5d\n",123); //输出为“123  ”(空格在123后面)
  • 小数的输出格式
    默认显示精度是小数点后六位(%f)
printf("%12f\n",123.45); //输出“  123.450000"(小数点占一位)

小数点后保留a位数:%.af(a代表数字);%b.af——最少b位,小数位数a

printf("%.2f\n",0.155); //输出 0.15
printf("%6.2f\n",0.5); //最小宽度为6,小数位数为2.输出“  0.50”(前面有空格)
  • 最小宽度和小数位数用参数传入**("%*.f",b,a,x)*
printf("%*.*f\n",6,2,0.5); //输出“  0.50”
  • 默认情况不显示+只显示-,让正数也带上符号
printf("%+d\n",12); //输出 +12
printf("%+d\n",-12); //输出 -12
  • 输出部分字符串——用%.[m]s指定输出长度,[m]为数字
printf("%.5s\n","hello world"); //输出“hello”

2.scanf函数

(1)基本概念

  • 头文件#include <stdio.h>
  • 传递的是地址→变量前加&,若为指针变量(字符串变量),则不用加&
  • 自动过滤空白字符(空格、制表符、换行符)→即便scanf没加空格,键盘上输入也可以加空格/回车
  • 解读:从上一次解读遗留的第一个字符开始直到读完缓存,或遇到第一个不符合条件的字符为止
int x;
float y;
// ⽤⼾输⼊ " -13.45e12# 0"
 scanf("%d", &x);//只解读-13
 scanf("%f", &y);//从.开始读取,因为对应的是%f,读取到.45e12即0.45×10^12
  • 返回值——整数
    没有读取任何项/匹配失败,则返回 0 ;在成功读取任何数据之前,发⽣了读取错误/遇到读取到⽂件结尾,则返回常量 EOF。

(2)常用占位符

①**%c:字符——只有它不忽略空白字符,其余都自动忽略起头的空白字符**

  • 强制跳过零个或多个字符前空白字符:sacnf(" %c",&ch),在%c前加一个空格

%s:不能简单地等同于字符串,从当前第⼀个⾮空⽩字符开始读起,直到遇到空⽩字符(即空格、换⾏符、制表符等)为⽌。

  • ⽆法⽤来读取多个单词⇒不适合读取可能包含空格的字符串(书名、歌名)
  • scanf()遇到%s在字符串变量末尾存储一个空字符**\0**
//输入"abc  de"
scanf("%s",&num);//在c后面存\0,而不是在e后面
  • 指定读入字符串的最长长度:%[m]s——避免读入字符数组时超过数组边界
    ③其他:
    %d %f:float 类型浮点数。
    %lf: double 类型浮点数。%Lf : long double 类型浮点数。
    %[ ] :在⽅括号中指定⼀组匹配的字符(⽐如 %[0-9] ),遇到不在集合之中的字符,匹配将会停⽌。

(3)赋值忽略符

** 号加在%后*,占位符就不会返回值,解析后被丢弃

scanf("%d-%%d-%d",&y,&m,&d);//如果输入2024/1/24就会解析失败
//为解决问题:加*号,注意要给%c中间加,字符就不会返回值
scanf("%d%*c%d%*c%d",&y,&m,&d);//2024-1-24或2024/1/24都可以

五、生活小记

小付emo留言区

今天是10.22的凌晨三点十分,我们分手了。我实在不知道该哪里留言了。只希望你还能继续撰写博客吧。你把我微信删了,我也迅速作出了回应。我想拉黑微信,又害怕拉黑以后记录没了。只好不再显示假装自己也把你删了。我去了支付宝,qq,兔兔,小红书,网易云,qq音乐,我们的协作文档。都没有你的消息。我想你也许和我一样彻夜难眠吧。于是我就想到了这里,这里也是个留言板,如果你近期会写博客的话。你删除我微信,我真的很心疼。那里有我们所有的所有。我连微信小号也舍不得删 ,因为那里也有一部分我们的回忆。我很难过,我也想气你,我注销了小红书,注销前我认真看了一遍我们的收藏夹,我们有那么多收藏夹从美食,景点到考研,学习再到家庭布置,财产规划。在爱情里面稚嫩的我们认真的规划着我们的未来。像是大人眼里执着的小孩理想的看着未来。
我好想你,你在哭吗。
我不觉得
我细数着我们的过往,眼泪止不住地流淌。我们有着很炽热的一段感情,即便它并不完美,但我相信在我们眼里这就是最棒的爱情。

已经和好如初了。

  • 35
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值