带你打开C语言的大门

news2024/11/20 4:50:16
  • 最近有刚开始学习编程的同学问我:“C语言是什么?C语言是怎么来的?C语言用来干什么?”。对,在学习C语言之前,首先了解C语言的发展例程,这应该是每一个刚刚开始学习C语言的人应该了解的,并且还要了解为什么要选择C语言,以及C语言都有那些特性。了解了这些知识后才会更好的学习C语言。随着计算机科学的不断发展,学习C语言的环境也在不断变化。针对前面提出的几个问题,从多方整理,下面我们从以下几点介绍C语言。

1. C语言的发展史

程序语言发展史

程序语言发展大致经历三个阶段:

1.机器语言

机器语言是低级语言,称为二进制代码语言。计算机使用的是由0和1组成的二进制数,组成的一串指令来表达计算机的语言。机器语言的特点是计算机可以直接识别,不需要任何翻译。

2.汇编语言

汇编语言是面向机器的程序设计语言。用英文字母或者符号串来代替机器语言的二进制代码,把不易理解的机器语言编程汇编语言。使用汇编语言比机器语言容易理解程序,并且更容易阅读。

3.高级语言

由于汇编语言依赖于硬件体系,并且汇编语言中的助记符号比较多。为了使程序语言更贴近人类的自然语言,同时又不依赖于计算机硬件,于是,高级语言应运而生。这种语言的语法形式类似于英文,并且因为远离对硬件的直接操作,使人们更易理解和操作。

C语言的发展史

  • 以前的操作系统等系统软件主要是用汇编语言编写的,由于汇编语言依赖于硬件,程序的可读性和可以执行都不是很好,为了提高程序的可读性和可移植性,人们期待另一种语言,这种语言具有高级语言的特性,又不失低级语言的特性,于是就产生了C语言。

  • C语言是由UNIX的开发者丹尼斯里奇(Dennis Ritchie)和肯汤普逊(Ken Thompson)于1970年在开发出的BCPL(B语言)语言的基础上发展和完善起来的。19世纪70年代初期,第一次把B语言改为C语言。

  • C语言最初运行在多用户、多任务的UNIX操作系统上。后来,Ritchie用C语言改写了UNIX C的编译程序,UNIX操作系统的开发者Ken Thompson有用C语言成功的改写了UNIX,从此开创了编程史上的新篇章。UNIX成为第一个不使用汇编语言编写的主流操作系统。

  • 1983年,美国国家标准委员会(ANSI)对C语言进行了标准化,于1983年颁布了第一个C语言草案(83 ANSI C),后来于1987年又颁布了另一个C标准草案(87 ANSI C),最新的C语言标准C99在1999年颁布,并在2000年3月被ANSI采用。但是由于未得到主流编译器厂家的支持,C99也未得到广泛应用。

  • C语言发展于大型商业机构和学术界的研究实验室,当开发者们为第一台个人计算机提供C编译系统之后,C语言就得到了广泛传播,为大多数程序员所接受。对MS-DOS操作系统来说,系统软件和实用程序都是用C语言来编写的。Windows操作系统大部分也是用C语言来编写的。

  • C语言是一种面向过程的语言,同时具有高级语言和汇编语言的优点,它可以广泛用于不同的操作系统,如UNIX、MS-DOS、Windows、Linux等。

2. C语言的特点

C语言是一种通用的程序设计语言,主要用来进行系统程序设计,具有如下特点。

  • 高效性
    从C语言的发展史可以看出,它继承了低级语言的有点,产生了高效的代码,并且具有良好的可读性和可编写性。

  • 灵活性
    C语言中的语法不拘一格,在原有语言的基础上进行创造、复合,给程序员更多的想象和发挥空间。

  • 功能丰富
    除了C语言多具有的类型外,还可以使用丰富的运算符和自定义的结构类型,来表达任何复杂的数据类型,友好的完成所需要的功能。

  • 表达力强
    C语言的语法形式与人们所使用的语言形式相似,书写形式自由、结构规范,并且其中的简单控制语句可以轻松的控制程序流程,完成复杂繁琐的程序要求。

  • 可移植性好
    C语言具有良好的可移植性,这使得C程序在不同的操作系统下,只需简单的修改或者不用修改就可以进行跨平台的程序程序开发操作。

3.编写一个简单的C程序

在学习C语言的时候,首先不要对C语言产生恐惧,C语言是人类共有的财富。只要通过努力的学习就可以掌握。

  • 一个简单的C程序
#include <stdio.h>

int main()
{
    
    printf("hello world c!\n");   // 输出显示
    return 0;                     // 返回
}

