个人C语言学习记录-TWO

1.常量分类:字面常量  const修饰的常变量  #define定义的标识符常量  枚举常量

2.字面常量:直接写出的常量

3.const修饰的常变量(为变量但具有常属性):const=常属性,在int等前加上const即可使其后变量变为“常量”,如:

int main()
{
    const int num = 1;
    return 0;
}

虽然此时num已经成为”常量“,但不可在只可使用常量的地方使用num,如:

int main()
{
    const int num = 1;
    int arr[num] = {0};
    return 0;
}

此段代码即为错误的

4.#define定义的标识符常量:用#define定义的标识符常量可用于只可使用常量的地方,定义时其后不加“;”,如:

#define MAX 10

int main()
{
    int arr[MAX] = {0};
    return 0;
}

5.枚举常量:枚举关键字为enum

enum Sex
{
    MALE,
    FEMALE,
};

int main()
{
    enum Sex s = MALE;
    s = FEMALE;
    MALE = 3;
    printf("%d\n", MALE);
    printf("%d\n", FEMALE);
    return 0;
}

其中MALE与FEMALE为枚举常量,s为某人真的性别,其后的MALE为给s赋的值,运行后,MALE与FEMALE的可被打印出来,对应0与1,不可更改,是常量,但枚举类型创造的变量是可以更改的,即在上段代码中s=FEMALE是正确的,而MALE=3是错误的。

PS:若用int更改上面的MALE,实质上是创造了一个局部变量(优先级大),printf就打印出变量的值

6.字符串:由双引号引起的就是字符串(由单引号引起的是字符),如:“abcdef”就是字符串,“”为空字符串,打印字符串用%s

int main()
{
    char arr1[] = "abc";
    char arr2[] = {'a','b','c'};
    printf("%s\n", arr1);
    printf("%s\n", arr2);
    return 0;
}

其中arr1能正确打印出abc,而arr2不能正确打印abc,原因:“abc”=‘a’,‘b’,‘c',’\0‘,\0是字符串结束的标志,所以若想arr2正确打印,需要加上0或者‘\0’(\0在ASCLL表上表示的值是0),如下:

char arr2[] = {'a','b','c',0};
char arr2[] = {'a','b','c','\0'};

计算字符串长度用strlen(),如下:

int main()
{
    char arr1[] = "abc";
    char arr2[] = {'a','b','c'};
    printf("%d\n", strlen(arr1));
    printf("%d\n", strlen(arr2));
    return 0;
}

其中arr2的长度是随机值,因为没有\0,就会继续向后计算,知道碰到\0

PS:上段代码会出现警告,使用strlen时需要在主函数前加上#include

7.转义字符:

int main()
{
    printf("abc");-----------1
    printf("abcn");----------2
    printf("abc\n");---------3
    return 0;
}

上面的代码中,1号会打印abc,2号打印abcn,3号打印abc,而1号与3号区别是换行,则“\”有转义字符的作用,让某个字符不再是原本有的意思。

\v为水平制表符

\n表示换行

\t表示水平制表符(即为Tab)

\?在书写时防止被解析为三字母词

\\表示一个\

\ddd表示八进制数转化为十进制数后所对应的ASCLL码值(ddd表示1~3个八进制数字)

\xdd表示十六进制数转化为十进制数后所对应的ASCLL码值(dd表示十六进制数)

ASCLL表码值(字符--->表值):0--->48        9--->57

                                                A--->65        Z--->90

                                                a--->97        z--->122

8.注释:代码中有不需要的可直接删除或注释掉;代码过于复杂,可在其旁注释

                //代码  可注释掉当前行//后的代码

                /*代码*/  可注释掉两个*中所有代码

                Ctrl+K+C  注释掉所选代码     Ctrl+K+U  取消注释掉所选代码

9.条件语句:格式如下:

int main()
{
    int input = 0;
    printf("are you study carefully?(1/0)>:");
    scanf("%d", &input);
    if (input == 1)
    {
        printf("I will give you NS"); 
    }
    else
    {
        printf("I will beat you");
    }
    return 0;
}

10.循环语句:while语句,for语句,do...while语句

while语句格式如下:

int main()
{
    int line = 0;
    printf("Become programmer\n");
    while (line<20000)
    {
        printf("Type a line of code %d\n", line);
        line ++;
    }
    printf("You get the telephone microwave(tentative)\n");
    return 0;
}

其中line++就是line=line+1的意思,若删去++,则代码会不断运行,此时可以点击终端窗口,再按Ctrl+C来停止

11.函数:分自定义函数和库函数

自定义函数格式如下:

int Add(int a, int b)
{
    int c = a + b;
    return c;
}

Add叫函数名,()内是函数的参数,{}内写的是函数集,函数集是完成所给的任务,下图:

int main()
{
    int num1 = 20;
    int num2 = 79;
    int sum = 0;
    sum = Add(num1, num2);
    printf("sum = %d\n", sum);
    return 0;
}

即可调用自定义的Add函数(函数可以简化代码)

12.数组:一组相同类型的元素的集合

定义方式:int arr[10] = {...};

