基于AI的C语言程序设计(微课版)课件 第1章 C语言入门与开发环境配置_第1页
基于AI的C语言程序设计(微课版)课件 第1章 C语言入门与开发环境配置_第2页
基于AI的C语言程序设计(微课版)课件 第1章 C语言入门与开发环境配置_第3页
基于AI的C语言程序设计(微课版)课件 第1章 C语言入门与开发环境配置_第4页
基于AI的C语言程序设计(微课版)课件 第1章 C语言入门与开发环境配置_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章

C语言入门与开发环境配置主

:蒋亚平走进C语言世界:从代码到运行目录CONTENTS01程序设计与程序设计语言02C语言的发展及其特点03简单的C语言程序04C语言程序的结构和运行过程05词法记号06开发环境搭建07调试与容器化08本章小结问题导入通义灵码实现功能“打印10个*号”时,反复出现语法错误却找不到原因,通义灵码(AI编程助手)能帮我们做什么?VSCode的调试功能又如何一步步定位“累加和结果不正确”等问题?Docker为什么在自己电脑上编译通过的“打印‘欢迎学习C语言!’”程序,拷贝到实验室电脑后却提示“编译环境缺失?”如何通过Docker快速搭建一套“无论在哪台电脑都能直接用”的C语言开发环境?01程序设计与程序设计语言程序设计的基本概念问题分析明确问题需求,确定输入输出及约束条件,如计算1到100累加和,输入为范围,输出为总和,需保证逻辑正确。基本概念程序设计(Programming)是指通过规划、设计和编写指令序列,让计算机按预定逻辑解决特定问题的过程。简单来说,就是“教计算机做事”的方法。编码实现用程序设计语言将算法转化为代码,遵循语法规则,如用C语言实现累加算法。测试优化运行程序验证结果,修改逻辑漏洞、优化性能,直至满足需求。算法设计将问题分解为可执行步骤,如累加算法从1开始依次加到100,记录总和,是程序的‘灵魂’。核心目标:将人类解决问题的思路转化为计算机可执行的步骤。关键阶段

程序设计语言的发展机器语言由二进制指令(0和1)组成,执行效率高,但可读性极差,依赖硬件架构,直接编写几乎不可能。汇编语言用助记符(如ADD表示加法、MOV表示数据移动)替代二进制指令,保留机器语言高效性,但代码与硬件绑定,可移植性差。高级语言接近自然语言,语法直观,可读性和可移植性强,C语言是其中经典,兼顾高效性与灵活性。人与计算机沟通的“桥梁”:程序设计语言经历了从低级到高级的演进,可分为三大类:ADDA,B表示“将A和B的值相加”。某计算机用“10001001”

表示“加法操作”。用sum=a+b即可表示加法,无需关注计算机底层如何实现。02C语言的发展及其特点从B到C:UNIX催生的瑞士军刀C语言诞生背景1972年,丹尼斯·里奇为移植UNIX操作系统,在贝尔实验室基于B语言设计出C语言。C语言设计目标保留指针、简洁关键字、直接映射硬件等特性,实现‘一次编写、多平台运行’。C的五大核心特征简洁高效,贴近硬件仅32个关键字,编写的代码紧凑直观,执行效率极高,接近汇编语言。底层控制支持指针操作,可直接访问内存地址,实现对底层硬件的精细控制。跨平台兼容

通过ANSIC等标准规范,C代码在不同硬件和操作系统上可编译运行。结构化编程支持顺序、分支、循环等基本控制结构,使程序逻辑清晰、可读性强。功能灵活