运行程序,显示如下:
在这里插入图片描述

  • #include <stdio.h>
    这句话的功能是进行有关的预处理操作,include称为文件包含命令,尖括号里是内容,称为头文件。有关预处理的内容,在后续会讲解。

  • 空行
    C语言是一个比较灵活的语言,格式不是固定不变的,为了代码的整洁美观,阅读起来方便,我们可以输入任意的空格、空行,并不会影响程序的执行。

  • int main()
    main函数为一个返回整型的函数,其中int叫做关键字,这个关键字代表的类型为整型。关于关键字后续会讲解。main函数是程序的入口函数,每一个程序都会有一个main函数,也就是说每一个程序都是从main函数开始执行的。上面代码就是进入到main函数,先执行printf,再执行return语句。

4. C语言程序的格式

  • 通过上面的简单C程序可以看书,C语言编写有一定的格式
  1. 主函数main
    C语言是从main函数开始执行,main函数可以放在文件的任意位置

  2. 程序的主体是由函数构成的
    程序中main就是主函数,当然可以定义自己的函数,在函数中进行特定的操作,完成特定的功能。

  3. 函数体的内容在{}内
    每个函数的函数体都要用{}括起来,函数可以有返回值return 0,也可以没有返回值。

  4. 每条语句以;结束
    如果一条语句写完后要以;结尾。

至此,通过上面的介绍,相比对C语言有了一个基本的认是,那么在后续的学习中有一定的帮助。当然,对于初学者来说有些属于还不是很理解,这都没有关系。在下面的教程中我们将逐步深入到C语言,学习C语言的基本语法和知识。

添加公重号:Linux兵工厂,获取海量Linux硬核资料。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/127871.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是"文件表项"

从Linux的层次角度来说&#xff0c;在用户空间是存在这样的概念的&#xff0c;这个概念是存在内核空间的&#xff0c;而且是针对打开的文件的&#xff01; 内核用三种数据结构来描述一个打开的文件。 数据结构一: 文件描述符表(descriptor table): 每个进程都有它独立的描述符表…

【代码调试】《FSCE: Few-Shot Object Detection via Contrastive Proposal Encoding》

论文地址&#xff1a;https://arxiv.org/pdf/2103.05950.pdf 代码地址&#xff1a;https://github.com/megvii-research/FSCE 论文阅读&#xff1a;https://blog.csdn.net/qiankendeNMY/article/details/128390284 我的配置&#xff1a; Python &#xff1a;3.8(ubuntu18.04) …

小程序发布体验版流程

一、微信开发者工具操作 1. 点击 工具 -> 上传&#xff08;或 直接点击右上角“上传”按钮&#xff09; 【注意】 如果使用的测试 appid 则【上传】按钮不能点击&#xff0c;必须使用真实 appid 2. 如果之前有发布过体验版&#xff0c;会提示继续操作将会覆盖之前的体验版…

MyBatisPlus ---- 基本CRUD

MyBatisPlus ---- 基本CRUD1. BaseMapper2. 插入3. 删除a>通过id删除记录b>通过id批量删除记录c>通过map条件删除记录4. 修改5. 查询a>根据id查询用户信息b>根据多个id查询多个用户信息c>通过map条件查询用户信息d>查询所有数据6. 通用Servicea>IServi…

RK3588平台开发系列讲解(Display篇)开机视频的设置

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、开机视频功能介绍二、使用方法2.1、开启与关闭2.2、视频放置位置2.3、编译结果2.4、视频素材要求2.5、参数控制说明沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍RK3588平台开机视频的使用方法…

ARM64内存虚拟化分析(7)stage2异常处理

当虚拟机访问内存或虚拟机访问寄存器时&#xff0c;由于并没有分配真实的物理地址&#xff0c;并没有建立stage2映射&#xff0c;因此这两种情况会产生stage2异常处理&#xff0c;其中第一种情况为真实的stage2缺页&#xff0c;第二种情况为MMIO处理。同时如果在stage2产生外部…

零膨胀负二项回归案例分析

零膨胀负二项回归分析 计数研究模型中&#xff0c;常用泊松回归模型&#xff0c;但泊松回归模型理论上是要求平均值与标准差相等&#xff0c;如果不满足&#xff0c;则可使用负二项回归模型&#xff0c;负二项回归放宽了平均值标准差这一理论假定。 在实际研究中&#xff0c;…

网络协议类型

网络协议是一组规则、约定和数据结构&#xff0c;用于规定设备如何跨网络交换数据。换句话说&#xff0c;网络协议可以等同于两个设备必须理解的语言&#xff0c;以实现信息的无缝通信&#xff0c;无论其基础设施和设计差异如何。 OSI 模型&#xff1a;网络协议的工作原理 要…

Oracle数据库安装配置详细教程汇总(含11g、12c、18c、19c、21c)

