前言

我觉得目前比较好的c语言入门网课有b站的失乐-try上传的C语言入门视频,以及中国大学mooc中浙大翁恺老师的C语言程序设计入门视频。都对新手友好到了极点。我这里选的是翁恺老师的课,比较系统,也比较专业。我会着重指出易错易忘的知识,以便复习,其他不再赘述。

关于对计算机知识的深入理解,我推荐b站搬运的YouTube的计算机科学速成课,里面把计算机的历史,发展,进化讲的相对容易理解些,虽然有些知识我听不懂,但我大为震撼。

编译器

Windows系统推荐dev-C++,当然也可以线上编译,不过不能保存

第一个程序

1
2
3
4
5
6
7
#include <stdio.h>
int main ()
{
printf ( "hello world\n" );
return 0;

}

除了printf函数,剩下的是c语言的基本框架

变量

a = 0;

把0赋值给a,a作为变量保存了数据0,a之后还可变为其它值。

a是一种标识符,只能有字母,数字,下划线组成,数字不能位于头部,关键字不能做标识符

关键字用多了就记住了,例如char,do,while,if,sizeof….

赋值与初始化

1
int a;

这里定义了一个变量a,但你不知道a是几,系统保存的可能是一个任意的数;

1
int a =0;

在定义变量时,建议在代码开头的地方定义变量,因为ansi c标准只能在代码开头的地方定义变量,c99标准则无此要求。

a被初始化为0,系统保存的a的值是0。

初始化是一个好习惯,不这样做可能会莫名报错,尤其到指针那一块。

scanf函数

1
2
a=0;
scanf("%d",&a);

%d意为取整数a,&取地址,让我输入a

常量

1
2
b = 1
int a = 1 + b

直接写在程序里的1是直接量,是常量的一种。

1
const int a = 1

const作为修饰符加在int的前面,使a成为一个具有常属性的变量,即常变量a不能再被修改,否则会报错。

浮点数

分为单精度浮点数和双精度浮点数,双精度浮点数能保留更多位小数,更精确,%f是取小数。

我们试一下下面的运算

1
2
3
4
5
6
7
8
9
#include <stdio.h>
int main ()
{
int a;
int b;
scanf ("%d %d",&a,&b);
printf("结果为%d。\n",((a+b)/3));
return 0;
}

这里输入5,5,结果为3,没有小数

如果输入10 ,10,结果不是6.666…而是6,这里说明4舍5入不符合

这里需要知道%f是取单精度,%lf是双精度

我们再试一下输出小数结果

1
2
3
4
5
6
7
8
9
#include <stdio.h>
int main ()
{
int a;
int b;
scanf ("%d %d",&a,&b);
printf("结果为%f。\n",((a+b)/3));
return 0;
}

这里输入5,5,结果为0.000000,又出错了

到这里要指出:

在c语言中两个整数的运算结果只能是整数,用%d得到的是整数,用%f得不到正确结果,如果把3换成3.0,系统在计算时会把a+b的结果化为浮点数,浮点数间的运算就是浮点数。我们再试一下

1
2
3
4
5
6
7
8
9
#include <stdio.h>
int main ()
{
int a;
int b;
scanf ("%d %d",&a,&b);
printf("结果为%f。\n",((a+b)/3.0));
return 0;
}

这里输入5,5,结果正确,为3.333333