初识C语言(二)

本文详细介绍了C语言中的数据类型(内置与自定义)、signed和unsigned的区别,展示了变量的创建、不同类型取值范围、算术操作符以及printf和scanf函数的使用方法,帮助读者理解C语言基本概念。
摘要由CSDN通过智能技术生成

C语言数据类型和变量 

1.数据类型介绍

数据类型分为:

                        C语言本身就有的内置类型

                                        字符型        chara                                   1Byte

                                        整型       { 

                                                        1.短整型        shourt [int]        2Byte

                                                        2.整型            int                     4Byte

                                                        3.长整型        long [int]            4Byte       

                                                        4.更长的整型 long long [int]    8Byte

                                                                        [int]均可省略 

                                                        }

                                        浮点型   {

                                                        float        单精度浮点型        4Byte

                                                        double       双精度浮点型     8Byte

                                                        long double                          8Byte

                                                        }

                                        布尔类型       _Bool 或 bool                 1Byte

                                                            专门表示真假,取值只能是true或false

                                                            布尔类型的使用必须包含头文件<stdbool.h>

     

                         自己创造的自定义类型 

                                数组        结构体-struct        枚举-enum        联合体-union       (以后了解)

2. signed 和 unsigned

signed和unsigned关键字修饰字符型和整型,signed可以表示正负,unsigned只能表示零和正整数

对于char类型     char默认是否带有正负号由当前系统决定

对于int类型        int默认为signed int

unsigned的优点是同样长度的内存能够表达的最大整数值扩大一倍

3.数据类型和取值范围

limits.h  、float.h 头⽂件中说明了整型类型和浮点型类型的取值范围

整型

char              SCHAR_  MIN ( MAX )             UCHAR_MAX

short             SHRT_  MIN ( MAX )                USHRT_MAX

int                  INT_  MIN ( MAX )                   UINT_MAX

long               LONG_  MIN ( MAX )               ULONG_MAX

long long        LLONG_ MIN ( MAX )             ULLONG_MAX

浮点型       

FLT_        DBL_ 

4.变量

创建

变量是根据类型创建的,变量创建的同时给一个初始值叫做初始化

给float类型的变量初始化时,初始值会默认为double类型,需要在结尾加上f,例如3.14f

分类

全局变量        大括号外部定义的变量,整个工程中都能使用 

局部变量        大括号内部定义的变量,只能在所在局部范围内使用,局部变量较全局变量优先

全局变量放在内存的静态区,局部变量放在内存的栈区

5.算术操作符(双目操作符)

包括    + 、- 、* 、/ 、%

操作符也叫运算符,有两个操作数的操作符叫双目操作符

/

        除号两端如果是整数,执行的是整数除法,结果也是整数,不能整除得到的是商没有余数

        想要结果是浮点数,两个操作数中至少有一个浮点数,才能进行浮点数除法

%

        求模(余),得到的结果是两个整数相除的余数,只能用于整数不能用于浮点数

        负数求模的规则是,结果的正负由左操作数的正负决定

6.单目操作符

前置++、--

先运算,后使用

int a = 5;

int b = ++a

输出为    a = 6 ,b = 6

后置++、--

先使用,后运算

int a = 5;

int b = a--

输出为    a=4 ,b=5

+、-

代表正负号时,是单目操作符

7.赋值操作符:=和复合赋值

变量初始化后,再给一个值,叫做赋值

连续赋值      c=b=a+3   从右往左依次赋值    不推荐使用,建议拆开写,方便观察代码执行的细节

复合赋值      a + = 10 等价于 a = a + 10

                    a - = 3    等价于 a = a - 3

                   复合赋值操作符: +=        -=        *=        /=        %=   等

8.强制类型转换

如 int a = 3.14           类型不匹配,编译器会报警

     int a = (int) 3.14   为了消除警告,将3.14强制转换成 int 类型,只取整数部分

9. printf 和 scanf 

printf 和 scanf 是在标准库的头文件 stdio.h 定义的,使用之前要引入这个头文件

