一.C语言简单知识:

1.C语言的简单历史:

C语言是从B语言发展而来的,B语言是从BCPL发展而来的,BCPL是从 FORTRAN发展而来的,BCPL和B都支持指针间接方式,所以C也支持了。

2.C标准的简单历史:

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

3.C语言用在哪里:

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

4.程序:

程序是用特殊的编程语言写出来表达如何解决问题的,不是用编程语言来和计算机交谈,而是描述要求它如何做事情的过程或方法。

5.算法:

我们要让计算机做计算,就需要找出计算的步骤,然后用编程语言写出来,计算机做的所有事情都叫做计算,计算的步骤就是算法。

6.常见思维方式:

计算机常用枚举法解决问题,即一个个的去试,常用到二分法

7.解释:

把你写的程序交给另一个程序,该程序能读懂你的程序,可是他不产生任何东西,他只是去做动作 ,他拿着你的程序一条一条的执行,下一回,你再想运行你的程序的时候,还得使用这个能够读懂你的程序,由他来执行你的程序

8.编译:

把源代码交给一个翻译程序,翻译为机器语言,翻译后程序一点都没运行,运行的是翻译后的机器语言程序,以后再执行程序,只需执行编译后的机器语言程序。

注:
• 有的编程语言既可以编译执行也可以解释执行
• 语⾔本无编译/解释之分,编译/解释只是常用的执行方式⽽而已
• 解释型语言有特殊的计算能力
• 编译型语⾔有确定的运算性能

9.C语言的运行:

C需要被编译才能运行,所以你需要 :
• 编辑器:把代码敲进去,记录下来
• 编译器 :把代码编译为机器语言
• 或者,集成编辑器与编译器的IDE(集成开发环境)

二.C语言简单语法:

1.数据类型:

char //字符数据类型 1字节

sizeof(char)
// 1

sizeof: C语言中的sizeof是用来计算变量或者使用类型创建的变量的大小,单位是字节

short //短整型 2字节
int //整形 4 字节
long //长整型 4字节
long long //更长的整形 8字节
float //单精度浮点数 4字节
double //双精度浮点数 8字节

2.程序框架:

#include <stdio.h>
int main()
{
	return 0; 
}

讨论区:

为什么看到有的书上的main()是void main(),而我们课件上是int main()?还有main()里面那句return 0;是必须的吗?

在c的新标准中使用int main,旧标准中使用void main,int main中的int表示该函数有返回值,返回值类型为int整数,void main表示该函数无返回值 在使用新标准的c编译器中void main可能无法通过编译,新标准中因为使用int main需要有返回值所以需要写return 0 但是实际上因为如果没有加return编译器会自动加上,实际不写问题也不大,但是为了良好的代码书写习惯应该写。

第一个C语言程序:

#include <stdio.h>
int main()
{
	printf("Hello World\n");
	return 0; 
}
//main函数是程序的入口
//程序是从main函数的第一行开始执行的
//main函数 - 主函数 有且仅有一个

C99之前main函数是这么写的,但是现在没人这么写了

void main()
{	
}

下面这种写法函数默认返回int,但这是一种坏习惯,不值得提倡

main()
{
}

3.注释:

单行注释:

//

多行注释:

/*  */

缺陷:不能嵌套注释

4.输出:

printf("Hello World!\n");//\n表示需要在输出的结果后面换一行
printf("%d\n",23+43);
printf("23+43=%d\n",23+43);//%d说明后面的整数要输出在这个位置上

5.读整数:

scanf("%d",&price);
/* %d说明我们现在要读入一个整数了,scanf这个函数会读入下一个整数,读到的结果赋值给变量
price,要注意price前面的& */

注:

  • 如果要读入输入的数据,就必须严格按照""中的格式输入,如:
scanf("%d,%d",&a,&b);//若想读入输入的两个整数,输入必须是严格按照""内容输入,输入应为1,2
scanf("%d %d",&a,&b);//输入格式1 2或者 1(回车)2都是对的。
scanf("%d %d ",&a,&b);//输入应为1 2(2的后面还应该有个任意符号来满足那个空格,该符号不会被读进去)
scanf("%d %d/n",&a,&b);//输入1 2(2的后面再随便输入什么东西来满足这个回车号,后面输入的不会被读到程序中

/* 输入是以行为单位进行的,行的结束标志就是你按下了回车键。在你按下回车之前,你的程序不
会读到任何东西。*/

  • 中国学生还有一个极其常见的低级错误,就是用了中文输⼊法来输⼊程序。那些标点符号,在中文和英文可能看上去相似,但是对于计算机是完全不同的符号,如果你还开了全角标点的话,问题就更严重了。

6.集成开发环境:

常见的编译器有:gcc,msvc,clang
集成开发环境包括:编辑器,编译器,连接器,调试器

7.浮点数:

两个整数的运算结果只能是整数,对加减乘可能没什么影响,但是对于除法来说就会把原来应该有的小数部分直接丢掉了,如:

printf("%d\n",10/3*3);//输出结果为9

10和10.0在C中是完全不同的数,10.0是浮点数,在C语言中,人们用浮点数这个词来表达所有的带小数点的数。当浮点数和整数放到一起运算时,C会将整数转换成浮点数,然后进行浮点数的运算。

(1)浮点数的输入输出:

整数:
int
printf("%d",a);
scanf("%d",&a);

带小数点的数:
double
printf("%f",a);
scanf("%lf",&a);

8.C语言常见关键字

auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while

注: define不是关键字,是编译器实现的,用来定义宏的预处理指令,不是C语言中的内容。

auto: 定义自动变量,局部变量本身就是auto的,自动创建自动回收。

static:
在C语言中:
static是用来修饰变量和函数的

  1. 修饰局部变量-静态局部变量:static修饰局部变量改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,
    生命周期才结束。
  2. 修饰全局变量-静态全局变量:一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用。
  3. 修饰函数-静态函数:一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

register: 寄存器关键字,网盘,硬盘,内存,高速缓存,寄存器从左至右,空间越来越小,访问速度越来越快,造价越来越高,随着CPU的性能越来越高,CPU的处理速度越来越快,内存的读写速度跟不上CPU的处理速度,因此出现了高速缓存和寄存器,内存会将CPU需要访问的数据存入高速缓存和寄存器中,这样CPU通常能够在高速缓存 。

注:

  • register仅仅起到一个建议作用,即程序员建议将该变量存储到寄存器中,实际上编译器根据该变量读取地是否频繁,来自行决定要不要将该变量存储到寄存器中。
  • 寄存器变量是不能取地址的