学会了c语言怎么编程,三天学会C语言编程

2023-11-04

5ddf7ba9269f2.png!v1

本文试图通过上中下三篇文章引领大家进入C语言的世界。C语言是一个非常古老(1972年发明)的语言了,想必大家都有所了解,没有了解也没关系。C语言以难学和难以使用着称,想用好C语言更是难上加难。

本文不假设读者有任何其它编程语言的基础,但需要了解计算机的基本概念。对计算机的体系结构有基本的概念。如图1是本文简化的计算机结构,其核心是CPU和内存,其中CPU用于运行代码,而内存则用于存储进程代码和数据。输入输出设备可以简单的理解为我们电脑的鼠标、键盘和显示器。

5ddf7ba9e8eb5.jpg!v1

这里有一点需要注意的是,内存是被划分为一个一个单元的,我们可以简单的理解为一个单元的大小是1字节(Byte,也即8位),如图1右边所示。并且,内存以该单元为单位进行编址,也就是定义内存的地址。这个地址可以参考我们日常的门牌号,这样CPU才知道数据访问的位置。

本文进行C语言开发基于Linux环境进行,之所以使用Linux是因为该环境下不需要安装负载的工具。本文假设采用的Linux发行版是Ubuntu系统,如果不清楚如何安装该系统可以参考本号的最详细的图文安装Ubuntu教程|如果还不会你找我一文。具体安装可以在虚拟机上安装,这样使用起来比较方便。

具备该操作系统环境之后,需要安装C语言源代码的编译工具。在Linux的编译工具是gcc,在Ubuntu上可以非常方便的安装该工具。执行如下命令即可安装该工具:1sudo apt-get build-dep gcc

或者执行如下命令也可以安装该工具:1sudo apt-get install build-essential

安装完成后,执行如下命令可以验证是否安装成功:1gcc --version

如图提示版本信息则代表安装成功了,如果提示命令不存在则代表安装失败了。

第一个进程

为了有一个整体的认识,本文先给一个可以运行的完整的代码。如下是一个可以直接编译运行的C语言代码。

1

2

3

4

5

6#include

int main(void)

