为什么我们要学习C语言?

目录

什么是C语言?

机器语言,汇编语言,高级语言

C语言的发展

C语言有什么特点

我们使用什么工具来进行C语言编程?

一个最简单的C语言程序

什么是注释呢?

小练习

C语言中的变量和常量

一个完整的C语言程序

什么是算法?

算法的特性

算法的优劣如何去判断?

算法的描述

流程图

流程图的三种基本结构

总结


什么是C语言?

C语言是一门面向过程的通用设计语言,并且是大学计算机和软件工程专业的入门级语言,学会C语言,对于我们未来学习C++,Java,Python都有很大的帮助,在本篇文章我会就C语言的介绍,算法,和一些基础知识进行阐述。帮助读者对C语言有一个更好的,初步的认识,

机器语言,汇编语言,高级语言

该内容并不重要,只是让读者对C语言有一个较好的认识,在以后学计算机系统基础时或计算机组成原理时(软件工程和计算机专业的专业课)我们知道机器语言是一种低级语言,计算机是使用二进制数所实现的指令来控制计算机,(二进制数就是由0和1组成)计算机对其可直接进行识别。

而汇编语言是在机器语言基础上发展出来的,在汇编语言中,我们使用助记符来代替机器指令的操作码,使用地址符号或标号来代替指令和操作数的地址。

高级语言是在汇编语言的基础上进行发展的,它的语法类似于英文,其中就出现了:C语言,C++,VC,Java等等。他们的用处就是通过我们编写的代码转换成二进制从而是计算机对其作出反应,而我们是通过使用高级语言来控制计算机的各方面操作的人,即程序员。

C语言的发展

C语言是一门面向过程的语言,最初C语言应用于UNIX系统上,后来丹尼斯里奇使用C语言改写了UNIX C的编译程序,从而开创了历史的新篇章,UNIX成为了第一个不是用汇编语言编写的主流操作系统。其中Java,C++也是用C语言编译出来的,世界上第一个3D游戏雷神之锤也是使用C语言编译出来的,可见将C语言学好,我们的技术水平能有一个质的提升。

C语言有什么特点

C语言有5种特点:

1.高效性

C语言继承了低级语言的优点,产生了高效的代码并且有很高效的读写效果,C语言生成的目标代码的执行效率只比汇编语言低10%-20%。

2.灵活性

C语言的语法多种多样,不同的程序员有不同的思想,从而能写出不同的代码(这也是大学老师判断是否有抄袭现象的主要原因)但不同的代码表达的意思可以是相同的。你可以将代码写的非常高端,也可以写的通俗易懂。

3.功能丰富

C语言种包含很多语法,可以实现不同的功能,如

#include<stdio.h>
int main()
{
    int a;
    int b=0;
    for(a=0;a<9;a++){
        printf("%d\n",a);
    }
    while(b<9){
        printf("%d\n",b);
        b++;
    }
}

大家现在不需要理解代码的什么意思,我在里面写了一个while循环,一个for循环(以后讲循环会讲到)二者的意义是相同的,但都可以表达循环的意思,在以后还会学习判断等语句,即功能丰富

4.表达性强

C语言有固定的书写结构规范,但是我们书写的形式是自由的,我们只需要简单的循环语句就可以实现循环的流程,也可以通过简单的判断语句来实现简单的判断流程。

5.移植性好

C语言具有良好的移植性,在不同操作系统,不同平台下只需稍作修改即可完成跨平台,跨系统的程序开发操作。

我们使用什么工具来进行C语言编程?

我们可以通过CodeBlocks,VS等等来进行C语言编程,本个专栏我是用CodeBlocks进行编程,大家也可以去网上搜素CodeBlocks的下载,这个不难哦。

一个最简单的C语言程序

我给大家举一个例子来说明C语言中一些重要的知识。

#include<stdio.h>
int main()
{
    printf("Hello,world");
}

这个例子的输出结果是