不论你是数据库小白&#xff0c;还是久经沙场的技术专家&#xff0c;你接触和运维Oracle数据库的第一步可能都是安装配置。并且随着软硬件的升级、替换以及业务场景的变化&#xff0c;数据库安装也将是你常常会进行的操作之一。 这里先为大家附上Oracle各版本支持的生命周期及…

阶段性回顾(2)

1. 移位操作符的对象只能是整数&#xff0c;只能对整数的二进制位进行移动。 2. 二进制是数值的一种表示形式。一个整数占了四个字节&#xff0c;相当于一个整数可以用32位二进制位序列表示&#xff0c;那么这时候该如何判断正负呢?规定&#xff1a;这32位二进制序列的头一位如…

第二十二讲:神州路由器OSPF单区域路由的配置

实验拓扑图如下所示 设备 端口 IP 子网掩码 网关 Router-A F0/0 172.16.1.1 255.255.255.0 无 F0/3 172.16.0.1 255.255.255.0 无 Router-B F0/0 172.16.1.2 255.255.255.0 无 F0/3 172.16.2.1 255.255.255.0 无 PC1 172.16.0.2 255.255.255.0 172.1…

解决docker容器因报错无法启动的问题,检查、修复容器错误并重启

问题复现 使用&#xff1a; sudo docker ps -a查看当前的docker容器&#xff1a; 我们想启动name为【docker-mongo】的这个容器&#xff0c;因此要执行 sudo docker start docker-mongo但是执行后仍旧没有重启&#xff0c;大概率是重启的时候报错了&#xff0c;查看日志&a…

Spring Boot骚操作-多数据源Service层封装

mysql, es, mongodb 三个数据源用配置文件方式连接&#xff0c;JPA只是正对dao做了封装&#xff0c;本文主要介绍如何对service层进行封装。 Spring Boot - 多个数据源Service层封装 类关系图 封装的一些配置 application.yml pom.xml 封装后使用 MySQL 动态数据访问 Mong…

坦克大战1.0,java时间处理机制

1.java 绘图坐标体系 1.1 坐标体系-介绍 下图说明了Java坐标系。坐标原点位于左上角&#xff0c;以像素为单位。在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向,距离坐标原点y个像素。…

金融业务如何高性能传输数据

对系统要求高&#xff0c;通常按金融级标准设计。金融数据传输要求速度快&#xff0c;流量大&#xff0c;极强容灾。 案例分析 简化版券商算法交易平台对接交易所&#xff1a; 涉及场景多。既有事务数据&#xff0c;也有市场数据模型简单。只涉及到2个主体复杂度可选。连接交…

【结构型】装饰模式(Decorator)

目录装饰模式(Decorator)适用场景装饰模式实例代码&#xff08;Java&#xff09;装饰模式(Decorator) 动态地给一个对象添加一些额外的职责。就增加功能而言&#xff0c;装饰模式 (Decorator) 比生成子类更加灵活。 适用场景 在不影响其他对象的情况下&#xff0c;以动态、透…

2023让工作效率直线飞升

2022年马上就要过去&#xff0c;过去的一年&#xff0c;腾讯云HiFlow和众多腾讯系应用也帮助了许多企业完成数字化转型&#xff0c;许多没有代码基础的业务人员也能通过搭建工作流&#xff0c;高效的处理生活&工作的繁杂事务&#xff0c;时间精力节省50%。把时间花在更重要…

开源 | 携程机票跨端 Kotlin DSL 数据库框架 SQLlin

作者简介禹昂&#xff0c;携程机票移动端资深工程师&#xff0c;专注于 Kotlin 移动端跨平台领域&#xff0c;Kotlin 中文社区核心成员&#xff0c;图书《Kotlin 编程实践》译者。一、背景2022年9月 Kotlin 1.7.20 发布之后&#xff0c;Kotlin Multiplatform Mobile&#xff08…

【计算机图形学入门】笔记7:Shading着色1(光照与基本着色模型)

07Shading着色&#xff08;光照与基本着色模型&#xff09;1.深度缓冲Z-buffering1.画家算法&#xff1a;先把远处的东西画在屏幕上&#xff0c;再画近处的&#xff0c;从而近处物体覆盖远处物体。&#xff08;油画家&#xff09;2.深度缓冲2.Shading着色1.我们目前学了哪些知识…

CleanMyMacX2023系统清理优化工具使用评测

如果你的macbook有点年头空间不够开始卡顿了&#xff0c;或者你是windows用户刚转来的&#xff0c;我强烈建议你安装一个cleanmymac&#xff01;Mac电脑清理是可以直接使用储存空间管理&#xff08;关于本机->储存空间->管理&#xff09;来清理&#xff0c;但是这里的其他…