第二章 数据的存储与运算

我们可以用计算机语言来编写程序,而其目的是未来解决生活中问题,所以计算机语言必须有能力来描述生活中问题。

例如:当我们在一个购物商城中上架商品,需要输入价格、物品数量等,而在C语言中与之对应的应为浮点数和整型数据。

数据类型
作用:用于创建变量 ( e.g. int weigh = 120; )

char //字符数据类型
short //短整型
int //整形——%d
long //长整型
long long //更长的整形
float //单精度浮点数——打印用%f
double //双精度浮点数——打印用%lf

为什么出现这么的类型?每种类型的大小是多少?

  • 类型丰富时选择性更多,可以提高空间利用率。
  • 要想知道每种类型的大小,可以使用sizeof,计算类型或者变量所占空间的大小,单位为字节(byte)。
#include <stdio.h>
int main()
{
    printf("%d\n",sizeof(char)); //计算char类型的大小——结果为1
    printf ("%d\n", sizeof(short)); //2
    printf("%d\n", sizeof(int)); //4
    printf("%d\n",sizeof(long)); //4
    printf("%d\n", sizeof(long long)); //8
    printf("%d\n", sizeof(float)); //4
    printf("%d\n", sizeof(double)); //8
    return 0:
}

语言标准 sizeof(long)>=sizeof(int) 即可,所以都是4字节。

计算机中的单位有哪些?

bit - 比特位(计算机里最小的单位) - 用于存放一个二进制位
计算机中识别二进制:0 1
8进制:0~7
10进制:0~9
byte - 字节 =8bit
kb - 1024byte
mb - 1024 kb
gb - 1024 mb
tb - 1024gb
pb - 1024tb

变量

  • 生活中的有些值是不变的(比如︰圆周率,性别( ? ),身份证号码,血型等等),这些可以用常量的概念来表示。
  • 有些值是可变的(比如∶年龄,体重,薪资)。——用变量来表示

定义变量的方法

int age = 150; //给出类型和变量名字,赋不赋值都可以,但推荐创建时赋值。
age = age+1; //变量意味着可改。
int weight = 45.5f;
char ch = 'w';

变量的分类

  • 局部变量
    {}内部定义的
  • 全局变量
    {}外部定义的
#include <stdio.h>
int a = 100; //全局变量
int main()
{
    int a =10; //局部变量
    printf("%d\n",a); //打印结果为10
    return 0;
}
  • 当局部变量和全局变量冲突的情况下,局部优先起作用。
  • 注意:不建议把全局变量和局部变量的名字命名为同一个。
  • 变量创建可以写到{}外,但执行性代码不行(如:printf)。

变量的作用域和生命周期

  • 通常来说,一段程序代码中所用到的名字并不总是有效/可用的, 而限定这个名字的可用性的代码范围就是这个名字的作用域。
int main()
{
    printf("%d\n",a); //报错,因为a是局部变量。
    {
        int a = 10;
        printf("%d\n",a);
    }
    return 0;
}

局部变量的作用域是变量所在的局部范围(大括号内)。
全局变量的作用域是整个工程。
同一工程里不同文件下全局变量要共同使用,使用前需声明。

//test1
#include <stdio.h>
int g_val = 2022;

//test2
#include <stdio.h>
extern int g_val; //声明变量
int main()
{
    printf("%d\n",g_val);
    return 0;
}

生命周期

  • 指的是变量的创建到变量的销毁的一个时间段。
  • 局部变量的生命周期:进入作用域开始,出作用域结束。
  • 全局变量的生命周期:整个程序的生命周期——main函数的生命周期。

常量
C语言中的常量和变量的定义的形式有所差异,C语言中的常量:

  • 字面常量
  • const修饰的常变量
  • #define定义的标识符常量(符号常量)
  • 枚举常量——可以用于一一列举的常量
#include <stdio.h>
//#define定义的标识符常量
#define MAX 10000 //不用加分号
//枚举常量
enum sex
{   //以下三个值为这种枚举类型的未来可能取值
    male, //枚举常量,可在此处赋初值:male=3,后续就等于3,不可再改
    female,
    secert    
};

int main(){
    // 3.14 —— 字面常量
    int num = 10; 
    num = 20;
    printf("%d\n",num); //num打印结果为20,此处num为变量,可修改值
    //const修饰的常变量
    sonst int num = 10; //此时num就是常变量,具有常属性——不能被改变的属性
    num = 20;
    printf("%d\n",num); //报错,被const修饰的值(变量)不可被修改
    
    //#define
    int n=MAX;
    printf("n = %d\n",n); //打印结果为10000
    
    //枚举常量
    enum sex s = male;
    printf("%d\n",male); //结果为0
    printf("%d\n",female); //1
    printf("%d\n",secret); //2
    
    return 0;
}
  • 被const修饰的变量虽然不可修改,但本质上还是变量(只是具有了常属性)。
  • 在没有显示说明的情况下,枚举常量(也就是花括号中的常量名)默认第一个枚举常量的值为0,往后每个枚举常量依次递增。
//关于conset的本质举例
#include <stdio.h>
int main()
{
    int arr[10] = {0}; //创建数组,里面有10个元素。
    int n = 10;
    int arr2[n] = {0}; //报错,n为变量,不行。
    
    sonst int n = 10;
    int arr3[n] = {0}; 
    //依旧报错,n本质上还是变量,所以需要使用常量的地方依旧不可使用。
    
    return 0;
}

字符串

  • 由双引号""引起来的一串字符(单引号)称为字符串字面值,简称字符串。
  • 注︰字符串的结束标志是一个\0的转义字符。在计算字符串长度的时候\0是结束标志,不算作字符串内容(不会算进去长度)。
  • 求数组元素个数时算\0,求字符串时不算。
#include <stdio.h>
#include <string.h>

int main()
{
    //字符数组——数组是一组同类型的元素
    char arr[] = "hello"; //结尾位置隐藏了一个\0的字符
    char arr1[] = "abc";
    char arr2[] = {'a','b','c'};
    
    //求字符串长度
    int len = strlen("abc"); //需要引用头文件string.h
    printf("%d\n",len); //打印结果为3
    printf("%d\n",strlen(arr1)); //3
    printf("%d\n",strlen(arr2)); //随机值——\0在哪就停在哪
    
    //%s打印字符串
    printf("%s\n",arr); 
    printf("%s\n",arr1); //打印结果为abc
    printf("%s\n",arr2); //打印结果除了abc后面还有乱码
    //arr1有\0:结束标志
    //arr2无字符串结束标志,后续空间内容未知,所以会出现乱码
    return 0;
}

转义字符

#include <stdio.h>
int mian()
{
    printf("c : \test\test.c"); //打印结果为c:    est    est.c
    printf("c : \\test\\test.c");
}

转义字符释义
在这里插入图片描述

//关于\?
//三字母词是什么
#include <stdio.h>
int main(){
    printf("(are you ok??)");// ??)会被解析成]——三字母词
    printf("(are you ok\?\?)"); //打印结果为(are you ok??)
    
//八进制数字
    printf("%c\n",'\130'); // %c-打印字符
    //1*8² + 3*8 + 0*8的零次 = 64 + 24 = 88
    //X的ASCII码值是88,所以打印结果为X。
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值