语言基础程序 1_第1页
语言基础程序 1_第2页
语言基础程序 1_第3页
语言基础程序 1_第4页
语言基础程序 1_第5页
已阅读5页,还剩95页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计项目化教程(AI助学)(微课版)项目1

控制台计算器的开发情景导入我国春秋战国时期就已有十进制算筹记数法,比古印度早约1000年,这份“严谨计算”的智慧,正可通过本项目中的C语言实践传承。日常计算考试成绩、帮助家人核对购物账单时,小辰常需要精准处理小数(如86.5分、29.9元),因此小辰决定开发一款控制台计算器,以满足日常计算需求,还希望打开工具就能清楚知道其功能。使用printf()函数设计含标题、功能说明的启动界面,借助scanf()函数读取输入,以double类型变量存储小数实现加法运算功能。知识图谱学习要点了解计算机语言发展历程、特点及应用领域掌握C程序基本结构、算法及设计与运行流程掌握C语言标识符、常量、变量概念与使用掌握基本数据类型、算术运算符及输入与输出函数能正确配置C语言开发环境并理解简单C程序具备编程规范与责任意识设计计算器启动界面任务1-1任务1-1设计计算器启动界面通过纯文本输出设计一个计算器启动界面。程序需实现展示计算器的名称、功能说明和欢迎信息等。使用printf()函数完成固定内容的输出,效果如图1-22所示。任务描述图1-22计算器启动界面效果图1.1.1计算机语言的发展知识准备计算机语言概述

在数字化普及的当下,计算机已深度渗透生活、职场、学术等各个领域,而计算机语言作为人与计算机的核心“沟通桥梁”,是实现人机信息交互、让计算机精准执行指令、完成各类任务的关键媒介。

其本质是由数字、符号等元素构成的一系列指令集合,编程人员通过组合运用这些指令,可“指挥调度”计算机按照预设逻辑开展工作;根据功能定位与实现机制的不同,计算机语言主要分为机器语言、汇编语言和高级语言三大类别。1.1.1计算机语言的发展知识准备机器语言由0和1组成,计算机可直接识别,但难以记忆和使用。汇编语言用英文字母或符号替代二进制指令,提高了可读性,但仍依赖硬件。高级语言更贴近人类自然语言,易于理解和移植,如C、Java、Python等。核心区别:从机器语言到高级语言,可读性和可移植性逐渐增强,对硬件的依赖逐渐降低。计算机语言的分类1.1.2C语言的发展及特点知识准备1.C语言的发展1.1.2C语言的发展及特点知识准备2.C语言的特点C语言的语法规则简单明了,关键字数量少(仅有32个基本关键字),程序书写形式自由,便于记忆和使用。同时,C语言生成的目标代码质量高,运行效率接近汇编语言,能够直接操作计算机硬件,在对程序性能要求较高的场景中表现出色。简洁紧凑,灵活高效。01C语言提供了多种基本数据类型(如整型、浮点型、字符型等)和构造数据类型(如数组、结构体、共用体、枚举等),可以满足不同场景下的数据表示需求。此外,C语言的运算符种类繁多,包括算术运算符、关系运算符、逻辑运算符、位运算符等,能够实现复杂的运算功能。丰富的数据类型和运算符。02C语言支持结构化程序设计思想,通过函数来实现模块化编程。一个大型程序可以被分解为多个功能独立的函数,每个函数完成特定的任务,这样不仅便于程序的编写、阅读和维护,还能提高代码的复用性。结构化程序设计支持031.1.2C语言的发展及特点知识准备2.C语言的特点C语言的语法规则与硬件架构的关联性较低,用C语言编写的程序经过少量修改甚至无需修改,就可以在不同的计算机平台和操作系统上运行,这一特性使其在跨平台开发中具有很大优势。可移植性好04C语言允许直接访问内存地址,能够对硬件进行直接操作,这使得它非常适合开发操作系统、驱动程序、嵌入式系统等需要与硬件紧密交互的软件。强大的底层操作能力05C语言是许多高级编程语言的基础,如C++、Java、C#等都借鉴了C语言的语法风格。同时,大量的系统软件、应用软件和嵌入式软件都是用C语言开发的,许多编程语言的编译器也采用C语言编写,具有良好的兼容性和扩展性。应用广泛,兼容性强061.1.2C语言的发展及特点知识准备3.C语言的应用领域操作系统开发UNIX,Linux,Windows核心模块底层实现嵌入式系统开发智能家电、汽车电子、工业控制领域数据库开发MySQL,PostgreSQL等高性能数据库内核编译器/解释器开发C++编译器、Python解释器等基础软件游戏开发游戏引擎底层逻辑、物理引擎计算系统工具开发Vim编辑器、Linux命令行工具等实用软件C语言是现代信息技术的基石之一,广泛应用于对性能和底层控制有严格要求的领域。1.1.3C程序的基本结构知识准备C语言源程序结构的特点,先看【例1-1】的小程序,这个小程序表现了C语言源程序在组成结构上的特点。虽然有关内容还未介绍,但可从这个例子中了解C语言源程序的基本框架和书写格式。【例1-1】用C语言编程,在屏幕上显示“奋斗的青春最美!”。1./*输出“奋斗的青春最美!”*/

//第1行:注释2.#include

<stdio.h>

//第2行:编译预处理语句3.void

main() //第3行:主函数4.{

5. printf("奋斗的青春最美!\n"); //第5行:输出语句6.}运行程序效果如图1-1所示。图1-1例题1-1运行效果1.1.3C程序的基本结构知识准备1.C程序的构成【例1-1】程序中的第1、2、3、5行中都可以看到关于代码的文字描述。

源程序中需要解释和说明的部分,可以加以注释,以增加程序的可读性。编译系统会跳过注释行,不对其进行编译。

