char :1个字节
    char*(即指针变量): 8个字节
    short int : 2个字节
    int: 4个字节
    unsigned int : 4个字节
    float: 4个字节
    double: 8个字节
    long: 8个字节
    long long: 8个字节
    unsigned long: 8个字节
    char型数据在内存中存储的是ASCII码 字形码表汉字
    char ch; ch=getchar()意思是将变量ch定义为char字符类型,当键盘输入一个字符的时候,将此值赋给变量ch。
    getchar()函数的作用是从计算机终端(一般为键盘)输入一个字符。getchar()函数只能接收一个字符,其函数值就是从输入设备得到的字符。
    当程序调用getchar时,程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。

    常用数据类型和取值范围以及所占字节数

    ascii码: 一种规定 把字符转换成码值(可查表)另记(0~31 127 不可见字符)

    ‘0’ 48

    ‘a’ 97

    ‘A’ 65

    使用方式:

    int a; // int(数据类型) a(变量名) 变量名由字母数字下划线等组成均可但首字母不能是数字 不能定义关键字

    float b = 2.34 //初始化 在进行定义的时候赋值

    int c; c = 10; //直接赋值 赋值之前必须要先定义

    short int %d

    int %x x对应16进制int

    int %o x对应8进制

    long int %ld

    float %f

    double %lf

    char %c

    字符串 %s

    地址 %p

    下列4组数据类型中,C语言允许的一组是()。
    B、整型、实型、字符型、空类型

    以下语句的输出结果是()。
    int u=010,v=0x10,w=10;
    printf(“%d,%d,%d\n”,u,v,w);
    u 8进制数以0开头 八进制 故 u=8
    v 16进制数以0x开头 十六进制 故v=16
    故结果为 8 16 10

    ==表判断
    a%=b 等效于 a=a%b 模除并赋值。
    a|=b 等效于 a=a|b 按位或并赋值。
    a&=b 等效于 a=a&b 按位与并赋值。
    a^=b 等效于 a=a^b 按位异或并赋值。
    a!=b 逻辑判断,a不等于b,当ab不等时为真。
    && 逻辑与,均为真时结果为真。
    || 逻辑或,均为假时结果为假,否则为真。
    !a 逻辑非, a为真时结果为假,否则反。
    | 按位或
    ^ 按位异或
    & 按位与
    ~ 按位取反

    运算符号
    pow(x,y)x的y次方;
    % 取余数(int型);
    fabs(y) 取某数的绝对值;
    x-=8 x=x-8;
    y%=a+3 y=y%(a+3);
    sizeof 计算字节数的符号
    sizeof(type)or sizeof(object)
    sqrt 平方根函数
    QQ截图20210318102240.png

    自增自减运算符:
    ++i; i++; —i;i—
    ++为加一
    —为减一
    只可以是变量,不可以是函数或常量
    赋值运算符地位倒数第二,逗号倒数第一
    m=++i ++在i的左边表示i的值增1,再把增1后的值赋给m
    n=j++ ++在j的右边边表示先赋值把j的值给n,再把j增1
    —的用法与++相同
    结构化程序设计三种基本结构
    ①顺序 ②选择 ③循环

    关系运算符:
    要求2个运算对象,得到逻辑值,结果1为真,0为假
    QQ截图20210318092239.png
    逻辑运算符:
    || 或 &&与 !非 注意数学连等以及别的要用逻辑运算符的与表达例如33)&&(x<5)
    QQ截图20210318092935.png

    逻辑运算符值表:
    QQ截图20210318093418.png
    逻辑运算遵循下面法则
    短路特性:当逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出解时,才执行该运算符
    例题
    QQ截图20210318094511.png
    根据短路特性,在与逻辑不成立的情况下,与逻辑式后半部分不计算,直接输出m=0 n=1
    if 条件语句括号后不加分号if条件后若有两个以上的编程语句则应该用{}扩起
    ;在c语言中表示空语句
    91ef76c6a7efce1b2b7a35d4a051f3deb48f655f.png

    if else双分支选择语句输入两组数据,运行2次输入程序时用的数叫测试用例。
    switch 使用switch实现多分枝语句case后由空格隔开变量与每一个case不相等时执行default后的语句,switch里只有最后一个分支不需要写break多分枝和值的匹配用的很多,习惯把default语句写在switch语句的最后,但不一定必须放在所有分支的最后。

    编译器会在编译过程中自动的优先判断case,最后再去看default。只是有一些case可能想要部分进入default的,但顺序是没有要求的,可以放在最前面。如果放在前边,那需要在default后加入break,且default可以不写。
    QQ截图20210325083621.png

    break语句的目的是从switch或loop循环跳出来
    判断一个数是真还是假就是看他是否为零,如果为零,不执行。
    1?2:3 ?:是C语言里的三目运算符如果为真用2的值位假用3的值
    Loops循环语句三种模式
    1.while
    while(loop condition)
    statement;
    条件为真则执行statement如果循环条件为假循环结束。
    循环体可为语句单个语句直接写,多个用大括号括住,循环变量应该给一个初始值
    2.do-while
    do
    satement
    while(loop condition)
    上来就直接执行然后判断,符合真继续执行,假循环结束。(do while里的循环体语句至少执行一次)循环体语句超过两句使用大括号。{循环变量初始化,循环变量如何赋值,如何修改循环控制变量}do while最后要加分号。
    3.for(exp1;exp2;exp3)
    QQ截图20210401083233.png
    for语句一定要有分号
    省略表达式一可以在循环之前写,省略了第二个表达式系统会认为循环条件始终为真,省略了第三个条件

    在使用循环体语句编程时,应当注意在循环体中语句是存在逻辑顺序的,如果顺序不对,那么所得的结果也是部不正确的,例如今早的第三题,应在最后在进行++操作,如果进行早了1会被当做2来执行
    break关键字
    在《C语言switch case语句》一节中,我们讲到了break,用它来跳出 switch 语句。

    当 break 关键字用于 while、for 循环时,会终止循环而执行整个循环语句后面的代码。break 关键字通常和 if 语句一起使用,即满足条件时便跳出循环。

    使用 while 循环计算1加到100的值:
    #include
    int main(){
    int i=1, sum=0;
    while(1){ //循环条件为死循环
    sum+=i;
    i++;
    if(i>100) break;
    }
    printf(“%d\n”, sum);
    return 0;
    }
    运行结果:
    5050

    while 循环条件为 1,是一个死循环。当执行到第100次循环的时候,计算完i++;后 i 的值为 101,此时 if 语句的条件 i> 100 成立,执行break;语句,结束循环。

    在多层循环中,一个 break 语句只向外跳一层。例如,输出一个44的整数矩阵:
    #include
    int main(){
    int i=1, j;
    while(1){ // 外层循环
    j=1;
    while(1){ // 内层循环
    printf(“%-4d”, i
    j);
    j++;
    if(j>4) break; //跳出内层循环
    }
    printf(“\n”);
    i++;
    if(i>4) break; // 跳出外层循环
    }
    return 0;
    }
    运行结果:
    1 2 3 4
    2 4 6 8
    3 6 9 12
    4 8 12 16
    当 j>4 成立时,执行break;,跳出内层循环;外层循环依然执行,直到 i>4 成立,跳出外层循环。内层循环共执行了4次,外层循环共执行了1次。
    continue语句
    continue 语句的作用是跳过循环体中剩余的语句而强制进入下一次循环。continue语句只用在 while、for 循环中,常与 if 条件语句一起使用,判断条件是否成立。

    来看一个例子:
    #include
    int main(){
    char c = 0;
    while(c!=’\n’){ //回车键结束循环
    c=getchar();
    if(c==’4’ || c==’5’){ //按下的是数字键4或5
    continue; //跳过当次循环,进入下次循环
    }
    putchar(c);
    }
    return 0;
    }
    运行结果:
    0123456789
    01236789

    程序遇到while时,变量c的值为’\0’,循环条件c!=’\n’成立,开始第一次循环。getchar() 使程序暂停执行,等待用户输入,直到用户按下回车键才开始读取字符。

    本例我们输入的是 0123456789,当读取到4或5时,if 的条件c==’4’||c==’5’成立,就执行 continue 语句,结束当前循环,直接进入下一次循环,也就是说putchar(c);不会被执行到。而读取到其他数字时,if 的条件不成立,continue 语句不会被执行到,putchar(c);就会输出读取到的字符。

    break与continue的对比:break 用来结束所有循环,循环语句不再有执行的机会;continue 用来结束本次循环,直接跳到下一次循环,如果循环条件成立,还会继续循环。
    数组长度就是数组里的数的个数
    二维数组的使用,可以把二维数组认定为多个一维数组,数组的顺序固定,行下标慢,列下标快左行右列
    定义时赋值叫做初始化,按行初始化按照顺序可以直接写,按行看照片!假如没有写全没赋值的系统补零,允许行的成绩省略不写,第二个长度(列)不能省略!
    二维数组
    外层控制行下标,内层控制列下标在内层有scanf语录。
    输入双层for输出也是双层for字符数组必须以\0结尾系统会自动补出表示ASCII码值为零的字符作为循环的条件
    一维字符数组重点掌握!数组名就是取地址,对于字符数组而言!系统认为字符串结束就是空格
    字符数组,数组名即为地址,只写数组名就好了,要记得长度多一
    scanf不可存放空格,可用gets替代!
    gets(c);
    上下对应
    scanf getchar gets 输入类的函数
    printf putchar puts 输出类的函数
    strlen 计算长度到/0之前
    strcpy 复制字符串全复制
    strcat 连接两个字符串
    strcmp 比较两个字符串大小
    IMG_20210422_081514.jpg

    冒泡循环实例
    IMG_20210422_085323.jpg
    高内聚低耦合!
    定义时是说明符,运算时是运算符,在使用时指针变量前的*的位置不同,内涵也不同。
    二级指针变量存一级指针变量的地址,指针是存地址的