翁恺的视频见下方链接

翁恺C语言_哔哩哔哩_bilibili

一、C语言介绍

1.1 程序的执行

        python属于解释性语言,不需要编译,便可以直接运行代码。

        语言没有解释/编译之分,python也可以使用编译器运行,C语言也可以通过解释器运行。

1.2 为什么是C?

        在很多场合C语言是唯一的选择,比如嵌入式系统等。

        现代的编程语言在语法上的差异是很小的。

1.3 简单历史

        C语言从1969年的夏天开始。C语言是从B语言发展而来,B语言是从BCPL发展而来,BCP:

是从FORTRAN发展而来。

        指针是C语言的灵魂所在。

        1973年3月,第三版的Unix上出现了C语言的编译器。

        1973年11月,第四版的Unix(System Four)发布,该版本完全用C语言编写。

1.4 C的发展与版本

  • 1989年ANSI发布了一个标准——ANSIC
  • 1990年ISO接收了ANSI的标准——C89
  • C的标准在1995年和1999年两次更新——C95和C99
  •  所有当代的编译器都支持C99

1.5 C语言用在哪里?

  • 操作系统
  • 嵌入式系统
  • 驱动程序
  • 底层驱动
    • 图形引擎、图像处理、声音效果

1.6 运行C语言

  • C语言需要被编译才能运行,因此需要
    • 编辑器(用于敲打记录代码)
    • 编译器(将代码转为计算机语言)
  • IDE(集成开发环境) 将上述两者集合在一起

1.7 第一个程序

  • \n  表示回车 
#include <stdio.h>
int main()
{
    printf("Hello World!\n");  
    return 0;
}
四则运算
四则运算C符号意义
+
--
x*
÷/
%取余
()()括号

取余指的是舍弃结果部分,取余数。

二、变量

2.1 定义

  • 变量是用来临时保存数据的,该数据是可以变化的数据。
  • 变量定义的一般形式为:
    • <类型名称><变量名称>;
  • 变量的名字是一种“标识符
    • 构造原则:必须由字母(区分大小写)、数字、下划线组成。而且,标识符的第一个字符不可以是数字。
  • C语言的“保留字”,即不能作为变量名:
    • 如:break、case、char等

