专栏首页C语言中文社区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,如果还有疑问请看之前的文章。

代码

//公众号: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

该图片出自

编写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)的主要作用就是限定函数的返回和限定函数的参数。

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

这里写图片描述

常量

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

这里写图片描述

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

//公众号: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循环嵌套实现了九九乘法表

条件控制语句

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

//公众号: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三个数中的最大值?

//公众号: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;
}

结果

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C语言基础知识总结

    1°memcpy函数(头文件<cstring) 数组不能直接复制,可利用memcpy函数

    风骨散人Chiam
  • 转行程序员能干嘛?

    2. 可以做一个自由职业开发者,做个网站,开发个app,能不能捞金就看个人了,反正B是装完了。

    王炸
  • 跟AI学口语,鹅厂“神器”了解一下

    ? 朋友们,今天鹅老师要给大家上一堂英语课。now,我们先用一组chinglish热身一下,请跟我read: Give you some color see ...

    鹅老师
  • C语言从青铜到王者——数组详解【一维数组、二维数组、字符数组】

    所谓数组,是指将那些具有相同类型的、数量有限的若干个变量通过有序的方法组织起来的一种便于使用的形式。数组属于一种构造类型,其中的变量被称为数组的元素。数组元素的...

    C语言中文社区
  • 最全的C语言基础知识梳理总结

    C语言是当代人学习及生活中的必备基础知识,应用十分广泛,下面为大家带来C语言基础知识梳理总结,C语言零基础入门绝对不是天方夜谭!

    诸葛青云
  • 青铜到王者 ,快速提升你 Go语言的段位! "狗"语言实战(二)- 基础语法1 变量定义

    JavaEdge
  • 从青铜到王者10个css3伪类使用技巧和运用

    伪类经常与伪元素混淆,伪元素的效果类似于通过添加一个实际的元素才能达到,而伪类的效果类似于通过添加一个实际的类来达到。实际上css3为了区分两者,已经明确规定了...

    Nealyang
  • 中国版诺奖,2020年未来科学大奖揭晓!96岁老院士寄语年轻科研者

    张亭栋,1932年出生于河北,哈尔滨医科大学第一附属医院教授。王振义,1924年出生于上海,上海交通大学教授。

    镁客网
  • 90年代自学C,独立研发中文编辑器和输入法,被称小说圈中的Geek,你一定不知道这样的王小波!

    早在90年代初,王小波就接触了计算机。1988年,他毕业于美国匹兹堡大学东亚研究中心,获硕士学位,那时就知道Macintosh,玩过IBMPS/2。

    养码场
  • 这些掌握了,你才敢说自己懂VBA

    于是,我准备把Excel VBA写成一个系列免费教程,撸完这个系列你也是VBA界的黑山老妖了。

    猴子数据分析
  • 腾讯云学院直播课丨云数据库之从青铜到王者

    4月10日,腾讯云学院邀请到了讲师刘迪,进行了一场直播课,课程主题是:云数据库之从青铜到王者。整个直播课精彩纷呈,广受好评。

    云加社区
  • 在 Deno 中设置 CronJob

    CronJob即定时任务,就类似于Linux系统的crontab,在指定的时间周期运行指定的任务。比如小明每天晚上都会问候她异地的女朋友并送温暖,比如“铝盆友彩...

    胡琦
  • 什么是线程安全?

    线程安全在多线程编程时是一个比较重要的概念,我们下先来看下维基百科是如何定义这个概念的:

    我是攻城师
  • 12个Python常用基础语法,你会几个?

    前几天写了一篇关于python高级语法的文章,青铜到王者,这些python技巧一定会用上。

    Java架构师必看
  • 读完小学生编程考试大纲,不妨重新讨论一下「计算机从娃娃抓起」这件事

    就比如大学生们几乎都参加过的全国计算机等级考试,比如二级 Office 考试,考察的是 Word、Powerpoint、Excel 这种常用软件的操作,但据统计...

    机器之心
  • 一起回归一下每日一题这些经典面试题

    面试造火箭,工作拧螺丝,虽然我只想拧螺丝,可是我需要用造火箭的技术去寻找拧螺丝的工作,如何能在面试过程中让自己处于不败的地步呢,刷题是一个比较好的捷径,今天就汇...

    用户1308196
  • Java面试官:double精度真的比float低吗?

    我有一个朋友,叫老刘,戴着度数比我还高的近视镜,显得格外的“程序员”;穿着也非常“不拘一格”,上半身是衬衣西服,下半身是牛仔裤运动鞋。

    沉默王二
  • 超详细数据图解:哪些中国AI公司,正“削尖脑袋”挤进学术圈

    量子位 | 李林 舒石 发自 中国硅谷 2017年的第一场人工智能顶级学术会议,比往年来得更早一些。 半个地球之外的旧金山,AAAI-17大会正在上演。人们通常...

    量子位
  • 浅谈重构造成的灾难性毁灭

    这章我在7月20号的时候就准备好了标题,在那之前有写过一篇重构的文章,这段时间一直在等重构造成的弊端。

    CrazyCodes

扫码关注云+社区

领取腾讯云代金券