【初识C01】常量 | 字符串 | 语句 | 函数 | 数组 | 操作符

  • 基本认识一下,不做深入了解,知道有这么个概念。

常量

在 C 语言中,常量是指在程序运行过程中其值不能被改变的量,以下是 C 语言中常量的介绍:

1. 整型常量

  • 十进制常量:由 0 - 9 的数字组成,不能以 0 开头(除了表示 0 本身),例如:123、-456、0 等。
  • 八进制常量:以 0 开头,由 0 - 7 的数字组成,例如:0123(等于十进制的 83)、077(等于十进制的 63)。
  • 十六进制常量:以 0x 或 0X 开头,由 0 - 9 和 A - F(或 a - f)组成,例如:0x1A(等于十进制的 26)、0Xff(等于十进制的 255)。

2. 浮点型常量

  • 十进制形式:由整数部分、小数点和小数部分组成,例如:3.14、-0.5、0.0 等。
  • 科学计数法形式(指数形式):由尾数、e(或 E)和指数组成,例如:1.23e4(表示 1.23×10⁴)、-5.67e - 2(表示 - 5.67×10⁻²)。

3. 字符常量

  • 普通字符常量:用单引号括起来的单个字符,例如:‘a’、‘A’、‘9’、’ '(空格字符)等。在内存中存储的是该字符对应的 ASCII 值(整数)。
  • 转义字符常量:以反斜杠(\)开头的特殊字符序列,用于表示一些不可打印的字符或具有特殊意义的字符,例如:‘\n’(换行符)、‘\t’(制表符)、‘\0’(字符串结束标志,其 ASCII 值为 0)等。

4. 字符串常量

  • 用双引号括起来的字符序列,例如:“Hello”、“123”、“”(空字符串)等。在内存中存储时,系统会自动在字符串的末尾添加一个字符串结束标志’\0’。

5. 符号常量

  • 通过预处理指令#define 来定义,例如:
    #define PI 3.14159
    #define MAX_SIZE 100
    
  • 在程序编译前,所有出现符号常量的地方都会被替换成对应的常量值。这种方式可以提高程序的可读性和可维护性,方便对常量进行统一修改。

字符串、转义字符、注释

字符串

  • 定义:字符串是由双引号括起来的字符序列,例如:"Hello World""C programming"等。在 C 语言中,字符串实际上是一个以'\0'(空字符)作为结束标志的字符数组。
  • 存储方式:当定义一个字符串常量时,编译器会自动在字符串末尾添加'\0'。例如,char str[] = "abc";在内存中存储为'a''b''c''\0'
  • 操作:可以使用字符串相关的函数对字符串进行操作,比如strcpy(复制字符串)、strcat(连接字符串)、strlen(获取字符串长度)等。这些函数通常包含在<string.h>头文件中。

转义字符

  • 概念:转义字符是以反斜杠\开头的特殊字符序列,用于表示一些不可打印的字符或者具有特殊意义的字符。
  • 常见转义字符
    • \n:换行符,将光标移到下一行的开头。
    • \t:制表符,在输出中用于水平制表,通常相当于按下 Tab 键。
    • \b:退格符,将光标向左移动一个位置。
    • \r:回车符,将光标移到当前行的开头。
    • \0:字符串结束标志,其 ASCII 值为 0。
    • \\:反斜杠字符本身。
    • \':单引号字符。
    • \":双引号字符。

有个ASCII码表可以看看

  • 关于ASCII码表:键盘上所有的字母、标点符号等都是转换为ASCII值存储在内存中。可以找一份ASCII码表看看。

注释

  • 单行注释:以//开头,从//开始到本行末尾的所有内容都被视为注释,例如:
    // This is a single - line comment
    int a = 10; // This part after // is also a comment
    
  • 多行注释:以/*开头,以*/结尾,/**/之间的所有内容都是注释,可以跨越多行,例如:
    /* This is a
    multi - line comment */
    int b = 20;
    

语句

选择语句