其中int为定义整型,arr为数组的名字,[ ]内的数字为数组中元素个数,{ }内写上元素,用“,”隔开。若定义元素为5的字符数组,即为char arr[5] = {...};

int main()
{
    int arr[10] = {1,2,3,4,5,6,7,8,9,10};//数组中元素对应下标,第n个元素的下标为n-1
    int x = 0;
    printf("%d\n", arr[4]);              //第n个元素用arr[n-1]表示,即“数组名[n-1]”
    printf("start\n");
    while (x<10)                         //此段代码即可将数组中所有
    {                                    //元素打印出来
        printf("%d\t", arr[x]);          //
        x ++;                            //
    }                                    //
    return 0;
}

13.操作符:

算术操作符:+  -  *  /  % 对应 加 减 乘 除 取mu(取余数)

移位操作符:>>   <<  对应  右移  左移  (移的位是二进制位),如下:

int main()
{
    int a = 1;
    int b = a<<5;       //或//  a = a<<5;
    printf("%d\n", b);  //者//  printf("%d\n", a);
    return 0;
}

运行后得到32

位操作符:& 按位与   | 按位或   ^按位异或,例如:

int main()
{
    int a = 3;         //二进制为011
    int b = 5;         //二进制为101
    int c = a&b;       //按位与就是并在一起,只有同时为真才为真(0为假,非0为真)
    printf("%d\n", c); //打印结果为1
    return 0;          //按位或:只要有一个为真即为真
}                      //按位异或:对应的二进制位相同即为0、二进制位相异即为1

赋值操作符:分为复合赋值符和赋值符(=)

复合赋值符:

int main()
{
    int a = 10; //
    a = a+10;   //1  1与2等效
    a += 10;    //2  
    a = a-10;   //3  3与4等效
    a -=10;     //4  
    a = a & 2;  //5  5与6等效
    a &= 2;     //6  
    return 0;   //
}

单目操作符 双目操作符 三目操作符:

int main()
{
    int a = 10;
    int b = 20;
    a+b;          //+左右有两个数,即为双目操作符
    return 0;   
}

单目操作符:!反逻辑操作符,假变真、真变假   sizeof操作数的类型长度(以字节为单位)

                     -负值    +正值(一般会省略)   &取地址   ~对一个数的二进制按位取反

                     --前置、后置   ++前置、后置   (类型)强制类型转换   *间接访问操作符(解引用操作符)

        一些单目操作符使用:

int main()
{
    int a = 10;
    printf("a=%d\n", !a);       //0为假,非0为真

    int b = -a;
    int c = +a;
    printf("a=%d\n", sizeof(a));    //sizeof可计算变量、类型、数组...大小
    printf("int=%d\n", sizeof(int));

    int arr[10] = {0};
    int d = 0;
    d = sizeof(arr)/sizeof(arr[0]); //sizeof也可计算数组元素个数
    printf("d=%d\n", sizeof(d));
                            //~按位取反,0变1,1变0
    int x = 0;              //y是有符号的整型,最高位为1就是负数
    int y = ~x;             //按位取反后最高位变为1,负数在内存中储存时,
    printf("y=%d\n", y);    //储存的是补码,使用的、打印的是数的原码
                            //补码-1得到反码,原码按位取反得到反码
    int w = 10;
    int s = w++;     //后置++:将w的值赋给s,w再+1
    printf("w=%d s=%d\n", w, s);

    int m = 10;
    int n = ++m;     //前置++:先让m+1,再将m的值赋给n
    printf("m=%d n=%d\n", n, m);    //前后置--用法与++相同

    int z = (int)3.14;    //()中放类型,将3.14强制转化为整型
    printf("z=%d\n", z);
    return 0;
}

 PS:关于原码、反码、补码:只要是整数,内存中存储的都是二进制的补码。对于正数来说三码相同;负数也存补码。按照正负写出来的二进制数列即为原码,原码符号位(即最高位,最高位为1即为负数,为0即为正数)不变,其他位按位取反得到的就是反码,补码就是反码+1

关系操作符:>大于   >=大于等于   <小于   <=小于等于

                       !=用于测试"不等于"   ==用于测试"等于"

逻辑操作符:&&逻辑与   ||逻辑或

int main()
{
    int a = 5;
    int b = 3;
    int c = a && b; //当&&两边都为真,c才为真=1,c为假时=0
    printf("c=%d\n", c);

    int x = 4;
    int y = 0;
    int z = x || y; //当||两边都为假,z才为假=0,z为真时=1
    printf("z=%d\n", z);
    return 0;
}

条件操作符:exp1 ? exp2 : exp3(exp为表达式)(也是三目操作符)

int main()
{
    int a = 10;
    int b = 20;
    int max = 0;
    max = (a>b? a:b);         //格式为exp1 ? exp2 : exp3  exp1为真,则执行exp2;
    printf("max=%d\n", max);  //exp1为假,则执行exp3
    return 0;
}

逗号表达式:exp1,exp2,exp3,...

其他:下标引用[ ]、函数调用()、结构成员. 和 ->    (下标引用参见数组,函数调用参见自定义函数)

你可能感兴趣的:(C语言学习记录,c语言,学习)