【C语言】通识篇2

字符串+转义字符+注释

字符串

字符串里可以只有一个字符

字符串的结束标志是一个’\0’的转义字符

#include <stdio.h>
#include <string.h>

int main()
{
    char arr1[4] = "abc";
    char arr2[3] = {'a', 'b', 'c'};
    char arr3[4] = { 'a', 'b', 'c', '\0' };
    
    printf("%s\n", arr1);            //输出abc
    printf("%s\n", arr2);            //输出abc烫烫烫烫蘟bc
    printf("%s\n", arr3);            //输出abc
    
    printf("%d\n", strlen(arr1));         //输出 3
    printf("%d\n", strlen(arr2));         //输出 15 - 随机值
    printf("%d\n", strlen(arr3));         //输出 3
    return 0;
}

arr1的结尾默认放了一个’\0’ ,而arr2后面没有’\0’作为结束标志,所以打印会出现随机值

求字符串长度——strlen,需要包含头文件#include <string.h>

strlen是用来获取字符串的有效长度的,结尾标记’\0’不包含在内

‘\0’是结束标志,不算作字符串内容,但’\0’是一个字符(一个汉字占2个字符),占1Byte大小

转义字符

转义字符

?

"

\

\a

\b

\f

\n

\r

\t

\v

\ddd

\xdd

释义

在书写连续多个问号时使用,防止他们被解析成三字母词(即?)

用于表示字符常量’(即’)