“/*......*/”表示多行注释,“//”表示单行注释。(1)代码的注释1.1.3C程序的基本结构知识准备1.C程序的构成【例1-1】程序中的第2行代码如下。#include<stdio.h>是编译预处理语句。编译预处理语句的作用不是实现程序的功能,而是给编译系统提供信息,通知编译器对源程序进行编译之前应该做哪些预处理工作。编译预处理语句还有其他几种,这里的#include称为文件包含语句,其作用是把<>或""内指定的文件包含到程序中,成为程序的一部分。#include<stdio.h>也可写作#include"stdio.h"。被包含的文件通常是由系统提供的,其扩展名为.h,因此也称为头文件。C语言的头文件中包含各个标准库函数的函数原型。因此,程序若需要调用库函数,就必须包含该函数原型所在的头文件。在源程序中,编译预处理语句通常放在最前面。(2)#include指令1.1.3C程序的基本结构知识准备1.C程序的构成【例1-1】程序中的第3行代码如下。main是主函数的函数名,表示这是一个主函数。每一个C程序都必须有且只能有一个主函数。C程序总是从主函数开始执行,并且回到主函数结束。其前面的void代表函数没有返回值。主函数也可写为:intmain()。int表示函数的返回值是整型,此时函数体内需要加语句return0。为保持一致,本书中的主函数都采用无返回值形式。voidmain()这一部分在函数中称为函数头,main函数下面用{}包含的部分是一个程序模块,称为函数体。函数头和函数体是密不可分的。(3)main函数1.1.3C程序的基本结构知识准备1.C程序的构成【例1-1】程序中的第4~6行代码就是函数体。函数体被包含在花括号中,表明函数要执行的动作。(4)函数体1.1.3C程序的基本结构知识准备1.C程序的构成函数体中的代码如下。printf函数是格式化输出函数。函数体内调用printf函数可以把要输出的内容送到显示器输出。printf函数是一个由系统定义的标准函数,可在程序中直接调用。另外还应注意,每一个语句都必须以分号结束,但编译预处理语句、函数头和花括号之后不加分号;标识符和关健字之间至少要加一个空格。(5)执行语句1.1.3C程序的基本结构知识准备2.C程序的书写规范在C程序中,虽然一行可以有多个语句,一个语句也可写多行,但建议一行只写一个语句。01一般采用缩进格式,以提高程序的可读性。02C程序代码一般用小写字母书写,除非另有约定。03程序代码应加上必要的注释。041.1.4格式化输出printf()知识准备1.格式化输出函数printf()的一般格式在C语言中,printf()函数是最常用的输出函数,它的作用是向计算机系统默认的输出设备输出一个或多个任意指定类的数据。调用printf()函数的格式如下。printf("格式化字符串",输出项列表);格式字符串也称格式控制字符串或格式转换字符串,其中可包含下列3种字符。(1)

格式指示符。例如,"%d"、"%lf"、"%7.2f"等,这些字符用来控制数据的输出格式。(2)转义字符。这些字符通常用来控制光标的位置。(3)普通字符。除格式指示符和转义字符之外的其他字符,这些字符输出时,按照原样输出。输出项列表由若干个输出项构成,输出项之间用逗号来分隔,每个输出项既可以是常量、变量,也可以是表达式。调用printf()函数时,也可以没有输出项列表,在这种情况下,一般用来输出一些提示信息。C语言系统将按照自左向右的顺序,依次计算“输出项列表”中诸表达式的值,然后按照“格式化字符串”中规定的格式输出到显示器上显示。例如:printf("半径r为%f\n周长l为%7.2f,面积a为%7.2f\n",r,l,a);1.1.4格式化输出printf()知识准备2.常用的格式指示符格式指示符的一般形式如下。%[修饰符]格式字符格式字符含义示例%d输出十进制整数printf("%d",95);→95%u输出无符号十进制整数printf("%u",95);→95%f输出单精度浮点数printf("%f",95.5);→95.500000%lf输出双精度浮点数printf("%lf",95.5);→95.500000%.2f输出浮点数并保留2位小数printf("%.2f",95.5);→95.50%c输出单个字符printf("%c",'A');→A%s输出字符串printf("%s","Hello");→Hello%e以指数形式输出浮点数(小写e)printf("%e",123.45);→1.234500e+02%E以指数形式输出浮点数(大写E)printf("%E",123.45);→1.234500E+02(1)格式字符printf()函数中常用的格式字符见表1-1。表1-1

常用的格式字符1.1.4格式化输出printf()知识准备2.常用的格式指示符【例1-2】使用printf()函数输出十进制整数、浮点数及字符数据。

1.#include"stdio.h"

2.

3.void