可通过标准库和第三方库扩展强大功能,应用领域广泛。03简单的C语言程序简单的C语言程序1欢迎学习C语言预处理指令#include<stdio.h>引入标准输入输出库,让程序能使用printf等函数。#include<stdio.h>//引入输入输出工具库intmain()//程序的入口,类似任务的开头{printf("欢迎学习C语言!");//输出内容,类似具体任务return0;//表示程序正常结束,类似任务完成的信号}输出语句printf("Hello,World!");完成输出功能。程序结束return0;向操作系统报告程序正常结束。主函数intmain()是程序的唯一入口,程序从这里开始执行。运行结果:2矩形面积计算变量定义floatlength,width,area;定义存储长、宽、面积的变量。输入与计算scanf读取用户输入,通过表达式计算结果。输出printf语句输出结果。#include<stdio.h>intmain(){floatlength,width,area;//定义存储长、宽、面积的变量printf("请输入矩形的长:");scanf("%f",&length);//接收用户输入的长printf("请输入矩形的宽:");scanf("%f",&width);//接收用户输入的宽area=length*width;//计算面积printf("矩形的面积为:%f\n",area);//输出面积return0;}运行结果:3分支结构变量定义intnum;定义一个整数变量。输入scanf读取用户输入。条件结构if...elseif...else语句。#include<stdio.h>intmain(){intnum;//定义一个整数变量printf("请输入一个整数:");scanf("%d",&num);//接收用户输入的整数if(num>0){printf("%d是正数\n",num);}elseif(num<0){printf("%d是负数\n",num);}else{printf("%d是零\n",num);}return0;}运行结果:04C语言程序的结构和运行过程C语言程序的结构和运行过程C源程序五大组成部分预处理指令以#开头,用于在编译前对源代码进行处理。主函数(main函数)每个C语言程序有且仅有一个main函数,其格式为intmain()。变量定义

变量就像一个个存储数据的容器,需要指定数据类型(如int表示整数、float表示浮点数)和变量名(如num、length)语句完成具体操作的指令,包括输入输出语句、运算语句、控制语句等。注释

以//(单行注释)或/**/(多行注释)开头,用于对程序代码进行解释说明,方便他人阅读和理解代码,注释内容不会被计算机执行。#include<stdio.h>,其作用是引入标准输入输出库,让程序能够使用printf、scanf等输入输出函数。程序的“指挥中心”函数是C语言程序的主要组成部分程序模块化与编译过程将程序分成多个模块,每个模块通常包含一个或多个相关的函数。每个模块会被写成一个独立的源文件(例如.c文件)。在编译过程中,每个源文件会被单独编译成目标文件(.o或.obj文件),然后通过链接器将这些目标文件链接成一个最终的可执行程序。函数的构成函数首部:是函数的第一行,包含返回类型、函数名称和参数列表。函数体:包含函数的具体操作,通常由一对大括号{}包围。

函数体分为声明部分和执行部分。声明部分:执行部分:returna+b;intadd(inta,intb);intnum1,num2,result;函数是C语言程序的主要组成部分main函数与程序执行一个程序只能有一个main函数。main函数的声明通常如下:即使main函数可以出现在文件的任意位置,但它始终是程序的入口点,程序从这里开始执行。intmain(void)//或intmain(),两者都可以源文件到可执行四步曲C程序的运行过程3连接链接器将目标文件与库文件组合,生成可执行文件。2编译编译器将.c文件转化为目标文件,包含预处理、编译、汇编三个子阶段。4执行操作系统加载可执行文件到内存,CPU执行指令完成程序功能。1编辑用文本编辑器编写C源代码,生成.c文件。工具:Dev-C++、VSCode、记事本、Vim等文本编辑工具。核心任务:由编译器将.c源文件转化为机器可识别的二进制目标文件(通常以.o或.obj为扩展名)。核心任务:由链接器(Linker)将多个目标文件(.o)和所需的库文件(如C标准库)组合。CompilerExplorer查看汇编指令​CompilerExplorer是一款实用的在线编程工具,它能实时将C代码转换为对应的汇编指令,帮助我们直观地跟踪代码运行的底层细节。​工具特点与优势

实时转换输入C代码后,工具会立即显示对应的汇编指令。多编译器支持可选择不同版本的GCC、Clang等编译器,对比不同编译选项对汇编代码的影响。​代码关联汇编指令与C源代码逐行对应,便于跟踪代码执行逻辑。轻量便捷无需配置本地开发环境,通过浏览器即可使用。01030204CompilerExplorer查看汇编指令​如何使用CompilerExplorer理解变量存储​

#include<stdio.h>intmain(){inta=10;intb=20;intc=a+b;printf("c=%d\n",c);return0;}示例:通过工具观察变量在内存中的存储方式。.LC0:

.string"c=%d\n"main:

push

rbp

mov

rbp,rsp

sub

rsp,16

