前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言从青铜到王者——基础知识总结

C语言从青铜到王者——基础知识总结

原创
作者头像
C语言中文社区
修改2021-04-16 09:49:11
5060
修改2021-04-16 09:49:11
举报
文章被收录于专栏:C语言中文社区C语言中文社区

关于C语言

C语言简介

C 语言是一种通用的高级语言,最初是由丹尼斯·里奇在贝尔实验室为开发 UNIX 操作系统而设计的。C 语言最开始是于 1972 年在 DEC PDP-11 计算机上被首次实现。在 1978 年,布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)制作了 C 的第一个公开可用的描述,现在被称为 K&R 标准。UNIX 操作系统,C编译器,和几乎所有的 UNIX 应用程序都是用 C 语言编写的。由于各种原因,C 语言现在已经成为一种广泛使用的专业语言。

C语言的特点

  • 易于学习。
  • 结构化语言。
  • 它产生高效率的程序。
  • 它可以处理底层的活动。
  • 它可以在多种计算机平台上编译。

金无足赤,人无完人。C语言也有一些缺点,指针是C语言的灵魂,然而涉及指针的错误往往难以察觉。要享受用C语言自由编程的乐趣,就必须承担更多的责任。缺点这块点到为止,不然又要吐槽了,printf("锄禾日当午,学C真他妈苦😢");

C语言的应用范围

C 语言最初是用于系统开发工作,特别是组成操作系统的程序。由于 C 语言所产生的代码运行速度与汇编语言编写的代码运行速度几乎一样,所以采用 C 语言作为系统开发语言。下面列举几个使用 C 的实例:

  • 操作系统
  • 语言编译器
  • 汇编器
  • 文本编辑器
  • 打印机
  • 网络驱动器
  • 现代程序
  • 数据库
  • 语言解释器
  • 实体工具

第一个C语言程序

关于C语言的有点以及为什么我们要学习C语言这里就不多说了,下来我们直接进入今天的主题,编写第一个C程序。

和学习其它语言一样,先从Hello World开始

关于编程工具之前介绍了三个,这里就使用其中一个VS2019,如果还有疑问请看之前的文章。

代码

代码语言:txt
复制
//公众号:C语言中文社区
#include<stdio.h>

int main() {                   /*主函数*/
    printf("hello world!\n");  /*输出hello world!*/
    return 0;                  /*返回*/
}

Ctrl+F5运行,运行结果如下:

入门的第一个程序HelloWorld已经完成。

我们来分析一下上面这段代码:

#include<stdio.h>为文件包含命令,而stdio.h是头文件,它里面包含里一些程序中需要使用的基本元素,printf()就是其中一个。

下面定义了一个main()函数,int为函数的返回值类型,利用printf()函数输出了字符串"hello world",而"\n"是换行符,它在这里的作用是输出"hello world"后换行。return 0表示返回。

代码中"/*...*/"是注释,它的内容不参与程序运行。C语言中单行注释也可以用"\\"

下图总结了组成C程序的几个部分

image
image

该图片出自

编写C语言程序的7个步骤

为了让大家对编程有大概的了解,这里将编写C程序的过程分解成了7个步骤,当然这只是理想状态下的,实际开发中会根据情况循环或者改进一些步骤。这里就不详细的介绍每个步骤了,大家可以通过后续的文章慢慢理解这几个步骤。

编程机制

我们从两张图来分别理解一下windows和unix系统中从源代码到可执行文件的过程

  • Windows
  • Unix

C语言基本算法

算法的基本特性

算法包含两方面的内容:算法设计和算法分析

算法设计其实就是针对某一特定类型的问题而设计的一个实现过程。算法有以下几个特性:

  • 有穷性
  • 确定性
  • 可行性
  • 输入
  • 输出

也就是说我们在设计算法是的满足上面所说的特性。当然算法也是有好有坏的,那么我们怎样去衡量一个算法的优劣呢?

算法分析其实就是在衡量一个算法的优劣,通常会从一下几个方面来分析:

  1. 正确性
  2. 可读性
  3. 健壮性
  4. 时间复杂度和空间复杂度算法的表达方式在描述一个算法时通常使用的方法有:自然语言、流程图、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流程图

N-S流程图是将全部的算法写在一个矩形框内,省去了流程图中的流程线。下面继续看一个实例:

需求:输入一个数,判别是否为素数。

算法的基本特性和算法的表示介绍到就结束了。

数据类型

基本类型

基本类型就是我们在使用C语言时最基础的数据类型,包括整形(短整型,基本整型,长整型)、字符型、浮点型(单、双精度)以及枚举类型。

构造类型

在编程的过程中只使用基本类型是远远不够的,为了满足需求,因此还要使用基本类型之外的类型,构造类型就是其中的一种。构造类型可以使用基本类型构造出新的数据类型来满足实际开发中的需求。构造类型有3种形式:数组类型、结构体类型、共用体类型。

指针类型

指针是C语言的精华所在,许多编程语言中都支持某种形式的指针,但最著名的是C语言。指针的特殊性在于它的值是一个内存地址。关于指针后面我们会详细说明。

空类型

空类型(void)的主要作用就是限定函数的返回和限定函数的参数。

为了便于记忆,我将数据类型做了一个简单的思维导图,如下:

这里写图片描述
这里写图片描述

常量

这块内容就不在用过多的文字赘述了,从下面的思维导图我们可以直观的理解。

这里写图片描述
这里写图片描述

关于符号常量我们来看一段简单的代码

代码语言:txt
复制
//公众号:C语言中文社区
#include<stdio.h>

#define PI 3.14/*定义符号常量*/

int main() {
    double r=5.0;/*定义半径*/
    double area;/*面积变量*/
    area = PI*r*r;/*计算面积*/
    printf("圆的面积是:%f\n",area);/*打印输出*/
    return 0;
}

流程控制语句

循环控制语句

C语言有3种循环

  • for
  • while
  • do whilewhile循环我们先来看下while循环,流程图如下:
    下来看个小示例
    do while循环流程图如下:
    下来看个小示例
    两个小示例的运行结果相同。
for循环

流程图如下:

for循环的执行大致可分为4个步骤

  • 执行表达式1,只执行一次
  • 计算表示式2的值,看其是否为真(非零),如果为真就执行循环体部分,否则直接退出,执行for循环下面的语句
  • 执行循环体
  • 计算表达式3的值,然后返回步骤2

接下来看一个for循环的示例

我们用两个for循环嵌套实现了九九乘法表

条件控制语句

我们先来看个简单的示例:

代码语言:txt
复制
//公众号:C语言中文社区
#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

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三个数中的最大值?

代码语言:txt
复制
//公众号:C语言中文社区
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

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;
}

结果

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于C语言
    • C语言简介
      • C语言的特点
        • C语言的应用范围
        • 第一个C语言程序
        • 编写C语言程序的7个步骤
          • 编程机制
          • C语言基本算法
            • 算法的基本特性
              • 流程图
              • N-S流程图
          • 数据类型
            • 基本类型
              • 构造类型
                • 指针类型
                  • 空类型
                    • 常量
                    • 流程控制语句
                      • 循环控制语句
                        • for循环
                      • 条件控制语句
                        • 控制语句示例
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档