main(){

4. int

x=100;

5. float

y=0.12345;

6. char

z='A';

7. printf("%d\n",x);/*输出整数100*/

8. printf("y=%f\n",y);/*输出浮点数y=0.12345*/

9. printf("z=%c\n",z);/*输出字符z=A*/10.}1.1.4格式化输出printf()知识准备2.常用的格式指示符(2)长度修饰符长度修饰符“l”或“L”加在%和格式字符之间。输出长整型数据时,一定要加长度修饰符;输出短整型数据时,加的是修饰符“h”。(3)宽度修饰符和精度修饰符可以在%和格式字符之间加入形如“m.n”(m、n均为整数)的修饰,其中,m为宽度修饰符,n为精度修饰符。宽度修饰符用来指定数据的输出宽度,精度修饰符对不同的格式字符作用不同:对于格式字符f,用来指定输出小数位的位数;对于格式字符e,用来指定输出有效数字的位数;对于格式字符d,用来指定必须输出的数字的个数。相关的示例见表1-2。1.1.4格式化输出printf()知识准备2.常用的格式指示符表1-2宽度修饰符和精度修饰符示例输出语句输出结果说明printf("%5d",42);□□□42宽度为5,右对齐,左边补3个空格(以□表示)printf("%5.3d",42);□□042宽度为5,精度为3(即输出3位数字),右对齐,左边补1个空格,数字前补1个0printf("%3.3d",42);042宽度为3,精度为3(输出3位数字),数字前补1个0printf("%7.2f",1.23456);□□□1.23宽度为7,保留2位小数,右对齐,左边补3个空格printf("%.2f",1.23456);1.23保留2位小数1.1.4格式化输出printf()知识准备2.常用的格式指示符【温馨提示】(1)printf()函数可以输出常量、变量和表达式的值。但格式控制字符串中的格式指示符,必须按从左到右的顺序,与输出项表中的每个数据一一对应,否则会出错。(2)格式字符x、e、g可以用小写字母,也可以用大写字母。使用大写字母时,输出数据中包含的字母也大写。除了x、e、g格式字符外,其他格式字符必须用小写字母,例如,%f不能写成%F。(3)格式字符紧跟在“%”后面就作为格式字符,否则,将作为普通字符使用(原样输出),例如,printf("c=%c,f=%f\n",c,f);中的“c=”和“f=”,都是普通字符。1.1.4格式化输出printf()知识准备2.常用的格式指示符【例1-3】判断下列代码是否有错误。inta=2,b=3;printf("%d%d%d",a,b);【例1-4】下列程序的运行结果是什么?inta=2,b=3;printf("a=%d\tb=%d",a,b); //转义字符\t表示跳到下一个制表位【例1-5】下列程序的运行结果是什么?inta=123,b=12345;printf("%4d,%4d\n",a,b);有3个格式转换说明符、两个变量,表示方法错误程序运行后输出“a=2 b=3”程序运行后输出“123,12345”1.1.5算法及算法的表示知识准备1.算法的概念著名计算机科学家尼古拉斯·沃斯(NiklausWirth)提出了一个经典公式:程序=算法+数据结构这一公式表明,对于面向过程的程序设计语言而言,程序由算法和数据结构两大核心要素构成。其中,数据结构关注数据的组织与表示形式,在C语言中是以数据类型的形式来描述的;而算法则聚焦于解决问题的操作方法和具体步骤。(1)算法的定义所谓算法,就是一个有穷规则的集合,其中的规则确定了一个解决某个特定类型问题的运算序列。简单地说,就是解决一个具体问题而采取的确定的、有限的操作步骤。这里所说的算法仅指计算机算法,即计算机能够执行的算法。1.1.5算法及算法的表示知识准备1.算法的概念(2)衡量算法好坏的特性设计好一个算法后,怎样衡量它的正确性呢?可以用以下特征来衡量。算法所包含的操作步骤必须是有限的,并且每一步都应能在合理的时间内完成。有穷性01算法的每个步骤都应具有明确性,不允许存在歧义。02确定性算法中的每个步骤都应能够有效执行,并且能得到确定的结果。03有效性算法可以有

0个或多个输入。输入特性04算法必须有一个或多个输出。输出特性051.1.5算法及算法的表示知识准备2.算法的描述:沟通人与机器的桥梁在理解算法的基本概念后,如何清晰地描述算法成为我们关注的下一个核心问题。算法描述是将抽象的解题思路转化为具体、可执行步骤的关键环节,它是连接人类逻辑思维与计算机执行指令的桥梁。在进行算法设计时,我们可以借助多种描述工具,每种工具都有其独特的优势和适用场景。接下来,我们将逐一探讨这些常用的描述方法,帮助大家建立高效的算法表达能力。1.1.5算法及算法的表示知识准备(1)流程图:直观的图形化表达2.算法的描述:沟通人与机器的桥梁核心概念流程图是一种广泛应用的算法描述方法,通过特定图框表示操作,利用箭头指示执行顺序,实现逻辑的可视化表达。逻辑表达不同形状的图框代表不同类型的操作(如处理、判断、输入输出),带箭头的线条严格定义了操作的执行流向。标准规范(ANSI)美国国家标准学会(ANSI)制定了通用符号标准,确保流程图在不同场景和人群间的准确沟通与理解。标准流程图符号示例1.1.5算法及算法的表示知识准备(1)流程图:直观的图形化表达2.算法的描述:沟通人与机器的桥梁核心优势(Advantages)形象直观逻辑关系一目了然,消除理解歧义,可视化程度高。易于理解与调试降低学习门槛,便于快速发现算法逻辑错误。便于代码转化直观映射算法逻辑,加速从设计到程序代码的落地。局限性(Disadvantages)描述复杂算法繁琐处理大型复杂逻辑时,流程图会变得冗长庞大,不够简洁,阅读效率下降。结构易混乱,不利于结构化设计流程线灵活度高缺乏约束,易导致随意跳转,破坏程序结构,增加维护难度。流程图的优缺点分析1.1.5算法及算法的表示知识准备(2)N-S图:结构化的革新2.算法的描述:沟通人与机器的桥梁起源背景(1973)由艾萨克·纳斯与本·施奈德曼提出。旨在解决传统流程图中流程线过于灵活、导致程序结构混乱的问题。核心设计理念摒弃传统流程线,采用结构化的盒状表现方式。所有算法逻辑包含在矩形框内,仅支持从上至下的顺序流转。核心价值与优势从根本上杜绝了随意控制流的出现,强制算法结构化,有效保障了程序的逻辑清晰度与代码质量。总结:N-S图通过物理结构的限制实现了逻辑结构的规范,是结构化程序设计思想的重要工具。1.1.5算法及算法的表示知识准备(2)N-S图:结构化的革新2.算法的描述:沟通人与机器的桥梁结构清晰紧凑全部算法规整书写在一个矩形框内,无杂乱线条干扰。直观简洁高效表达方式简洁明了,节省大量篇幅,逻辑一目了然。利于结构化设计强制程序员进行结构化思考,广泛应用于程序设计领域。N-S图应用示例:从3个数中取最大数N-S图去除了流程图中的流向线,使程序结构更加规范和紧凑,是结构化程序设计的重要工具。N-S图的优势与应用1.1.5算法及算法的表示知识准备(3)自然语言:通俗易懂的初步描述2.算法的描述:沟通人与机器的桥梁核心定义指人们日常使用的语言,可结合数学符号描述算法。是算法设计初期最直观的表达方式。特点分析优点:符合思维习惯,通俗易懂,便于交流构思。缺点:表述冗长、易有歧义、难以直接转化为程序代码,仅适用于简单算法。应用示例:寻找最大值01.输入一组待比较的数字。02.假设第一个数为当前最大值(存入变量max)。03.将max依次与其余数比较,若遇更大数则更新max。04.遍历结束后,输出最终的max值。核心价值:自然语言是算法设计的起点,帮助我们在编程前理清逻辑思路,是从想法到代码的重要桥梁。1.1.5算法及算法的表示知识准备(4)计算机语言:算法的最终实现2.算法的描述:沟通人与机器的桥梁算法最终需要通过计算机语言(如C语言、C++、Java等)转换为可执行程序,这是开发的核心环节。计算机语言语法严谨、无歧义,能直接被计算机识别并执行,是描述和实现算法的主要方式。示例1:判断数值正负(C语言)if(x>0)printf("正数");elseprintf("负数");示例2:找一组数的最大值(C语言)intnums[]={12,45,7,89,23};intmax=nums[0],len=sizeof(nums)/sizeof(int);for(inti=1;i<len;i++){if(nums[i]>max)max=nums[i];}1.1.5算法及算法的表示知识准备(5)伪代码:介于自然与计算机语言之间2.算法的描述:沟通人与机器的桥梁定义与构成一种介于自然语言和计算机语言之间的表达形式,由文字和符号共同构成,是连接两者的桥梁。书写与特征如同写文章般自上而下展开,无固定格式与图形符号限制,具有极高的灵活性,重在逻辑清晰。核心价值表达方式接近计算机语言,无需直接运行,能帮助开发者快速将算法思路转化为实际程序代码。“伪代码是算法设计的草稿纸,它用最简单的语言描述最严谨的逻辑。”1.1.5算法及算法的表示知识准备(5)伪代码:介于自然与计算机语言之间2.算法的描述:沟通人与机器的桥梁英文伪代码风格ifxispositivethenprintxelseprint-x中文伪代码风格若x为非负数输出x否则输出-x混合风格(常用)如果x>0:打印x否则:打印-x核心逻辑:无论采用哪种风格,伪代码的关键在于清晰传达算法步骤,而非拘泥于特定的编程语言格式。只要逻辑正确且易于理解,就是好的伪代码。伪代码示例:输出x的绝对值1.1.5算法及算法的表示知识准备(6)其他方法:问题分析图(PAD)2.算法的描述:沟通人与机器的桥梁结构化定义与N-S图类似,PAD图同样取消了传统的流程线设计。它通过规则的二维树状结构来呈现算法逻辑,是一种典型的结构化描述方法。二维逻辑关系PAD图利用二维空间的延伸来表达逻辑:

从上到下:代表指令的执行顺序;

从左到右:表示算法的层次与嵌套关系。优势与适用场景这种布局方式使得算法的逻辑层次极其清晰直观,尤其在处理多层嵌套(如循环、分支)的复杂算法时,比传统流程图更具可读性。总结来说,PAD图结合了结构化设计的严谨性与二维图形的直观性,能够有效辅助程序员进行算法设计与交流,特别是在需要清晰展示逻辑嵌套深度的场景下表现优异。1.1.6C程序的调试及运行知识准备1.C程序的处理流程1.编辑(Edit)编写或修改源代码,并保存为.c格式的文本文件。2.编译(Compile)编译器将源代码翻译成二进制目标代码,生成.obj文件。3.链接(Link)链接器将目标代码与系统库合并,生成可执行的.exe文件。4.运行(Run)操作系统加载并执行.exe文件,在屏幕或终端输出最终结果。C程序处理流程示意图1.1.6C程序的调试及运行知识准备2.在DevC++环境中实现C程序IDE(IntegratedDevelopmentEnvironment)即集成开发环境,是为开发者提供编写、编译、调试等一站式服务的软件套件。代码编辑器-提供语法高亮、自动补全,高效编写代码编译器/解释器-将源代码快速转换为可执行文件调试器-断点调试、错误定位,快速修复Bug项目管理工具-统一管理多文件、资源依赖与版本💡核心价值:极大提升开发效率与代码质量示例:VisualStudioIDE界面,集成了代码编辑与项目管理(1)C语言的IDE介绍什么是IDE?1.1.6C程序的调试及运行知识准备2.在DevC++环境中实现C程序(1)C语言的IDE介绍为什么选择Dev-C++?免费开源无需付费,源代码开放,适合学习安装简单过程直观,无需复杂配置即可使用界面简洁布局清晰功能明确,新手易于上手轻量级占用资源少,程序运行响应迅速“专注于代码本身,拒绝被复杂的工具配置所困扰。”1.1.6C程序的调试及运行知识准备2.在DevC++环境中实现C程序(2)Dev-C++的安装步骤01加载安装程序双击下载好的安装包文件,等待安装程序初始化加载完成。02选择安装语言在弹出的语言选择界面,选择“English”,中文可在后续设置。温馨提示:安装过程中请保持网络连接稳定,若加载缓慢请耐心等待。语言设置不影响后续使用中文界面。1.1.6C程序的调试及运行知识准备2.在DevC++环境中实现C程序(2)Dev-C++的安装步骤03同意条款仔细阅读许可协议后,点击“IAgree”按钮以接受条款并继续安装流程。04选择组件建议选择“Full”完整安装模式,确保编译器、语言包等所有功能组件被安装。05选择路径指定软件安装目录,强烈建议路径中不要包含中文,以避免后续运行时出现兼容性错误。提示:完成路径选择后,点击“Install”即可开始正式安装,过程可能需要几分钟,请耐心等待。1.1.6C程序的调试及运行知识准备2.在DevC++环境中实现C程序(2)Dev-C++的安装步骤06.等待安装安装程序会自动复制文件并完成安装,过程通常只需几秒钟。07.安装完成看到完成界面后,点击右下角的“Finish”按钮,正式结束安装过程。Tips:安装完成后,我们就可以开始进行简单的环境配置,为编写C++代码做准备了。1.1.6C程序的调试及运行知识准备2.在DevC++环境中实现C程序(3)Dev-C++配置01.选择语言首次启动配置向导,将界面语言设置为“简体中文/Chinese”,便于后续操作。02.字体与主题根据个人编程习惯,选择舒适的代码编辑器字体和颜色主题(配色方案)。03.完成配置确认所有设置无误后,点击确认按钮,即可成功进入Dev-C++主界面开始编程。1.1.6C程序的调试及运行知识准备2.在DevC++环境中实现C程序(4)使用Dev-C++开发第一个程序01新建源代码通过软件的“文件”菜单选择“新建”->“源代码”,或使用快捷键Ctrl+N快速创建一个新的空白源文件。02输入代码在新建的空白编辑器中,输入第一个C语言程序代码(如经典的HelloWorld程序),确保语法正确。03保存文件点击“文件”->“保存”或按Ctrl+S,在对话框中输入文件名,并务必将扩展名设置为.c以确保文件类型正确。开发第一个程序-新建与保存1.1.6C程序的调试及运行知识准备2.在DevC++环境中实现C程序(4)使用Dev-C++开发第一个程序01编译(Compile)通过“运行”菜单或快捷键F9对代码进行编译。若代码无误,将生成对应的.exe可执行文件。左:编译操作界面|右:编译成功日志02运行(Run)通过“运行”菜单或快捷键F11直接编译并运行程序。程序会在控制台窗口中输出运行结果。运行是验证代码逻辑的关键步骤,确保程序按预期输出内容,是完成开发的最后一步。💡小技巧:F9仅检查语法并生成文件,适合调试;F11一键完成编译与运行,适合快速验证结果。开发第一个程序-编译与运行任务1-1设计计算器启动界面(1)正确配置C语言开发环境,确保程序可编译运行。使用printf函数直接输出固定文本。(2)包含计算器标题、功能说明、静态欢迎语、简单装饰。(3)输出内容需结构清晰、对齐美观,符合控制台文本界面规范。任务实施:任务要求实现简单运算计算器任务1-2任务1-2实现简单运算计算器开发一个简化的控制台计算器,仅实现加法运算功能。用户将输入两个数字,程序会计算它们的和并输出结果,效果如图1-26所示。任务描述图1-26基础加法计算器效果图1.2.1标识符知识准备1.C语言的字符集大小写英文字母包含26个英文字母的大写(A-Z)和小写(a-z)形式。数字0到9的阿拉伯数字,用于数值表示和计算。键盘符号包括运算符、标点符号等,如!@#$%^&*等。转义字符由反斜线加字符组成的特殊序列,如\n(换行)、\t(制表)。(1)字符集概念C语言的字符集是指编写C程序时允许使用的所有符号的集合,其范围主要基于ASCII字符集,是构成代码的基本元素。1.2.1标识符知识准备1.C语言的字符集(2)常用转义字符转义字符是C语言中一种特殊的字符,它以反斜线(\)开头,用来表示一些无法直接输入的字符。转义字符含义ASCII值(十进制)\0空字符(NULL)0\a响铃(BELL)7\b退格符(BS)8\t水平制表符(HT)9\n换行符(LF)10\v垂直制表符(VT)11\f换页符(FF)12\r回车符(CR)13\"双引号34\'单引号39\\反斜线92\ddd八进制数(ddd代表3位八进制数码)