int main()
{
    int coding = 0;
    printf("你会去敲代码吗?(选择1 or 0):>");
    scanf("%d", &coding);
    if(coding == 1)
   {
       prinf("坚持,你会有好offer\n");
   }
    else
   {
       printf("放弃,回家卖红薯\n");
   }
    return 0;
}

循环语句

include <stdio.h>
int main()
{
    printf("好好学习\n");
    int line = 0;
    while(line<=20000)
   {
        line++;
        printf("我要继续努力敲代码\n");
   }
    if(line>20000)
        printf("赢取白富美\n");
    return 0;
}

函数

int main()
{
    int num1 = 0;
   int num2 = 0;
    int sum = 0;
    printf("输入两个操作数:>");
    scanf("%d %d", &a, &b);
    sum = num1 + num2;
    printf("sum = %d\n", sum);
    return 0;
}
  • 上述代码,写成函数如下。:简化代码,代码复用。
#include <stdio.h>
int Add(int x, int y)
{
   int z = x+y;
   return z;
}
int main()
{
    int num1 = 0;
   int num2 = 0;
    int sum = 0;
    printf("输入两个操作数:>");
    scanf("%d %d", &num1, &num2);
    sum = Add(num1, num2);
    printf("sum = %d\n", sum);
    return 0;
}

在这里插入图片描述

数组

  • 怎么存储1-10的数字呢?数组 :一组相同类型数据的集合。集合里的每一项称为元素。
int  arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素
  • 数组的使用
int main()
{
 int i = 0;
 int arr[10] = {1,2,3,4,5,6,7,8,9,10};
 for(i=0; i<10; i++)
 {
       printf("%d ", arr[i]);
 }
 printf("\n");
    return 0;
}

操作符

算术操作符

  • 加法(+):用于计算两个数的和,例如3 + 5的结果是8
  • 减法(-):计算两个数的差,如7 - 4得到3
  • 乘法(*):实现两个数相乘,像2 * 6等于12
  • 除法(/):进行除法运算,注意当两个整数相除时,结果只取整数部分(向下取整),例如5 / 2结果为2;如果至少有一个操作数是浮点数,则进行正常的浮点数除法,如5.0 / 25 / 2.0结果为2.5
  • 求余(%):也称为取模运算,得到两个整数相除的余数,例如7 % 3的余数是1

关系操作符

  • 大于(>):判断左边的操作数是否大于右边的操作数,例如5 > 3结果为真(在 C 语言中通常用非零值表示真)。
  • 小于(<):判断左边操作数是否小于右边,如2 < 4为真。
  • 大于等于(>=):左边操作数大于或等于右边时为真,例如4 >= 4为真。
  • 小于等于(<=):左边操作数小于或等于右边时为真,像3 <= 3为真。
  • 等于(==):判断两个操作数是否相等,注意与赋值操作符=区分,例如3 == 3为真。
  • 不等于(!=):当两个操作数不相等时为真,如5!= 3为真。

逻辑操作符

  • 逻辑与(&&):当且仅当两个操作数都为真(非零)时,整个表达式为真,例如:(3 > 2) && (5 < 7)结果为1,如果第一个操作数为假,则不会再计算第二个操作数(短路求值)。
  • 逻辑或(||):只要两个操作数中有一个为真,整个表达式为真,如(2 > 3) || (4 < 5)结果为1,同样有短路求值的特性,如果第一个操作数为真,则不会计算第二个操作数。
  • 逻辑非(!):对操作数取反,若操作数为真(非零),则!操作后为假(0),若操作数为假(0),则!操作后为真(1),例如:!(3 == 4)结果为1

位操作符

  • 按位与(&):对两个整数的二进制位进行与运算,只有对应的两个二进制位都为 1 时,结果位才为 1,例如3 & 5(二进制分别为011101)结果为1(二进制001)。
  • 按位或(|):对应的两个二进制位只要有一个为 1,结果位就为 1,如3 | 5结果为7(二进制111)。
  • 按位异或(^):当对应的两个二进制位不同时,结果位为 1,否则为 0,例如3 ^ 5结果为6(二进制110)。
  • 按位取反(~):将操作数的每一位二进制位取反,例如~3(二进制011)结果为-4(二进制100,在有符号整数的补码表示中)。

