C 语言是一种通用的高级语言,最初是由丹尼斯·里奇在贝尔实验室为开发 UNIX 操作系统而设计的。C 语言最开始是于 1972 年在 DEC PDP-11 计算机上被首次实现。在 1978 年,布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)制作了 C 的第一个公开可用的描述,现在被称为 K&R 标准。UNIX 操作系统,C编译器,和几乎所有的 UNIX 应用程序都是用 C 语言编写的。由于各种原因,C 语言现在已经成为一种广泛使用的专业语言。
金无足赤,人无完人。C语言也有一些缺点,指针是C语言的灵魂,然而涉及指针的错误往往难以察觉。要享受用C语言自由编程的乐趣,就必须承担更多的责任。缺点这块点到为止,不然又要吐槽了,printf(“锄禾日当午,学C真他妈苦”);
C 语言最初是用于系统开发工作,特别是组成操作系统的程序。由于 C 语言所产生的代码运行速度与汇编语言编写的代码运行速度几乎一样,所以采用 C 语言作为系统开发语言。下面列举几个使用 C 的实例:
关于C语言的有点以及为什么我们要学习C语言这里就不多说了,下来我们直接进入今天的主题,编写第一个C程序。
和学习其它语言一样,先从Hello World开始
关于编程工具之前介绍了三个,这里就使用其中一个VS2019,如果还有疑问请看之前的文章。
代码
#include
int main() {
/*主函数*/
printf("hello world!\n"); /*输出hello world!*/
return 0; /*返回*/
}
入门的第一个程序HelloWorld已经完成。
我们来分析一下上面这段代码:
#include
为文件包含命令,而stdio.h
是头文件,它里面包含里一些程序中需要使用的基本元素,printf()
就是其中一个。
下面定义了一个main()
函数,int为函数的返回值类型,利用printf()
函数输出了字符串"hello world"
,而"\n"
是换行符,它在这里的作用是输出"hello world"
后换行。return 0
表示返回。
代码中"/*...*/"
是注释,它的内容不参与程序运行。C语言中单行注释也可以用"\\"
。
为了让大家对编程有大概的了解,这里将编写C程序的过程分解成了7个步骤,当然这只是理想状态下的,实际开发中会根据情况循环或者改进一些步骤。这里就不详细的介绍每个步骤了,大家可以通过后续的文章慢慢理解这几个步骤。
我们从两张图来分别理解一下windows和unix系统中从源代码到可执行文件的过程
算法包含两方面的内容:算法设计和算法分析
算法设计其实就是针对某一特定类型的问题而设计的一个实现过程。算法有以下几个特性:
也就是说我们在设计算法是的满足上面所说的特性。当然算法也是有好有坏的,那么我们怎样去衡量一个算法的优劣呢?
算法分析其实就是在衡量一个算法的优劣,通常会从一下几个方面来分析:
在描述一个算法时通常使用的方法有:自然语言、流程图、N-S图等。
自然语言这种表达方式通俗易懂,我们通过一个具体的实例了解一下。
需求:任意输入3个数,求出其中的最小数。
(1) 定义4个变量分别是a,b,c和min。
(2) 输入大小不同的三个数分别赋值给a,b,c。
(3) 判断a是否小于b,如果小于,则将a的值赋给min,否则将b的值赋给min。
(4) 判断min是否小于c,如果小于,则执行(5),否则将c的值赋给min。
(5) 输出min。
这种表达方式的好处就是简单易懂,但是当遇到复杂的算法时自然语言就显得不是很方便了。
流程图就是用一些图框来代表各种不同性质的操作,用流程线来指示算法的执行方向。他的特点就是直观形象,应用很广泛。
下图介绍了流程图的符号以及含义
流程图有三种基本结构,即顺序结构、选择结构和循环结构。
我们再把上面的需求用流程图来表示一下
N-S流程图是将全部的算法写在一个矩形框内,省去了流程图中的流程线。下面继续看一个实例:
需求:输入一个数,判别是否为素数。
算法的基本特性和算法的表示介绍到就结束了。
基本类型就是我们在使用C语言时最基础的数据类型,包括整形(短整型,基本整型,长整型)、字符型、浮点型(单、双精度)以及枚举类型。
在编程的过程中只使用基本类型是远远不够的,为了满足需求,因此还要使用基本类型之外的类型,构造类型就是其中的一种。构造类型可以使用基本类型构造出新的数据类型来满足实际开发中的需求。构造类型有3种形式:数组类型、结构体类型、共用体类型。
指针是C语言的精华所在,许多编程语言中都支持某种形式的指针,但最著名的是C语言。指针的特殊性在于它的值是一个内存地址。关于指针后面我们会详细说明。
空类型(void)的主要作用就是限定函数的返回和限定函数的参数。
为了便于记忆,我将数据类型做了一个简单的思维导图,如下:
这块内容就不在用过多的文字赘述了,从下面的思维导图我们可以直观的理解。
关于符号常量我们来看一段简单的代码
#include
#define PI 3.14/*定义符号常量*/
int main() {
double r=5.0;/*定义半径*/
double area;/*面积变量*/
area = PI*r*r;/*计算面积*/
printf("圆的面积是:%f\n",area);/*打印输出*/
return 0;
}
C语言有3种循环
我们先来看下while循环,流程图如下:
下来看个小示例
流程图如下:
下来看个小示例
两个小示例的运行结果相同。
流程图如下:
for循环的执行大致可分为4个步骤
接下来看一个for循环的示例
我们用两个for循环嵌套实现了九九乘法表
我们先来看个简单的示例:
#define _CRT_SECURE_NO_WARNINGS
#include
int main() {
int score;
printf("请输入学生的数学成绩:");
scanf("%d", &score);
if (score < 60 && score >= 0)
{
printf("该学生的数学成绩类别为:差\n");
}
else if (score < 70 && score >= 60)
{
printf("该学生的数学成绩类别为:及格\n");
}
else if (score < 80 && score >= 70)
{
printf("该学生的数学成绩类别为:中\n");
}
else if (score < 90 && score >= 80)
{
printf("该学生的数学成绩类别为:良\n");
}
else if (score < 100 && score >= 90)
{
printf("该学生的数学成绩类别为:优\n");
}
return 0;
}
这个示例中使用了关键字if、else if、else等关键字,即循环语句的关键字,我们来具体看下
if语句流程图如下
if语句用来判定给定条件是否满足,根据判断结果决定是否执行某个操作。if语句的使用形式如下:
if else语句流程图如下:
多重if语句流程图如下:
这里不多解释了,如有什么不懂可以将示例练习一遍好好琢磨一下,你会觉得So easy!
求a,b,c三个数中的最大值?
#define _CRT_SECURE_NO_WARNINGS
#include
int main() {
int a, b, c;
int max1, max2;
a = 8;
b = 12;
c = 10;
if (a>b)
{
if (a>c)
{
max1 = a;
}
else
{
max1 = c;
}
}
else
{
if (b>c)
{
max1 = b;
}
else
{
max1 = c;
}
}
//三元表达式
max2 = a > b ? (a > c ? a : c) : (b > c ? b : c);
printf("the max number is %d\n", max1);
printf("the max number is %d\n", max2);
return 0;
}
结果
如果您觉得本篇文章对您有帮助就顺手点个赞吧
更多干货内容请查看我的个人公众号:C语言中文社区。
【C语言中文社区】是一个C语言/C++视频教程、学习笔记、电子书、计算机二级资料等专注于C语言/C++编程学习者的干货知识分享平台,精选深度文章,分享优秀干货类、技能类的学习资源,帮助学习中的你。