mov

DWORDPTR[rbp-4],10

mov

DWORDPTR[rbp-8],20

mov

edx,DWORDPTR[rbp-4]

mov

eax,DWORDPTR[rbp-8]

add

eax,edx

mov

DWORDPTR[rbp-12],eax

mov

eax,DWORDPTR[rbp-12]

mov

esi,eax

mov

edi,OFFSETFLAT:.LC0

mov

eax,0

call

printf

mov

eax,0

leave

ret汇编指令在CompilerExplorer中选择GCC编译器(如x86-64gcc15.2),会生成类似右边的汇编指令(简化版)。变量abc被存储在栈内存中,通过栈基址寄存器rbp的偏移量(-4-8-12)定位,这与“数据在计算机中的存储方式”中栈内存的动态分配特性完全一致。CompilerExplorer查看汇编指令​如何使用CompilerExplorer理解函数调用栈​

#include<stdio.h>intadd(intx,inty){returnx+y;}intmain(){inta=5;intb=3;intsum=add(a,b);printf("sum=%d\n",sum);return0;}示例:使用CompilerExplorer理解函数调用栈。CompilerExplorer查看汇编指令​对应的汇编指令(简化版)展示了函数调用栈的工作过程。

add(int,int):

push

rbp

mov

rbp,rsp

mov

DWORDPTR[rbp-4],edi

mov

DWORDPTR[rbp-8],esi

mov

edx,DWORDPTR[rbp-4]

mov

eax,DWORDPTR[rbp-8]

add

eax,edx

pop

rbp

ret.LC0:

.string"sum=%d\n"main:

push

rbp

mov

rbp,rsp

sub

rsp,16;变量a入栈

mov

DWORDPTR[rbp-4],5

;变量b入栈

mov

DWORDPTR[rbp-8],3;传递参数b

mov

edx,DWORDPTR[rbp-8]

;传递参数a

mov

eax,DWORDPTR[rbp-4]

mov

esi,edx

mov

edi,eax

;调用add函数,压入返回地址call

add(int,int)

;存储返回值到summov

DWORDPTR[rbp-12],eax

mov

eax,DWORDPTR[rbp-12]

mov

esi,eax

mov

edi,OFFSETFLAT:.LC0

mov

eax,0

call

printf

mov

eax,0

leave

ret调用add函数前,参数a、b通过寄存器传递到栈中;call指令执行时,将下一条指令的地址(返回地址)压入栈;add函数内部通过rbp偏移量访问参数,执行完成后通过ret指令弹出返回地址,回到main函数继续执行。【汇编指令】05词法记号C源代码的六大词法单元01标识符用于给变量、函数等命名,由字母、数字和下划线组成,必须以字母或下划线开头。02关键字C语言预先定义的保留字,具有特定语法含义,如int、if等。03常量程序中直接出现的固定值,包括整数、浮点数、字符和字符串。04运算符用于表示运算关系,如+、-、*、/等。05分隔符用于分隔代码中的不同元素,如括号、分号等。06空白符包括空格、制表符、换行符等,主要用于分隔其他词法记号。06开发环境搭建Dev-C++的安装与使用Dev-C++的安装与使用下载安装:访问官方渠道下载Dev-C++,运行安装程序完成安装。选择安装语言许可证协议选择组件选择安装位置安装进度安装完成Dev-C++的安装与使用初次配置选择语言选择主题配置成功Dev-C++界面VSCode的安装与使用VSCode的安装与使用下载安装:访问官方渠道下载VSCode,运行安装程序完成安装。许可协议选择目标位置选择开始菜单文件夹选择附加任务界面正在安装界面安装完成VSCode的安装与使用配置编译器为了编译C语言程序,你需要安装一个C编译器。这里是在Windows上安装MinGW。配置环境变量新建环境变量(1)下载MinGW并安装访问官方渠道下载MinGW,也可以从本书软件资源中得到已经下载好的文件“mingw64.rar”,解压文件“mingw64.rar”即可使用(2)在系统环境变量中添加MinGW的bin目录到PATH。VSCode的安装与使用安装C/C++扩展:VSCode的强大之处在于其丰富的扩展生态系统。对于C语言开发,你需要安装Microsoft提供的C/C++扩展。安装C/C++扩展打开VSCode,转到侧边栏的扩展视图,在搜索框中输入