用于表示一个字符串内部的双引号(即")

用于表示一个反斜杠,防止它被解释为一个转义序列符(即\)

警告字符,蜂鸣

退格符(删掉前一个字符,即BACKSPACE)

进纸符

换行

回车

水平制表符(与TAB等价)

垂直制表符

ddd表示1~3个八进制的数字转化为十进制所对应ASCII码值所对应的字符,如:‘\61’表示’1’,‘\101’表示’A’

dd表示1~2个十六进制数字转化为十进制所对应ASCII码值所对应的字符,如:‘\x30’表示’0’

n进制转换十进制:权重

\130代表的是把130这个八进制数数字转换成十进制后得到的88,作为ASCII码值代表的字符

ASCII码值最大是127,不能超出

注释

作用:

  1. 解释代码
  2. 注释掉一些不需要的代码

注释风格

  • /code/

缺点:无法嵌套注释

/*
    code
    /* code */
    code
*/
  • //code

CTRL+K,CTRL+U 注释

CTRL+K,CTRL+C 取消注释

选择语句

  • if
  • switch
int input = 0;
printf("加入比特学习\n");
printf("你会好好学习吗?(1/0)");

scanf("%d", &input);
                               //也可写if (1 == input),但不能写=,因为常量不能改
if (input == 1)                // == 表示判断,=表示赋值,此处绝对不能写=,否则表示:
{                              //把 input 赋值为1,再判断input是否为1
    printf("好offer\n");       //此时input永远为1,永远好offer,是错误的写法
}

else
{
    printf("卖红薯\n");
}

循环语句

  • while
  • for
  • do while
int line = 0;
printf("加入比特\n");
while (line < 20000)
{
    printf("敲代码:%d\n", line);
    line++;
}

if (line = 20000)                //注意此处可以没有 {}
printf("好offer\n");
else (line < 20000)             //无法达成
printf("好好学习\n");

C语言是一种【结构化】的程序设计语言

顺序结构

选择结构

循环结构

函数

函数的特点就是简化代码,代码复用

int Add(int x, int y)           //自定义一个 Add 函数
{
    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;
}

数组

数组是一组相同类型元素的集合

int arr[] = { 1,2,3 },数组可以通过初始化确定大小

数组定义

int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整型数组 arr ,最多放10个元素
char ch[10] = "hello bit";

数组下标

C语言规定:数组的每个元素都有一个下标,下标是从0开始的

数组可以通过下标来访问的

比如:

int arr[10] = {0}; //如果数组10个元素,下标依次是0-9;
//若第一个元素设置为1,其余元素也会被默认初始化为0
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
printf("%d", arr[8]);                //会打印9

数组的使用

int main()
{
    int i = 0;
    int arr[10] = {1,2,3,4,5,6,7,8,9,10};
    while (i < 10)
    {
        printf("%d ", arr[i]);           //此处在访问数组的一个元素,而不是在定义数组
        i = i+1;                         //所以可以用变量 i
    }
    return 0;
}

定义数组 arr[ ] 中部分编译器可以写变量,使用的是 C99 标准中引入的【变长数组】,但 VS2022 对此标准支持不好,所以 VS 里面无法使用

操作符

算术操作符

+  -  *  /  %
加 减 乘 除 取模

printf("%d", 7 / 3);//输出2
printf("%f", 7.0 / 3);//输出2.333333
printf("%f", 7 / 3.0);//输出2.333333
printf("%f", 7.0 / 3.0);//输出2.333333

printf("%d", 7 % 3);//输出1
printf("%d", 7.0 % 3);//错误,取模操作符只适用于整数

移位操作符

涉及到二进制位,移动二进制位,是二进制操作符

 >>    <<
右移   左移

位操作符

涉及到二进制位,也是二进制操作符

  &        ^        | 
按位与   按位异或  按位或

(复合)赋值操作符

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

//初始化
int a = 0;

//赋值
a = 20;
a = a + 10;
a += 10;   //复合赋值符     等同于 a = a + 10

单目操作符

只有一个操作数

!           逻辑反操作
-           负值
+           正值                         //+ 加号有2个操作数,也是双目操作符
&           取地址
sizeof      操作数的类型长度(以字节为单位)//操作符(运算符),不是函数
~           对一个数的二进制按位取反
--          前置、后置--
++          前置、后置++
*           间接访问操作符(解引用操作符)
(类型)      强制类型转换

C语言中,0表示假,非0表示真

!

if (flag)//若flag为真,进入if
{
    ;
}

if (!flag)//若flag为假,进入if
{
    ;
}
+ -

int a = -10;
int b = -a;//b为10
b = +a;//b依然为-10,+用的较少
++  --

int a = 10;
int b = ++a;//前置++,先+1,后使用,相当于a = a + 1,b = a
printf("a=%d b=%d\n", a, b);//输出a=11 b=11

a = 10;
b = a++;//后置++,先使用,后+1,相当于b = a,a = a + 1
printf("a=%d b=%d\n", a, b);//输出a=11 b=10

a = 1;
b = (++a) + (++a) + (++a);//在不同编译器的结果不同,是错误的代码,原因:计算路径不唯一
()

int a = 3.14;
printf("%d\n", a);//输出3(只取整数位,不会四舍五入),但会警告

a = (int)3.14;//强制类型转换
printf("%d\n", a);//无警告

关系操作符

>       大于
>=      大于等于
<       小于
<=      小于等于
!=      用于测试“不相等”
==      用于测试“相等” 
int a = 0;
if (a == 5)        //此处绝对不能写=,原因见上文选择语句代码块内注释
{
    printf("hehe");
}

逻辑操作符

&&       逻辑与(并且)
||       逻辑或(或者)
&&  ||

int a = 5;
int b = 4;
if ((a == 3) && (b == 4))
{
    printf("hehe");      //不同时满足条件,不打印
}

if ((a == 3) || (b == 4))
{
    printf("hehe");      //满足至少一个条件,打印
}

条件操作符

三目操作符(C语言唯一)

exp1 ? exp2 : exp3
//求较大值
int a = 3;
int b = 5;
int m = 0;
if (a > b)
    m = a;
else
    m = b;
    
//条件操作符写法
m = (a > b) ? (a) : (b);//若表达式1成立,执行表达式2,表达式2的结果作为整个表达式的结果;若表达式1不成立,执行表达式3,表达式3的结果作为整个表达式的结果
m = a > b ? a : b;//写法2
m = ((a > b) ? (a) : (b));//写法3

逗号表达式

exp1, exp2, exp3, …expN

逗号表达式从左向右依次计算,整个表达式的结果是最后一个表达式的结果

int a = 3;
int b = 20;
int c = 0;
int d = (a += 3, b = 5, c = a + b, c - 4);
printf("%d\n", d);//输出7

下标引用、函数调用和结构成员

   []       ()         .    ->
下标引用  函数调用      结构体成员
[]

int arr[10] = { 0 };
arr[5] = 9;         //把 9 赋给 arr中下标为 5 的元素,它的操作数:数组名arr、下标5
()

int get_max(int x, int y)//这个不是函数调用操作符,只是语法规定
{
    if (x > y)
        return x;
    else
        return y;
}

int main()//这个不是函数调用操作符,调用main函数的才是函数调用操作符
{
    int m = get_max(3, 5);//此时的函数调用操作符是三目操作符,它的操作数是:函数名get_max,3,5
    
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值