\xhh十六进制数(hh代表两位十六进制数码)1.2.1标识符知识准备2.C语言的标识符核心定义在程序中,用来标识变量、常量、函数、数组、结构体等实体的名称。简单来说,标识符就是一个名字。主要作用用于在程序中引用和操作实体。一个好的标识符命名,能显著提升代码的可读性与可维护性。标识符=程序元素的“身份证”+操作入口什么是标识符?(1)什么是标识符1.2.1标识符知识准备2.C语言的标识符1.组成规则:合法字符与首字符限制标识符只能由字母、数字和下划线(_)组成。特别注意:第一个字符必须是字母或下划线,不能以数字开头。✅合法示例:name,_score,age18❌非法示例:123abc(数字开头),my-name(含非法符号)2.禁用规则:避开关键字关键字是C语言系统预留的特殊单词,具有特定含义和用途。用户不能使用这些关键字来命名自己的变量、函数等标识符。❌严禁使用:int,if,while,for,return等提示:后续课程将列出完整的C语言关键字表。核心原则:见名知意+遵守规则。命名不仅要合法,更要让读者能通过名字理解其用途。(2)标识符的命名规则1.2.1标识符知识准备2.C语言的标识符3.见名知义(Readability)使用有意义的英文单词或组合,提高代码可读性,拒绝无意义的字母组合。推荐示例:student_name,total_score,calculate_area不推荐示例:a,b,temp1(含义不明确,维护成本高)4.区分大小写(CaseSensitivity)C语言中,大写字母和小写字母被视为完全不同的标识符。例如:sum、Sum和SUM是三个完全独立的变量。代码:intsum=10;intSum=20;//互不干扰(2)标识符的命名规则1.2.1标识符知识准备2.C语言的标识符(3)C语言关键字一览关键字是C语言预先定义好的、具有特殊含义的标识符,我们不能将它们用作普通的标识符。数据类型•int•char•float•double•void•short•long•signed/unsigned控制语句•if/else•switch•case/default•for•while/do•break•continue•return存储类型•auto•static•register•extern•const•volatile•goto其他关键字•struct•union•enum•typedef•sizeof注:在编程时,应避免使用上述关键字作为自定义变量名或函数名,以免发生命名冲突。1.2.1标识符知识准备2.C语言的标识符【例1-6】找出下列符号中合法的标识符。3aB,"abc",a.b,b,intnext,a3B,ok?,π,_switch合法标识符(Valid)b,next,a3B,_switch非法标识符分析(Invalid)•3aB:以数字开头;int:关键字;ok?:含非法字符•"abc":含双引号;a.b:含点号;π:非ASCII字符核心规则回顾标识符只能由字母、数字和下划线组成,且不能以数字开头;不能使用关键字;通常建议使用ASCII字符集。1.2.2常量与变量知识准备1.常量固定·持久·不可变核心定义在程序运行过程中,其值不可改变的量称为常量。它是程序中恒定的数值或数据。运行本质常量是程序中固定不变的数据基石,为程序运行提供稳定的参考标准和基础数值。💡记忆口诀:常量常量,恒定不变,基石一般,稳定可靠1.2.2常量与变量知识准备1.常量1.直接常量(字面常量)直接以原始数值或字符形式出现在程序中,无需预先定义。//代码示例:直接书写数值或字符inta=12;//整型常量floatb=3.14;//实型常量charc='A';//字符常量2.符号常量(宏常量)用标识符代表固定值,通过#define定义,提升代码可读性。//代码示例:使用#define定义#definePI3.14//定义符号常量floatarea=PI*r*r;//使用符号常量//预处理时PI会被替换为3.14💡核心区别:直接常量“写死”在代码中,符号常量“按需定义”更灵活。(1)常量的分类(一):直接常量与符号常量1.2.2常量与变量知识准备1.常量3.常变量(const)用const关键字修饰的变量,初始化后值不可变。它具有类型信息,比符号常量更安全。constintMAX=100;//初始化后不可修改4.枚举常量(enum)通过enum关键字定义的一组具有名字的整型常量。默认值从0开始递增,常用于定义状态或选项。enumColor{RED,GREEN,BLUE};//0,1,2(2)常量的分类(二):常变量与枚举常量1.2.2常量与变量知识准备2.变量变量:程序的“存储容器”核心定义程序运行期间值可变的量称为变量,用于存储临时数据。变量三要素1.变量名(标识)2.类型(存储规则)3.值(实际数据)定义格式与示例格式:类型变量名1[,变量名2,…];示例:inta,b,c;//定义了三个整型变量💡提示:使用变量前必须先定义,以便计算机分配内存空间。1.2.2常量与变量知识准备2.变量(1)变量的分类(一):全局变量与局部变量全局变量(GlobalVariable)定义位置:在函数外部定义作用范围:作用域覆盖整个程序,所有函数均可访问生命周期:与程序运行周期一致,程序结束才释放局部变量(LocalVariable)定义位置:在函数或代码块内部定义作用范围:仅在其所属范围内有效,外部无法访问生命周期:随函数或代码块执行结束而销毁核心区别总结:两者最本质的区别在于作用域和生命周期。全局变量如同“公共资源”,局部变量则是“私有物品”。合理使用可避免命名冲突并节省内存。1.2.2常量与变量知识准备2.变量(2)变量的分类(二):静态变量持久性与安全性的象征核心定义:用static关键字修饰的变量,存储在静态存储区。静态局部变量(StaticLocal)作用域限于当前函数,但生命周期延长至程序结束。多次调用函数时,变量值会保留。静态全局变量(StaticGlobal)作用域严格限制在当前文件内部,避免被其他文件访问,有效降低命名冲突风险。1.2.2常量与变量知识准备2.变量(3)变量的初始化核心定义在定义变量时给变量赋初值的过程称为变量初始化。这是程序健壮性的基础。代码示例示例代码:intn1,n2,n3=5;(定义变量n1,n2,n3并将n3初始化为5)为什么重要?未初始化的变量值为随机数,极易导致程序逻辑异常。养成定义即初始化的习惯至关重要。💡编程建议:始终在定义变量时进行初始化,杜绝随机值隐患。1.2.2常量与变量知识准备3.识别常量与变量符号常量(SymbolicConstant)PI:由#define定义,预编译时替换全局变量(GlobalVariable)global_var:函数外部定义,作用域整个程序常变量(ConstantVariable)MAX:由const修饰,运行中值不可变局部变量(LocalVariable)local_var:函数内部定义,仅作用于该函数核心区别总结:符号常量在编译前替换,不占内存;const常变量占用内存,具有类型检查;全局变量作用域广,局部变量作用域局限于函数内部。【例1-7】阅读以下代码,理解常量和变量的分类。

