初识C语言(万字学习笔记)

目录

一.什么是C语言?

二.第一个C语言程序

 2.1   第一个c语言程序:

三.数据类型

3.1   整型:​编辑

 3.2   浮点型:float——单精度浮点数;double——双精度浮点数​编辑

3.3   void类型:void 类型指定没有可用的值。

3.4    数据类型转换:

 四.变量 & 常量

4.1   变量(建议初始化)

4.1.1   创建变量

4.1.2   标识符

4.1.3   变量名的规则

4.1.4   变量命名的艺术:见名知意。

4.1.5   变量的分类:

4.1.6   变量的作用域和生命周期

 4.2   常量(一般全字母大写)

4.2.1   使用 #define 预处理器

4.2.2   使用 const 关键字

4.2.3   enum(枚举)

枚举是 C 语言中的一种基本数据类型,用于定义一组具有离散值的常量。,它可以让数据更简洁,更易读。

 五.字符串 & 转义字符 & 注释

5.1   字符串

5.2   转义字符 

5.3   注释

六.选择语句 & 循环语句

6.1   选择语句

6.1.1   C 语言中 if 语句的语法:

 6.1.2   C 语言中 if...else 语句的语法:

6.1.3   C 语言中 嵌套 if 语句的语法:

6.1.4   C 语言中 switch 语句的语法: ​编辑

6.1.5   C 语言中 嵌套 switch 语句的语法:

6.2   循环语句

6.2.1   while循环:

6.2.2   for循环:

6.2.3   do...while 循环 :

6.2.4   循环的嵌套:

6.2.5   循环控制语句:

 七.函数

7.1   定义函数

7.2    调用函数   

八.数组

九.操作符

9.1   算数操作符

9.2   位运算符 (涉及二进制,暂时不讲)

9.3   赋值运算符

 9.4   逻辑运算符

 9.5   关系运算符

9.6   杂项运算符 

 9.7   逗号表达式

十.关键字

十一.初识指针(基础)

11.1   内存

11.2   什么是指针

11.3   使用指针

11.4   指针变量的大小

十二.结构体

12.1   何为结构体

12.2   定义结构体

 12.3   结构体初始化


一.什么是C语言?

1.C语言是一门通用计算机编程语言,广泛应用于底层开发

2.C语言最初的标准:ANSI C,C89、C90、C99、C11……。

3.计算机处理的是二进制信息(011101000010011)

4.c语言是一门面向过程的计算机编程语言,与c++,java等面向对象的编程语言有所不同。

现在的编译器主要有ClangGCC、WIN-TC、SUBLIME、MSVC(vs2019-集成开发环境)、Turbo C等。

二.第一个C语言程序

1.集成开发环境:集成了很多子功能——编辑、编译、链接、运行、调试

 2.c语言程序一般有两个文件:.c   源文件     .h 头文件 

 2.1   第一个c语言程序:

#include<stdio.h>

int main()
{
    printf("Hello World!");
    return 0;
}

注:(1)main函数是程序的入口,即程序从main开始运行。

        (2)一个工程只能有一个main函数。

        (3)程序的第一行 #include <stdio.h> 是预处理器指令,告诉 C 编译器在实际编译之前要包含 stdio.h 文件。

         (4)printf(...) 是 C 中另一个可用的函数,会在屏幕上打印信息。

         (5)return 0; 终止 main() 函数,并返回值 0。

三.数据类型

3.1   整型:

注:①long long      8字节   

②int类型输出用%d        long类型输出用%ld        long long类型输出用%lld

 3.2   浮点型:float——单精度浮点数;double——双精度浮点数

注:直接写出的浮点型数据,会被编译器默认为double类型

3.3   void类型:void 类型指定没有可用的值

3.4    数据类型转换:

(1)数据类型转换:C 语言中如果一个表达式中含有不同类型的常量和变量,在计算时,会将它们自动转换为同一种类型;在 C 语言中也可以对数据类型进行强制转换

//强制类型转换:(数据类型)


