C语言学习(2)—— 变量

命名规范:(1)由英文字母、数字、下划线_和 $ 组成;(2)数字不可以开头;(3)不能有空格;(4)不可以使用关键字和保留字,但可以包含关键字和保留字;(5)严格区分大小写。 

一. 数据类型    

1. 基本数据类型 

数据类型大小表示范围输出占位符
charchar (signed char)1字节-2^{7}  —  2^{7}-1%c
unsigned char0  —   2^{8}-1
shortshort(signed short)2字节-2^{15}  —  2^{15}-1

%d

unsigned short0  —   2^{16}-1
intint (signed int)4字节 -2^{31}—  2^{31}-1

%d(十进制)

%o(八进制)

%x(十六进制)

unsigned int0  —   2^{32}-1
longlong (signed long)8字节-2^{63}  —  2^{63}-1%ld
unsigned long0  —   2^{64}-1
floatfloat4字节1.2E-38  —   3.4E+38

%f(默认6位小数)

%.2f(保留两位小数)

doubledouble8字节2.3E-308  —   1.7E+308

%lf(默认6位小数)

%.2lf(保留两位小数)

字符串char   str[]%s

     注意:(1)float是单精度,6位小数,声明为float型时,需要在后面加“f”或者“F”;double是双精度,15位小数。(2)布尔类型可以使用整数0表示假非0表示真,或者引入<stdbool.h>使用bool flag = true / false(2)C语言中没有字符串类型,使用字符数组来表示字符串

2. 类型转换 

(1)自动类型转换 

当容量(表示数的范围)小的数据类型的变量和容量大的数据类型的变量做运算时,其结果自动提升为容量大的数据类型。

char、short  → int → unsigned int → long → unsigned long → loat → double

#include<stdio.h>   // 使用 printf 需要引入 <stdio.h> 头文件

int main(){
    
    char c = 'a';   // 97
    int i = 1;
    double d = 1.3;

    int sum1 = c + i;
    double sum2 = i + d;
    printf("sum1 = %d \n", sum1);   // sum1 = 98
    printf("sum2 = %lf \n", sum2);   // sum2 = 2.300000

    return 0;
}

(2)强制类型转换 

 需要使用强转符:()

#include<stdio.h>

int main(){

    double d = 1.32;
    int num = (int) d;
    printf("num = %d \n", num);   // num = 1

    int res1 = (int) 3.51 * 10 + 1.5 * 6;
    int res2 = (int) (3.51 * 10 + 1.5 * 6);
    printf("res1 = %d \n", res1);   // res1 = 39
    printf("res2 = %d \n", res2);   // res2 = 44

    return 0;
}

3. 常量

常量不能被改变,不能重复定义。 

(1)#define 

定义常量:#define   常量名   常量值

#include<stdio.h>

#define pi 3.14    //定义宏常量(定义常量的时候推荐使用define)

int main(){

    printf("常量的值是: %f \n", pi);   // %f是占位符,表示把pi的值放在%f处, 默认保留6位小数
   
    return 0;
}

define在定义时没有数据类型,在参与运算时只是简单的替换

#include<stdio.h>

#define A  4
#define X  A
#define B  A - 2
#define C  (A - 2)
#define D  A / B * 3
#define E  A / C * 3


int main(){
    printf("X = %d \n", X);   // 4
    printf("D = %d \n", D);   // A / A - 2 * 3 = -5
    printf("E = %d \n", E);   // A / (A - 2) * 3 = 6

    return 0;
}

define可以配合#undef(取消定义)、#ifdef(如果定义了,必须与#endif配合使用)、 #ifndef(如果没有定义,必须与#endif配合使用)、#endif 来使用,可以让代码更加灵活

#include<stdio.h>

#define pi 3.14    
#undef pi               //取消定义
#define pi 3.1415926    //再次定义

int main(){
    #ifdef pi
        printf("pi = %f\n", pi);    // pi = 3.1415926
    #endif
    #ifndef pi
        printf("pi未定义");
    #endif

    return 0;
}