#include

<stdio.h>

#define

PI3.14

//符号常量

int

global_var=

100;

//全局变量

int

main()

{

const

int

MAX=

10;

//常变量

int

local_var=

5;

//局部变量

printf("PI=%.2f,MAX=%d\n",

PI,

MAX);

return

0;

}

1.2.3C语言的基本数据类型知识准备核心定义数据类型定义了变量的存储空间大小和数值范围,是程序设计的基础,决定了数据的处理方式。基本类型:整型(int)、实型(float/double)、字符型(char)构造类型:数组、结构体(struct)、共用体(union)、枚举指针类型:用于存储变量的内存地址,是C语言的灵魂所在空类型(void):表示无值,常用于函数返回值或指针声明图:C语言数据类型体系结构1.数据类型概述1.2.3C语言的基本数据类型知识准备2.整型数据二进制以0b或0B开头0b1010,0B111八进制以数字0开头0123,067十进制无前缀,默认方式100,-96十六进制以0x或0X开头0x8A,0X7abc💡核心提示:编程中不同进制的前缀是区分数值类型的关键,尤其注意八进制的“0”前缀容易被误写。(1)整型常量(进制)1.2.3C语言的基本数据类型知识准备2.整型数据(1)整型常量(长短)整型常量可根据长度和符号属性分类,通过不同的后缀来区分,以确定其占用的内存空间。int(整型)后缀:无-123,32768long(长整型)后缀:l或L-123L,067Llonglong(双长)后缀:ll或LL-123LL,0x8ALLunsigned(无符号)后缀:u或U123U,96u温馨提示:无后缀的整型常量默认是int类型;后缀u可以与其他后缀结合使用(如ul表示无符号长整型),以进一步明确数据类型。1.2.3C语言的基本数据类型知识准备2.整型数据(2)整型变量整型变量用于存储整数,其类型决定了存储空间和取值范围,合理选择类型可优化内存使用。提示:在编程中,若未特别声明,int默认为signedint;unsigned类型变量不能存储负数。类型所占字节数数的取值范围举例[signed]int(基本整型)4-231~231-1intxl,x2;unsignedint(无符号基本整型)40~0~232-1unsignedintyl,y2;[signed]short(短整型)2-215~215-1shortz1,z2;unsignedshort(无符号短整型)20~216-1unsignedshortfl,f2;[signed]long(长整型)4-231~231-1longhl,h2;unsignedlong(无符号长整型)40~232-1unsignedlongk1,k2;longlongint(双长整型)8-263~263-1longlongintx,y;unsignedlonglong(无符号双长整型)80~264unsignedlonglongx,y;1.2.3C语言的基本数据类型知识准备2.实型数据十进制小数形式由数字和小数点组成,是最直观的表示方法。示例:0.123(标准形式)123.(小数点后无数字).123(小数点前无数字)指数形式(科学记数法)由尾数、字母e/E和指数组成,适合表示极大或极小的数。示例:3e6(表示3×10⁶)1.56e-3(表示1.56×10⁻³)注意事项:使用指数形式时,e前必须有数字,e后必须为整数。例如:e5是非法的,1.2e3.5也是非法的。(1)实型常量1.2.3C语言的基本数据类型知识准备2.实型数据(2)实型变量实型变量用于存储小数,在计算机中主要通过单精度和双精度两种格式进行存储,不同类型在精度和范围上有显著差异。编程建议:double类型提供了更高的精度和更大的取值范围,在大多数现代编程场景中是存储小数的首选类型。类型所占字节数小数点后保留的有效数字位数数的取值范围(绝对值)举例float(单精度型)4(64位)60及1.2×10-38~3.4×1038floatxl,x2;double(双精度型)8(64位)150及2.3×10-308~1.7×10308doubleyl,y2;longdouble(长双精度型)8(64位)150及2.3×10-308~1.7×10308longdoublez1,z2;16(128位)190及3.4×10-4932~1.1×1049321.2.3C语言的基本数据类型知识准备2.实型数据运行结果12.3000001.230000e+001%f格式符以十进制小数形式输出实数,默认保留6位小数。%e格式符以指数(科学记数法)形式输出,尾数默认保留6位小数。#include