int a = (int)3.14;     //3.14默认为double类型,但是通过(int)被强制转换为整型
printf("a=%d", a);   //输出结果为a=3

(2)自动转换规则:①浮点数赋给整型,该浮点数小数被舍去;

                                   ②)整数赋给浮点型,数值不变,但是被存储到相应的浮点型变量中。

附:计算机中常见单位:

 四.变量 & 常量

4.1   变量(建议初始化)

4.1.1   创建变量

1.数据类型+变量名。(float 后面的数据加一个f,double则不需要

4.1.2   标识符

C 标识符是用来标识变量、函数,或任何其他用户自定义项目的名称。一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)

C 标识符内不允许出现标点字符,比如 @、$ 和 %。C 是区分大小写的编程语言。因此,在 C 中,Manpower 和 manpower 是两个不同的标识符。

4.1.3   变量名的规则

1.跟标识符一样,但是变量名不能与c语言的关键字相同

4.1.4   变量命名的艺术:见名知意

骆驼式命名法:是指混合使用大小写字母来构成变量和函数的名字。eg:CamelCase; SunFlower等。

②匈牙利命名法:基本原则是:变量名 = 属性 + 类型 + 对象描述,其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分。 eg.char chGraden 、int nLength 、p  = *pDoc 等。

③下划线命名法:是指在每个独立的单词直接添加下划线。这种命名在内核代码中尤为常见。 eg. sun_flower student_data等。

4.1.5   变量的分类:

局部变量(优先级高于全局变量) & 全局变量。(附:scanf是输入函数,用法与printf一样,只不过在变量名前加取地址符&

附:extern 使用外部变量(extern int a = 0;)

4.1.6   变量的作用域和生命周期

 4.2   常量(一般全字母大写)

4.2.1   使用 #define 预处理器

#define 可以在程序中定义一个常量,它在编译时会被替换为其对应的值。(没有赋值符号"=")

#define MONEY 100;

4.2.2   使用 const 关键字

const 关键字用于声明一个只读变量,即该变量的值不能在程序运行时修改。(本质还是变量)

const int a = 100;

4.2.3   enum(枚举)

枚举是 C 语言中的一种基本数据类型,用于定义一组具有离散值的常量。,它可以让数据更简洁,更易读。

 五.字符串 & 转义字符 & 注释

5.1   字符串

1.这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。

注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串 内容。

2.字符串用双引号,单个字符用单引号;字符串用%s,单个字符用%c。 

字符串是可以放在字符数组中的!用单个字符要加\0,字符串整体输入则不需要

char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'};
char site[] = "RUNOOB";
printf("%s", RUNOOB);
printf("%c", 'R');

3.关于%d等的介绍:

附:%f—float        %lf—double

 4.有关字符串操作的函数:

注:strlen求的是截止第一个\0前的字符个数\0不算字符串的长度

实例: 

5.2   转义字符 

1.转义字符:

注: ①打印 \ 必须用'\\'。

        ②在计算字符串长度时,一个转义字符算一个长度。

        ③注意\ddd是八进制,不含数字8。

2.ASCII表:常用(A—65        a—97        字符0—48

 ASCII表与转义字符\ddd、\xdd有关: 

eg:  ①  \130:  130(八进制)= 88(十进制) 所以输出X

       ②  \x30:30(十六进制)= 48(十进制)所以输出0

5.3   注释

1.注释的作用:①代码中有不需要的代码可以直接删除,也可以注释掉 。

                         ② 代码中有些代码比较难懂,可以加一下注释文字。

2.两种注释: ① /*xxxxxx*/          可以跨行注释                             缺陷:不能嵌套注释

                      ② //xxxxxxxx         可以注释一行也可以注释多行    缺陷:不能跨行注释

六.选择语句 & 循环语句

1.c语言作为结构化的程序设计语言:顺序结构,选择结构,循环结构。

6.1   选择语句

6.1.1   C 语言中 if 语句的语法:

 6.1.2   C 语言中 if...else 语句的语法:

6.1.3   C 语言中 嵌套 if 语句的语法:

6.1.4   C 语言中 switch 语句的语法: 

 注:

  • switch 语句中的 expression 是一个常量表达式,必须是一个整型或枚举类型。
  • 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。
  • case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。
  • 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
  • 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。
  • 不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。
  • 一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。

6.1.5   C 语言中 嵌套 switch 语句的语法:

实例:根据性别满足工龄奖励小程序

#include<stdio.h>
int main(void)
{
    char sex;
    int age  ;
    printf("请输入你的性别简称!男(M),女(F)\n");
    scanf_s("%c", &sex);
    switch (sex)
    {
    case 'M':
    case 'm':
    printf("你的性别为“男”请你进入测试!\n");
    printf("请输入你的工龄!\n");
    scanf_s("%2d",&age);
        switch (age)
        { 
        case 5:
            printf("奖励iphone一台!!\n");
            break;
        case 10:
            printf("奖励汽车一辆!!\n");
            break;
        case 15:
            printf("奖励小楼一栋!!\n");
            break;
        default:
            printf("抱歉,未满足奖励条件或者超出工龄!!\n");
            break;
        }
    break;
    case 'F':
    case 'f':
        printf("你的性别为“女”请你进入测试!\n");
        printf("请出入你的工龄!\n");
        scanf_s("%2d",&age);
        switch (age)
        {
        case 5:
            printf("奖励iphone一台!\n");
            break;
        case 10:
            printf("奖励名牌化妆品一套!\n");
            break;
        case 15:
            printf("奖励爱马仕包一个!\n");
            break;
        default:
            printf("抱歉, 未满足奖励条件或者超出工龄!!\n");
            break;
            }
        break;    
    }
    return 0;
}

6.2   循环语句

6.2.1   while循环:

只要给定的条件为真,C 语言中的 while 循环语句会重复执行一个目标语句。

6.2.2   for循环:

for 循环允许您编写一个执行指定次数的循环控制结构。

6.2.3   do...while 循环 :

不像 for 和 while 循环,它们是在循环头部测试循环条件。在 C 语言中,do...while 循环是在循环的尾部检查它的条件。

do...while 循环与 while 循环类似,但是 do...while 循环会确保至少执行一次循环。

6.2.4   循环的嵌套:

C 语言允许在一个循环内使用另一个循环。

①while的嵌套:

②for的嵌套:

 

③do...while的嵌套:

6.2.5   循环控制语句:

break:当 break 语句出现在一个循环内时,循环会立即终止,且程序流将继续执行紧接着循环的下一条语句。

continue:C 语言中的 continue 语句有点像 break 语句。但它不是强制终止,continue 会跳过当前循环中的代码,强迫开始下一次循环。对于 for 循环,continue 语句执行后自增语句仍然会执行。对于 while 和 do...while 循环,continue 语句重新执行条件判断语句。

goto:C 语言中的 goto 语句允许把控制无条件转移到同一函数内的被标记的语句。

注意:在任何编程语言中,都不建议使用 goto 语句。因为它使得程序的控制流难以跟踪,使程序难以理解和难以修改。

 七.函数

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

7.1   定义函数

注: 返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void

        ② 函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。

        ③参数:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。

        ④函数主体:函数主体包含一组定义函数执行任务的语句。

7.2    调用函数   

如果函数定义在main函数后面,则在前面需要先声明。

#include <stdio.h>
 
/* 函数声明 */
int max(int num1, int num2);
 
int main ()
{
   /* 局部变量定义 */
   int a = 100;
   int b = 200;
   int ret;
 
   /* 调用函数来获取最大值 */
   ret = max(a, b);
 
   printf( "Max value is : %d\n", ret );
 
   return 0;
}
 
/* 函数返回两个数中较大的那个数 */
int max(int num1, int num2) 
{
   /* 局部变量声明 */
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

附:如果在定义函数时,在函数的首部的最左端加关键字 extern,则此函数是外部函数,可供其它文件调用。

如函数首部可以为:

extern int max (int a,int b)

八.数组

1.定义:一组相同类型数据的集合。

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

2.初始化:

3.数组的下标:数组的下标都是从0开始,a[0]代表数组的第一个元素 。

4.数组的使用:数组必须通过循环来使用,无论是数据的输入还是输出。

九.操作符

9.1   算数操作符

1.下表显示了 C 语言支持的所有算术运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:

注:①%只能是整型。

②关于++和--,有前置和后置:

前置:先加(减)一,后使用                      后置:先使用,后加(减)一

9.2   位运算符 (涉及二进制,暂时不讲)

&        |        ^        ~        <<        >>

9.3   赋值运算符

1.下表列出了 C 语言支持的赋值运算符(最后5个涉及位运算符):

 9.4   逻辑运算符

1.下表显示了 C 语言支持的所有关系逻辑运算符。假设变量 A 的值为 1,变量 B 的值为 0,则:

 9.5   关系运算符

1.下表显示了 C 语言支持的所有关系运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:

9.6   杂项运算符 

1.下表列出了 C 语言支持的其他一些重要的运算符,包括 sizeof 和 ? :

注:①sizeof()单位是字节

②上面最后一个也叫三元运算符,使用方法如下:

 

 9.7   逗号表达式

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

2..逗号表达式特点:从左向右依次计算,整个表达式的结果是最后一个表达式的结果。

附:下标引用([  ])、函数调用((  ))和结构成员(. ->)

十.关键字

1.c语言预留关键字

 

十一.初识指针(基础)

11.1   内存

1.内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。

所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。

为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。

2.变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。 取出变量地址如下:

#include <stdio.h>
int main()
{
     int num = 10;
     &num;    //取出num的地址
    //注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)
     printf("%p\n", &num);//打印地址,%p是以地址的形式打印
     return 0;
}

11.2   什么是指针

1.通俗来说就是一个快捷方式。指针也就是内存地址,指针变量是用来存放内存地址的变量。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。指针变量声明的一般形式为:

type *var_name;

2.在这里,type 是指针的基类型,它必须是一个有效的 C 数据类型,var_name 是指针变量的名称。用来声明指针的星号 * 与乘法中使用的星号是相同的。但是,在这个语句中,星号是用来指定一个变量是指针。以下是有效的指针声明:

int    *ip;    /* 一个整型的指针 */
double *dp;    /* 一个 double 型的指针 */
float  *fp;    /* 一个浮点型的指针 */
char   *ch;    /* 一个字符型的指针 */

注:

所有实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,对应指针的值的类型都是一样的,都是一个代表内存地址的长的十六进制数。

不同数据类型的指针之间唯一的不同是,指针所指向的变量或常量的数据类型不同。

11.3   使用指针

使用指针时会频繁进行以下几个操作:

定义一个指针变量、把变量地址赋值给指针、访问指针变量中可用地址的值。这些是通过使用一元运算符 * 来返回位于操作数所指定地址的变量的值。

#include <stdio.h>
int main()
{
     int a = 10;
     // &-取地址操作符   
     int* pa = &a;  // '*'说明pa叫做指针变量 
     // int————说明pa是指向int类型的变量
     *pa = 20;   // * 解引用操作符——通过地址找到地址所指向的对象,*pa就等价于a                 
     printf("%d\n", a); 
     return 0;
}  //输出结果为20

注:&a的时候取出的是四个字节中地址较小的一个字节的地址

11.4   指针变量的大小

1.指针大小在32位平台是4个字节,64位平台是8个字节。

十二.结构体

12.1   何为结构体

C 数组允许定义可存储相同类型数据项的变量,结构是 C 编程中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。

12.2   定义结构体

 12.3   结构体初始化

struct Stu
{
    char name[20];    //名字
    int age;          //年龄
    char sex[5];      //性别
    char id[15];     //学号
};    //注意有分号
//打印结构体信息
struct Stu s = {"张三", 20, "男", "20180101"};

//.为结构成员访问操作符
printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);

//->操作符
struct Stu *ps = &s;
printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps-
>id);

猜你喜欢

转载自blog.csdn.net/2303_77414881/article/details/131602978