作为初学者入门的例子,里面也包含了一部分知识,首先大家看第一行代码,这是一个预处理操作,也就是说前面带有#的都是预处理操作,#include是使用头文件,而stido.h是一个函数库,不光是C语言,Java等等的编程语言都会有很多的函数库,他们都包含在不同的领域。

第二行代码中包含int main(),它的返回值是整数类型,这个后文会讲,main()是每个文件里都会有的重要函数,而代码中的两个大括号就是函数体,我们编写的代码要在这两个代码块之间。

大家可以看到函数体之间有一行语句,其中printf就是打印输出的关键字(至于关键字是什么后文会讲)它的语法格式为printf(),括号里输入你想输出的语句。

什么是注释呢?

众所周知,我们可以在C语言中编写各种各样的语句,但是为了方便其它程序员理解,为了方便自己理解,我们通常会加上注释,如果我把那个最简单的代码加上注释会怎么样呢?

#include<stdio.h>
int main()
{
    printf("Hello,world");//输出Hello,world
    /*这是多行注释
    */
}

其中//是单行注释,/* */是多行注释。他们可以更加方便地让我们去理解代码,提升我们的阅读效率。

小练习

大家可以试着自己编写一个代码,它的输出是"Hello,China"

C语言中的变量和常量

C语言中有变量和常量,那他们的用处是什么呢?又有什么不同呢,我们来看一下:

#include<stdio.h>
int main()
#define a 1;
{
    int b=3;
    int a=2;
    printf("%d",a);
    printf("%d",b);

}

我先和大家说一下,这个代码是有问题,无法运行的

为什么?

因为我在函数体中定义了两个整型变量分别为b和a,他们是可以改变的数值,但细心的小伙伴肯定发现,我在main函数下面写了一条语句,这个语句的作用就是定义了一个常量a,它的值为1.为什么叫常量?顾名思义,它的值是无法改变的,这也是这个代码错误的原因。我定义了一个a的常量,定义了一个a的变量,由于a的值无法改变所以报错,简单的解决就是将变量a或者将常量a换一个名字即可。

而代码中的#define是一个预处理操作,它的作用就是确定一个常量,我们调用a的时候就是调用1这个数值。

一个完整的C语言程序

这里我用一个书上的例子进行阐述

#include<stdio.h>
#define HEG 0.54
float height(float father,float mother);
int main()
{
    float father;
    float mother;
    float son;
    printf("输入父亲的身高\n");
    scanf("%f",&father);
    printf("输入母亲的身高\n");
    scanf("%f",&mother);
    son=height(father,mother);
    printf("预测儿子身高\n");
    printf("%f\n",son);
    return 0;
}
float height(float father,float mother)
{
    float son=(father+mother)*HEG;
    return son;
}

除去我们定义了一个值为0.54的常量HEG之外,我们还定义了一个包含两个参数father,mother的方法height。我们在函数体中还定义了三个浮点型变量father,mother,son。整个程序的意义是通过父母的身高计算出儿子的身高。

通过第一个printf和scanf语句我们输入了父亲的身高,第二个printf和scanf输入了母亲的身高。而son=height(father,mother)的意思是son这个变量是通过这个方法来计算的,而这个方法在最后我们给出了计算公式,就是son=(father+mother)*HEG,然后输出预测的儿子身高。最后通过return 0来结束本次程序。

在最后一个方法体中大家可以看到我们定义的计算公式:float son=(father+mother)*HEG 其中*代表着乘法运算,这在之后的运算符中会讲到。

并且大家可以看到,我在一些地方使用了空格或空行来规范书写格式,这是每个程序员都应该做到的。但有的地方是不能缺失空格的,例如int a;在int和a之间的空格是不可以缺失的。

而且大家也注意到了,很多语句最后都有一个分号,这便是C语言的语法规则,但是有的语句不能有分号,例如if或for语句等等。

什么是算法?

算法的特性

算法是为解决某一个特定类型的问题而设计的一个实现过程,也就是我们的代码要实现某一个目的所设计的过程。

1.有穷性