“stdio.h”main

(){

float

a=12.3;

/*实型变量的定义及初始化*/

printf("%f\n",a);

/*a以十进制小数形式输出*/

printf("%e\n",a)

;

/*a以指数形式输出*/

}【例1-8】定义实型变量a并以不同形式输出。1.2.3C语言的基本数据类型知识准备3.字符型数据(1)字符常量与转义字符字符常量(CharacterConstants)用单引号括起来的单个字符,如'a','5','+'。每个字符都对应一个唯一的ASCII数值。转义字符(EscapeCharacters)以反斜线(\)开头的特殊字符,用于表示无法直接输入的字符(如换行、制表符)。常用转义字符表💡提示:转义字符在编程中非常重要,常用于格式化输出和路径表示。字符形式说明字符形式说明\n换行\\反斜线字符“\”\t横向跳格(即跳到下一个Tab位置)\'单引号字符\v竖向跳格\"双引号字符\b退格\0空字符\r回车\ddd1~3位八进制数对应的ASCII字符\f走纸换页\xhh1~2位十六进制数对应的ASCII字符\a响铃

1.2.3C语言的基本数据类型知识准备3.字符型数据(1)字符常量与转义字符运行结果Outputab cdefA核心原理Principle反斜杠开头的转义字符,控制输出格式或显示特殊字符。关键点:printf输出规则——双引号内普通字符原样输出,转义字符解析后生效。。【例1-9】转义字符\t的使用。。1.#include

“stdio.h”2.main

()3.{4. printf("ab\tcde\n");5. printf("f\101\n");6.}

1.2.3C语言的基本数据类型知识准备3.字符型数据(2)字符串常量定义与特点用双引号括起来的一串字符(如"Hello","123")。系统会自动在末尾添加结束符'\0'标志结束。字符常量(Character)表示:单引号包裹,如'a'内存:占用1个字节特点:仅存储单个字符本身字符串常量(String)表示:双引号包裹,如"a"内存:占用2个字节特点:存储字符+结束符'\0'核心区别总结字符串常量实际占用空间=字符个数+1(结束符)。这是它与字符常量最本质的区别。1.2.3C语言的基本数据类型知识准备3.字符型数据(3)字符变量定义与声明使用char关键字定义,用于存储单个字符。示例:charc1,c2;存储与运算特性内存中存储的是字符对应的ASCII值。因此,字符型数据可与整型数据相互转换和运算。原理图解:字符'A'的存储与运算字符'A'ASCII:65运算:'A'+1=66结果:'B'1.2.3C语言的基本数据类型知识准备3.字符型数据(3)字符变量运行结果OutputAB核心原理Principle利用字符的ASCII值进行算术运算,每个小写字母的ASCII值比对应的大写字母大32。关键点:在ASCII表中,大写字母与小写字母并非连续排列,而是相差固定数值(32)。因此通过简单的加减运算即可实现大小写互转。【例1-10】将小写字母转换为大写字母。

1.

#include

“stdio.h”

2.

