翁恺的视频见下方链接
翁恺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) |
char | 1 | 8 |
short | 2 | 16 |
int | 4(取决于编译器、CPU) | 32 |
long | 4(取决于编译器、CPU) | 32 |
long long | 8 | 64 |
float | 4 | 32 |
double | 8 | 64 |
long double | 16 | 128 |
三、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语言——翁恺老师
发布评论