算法是经过有穷步之后结束的。如果是无穷步,那么是一个无限循环的过程,不应该称之为算法,因为它无法解决实际问题。

2.确定性

算法的过程应该有确切定义的,如果是无缘无故的进行书写代码,那不能称之为算法,因为他是没意义的。

3.可行性

我们所编写的代码必须是可行的,如果无法运行则整个程序也没有意义,不能称之为算法。

4.有输入

一个算法应该有一个或多个输入,也可以没有输入。

5.有输出

一个算法可以有一个或者多个输出,不能没有输出。如果一个程序没有输出情况,那就是一个不完整的程序,不能称之为算法。

算法的优劣如何去判断?

1.正确性

首先,算法必须是正确的,如上文的可行性,必须能够完美运行这是标准,然后才能考虑算法优劣的问题

2.可读性

算法的可读性可以作为标准去判断优劣性,通过其他人能够对程序员编写代码的理解程度,理解难易度来判断算法的优劣,从而判断C语言学习是否顺畅(老师通用技巧)

3.健壮性

健壮性大小可以理解为容错率大小,如果输入了一个错误数据,但程序并不会因此运行错误或瘫痪,而是会考虑输入错误的解决办法。

4.时间复杂度和空间复杂度

时间复杂度指的是算法进行运算时所需的时间,在我们平时编写代码的时候并不会感觉到,不过在以后编写大型代码的时候,我们会明显感觉到时间复杂度的差异。空间复杂度指的是代码运行时所占有的存储空间的大小。如果能做到时间复杂度和空间复杂度都极小且能达到所需目的,说明所编写的代码效果不错。

算法的描述

什么叫算法的描述?

算法就是编写程序达到目的的过程,算法的描述就是梳理一个程序员解题的思路,也就是说我们要把我们所想的表达出来。下面我举个例子:

当你去一个餐厅吃饭的时候,我们所需的流程是:

1.向服务员点菜

2.服务员将点的菜告诉后厨

3.后厨做菜

4.服务员上菜

这四个过程就是去餐厅吃饭的过程,也就是这个“算法”的描述。

下面我们用上文完整的C语言代码举例子

#include<stdio.h>
#define HEG 0.54
float height(float father,float mother);
int main()
{
    float father;
    float mother;
    float son;
    printf("输入父亲的身高\n");
    scanf("%f",&father);
    printf("输入母亲的身高\n");
    scanf("%f",&mother);
    son=height(father,mother);
    printf("预测儿子身高\n");
    printf("%f\n",son);
    return 0;
}
float height(float father,float mother)
{
    float son=(father+mother)*HEG;
    return son;
}

我们的算法描述是:首先定义一个带有两个参数的height方法,然后定义三个变量和一个常量,

输入父亲母亲的身高,计算儿子的身高这四个步骤。

但是我们直接这样描述是不行的,是不够规范的。

所以我们引入了一个新的知识,用于描述我们的算法。

流程图

流程图有一系列基础的框架符号。

 我们在电脑基础的软件WPS中点击插入-形状,下面就有流程图这个选项,主要就是应用于算法描述中。

流程图的三种基本结构

1.顺序结构

即无循环,无判断的情况,直上直下一类

2.选择结构

需要有一个或一个以上的判断,无循环的结构,其中有分支箭头

3.循环结构

需要有一个或一个以上的循环,无判断的结构,其中有(返回)的箭头

注:文中包含括号的语句是非官方词语,方便理解用的

不过流程图我目前没怎么使用过,大家了解就好。

总结

今天的学习就告一段落了,本章就是写于2021年12月23日23:20,希望我能在复习中能给各位初学者一些建议和少走一些弯路,我在大一的时候也是不学无术之流,所以我写这篇文章不光是复习,我也希望大家不要荒废大一的时间,能够踏踏实实学习。

本章我们学习了C语言的发展和比较简单的一些知识点,现在你还能回忆起什么是函数体吗?main函数是干嘛的?#是表示什么的?算法的优劣有哪些特点呢?常量是怎么定义的呢?希望大家有所收获。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值