C语言 day03 基础知识学习

一、一维数组
   1.定义:数据类型 数组名[数组元素个数] = {1,2,3};
   2.变长数组(伪):数组元素个数可以改变的数组叫变长数组
       实现: int a ; scanf("%d",&a); int arr[a]; 数组大小会随着输入的内容进行修改
   3.练习:随机产生十个学生的学号(100以内),用户输入学号后判断在数组中是否存在,如果存在则打印出位置。(day03/02findStudent.c)

二、二维数组
   1.二维数组:在一维数组中插入一维数组,每个以为数组中的元素都是一维数组。
   2.格式: 数据类型 数组名[行数][列数] = {值};
       例子: int arr[3][5] = {1,2,3}; 
  3.理解: (int ARR[3])  arr[3] = {1,2,3}; 只可以这么理解
                int arr[3][3] = {1,2,3}; //3行3列
   4.下标: 数组元素中,行下标= 行数 -1
                                     列下标 = 列数 -1
   5.初始化方式:
         int arr[3][2] = {1,2,3,4,5,6};    全部初始化
         int arr[3][2] = {1,3};               部分初始化,没初始化的默认是0
         int arr[3][2] = {{1},{3,2},{4,1}}  第一行1和0,第二行3,2,第三行4,1分组初始化
        int arr[ ][2] = {1,2,3,4,5,6,7} ;   缺省初始化,默认是4行,第四行是7和0
    6.  三维数组:int arr[2][3][4]  ;
   5.补充:fflush(stdout);          //清空输出缓冲stdout. 其中stdin是输入缓冲
    练习: 有5个学生,每个学生都有语数外的成绩,请输入学号和科目(0~2),打印出学生的成绩。(成绩随机生成)(day03/04findDoubleArr.c)


三、函数
    1.函数:对某一部分重复代码进行封装,方便使用,增加代码的模块化。
     2.格式:返回值类型 函数名(参数)
                {
                      函数体;
                }
     3.注意: 如果没有返回值用void代替,如果没有参数可以空着也可以用void代替 
                   函数内部不可以定义函数,必须放全局。
                   如果不写返回值类型也不写void则默认是int返回值。

     4.参数:调用者给被调用者传递值
        格式:返回值类型 函数名(数据类型 变量名,数据类型 变量名){ }
        实参:实际参数,在内存中存在。比如main函数中的变量
        形参: 形式参数,函数调用前没有内存存储形参,只是形式。
                  所有形参都是实参的拷贝。
        练习:请写一个函数,交换两个变量的值,然后再main中打印交换后的值,在函数中打印交换后的值。(day03/07change.c)
         注意:形参改变,不会影响实参的值,他们在不同的内存控件。
     5.局部变量和全局变量
         局部变量:定义在局部,在某一个括号中的变量(小括号,大括号)
         全局变量:  定义在全局,没有定义在某一个括号中
     6.作用域和生命周期
        作用域: 变量可以使用的范围,局部变量一般在某一个括号中,空间角度     
        生命周期:变量从在内存中存在到内存中释放的时间。时间角度
     7.局部变量和全局变量的区别
         生命周期的区别:
                  全局变量的生命周期:从程序运行到整个程序结束
                  局部变量的生命周期:从定义开始到括号结束。
         作用域的区别:
                  全局变量:在整个项目中都可以使用,不限于当前文件
                  局部变量:从定义开始到大括号结束。
    8.静态变量和常量
      常量:不可以修改的量。用const修饰。 const int x = 123; 则x=234错误。
      静态变量:在变量前加static。
      全静态变量:全局静态变量不会修改生命周期,但把作用域限定在本文件中。
      局部静态变量:局部静态变量作用域不变,生命周期从定义开始到整个程序结束吗,局部静态变量只会初始化一次。
    8. 注意:在同一个作用域内不可以有相同的变量名
               在不同的作用域内可以有相同变量,如果全局变量和局部变量名相同时,优先使用局部变量,就近原则。
               全局变量只有一份,如果某个位置修改了全局变量的值,其他地方全部修改。一般情况下避免使用全局变量。
    9.返回值
       作用:函数执行完代码后,把结果反馈给调用者。
       格式: int fun(int x){ return xx;}
       注意:如果有返回值类型,就必须加return关键字;
                 return只可以返回一个值,例如 return x,y;是错误的。
                 函数遇到return 则结束,后面的代码不会执行。
                 如果返回值是void,可以使用return;结束函数。
                 函数在使用前需要申明,如果没有申明会隐式声明成int返回值和int参数
      练习:请在main函数中输入一个行数和列数,通过调用函数返回杨辉三角对应的值。(day03/08return.c)
   10.main函数的参数
     格式: int main(int argc,char* argv[ ]);
      参数: argc是参数的个数,argv是参数的内容。char* 表示字符串,[ ]字符串数组。
         
    补充:
        #include
         int atoi(const char *nptr);    把字符串转换成int
         long atol(const char *nptr);  把字符串转换成long
         long long atoll(const char *nptr); 把字符串转换成longlong
         如果需要把某一个类型转换成其他类型,直接在前面加上转换后的类型加小括号 int x = 10;  float y = (float)x;这个叫强制类型转换。
         在32位系统中,long是4字节,longlong是8字节,在64位系统中,long是8字节,longlong也是8字节。
    11.递归函数(明天讲)
     12.可变长参数(明天讲)
     13.函数指针(回调函数) (明天讲)

五、字符串: 
    1.字符串:字符串是由双引号括起来的,以\0结束的一串字符   
     2. 字符串常量: “abc” , 每个字符串后默认会添加'\0', ascii是0
     3.表示方式: 
        char arr[10] = {'a','b','c'}; 部分初始化后面的部分是0,而\0的ascii是0
        char * arr = "abcasg";  指针表示方式。
        char arr[] = "abcde";
      4.字符串的长度包含\0,字符串的有效长度不包含\0,%s打印字符串。
      5.字符串函数:
        1>字符串不可以使用==比较,strcmp
            #include
            int strcmp(const char *s1, const char *s2);
            作用: 比较两个字符串是否相同
            参数:s1 第一个字符串
                      s2 第二个字符串
             返回值:如果相同返回0,如果第一个大返回正数,第一个小返回负数
                          返回值是第一个字符串中不相同的字母ascii值减去第二个字符串不同的字母的sacii。
       2> 计算字符串的长度 strlen
         size_t strlen(const char *s);
         作用:得到字符串的有效长度,不含\0
         参数: 需要计算长度的字符串
         返回值:返回字符串的有效长度
       3>字符串的拷贝 strcpy
         char*  strcpy(char *dest, const char *src);
         作用: 把stc中的内容拷贝到dest中
         参数: stc 源字符串
                    dest是目的字符串,dest只可以用数组的表示方式
                    dest必须有足够的空间存放stc的内容,比如说stc是“acd”,则dest中数组必须有4个元素。
           返回值:拷贝后的dest的首地址,dest字符串。


作业1:自定义函数实现strcpy功能。
作业2: 在终端输入 ./a.out 1 + 2 ,打印出3.但需要用函数实现。
预习:结构体,枚举联合 宏定义 头文件 条件编译 makefile gdb

你可能感兴趣的:(#,C语言,c语言)