赋值操作符

  • 基本赋值(=):将赋值操作符右边表达式的值赋给左边的变量,例如:int x = 5;float y = 3.14;
  • 复合赋值
    • +=a += b等价于a = a + b,例如:int a = 3; a += 2;(此时a的值变为5)。
    • -=a -= b等价于a = a - b
    • *=a *= b等价于a = a * b
    • /=a /= b等价于a = a / b
    • %=a %= b等价于a = a % b

左移操作符、右移操作符

左移操作符(<<)

  • 基本概念
    • 左移操作符将一个数的各二进制位全部左移若干位。
  • 移动规则
    • 左边移出的高位丢弃,右边空出的低位补 0。
  • 数学意义
    • 对于一个无符号整数,左移 n 位相当于乘以 2 的 n 次方。例如,将无符号整数 5(二进制为 00000101)左移 2 位,得到 20(二进制为 00010100),因为 5 * 2² = 20。
  • 示例代码
#include <stdio.h>

int main() {
    unsigned int num = 5;
    unsigned int result = num << 2;
    printf("左移 2 位后的结果:%u\n", result);
    return 0;
}

右移操作符(>>)

  • 基本概念
    • 右移操作符将一个数的各二进制位全部右移若干位。
  • 移动规则
    • 对于无符号数,右边移出的低位丢弃,左边空出的高位补 0。
    • 对于有符号数,如果是正数,高位补 0;如果是负数,在大多数编译器中,高位补 1(算术右移),但也有些编译器可能采用逻辑右移(高位补 0)。
  • 数学意义
    • 对于无符号数和正数,右移 n 位相当于除以 2 的 n 次方(向下取整)。例如,将无符号整数 8(二进制为 00001000)右移 1 位,得到 4(二进制为 00000100),因为 8 / 2 = 4。
  • 示例代码
#include <stdio.h>

int main() {
    unsigned int num1 = 8;
    int num2 = -8;
    unsigned int result1 = num1 >> 1;
    int result2 = num2 >> 1;
    printf("无符号数右移 1 位后的结果:%u\n", result1);
    printf("有符号数(负数)右移 1 位后的结果:%d\n", result2);
    return 0;
}

自增和自减操作符

  • 自增(++)
    • 前置自增++i,先将变量i的值增加1,然后再使用i的值,例如:int i = 3; int j = ++i;此时j的值为4i的值也为4
    • 后置自增i++,先使用变量i的当前值,然后再将i的值增加1,例如:int i = 3; int j = i++;此时j的值为3i的值为4
  • 自减(–)
    • 前置自减--i,先将变量i的值减少1,然后再使用i的值。
    • 后置自减i--,先使用变量i的当前值,然后再将i的值减少1

条件操作符(三目运算符)

  • 格式为表达式1? 表达式2 : 表达式3,先计算表达式1,如果表达式1的值为真(非零),则整个表达式的值为表达式2的值,否则为表达式3的值,例如:int max = (a > b)? a : b;用于求ab中的最大值。

逗号操作符

  • 逗号操作符可以将多个表达式连接起来,从左到右依次计算各个表达式的值,整个逗号表达式的值是最后一个表达式的值,例如:int x = (1, 2, 3);此时x的值为3

指针操作符

  • 取地址符(&):用于获取变量的内存地址,例如:int a = 5; int *p = &a;这里&a表示获取变量a的内存地址,并将其存储在指针变量p中。
  • 解引用符(*):用于访问指针所指向的内存单元的值,例如:在int a = 5; int *p = &a;之后,*p就表示访问p所指向的内存单元(即变量a的值),可以进行赋值操作*p = 10;此时变量a的值也变为10

sizeof 操作符

  • 用于获取数据类型或者变量所占用的字节数,例如:sizeof(int)返回int类型在当前系统中占用的字节数,sizeof(a)返回变量a所占用的字节数。
  • (类型):(int)强制转换为int类型 ,(char)强制转换为char类型。
  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值