C++,然后从搜索结果中选择由Microsoft提供的C/C++扩展,点击“安装”按钮。使用VSCode创建和编译程序创建和编写C文件创建和编写C文件运行图标选择调试配置运行结果1234安装AI大模型编程助手:通义灵码(Lingma)01安装与登录在VSCode中安装通义灵码扩展,登录阿里云账号。安装通义灵码成功登录通义灵码(Lingma)安装AI大模型编程助手:通义灵码(Lingma)02生成代码在VSCode中安装通义灵码扩展,登录阿里云账号。通义灵码辅助编程(1)通义灵码辅助编程(2)安装AI大模型编程助手:通义灵码(Lingma)02生成代码复制AI大模型生成的参考代码,运行后即可完成操作。通义灵码生成的代码

通义灵码查找错误安装AI大模型编程助手:通义灵码(Lingma)03优化

借助通义灵码优化代码,修复语法错误,提升编程效率。通义灵码的优化代码功能VSCode工具汉化为便于操作,可通过安装Chinese(Simplified)插件对开发工具进行汉化。安装成功后,点击右下角弹出的对话框按钮“ChangeLanguageandRestart”,重启VSCode后,界即可变成中文状态。重启VSCode完成工具汉化生效07调试与容器化使用VSCode自带调试功能追踪程序运行配置调试环境点击左侧导航栏的“运行和调试”图标(形似小虫子的图标),或使用快捷键Ctrl+Shift+D打开调试面板。使用VSCode自带调试功能追踪程序运行启动调试会话点击左侧导航栏的“运行和调试”图标(形似小虫子的图标),或使用快捷键Ctrl+Shift+D打开调试面板。使用VSCode自带调试功能追踪程序运行程序运行控制调试过程中,可通过调试工具栏或快捷键控制程序运行。变量与监视面板调试面板中默认显示“变量”面板,会自动列出当前作用域内的局部变量、函数参数、全局变量等若需要重点关注某个变量或表达式的变化,可在“监视”面板中点击“+”号,输入变量名或表达式(如a+b),面板会持续显示该变量或表达式的值调试功能的核心组件使用使用VSCode自带调试功能追踪程序运行调用栈面板(CallStack)调用栈面板展示了当前程序执行的函数调用层级关系,最顶部为当前正在执行的函数,下方依次为调用它的上级函数。调试功能的核心组件使用调试面板容器化开发环境配置容器化开发环境配置01为什么需要容器化开发Windows与Linux系统的编译器(如gcc)版本差异、库文件路径不同等问题,常导致“代码在本机能运行,换台电脑就报错”。Docker容器技术可将开发环境(编译器、调试工具、依赖库)打包成标准化镜像,实现"一次配置,跨平台运行"。02Docker安装步骤在Docker官网下载DockerDesktop安装包。安装DockerDesktop。容器化开发环境配置安装DockerDesktop配置DockerDesktop安装DockerDesktop的过程安装DockerDesktop成功首次启动DockerDesktop的界面选中推荐设置DockerDesktop欢迎界面容器化开发环境配置启动“DockerDesktopService”服务打开命令提示符测试Docker,输入“dockerversion”,如图所示,表示安装成功。容器化开发环境配置03在Windows系统中安装Ubuntu的步骤在Windows系统中,打开「命令提示符」(建议以管理员身份运行)。输入命令“wsl.exe--list--online”并回车,查看当前可安装的Ubuntu版本。容器化开发环境配置03在Windows系统中安装Ubuntu的步骤选择需要的版本进行安装。最后,输入命令ls/并回车,若能正常显示Linux文件系统的根目录内容,即表示安装成功。容器化开发环境配置04一键部署C语言开发环境(1)Dockerfile(定义环境镜像),文件名为“Dockerfile”,内容如下。#基于Ubuntu22.04构建(轻量且稳定)FROMubuntu:22.04#安装C语言开发工具(gcc编译器、gdb调试器、make构建工具)RUNapt-getupdate&&apt-getinstall-y\gcc\gdb\make\&&rm-rf/var/lib/apt/lists/*#清理缓存,减小镜像体积

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论