printf

        print—打印,f (format)—格式化,printf表示可以定制的格式将文本输出到屏幕上

        占位符

        打印在屏幕上是占位符的位置将被其他参数替换

        如果参数个数少于对应的占位符,可能会输出内存中的任意值

        常用的占位符

                                %c :字符

                               %d :十进制整数

                                %f :⼩数(包含 float 类型和 double 类型)

                                %hd :十进制shortint类型

                                %hu :unsignedshortint类型

                                %ld :十进制longint类型

                                %lu :unsignedlongint类型

                                %Lf :longdouble类型浮点数

                                %p :指针(用来打印地址)

                                %s :字符串

                                %u :无符号整数(unsignedint)

                                %x :十六进制整数

                                %zd : size_t 类型

        限定宽度

        例如  %5d表示这个占位符的宽度至少为5位,如果不满五位,对应值的前面会添加空格补齐

        输出的值默认是右对齐,如果改成左对齐,即在输出内容后面补齐空格,应写成 %-5d

        限定小数位数

        例如 %.2f 表示小数点后只保留两位

        这种写法可以与限定宽度占位符结合使用     %6.2f 表输出的浮点数最小宽度为6,小数位为2

        最小宽度和小数位数这两个限定值,都可以用 * 代替,通过printf () 的参数传入

        printf ("%*.*f\n", 6, 2, 0.5);        等同于    printf ("%6.2f\n",0.5);

        显示正负号

        printf 只对负数显示-,如果想对正数显示+,应在%号后插入+,%+d保证输出的值总带有+-

        printf ("%+d\n",12);        输出+12

        printf ("%+d\n",-12);       输出-12

        输出部分字符串

        例如 %.5s 表示只输出字符串的前五个字符

scanf

读取用户的输入,将其存入变量

        读取原理

        scanf 处理数值的占位符时会自动过滤空白字符,包括空格、制表符、换行符等(%c除外)

        所以,用户输入的数据之间使用空格或回车键不影响数据的解读

        当scanf ("%d %f",&a,&b); 读取    -13.45e12# 0时

        %d 占位符会忽略起首的空格,从 - 处开始获取数据,读取到-13停止,后面的 . 不属于整数的有效字符,所以占位符%d 会读到-13

        第⼆次调用 scanf时,会从上一次停止解读的地方,往下读取。这⼀次读取的首字符是 . ,由于对应的占位符是 %f ,会读取到 .45e12 ,这是采用科学计数法的浮点数格式。后⾯的 # 不属于浮点数的有效字符,所以到此为止

        返回值

        scanf 的返回值是一个整数,表示成功读取的变量个数,没有读取到数据或匹配失败则返回0

       在成功读取任何数据之前,发生了读取错误或者遇到读取到⽂件结尾,则返回常量EOF(-1)

        EOF— end of file   文件结束标志

        按 ctrl+z(VS环境需要按三次),可以提前结束输入

        如果一个数据都没有输入就提前结束输入,返回值是-1

        占位符

        %c :字符

        %d :整数

        %f : float 类型浮点数

        %lf : double 类型浮点数

        %Lf : long double 类型浮点数

         %s :字符串

         %[ ] :指定⼀组匹配的字符(如 %[0-9] ),遇到不在集合之中的字符,匹配将会停止

        %c

        除%c 外,其他占位符都会自动忽略起首的空白字符

        %c 总是返回当前第⼀个字符,无论该字符是否为空格

        如果要强制跳过字符前的空白字符,可以写成 scanf("  %c", &ch) ,即 %c 前加上⼀个空格,表示跳过零个或多个空白字符

        %s

        %s的规则是,从当前第⼀个非空白字符开始读起,直到遇到空白字符(即空格、换行符、制表符等)为止,所以无法读取多个单词(除非使用多个%s)

        scanf 遇到 %s会在字符串变量末尾存储一个空字符 \0,所以长度5的字符组只能存储4个数据

        scanf 不会检测读取的字符串是否超过了数组长度。所以储存字符串时,可能会超过数组的边界,导致预想不到的结果

        为了防止这种情况,可以写成%9s 表示读取字符串的最大长度为9,将后面的字符抛弃

        赋值忽略符

        有时,用户的输⼊可能不符合预定的格式,导致数据读取失败

        如果输⼊ 格式,比如 2024-04-02 ,就会正确解读出年、月、日。

        但是当输入 2024/04/02 ,这种情况下, scanf 解析数据就会失败

        为了避免这种情况, scanf() 提供了⼀个赋值忽略符 * 

        只要把 * 加在任何占位符的百分号后面,表示这个占位符没有对应的变量,解读后不必返回

        例如scanf ("%d%*c%d%*c%d" &year,&month,&day);

        这样就能解决上述问题

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值