main(

3.

{

4.

char

c1,c2;

/*定义两个字符型变量*/

5.

c1='a';

/*给c1赋值为a字符*/

6.

c2='b';

/*给c2赋值为b字符*/

7.

c1=c1-32;

/*将c1的ASCII码值减去32再送回原变量*/

8.

c2=c2-32;

/*将c1的ASCII码值减去32再送回原变量*/

9.

printf("%c

%c\n",c1,c2);/*以字符形式输出c1和c2的值*/10.

}1.2.4C语言的运算符和表达式知识准备运算符(Operator)用于对一个或多个操作数进行运算的符号,是实现程序逻辑的基础。表达式(Expression)由运算符和操作数组成的符合语法规则的算式,通过计算可以得到一个值。按操作数个数分类单目运算符(1个操作数)、双目运算符(2个操作数)、三目运算符(3个操作数)。按功能分类算术运算符、关系运算符、逻辑运算符、赋值运算符等多种类型。核心要点:理解运算符的分类标准(个数与功能)是掌握C语言运算规则的关键,表达式则是程序中进行数据处理的基本单元。1.2.4C语言的运算符和表达式知识准备1.算术运算符及其表达式算术运算符用于执行基本的数学运算,掌握其优先级和用法是编程的基础。温馨提示:乘法用表示,除法用/表示。在运算优先级上,乘、除、求余的优先级高于加、减。运算符名称运算规则运算对象类型运算符类型运算结果类型结合方向举例表达式值+正号取原值整型或实型单目整型或实型从右向左a=2;t=+a;t=2-负号取原值a=2;t=-a;t=-2*乘乘法整型或实型双目整型或实型从左向右2.5*3.0;7.5/除除法2.5/5;0.5%模(求余)整数取余整型整型10%3;1+加加法整型或实型整型或实型2.5+1.2;3.7-减减法5-4.6;0.41.2.4C语言的运算符和表达式知识准备1.算术运算符及其表达式运行结果:11,0变量x运算过程解析x=-3+4*5-61.优先乘法:4*5=202.从左至右加减:-3+20=17→17-6=11变量y运算过程解析y=-3*4%-5/51.乘除取余同级,从左至右:-3*4=-122.继续计算:-12%-5=-2→-2/5=0(整数除法取整)核心知识点:运算符优先级决定计算顺序,同级运算从左至右。【例1-11】使用算术运算符实现简单运算。1.

#include

“stdio.h”2.

main()3.

{4.

int

x,y;5. x=-3+4*5-6;6.

y=-3*4%-5/5;7.

printf("%d,%d\n",x,

y)

;8.

}1.2.4C语言的运算符和表达式知识准备2.赋值运算符及其表达式简单赋值运算符符号:=功能:将右边表达式的值赋给左边的变量。示例:a=10;复合赋值运算符原理:将算术运算和赋值操作结合在一起。优势:简化代码书写,提高执行效率。示例:a+=5;(等价于a=a+5)常用复合赋值运算符列表运算符示例等价于+=a+=5a=a+5-=a-=5a=a-5=a*=5a=a*5/=a/=5a=a/5%=a%=5a=a%5注意:赋值运算符左侧必须是变量,不能是常量或表达式。例如:5=a;是错误的。1.2.4C语言的运算符和表达式知识准备3.自增和自减运算符自增(++)和自减(--)运算符用于将变量的值加1或减1,核心区别在于运算与使用的时机。前置运算:先改变,后使用++i/--i执行规则:第一步:先将变量的值加1或减1。第二步:再使用更新后的变量值参与运算。后置运算:先使用,后改变i++/i--执行规则:第一步:先使用变量当前的值参与运算。第二步:运算结束后,再将变量的值加1或减1。记忆口诀:符号在前,先变后用;符号在后,先用后变。1.2.4C语言的运算符和表达式知识准备3.自增和自减运算符程序段1:后置自增(a++)inta=5,x;x=a++;//先赋值,后自增//执行后:x=5,a=6运行结果:x=5程序段2:前置自增(++a)inta=5,x;x=++a;//先自增,后赋值//执行后:x=6,a=6运行结果:x=6核心区别分析自增运算符的位置决定了运算顺序:•后置(a++):先将变量当前值参与运算(赋值),运算结束后变量再加1。•前置(++a):变量先加1,然后用新值参与后续运算(赋值)。【例1-12】自增运算符的应用:请分别计算出下列x,y的值。1.2.4C语言的运算符和表达式知识准备4.强制类型转换运算符及其表达式基本语法格式用于将一种数据类型转换为另一种。语法结构为:(目标类型名)(表达式)代码示例解析•(int)3.14:将实型转换为整型,结果为3(小数部分被舍弃)•(double)5:将整型转换为实型,结果为5.0重要特性:临时性强制类型转换只改变表达式的求值结果类型,不会改变原变量的类型。转换仅在运算时生效。1.2.4C语言的运算符和表达式知识准备4.强制类型转换运算符及其表达式运行结果x=8.600000,y=3核心分析转换的临时性:(int)x仅改变参与运算的值,变量x本身的类型和数值并未改变。关键知识点回顾:强制类型转换是“临时性”的。在这个案例中,虽然我们用8参与了求余运算得到结果3,但原始变量x依然保持float类型,值依然是8.6。这体现了强制转换只影响运算过程中的临时值。【例1-13】强制类型转换运算符的使用:将x强制转换为整型。

1.

#include

“stdio.h”

2.

void

main()

3.

{

4.

float

x;

5.

int

y;

6.

x=8.6;

7.

y=(int)

x%5;

/*将x强制为整型,对5求模运算,即求余数*/

8. printf(“x=%f,y=%d\n”,x,y)

;

9.

}1.2.4C语言的运算符和表达式知识准备5.逗号运算符及其表达式逗号运算符(,)用于将多个表达式连接成一个整体,它在所有运算符中拥有最低的优先级。求值顺序:从左到右依次计算每个子表达式的值,计算过程不可逆。最终结果:取最后一个整个逗号表达式的值等于最后一个子表达式的计算结果。(1)inta=3*5,a*4;(2)x=(a=3,6*3);(3)x=a=3,6*a;1.表达式①先计算a=3*5,结果为15,再计算a*4,结果为60,整个表达式的值取最后表达式的值,为60。2.表达式②将一个逗号表达式的值赋给x,x的值等于6*3,即18。3.表达式③先计算a=3,x=a,得x=3,再计算6*a,结果为18,整个表达式的值取后面的表达式的值,为18。【例1-14】使用逗号运算符计算以下表达式的值。1.2.4C语言的运算符和表达式知识准备6.不同类型数据之间的混合运算当不同类型的数据进行混合运算时,系统会自动进行类型提升,将较低类型转换为较高类型,然后再进行运算,以保证精度。类型高低顺序(从低到高):char,shortintunsignedlongfloatdouble标准数据类型转换规则图💡核心原则:低精度类型自动转换为高精度类型,这是一种“向上转换”,不会丢失数据精度;反之“向下转换”可能会丢失精度。1.2.4C语言的运算符和表达式知识准备6.不同类型数据之间的混合运算计算示例:10+'A'+i*f-5已知变量:i=2(int),f=1.8(float),'A'的ASCII值为65第一步:字符转数值计算10+'A'

'A'→65(ASCII)

结果:75第二步:乘除优先计算i*f

2(int)→2.0(float)

结果:3.6第三步:类型提升计算75+3.6

75(int)→75.0(float)

结果:78.6第四步:最终结果计算78.6-5

5(int)→5.0(float)

结果:73.6核心规则:混合运算遵循“类型提升”原则,低精度类型(如int)会自动转换为高精度类型(如float),最终结果为参与运算的最高精度类型。1.2.5格式化输入函数scanf()知识准备1.格式化输入函数scanf()的一般格式核心功能C语言标准格式化输入函数,用于从标准输入设备(通常是键盘)读取数据,并按指定格式存储到变量中。一般格式由格式控制字符串和地址列表组成。格式字符串定义解析规则,地址列表指定存储位置。格式:scanf("格式字符串",输入项地址列表);代码示例定义整数i和浮点数f,分别读取输入。inti;floatf;scanf("%d%f",&i,&f);返回值说明函数执行成功时,返回成功读取并

温馨提示

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

评论

0/150

提交评论