2.2 赋值和初始化

  • 如 int price=0;
    • int是变量类型,初始值为0
    • “=”是一个赋值运算符,将左边的值赋值给右边
    • “a=b”在数学里表示关系,静态的;程序里是表示动作,动态的
  • C语言中应对所有变量进行初始化,若未初始化,变量所处的内存对应值不确定。(VS未初始化的值都默认为0了
#include <stdio.h>
int main()
{
    int i;
    int j;
    j = i + 10;
    printf("%d\n",j);  
    return 0;
}
  • 常见初始化方法:
    • <类型名称><变量名称>=<初始值>
    • int price =0;
    • int price=0,amount=0; 
  • 在ANSI C中,所有变量必须在开头定义
  • C99中,变量可以在任意地方定义,只要在第一次使用之前

2.3表达式

  • “=”是赋值运算符,有运算符的式子就叫做表达式。

2.4 运算符

2.4 常量

  • 在C99里,可直接定义常量
    • const int AMOUNT = 100
    • 即定义该值为常量,而不是变量

三、条件判断

3.1 常见的if判断形式

 if,else if形式是if,else级联的产物,只是省略了 else 和 if之间的方括号。

#include<stdio.h>
int main()
{
    int a = 10;
    if (a<20)
    {
        printf("%d",a);
    }
    else
    {
        printf("No");
    }

     if (a<20) //不带方括号时,运行if最近的一行
        printf("%d",a); 
    else
        printf("No");


    return 0 ;
}

条件:

 3.2 switch多路分支形式

#include<stdio.h>
int main()
{
    int type = 0 ;
    switch (type) //参数需为int型
    {
    case 1:
        printf("now is 1");
        break;//跳出结构
    case 2:
        printf("now is 2");
        break;
    case 3:
        printf("now is 3");
        break;
    default:
        printf("now is null");
        break;
    }
    return 0;
}

四、循环

4.1 while循环

判断输入数字的位数。先判断条件成立与否,再进入循环。

#include<stdio.h>
int main()
{
    int num = 0;
    int x;
    
    scanf("%d",&x);

    //若是去掉该部分,则输入0时,位数判断也为0.
    num++;
    x /= 10;

    while (x>0)
    {
        num++;
        x /= 10;
    }
    printf("%d",num);
    return 0;
}

4.2 do-while循环

 先进入循环,再判断条件成立与否。

#include<stdio.h>
int main()
{
    int num = 0;
    int x;
    
    scanf("%d",&x);

    do  //这里不需要在前面先num++,会先执行循环体,再去判断
    {
        num++;
        x /= 10;
    }while (x>0);
    
    printf("%d",num);
    return 0;
}

 4.3 for循环

#include<stdio.h>
int main()
{   
    int n,fact=1;
    // int i = 1;
    printf("请输入阶乘数:");
    scanf("%d",&n);

    for (int i=1;i<=n;i++) //C99的写法
    {
        if (i==9)
        {
            continue; //跳出本次循环,下面的循环体语句不执行了
        }
        
        if (i==10)
        {
            break; //跳出循环
        }
        fact *= i ;
    }
    printf("%d",fact);
    return 0;
}

4.4 Break 与 Continue

break会跳出循环,而continue则是跳出此处循环体,进入下一次循环。

4.5 goto 跳出循环(不建议使用)

利用goto跳出多层循环嵌套,直接进入out所指向的内容。但会破坏代码的可读性。

五、数据类型

5.1 概念

  • C语言的变量必须:
    • 在使用前定义,并且
    • 确定类型

5.2 类型安全

 5.3 C语言的类型

        通过sizeof函数判断字节数。

printf("char = %d\n",sizeof(char));

整形在内存中为二进制补码,而浮点值是编码格式。

类型字节比特(bit)
char18
short216
int4(取决于编译器、CPU)32
long4(取决于编译器、CPU)32
long long864
float432
double864
long double16128

三、C语言常用函数

3.1 printf

  • printf用于终端打印显示内容。
#include<stdio.h>
int main()
{
    printf("12+34=%d",12+34);  //%d表示整形,并填入逗号后的数据
    return 0;
}

   

3.2 scanf

  • sacnf函数用于人机交互输入。当输入的值与定义类型不同时,输出值为0。
#include <stdio.h>
int main()
{
    int price = 0;
    printf("请输入金额(元):"); 
    scanf("%d",&price); //将输入的值,作为整形赋值给price变量

    int change = 100 - price;
    printf("找您%d元\n",change);  
    return 0;
}

  

#include <stdio.h>
int main()
{
    int a,b;
    printf("请输入两个整数:"); 
    scanf("%d,%d",&a,&b); //将输入的值,作为整形赋值给price变量
    printf("%d+%d = %d\n",a,b,a+b);  
    return 0;
}

   

3.3 const(C99)一般为全大写常量名

  • const是一个修饰符,给变量加上一个const(不变的)的属性。这个属性表示这个变量的值一旦初始化,就不能再更改了。
  • 关键字,限定一个变量不可被修改。
  • 作用:
    • 对变量声明只读特性,保护变量值以防被修改。
    • 节省空间,避免不必要的内存分配。const修饰的变量在程序运行过程中只有一份拷贝。
    • 提高程序运行效率。编译器不为普通const常量分配存储空间,而是将他们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储和读取内存的操作。
       

3.4 运算符优先级

    a=b=6,这里是6先赋值给b,再将b的值赋值给a。

    复合赋值 

3.5 递增递减运算符

 前缀和后缀,a++是先用后加1,++a是先加1后用。

3.7 sizeof

  • 是一个运算符,给出某个类型或变量在内存中所占据的字节数
    • sizeof(int)
    • sizeof(i)
  • 是一个静态运算符,他的结果在编译时刻就决定了。
  • sizeof的括号里的运行是不会执行的。

3.8 整型

        

 计算机字长:计算机一次能处理数据的位数 

int,即CPU与内存之间一次传输的数据位数。同样也代表CPU里一个字长的寄存器所代表的的位数。

int所表达的就是一个寄存器的大小。

 计算机内部都是以二进制表达的。负数以bu'ma

正数减1,按位取反,就是负数

 

 假如1个数据是8位的,那么最高位实际上为符号位,他的取值范围是 [-2的7次方 ~ 2的7次方-1]

 如果想要把这个数作为纯二进制来看的话,则在前面定义 

  

当整数超出范围时,会越界 

 3.9 浮点值

 

更多推荐

C语言——翁恺老师