(2)const

定义常量:const  数据类型  常量名 =  常量值 

#include<stdio.h>

int main(){
    const double pi = 3.14;   //定义常量的方式2
    
    printf("常量的值是: %f\n", pi);

    return 0;
}

4. 枚举类型

(1)第一个枚举成员如果不赋值的话默认值为整型的0,后续枚举成员的值在前一个成员上加1。(2)如果把第一个枚举成员的值定义为 1,则第二个就为 2,以此类推。(3)枚举变量的定义形式1:先定义枚举类型,再定义枚举变量。(4)枚举变量的定义形式2:定义枚举类型的同时定义枚举变量 。(5)整数可以转成一个枚举值

#include<stdio.h>

int main(){
    enum DAY{
        Mon = 1, Tue = 2, Wen = 3, Thu = 4, Fri = 5, Sat = 6, Sun = 7
    };

    enum DAY day = Wen;   // enum DAY 是枚举类型,day 是变量
    printf("日期: %d \n", day);   // 日期: 3

    return 0;
}
#include<stdio.h>

enum DAY{
    Mon = 1, Tue, Wen, Thu, Fri, Sat, Sun
}day;    // 定义了一个枚举类型 enum DAY,同时定义了一个枚举类型的变量 day

int main(){
    day = Wen;   // enum DAY 是枚举类型,day 是变量
    printf("日期: %d \n", day);   // 日期: 3

    for (day = Mon; day <= Sun; day++) {
        printf("%d  ", day);   
    }

    int i = 1;
    day = (enum DAY) i;
    printf("日期: %d \n", day);   // 日期: 3

    return 0;
}

5. 键盘输入语句

 引入#<stdio.h>,使用scanf语句,使用适当的参数接收输入

#define _CRT_SECURE_NO_WARINGS  //scanf会在VSCode里报错,需要在最开始的位置添加该行代码
#include<stdio.h>

int main(){

    //输入整型
    int i;
    printf("请输入数据:");
    scanf("%d", &i);   // &表示取地址运算符,将键盘输入的数据放到变量 i 指向的地址中
    printf("输入的数据是:%d \n", i);

    //输入浮点型
    double d;
    printf("请输入数据:");
    scanf("%lf", &d);   // &表示取地址运算符,将键盘输入的数据放到变量 d 指向的地址中
    printf("输入的数据是:%lf \n", d);

    //输入字符串
    char str[10];
    printf("请输入数据:");
    scanf("%s", &str);   // &表示取地址运算符,将键盘输入的数据放到变量 str 指向的地址中
    printf("输入的数据是:%s \n", str);

    return 0;
}

6. 位运算

原码,反码,补码:对于有符号的数来说,① 二进制的最高位是符号位,0表示正数,1表示负数;② 正数的原码,反码,补码都一样;③ 负数的反码=它的原码符号位不变,其它位取反;④ 负数的补码=它的反码+1;⑤ 0的反码,补码都是0;⑥ 在计算机运算的时候,都是以补码的形式来运算的。

&

按位运算,按二进制位进行操作

运算规则:0 & 0 = 0;  0 & 1 = 0;  1 & 0 = 0;  1 & 1 = 1

|

按位运算,按二进制位进行操作

运算规则:0 | 0 = 0;  0 | 1 = 1;  1 | 0 = 1;  1 | 1 = 1

^

按位异或运算,按二进制位进行异或操作

运算规则:0 ^ 0 = 0;  0 ^ 1 = 1;  1 ^ 0 = 1;  1 ^ 1 = 0

~

按位取反运算,按二进制位进行取反操作

运算规则:~ 0 = 1;  ~ 1 = 0

<<

二进制左移运算符,将一个运算对象的各二进制位全部左移若干位

(左边的二进制位丢弃,右边补0)

>>

二进制右移运算符,将一个运算对象的各二进制位全部右移若干位

(正数左补0,负数左补1,右边的二进制位丢弃)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值