{

printf("hello world!

");

}

可以将上述代码在Windows上通过记事本保存为一个hello.c文档,然后拷贝到Linux系统中。或者如果会使用Linux下的vim工具的话,通过该工具创建一个hello.c文档,并将上述代码拷贝到该文档中,然后保存。然后在hello.c文档所在的目录下执行如下命令:

1gcc -o hello hello.c

这样就会生成一个可执行文档,这个文档类似于Windows下面的*.exe文档。在该目录下,输入如下内容就可以执行该可执行文档:

1./hello

执行后可以看到输出的内容(hello world!)。至此,我们完成了第一个C语言进程的开发、编译和运行。

第一个进程的解释

C语言是编译型的语言,也就是说起源代码需要编译成可以被CPU识别的格式(机器码)之后,才能在Linux上运行。与之相对的是解释型的语言(例如Python,PHP等),这种语言可以直接在解释器中运行,不需要编译生产其它格式的文档。

第一行(#include )表示我们需要引用一个在其它地方已经实现的功能(也就是后面使用printf)。所有语言都提供了一下“轮子”,这样我们就不用从零开始。我们可以借用这些“轮子”拼装成我们的“汽车”,这样能大量的节省工作量。

第二行(int main(void))是C语言的入口,每个C语言进程都有一个这样的入口函数(后面解释什么是函数),而且必须是这个格式。这里int是该函数的返回值,表示是一个整型数;main是函数的名称,这个是固定的,不能变化;void是参数。

第三行({)和第五行(})是函数的开始和结束标识,每个函数都包含这两个标识。

第四行(printf(“hello world! “))是一个函数调用,这个函数有其它进程实现的,这里我们借用了该功能。printf的功能是向终端打印内容,因此我们执行进程是会在终端看到hello world!字符串。

有些细节还没讲到,可以先照着葫芦画瓢。

今天先到这,后续文章介绍数据类型、变量、控制语句和函数等内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

学会了c语言怎么编程,三天学会C语言编程 的相关文章

  • while语句中的break和continue

    1 break介绍 include
  • 怎么彻底删除电脑上的软件_彻底删除流氓软件的两个工具!

    流氓软件 弹出广告 我想 这些应该让很多同学都苦不苦不堪言 卸载不干净 无法卸载 卸载残留 这些顽固的软件就如同牛皮癣一样 一旦粘着就很难摆脱 本文就来推荐2款软件 这两款都是经过多年使用 对比保留下来的 从此就可以对流氓软件说再见了 前言
  • android studio构建的AAB是什么

    AAB 是 Android App Bundle 的缩写 是一种由 Google 推出的 Android 应用程序发布格式 AAB 格式的应用程序包含了应用程序的所有代码和资源 但是与传统的 APK 包不同 AAB 包含了多个分割的模块 每
  • JAVA、MySql实现登录注册(网页)

    初学JAVA EE 老师留下一小作业 用JAVA实现与服务器端交互 实现登录和注册功能 初学一种专业课很多老师都会留下一种让学生实现登录和注册的作业 下面是记录的实现步骤 1 首先是账号密码输入框和按钮 登录
  • Sa-Token的Token有效期和临时有效期的区别

    各位不要再卷了 周六我在家打着游戏 群消息就一直叮叮叮 进去看了看 周六还加班干活 哎真卷 ps 在卷就没了 吐槽一下 进入正题 就周六群友提问做一下总结 群友问题 为什么 不能续期 先说一下这位群友的测试方法 token有效期 10秒 在
  • 关于checkpoint机制

    关于checkpoint机制 一 简介 思考一下这个场景 如果重做日志可以无限地增大 同时缓冲池也足够大 那么是不需要将缓冲池中页的新版本刷新回磁盘 因为当发生宕机时 完全可以通过重做日志来恢复整个数据库系统中的数据到宕机发生的时刻 但是这
  • idea忽略.iml文件和.idea目录(避坑和填坑)

    当操作git下的项目时 iml文件和 idea目录下的有些文件会显示已被改动会出现在git待提交目录下 这里为了防止提交这些并不需要的东西 需要在idea中设置忽略这些东西 注 输入完 iml和 idea后点回车再点OK 不然不会保存 这些
  • hiberate4整合Spring3.1时出现 java.lang.NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider

    hibernate4整合spring3 1的过程中 发现了java lang NoClassDefFoundError Lorg hibernate cache CacheProvider异常 查了一下相关资料 原来发现hibernate4
  • 关于大数据技术原理与应用的学习(5)

    学习目标 大数据技术原理与应用 学习内容 5 NoSQL数据库 例如 5 1NoSQL数据库 5 2与关系数据库的比较 5 3四大类型 5 4理论基石 5 5从NoSQL到NewSQL 5 6文档数据库MongoDB 学习时间 2022 0
  • Android 验证码输入框 连续性粘贴 使用第三方包

    第一步 android compileOptions sourceCompatibility JavaVersion VERSION 1 8 targetCompatibility JavaVersion VERSION 1 8 depen
  • GPU与CPU版本的矩阵乘法对比

    转载自 http www cnblogs com stormhan p 5467187 html 由于刚刚开始学习Cuda 还没有整理出一个完整的Cuda类 只是在Nvidia提供的kenerl架构上做修改 但用于初体验GPU给我们带来的好
  • OSG+MyGUI结合下中文输入的若干问题

    好久又没写文章了 经过这两天的研究 终于搞定了OSG MYGUI的中文输入问题 现在进行一下所遇问题的汇总 方便自己以后查阅 问题1 小键盘数字的输入问题 这个是很久以前解决的 osg并不能给你真正的小键盘输入值 还是得自己处理 代码片段1
  • 给360安全浏览器设置一个图片背景/主题

    此方法适用于360安全浏览器 其他浏览器请移步 给浏览器设置一个图片背景 主题 看看效果 1 点击 管理 gt 添加 gt 搜索stylebot gt 安装 2 安装好了会有小图标 S 或者小图标 css 点击 S css图标 gt Opt
  • 测试用例应该怎么写

    一 背景 有些测试同学 写测试用例的时候 直接就是将需求文档上的内容抄一遍 转换成测试用例的格式 没有加入任何自己的思考和理解 没有融入任何测试方法论 测试完全依赖于需求文档的质量 依赖于产品经理保姆级的服务 需求写得细 测试用例覆盖就全面
  • 详解numpy.random.shuffle函数

    文章目录 函数原型 参数解析 该函数的注意事项 例子 示例代码 示例结果 参考 numpy的random模块中的shuffle函数用于np ndarray数组中的元素打乱顺序 进打乱多维数组的第一维顺序 本博客详细节将该函数的API 并给出
  • Hive---拉链表设计与实现

    1 数据同步问题 Hive在实际工作中主要用于构建离线数据仓库 定期的从各种数据源中同步采集数据到Hive中 经过分层转换提供数据应用 比如每天需要从MySQL中同步最新的订单信息 用户信息 店铺信息等到数据仓库中 进行订单分析 用户分析
  • [Linux系统编程]守护进程/线程(四)

    距离上一次利用高并发技术实现360度行车记录仪功能已经过去半年了 开始写一系列关于系统编程和网络编程内容进行总结 温故而知新 欢迎大家讨论学习 2021 09 05 补充 1 dup2与dup区别是dup2可以用参数newfd指定新文件描述
  • java并发基础(二)

    java并发编程实战 终于读完4 7章了 感触很深 但是有些东西还没有吃透 先把已经理解的整理一下 java并发基础 一 是对前3章的总结 这里总结一下第4 5章的东西 一 java监视器模式 概念 把对象的所有可变状态都封装起来 并由对象
  • 大数据开发教程——Apache Hive实战

    Hive 建表高阶语句 CTAS and CTE 重点 CTAS Create Table As Select CREATE TABLE ctas employee as SELECT FROM employee 基于select查询的结果

随机推荐

  • linux下dig命令安装,在Linux系统上安装和使用dig和nslookup命令

    1 前言 在本文中 您将学习如何在linux上安装dig命令和nslookup命令以及如何使用这些命令查找域名相关的信息 这些命令用于网络故障排除和收集有关域名的信息 dig是域名信息Gopher的缩写 是一个DNS查找工具 用于探测DNS
  • python自动化笔记(七)局部变量和递归

    my num 200 全局变量 def my func my num 10 局部变量 函数内部有同名的局部变量 优先采用局部变量 print my num def my func1 global num 局部变量转换为全局变量 也可修改全局
  • IDEA打包Maven项目失败-InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

    IDEA中运行Maven package报错 Could not transfer artifact org apache maven plugins maven resources plugin pom 2 6 from to centr
  • 单线多拨插件安装_折腾小日记三:爱快PKopenwrt多拨实测(更新版)

    前言 受困于运营商较小的带宽或者高昂的资费 网络爱好者都非常热衷于通过多拨来提升网速 但是现在绝大部分地区都限制了同时拨号设备数量 为了能多拨只能使用稍微复杂的 并发多拨 的方法 并发多拨让多个虚拟wan同时拨号 在运营商的账号在线检测还没
  • 手动下载maven依赖

    最近做SpringBoot项目时 需要添加spring boot admin starter server 依赖 刷新Maven后提示找不到这个依赖的版本 尝试各种办法 更换私服地址 删除缓存等 后是还是无法下载 只能到Maven的中央仓库
  • C语言超市计价收款系统

    学习一个月的C语言 写了一个简易的超市计价收款系统 源码如下 include
  • Anaconda常用操作命令

    Anaconda常用命令操作指南 参考链接 Anaconda完全入门指南 Anaconda常用命令总结 1 更换国内像源 conda config add channels https mirrors tuna tsinghua edu c
  • OMNI USDT 0.12.0 环境部署

    文章目录 一 生成Omni Core v0 12 0版本镜像 二 启动Omni Core v0 12 0版本容器 一 生成Omni Core v0 12 0版本镜像 编写Dockerfile cd opt docker usdt image
  • 软件测试中静态测试和动态测试的区别

    1 测试的部分不同 静态测试是指测试不运行的部分 只是检查和审阅 如规范测试 软件模型测试 文档测试等 动态测试是通常意义上的测试 也就是运行和使用软件 2 测试方式不同 静态测试 通过评审文档 阅读代码等方式测试软件称为静态测试 通过运行
  • 【Python入门系列】第十四篇:Python Web开发

    文章目录 前言 一 PythonWeb开发简介 二 开发准备工作 三 开发步骤 四 开发案例 1 使用Flask框架创建一个简单的Web应用程序 2 使用Django框架创建一个简单的待办事项应用程序 3 使用Flask框架创建一个简单的博
  • 【数据挖掘】(一)用jupyter编程

    为熟悉jupyter 找了一本书练习 参考资料 Python数据挖掘入门与实践 数据集 https github com packtpublishing learning data mining with python 第一行代码 impo
  • 测试用例设计方法

    一 等价类划分 二 边界值分析法 三 场景法 四 判定表 五 因果图 六 错误推测法 七 正交试验法 一 等价类划分 定义 依据需求将输入划分成若干个等价类 从等价类中选定一个测试用例 如果该用例通过 则表明整个等价类通过 适用范围 适用于
  • MYSQL常见查询-SELECT

    1 查看某一产品销量城市排行榜前10名 并展示其同环比 思路 取出今日 昨日 上周该商品的销量 通过开窗函数计算同环比 代码 SELECT FROM SELECT n FIRST VALUE n num OVER PARTITION by
  • Ubuntu:vim键盘上下左右按键变ABCD

    原因 ubuntu自带vi不完整导致 解决方法一 sudo apt get remove vim common sudo apt get install vim 解决方法二 sudo apt get install vim gtk
  • 在Mac上配置Vue开发环境

    因为Vue是NodeJS的模块 要想使用Vue需要先安装NodeJS 在Mac中安装NodeJS通过brew包管理器就会很方便 因为访问源速度问题建议使用5 阿里 Homebrew开源项目地址 https gitee com cunkai
  • 抱抱脸(hugging face)教程-中文翻译-分享一个模型

    分享一个模型 最后两个教程展示了如何使用 PyTorch Keras 和 Accelerate 优化分布式设置的模型 下一步就是把你的模型公之于众 我们相信公开分享知识和资源 使人工智能大众化 我们鼓励你考虑与社区分享你的模式 以帮助其他人
  • 史上最全!Selenium 录制脚本+八种元素定位方式+具体代码演示

    话不多说 先附上练习的所有代码链接 link 文章目录 引言 什么是自动化测试 一 selenium定义 二 使用selenium IDE录制脚本 三 元素的定位方式 1 id gt find element by id 2 name gt
  • 欧拉筛法代码及数学原理

    数学原理 首先 从 2 开始 把 2 的倍数都标记为合数 然后把下一个未标记的数 3 标记为素数 再把 3 的倍数标记为合数 接着把下一个未标记的数 5 标记为素数 再把 5 的倍数标记为合数 以此类推 直到标记到 N 为止 在标记的过程中
  • Java #{} 和 ${} 的含义及区别

    表示一个占位符 向占位符输入参数 MyBatis 会自动进行 Java 类型和 jdbc 类型的转换 且不需要考虑参数的类型 以预编译的方式传入 可以有效的防止 SQL 注入 提高系统安全性 例如 传入字符串 MyBatis 最终拼接好的
  • 学会了c语言怎么编程,三天学会C语言编程

    本文试图通过上中下三篇文章引领大家进入C语言的世界 C语言是一个非常古老 1972年发明 的语言了 想必大家都有所了解 没有了解也没关系 C语言以难学和难以使用着称 想用好C语言更是难上加难 本文不假设读者有任何其它编程语言的基础 但需要了