3.72k likes | 4.01k Views
C 语言程序设计. 主讲人:彭立. 第一、二章 C 语言基础 第三章变量和数据类型 第四章 运算符 第五章 选择结构 第六章 循环结构 第七章 数组 第八章 函数 第九章 预处理命令 第十章 指针 第十一章 结构体雨共用体 第十二章 位运算 第十三章 文件. 第一、二章. C 语言基础. 课程地位. SPR: Computer Base. STB. SQL Server Base. OOP&Java Base. HTML&JavaScript. C. SQL Server. .Net & C#. JSP /Servlet.
E N D
C语言程序设计 主讲人:彭立
第一、二章 C语言基础 • 第三章变量和数据类型 • 第四章 运算符 • 第五章 选择结构 • 第六章 循环结构 • 第七章 数组 • 第八章 函数 • 第九章 预处理命令 • 第十章 指针 • 第十一章 结构体雨共用体 • 第十二章 位运算 • 第十三章 文件
第一、二章 C 语言基础
课程地位 SPR: Computer Base STB SQL Server Base OOP&Java Base HTML&JavaScript C SQL Server .Net & C# JSP/Servlet Testing&SQA WinForms Oracle XML EJB&WebService Linux ASP.NET & WebService Struts&JSF SPM UML
课程目标 • 理解算法、流程图以及程序的概念 • 理解程序逻辑 • 掌握用C语言进行程序设计的基本方法。 • 掌握C语言的基础知识,包括基本数据类型、表达式、控制结构等 • 掌握C语言的高级知识,包括数组、指针、函数、字符串、结构等
目标 • 了解程序、算法和流程图的概念 • 熟练掌握 C 程序的基本结构 • 掌握 C 程序的编译和运行过程 • 使用Turbo C创建 C程序
什么是程序 • 程序一词来自生活,通常指完成某些事务的一种既定方式和过程 • 在日常生活中,可以将程序看成对一系列动作的执行过程的描述
日常生活中的程序 银行 3. 将存折和取款单递给银行职员 4.银行职员办理取款事宜 5. 拿到钱并离开银行 2.填写取款单并到相应窗口排队 • 带上存折去银行
计算机中的程序 • ______________ • ________________ • __________ • _____________ • 做口述笔记…… • 键入信函的内容…… • 发送传真…… 程序 • 口述 2.信函 要执行的一组指令 3.传真 什么是指令? 指令被逐条执行 老板 程序员 秘书 程序:为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合
算法 概念:为了解决一个问题而采取的方法和步骤。(是解决一个问题方法的精确描述)解决一个问题的过程就是实现一个算法的过程。做任何事情都需要事先设想好进行的步骤和方法,即是算法。 例:乐队奏乐、厨师炒菜、演奏歌曲(曲谱就是其算法)、春节小品“把大象装进冰箱里”等等问题。我们要讨论的当然不是以上问题,而是计算机算法。
计算长方形的面积 问题: 1.接收用户输入的长方形长度和宽度两个值; 2.判断长度和宽度的值是否大于零; 3.如果大于零,将长度和宽度两个值相乘得到面积,否则显示输入错误; 4.显示面积。 算法 算法:解决问题的具体方法和步骤
计算机算法 • 数值运算:求和、求方程的根、求一个函数的定积分。 • 非数值运算:将若干人名按字母顺序排列、绘图、资料检索、数据库管理等等 • 目前,数值运算的算法已经比较成熟,对于各类数值计算问题有各种成熟的算法可以选择,而非数值运算种类繁多,情况各异,只能对一些典型的非数值运算加以讨论。
流程图2-1 流程图是算法的一种图形化表示方式。 流程图直观、清晰,更有利于人们设计与理解算法。 它使用一组预定义的符号来说明如何执行特定任务。 开始/结束 判断/分支 处理 连接符 输入/输出 流程线
开始 接受 num1和 num2 num1和num2 > 0? 否 是 Result=num1×num2 显示“输入错误” 显示Result 结束 流程图2-2
简单算法举例 [例1]:有A、B两杯,分别盛有酒和醋,要求它们互换(须借一空杯C) A ① A—> C 酒 醋② ①酒 ② B—> A 醋 B ③ C ③ C—> B 酒 酒 这就是以后经常会用到的两变量值交换的算法。 以上即两个变量的值交换算法: ① A—> C ② B—> A ③ C—> B
[例2]:从十个数中挑选出最大的数来。 思路:十个人比武“打擂台”,任意一个人先站在台上,第二个人与之比武,胜者留下,其余以此类推直至比完为止(共比了九次)最后在台上的一定是强者。 ①选任意一数放入A中,设一计数器N=0(表示比较的次数) ②将下一数与A相比,大者放在A中,且N=N+1 ③此时须判断N是否<9,是则执行②,如N≥9(表示比较了9次)则停止循环。 用这种方法可以简单地达到要求。如题目要求为1000个数,则N值判断为999即可。
[例3]:求n! 如n=5,则求1×2×3×4×5,须设两个变量:S(累乘之积)T(乘数) ①初始化:S=1,T=1 ②使S=S×T ③使T=T+1 ④如果T≤n,则返回执行②,如果T>n,则停止循环,此时S中值为n!。显然只要n值不小于0,算法都是正确,它具有一般性,不随n值改变而改变。 请同学们考虑若题目改成奇数相乘(1×3×5×7×9×11),应对程序做何改动? 将③使T=T+1改成T=T+2;④改成T≤11。 若将④终止循环条件T≤11改成T<11,后果将会怎样? 结果将是1×3×5×7×9
[例4]:对一个大于或等于3的正整数,判断它是不是一个素数。[例4]:对一个大于或等于3的正整数,判断它是不是一个素数。 思路:将此数n(n≥3)作为被除数,将2到(n-1)各个整数轮流作为除数,如果都不能被整除,则n为素数。实际上,n不必被除到(n-1),只需被2到n/2间整数除即可,甚至只需被2到根号n之间的整数除即可。
S1:输入n的值 S2:i=2 S3:n被i除,得余数r S4:如果r=0,表示n能被i整除,则打印n“不是素数”,算法结束;否则执行S5 S5:i=i+1 S6:如果i≤n-1,返回S3;否则打印n“是素数”。然后结束。或 S6:如果i≤根号n,返回S3,否则打印n“是素数”。然后结束。
C 语言简介 特点 C 语言是贝尔实验室的 Dennis Ritchie 在1973 年设计的。 编程语言 结构化的程序设计语言:层次清晰,便于按模块化方式组织程序,易于调试和维护 C C 最初用于开发系统级程序。 语句简洁:学习时入门相对容易,C 语言很好地总结了其他语言提出的程序库概念 高级 低级 在微机上,有许多性能良好的商品C 语言系统可用。包括Turbo C、Borland C/C++;MicrosoftVisual C/C++等。 功能强大:既可用于系统软件的开发,也适合于应用软件的开发。 移植性好:只要对这种语言稍加修改,便可以适应不同型号机器或各类操作系统。
C 程序的基本结构 #include <stdio.h> void main() { printf("Hello World\n"); } 以.h为后缀的文件被称为头文件,可以是 C 程序中现成的标准库文件,也可以是自定义的库文件。 以 # 开始的语句称为预处理器指令 在函数定义的后面有一个左大括号,即 { main() 函数是 C 程序处理的起点。 在屏幕上产生一行输出“Hello world”,并换行(\n) 它表示函数的开始,后面是函数的主体 stdio.h文件中包含了有关输入输出语句的函数 #include语句不是必需的,但是,如果程序有该语句,就必须将它放在程序的开始处 main() 函数可以返回一个值,也可以不返回值。如果某个函数没有返回值,那么在它的前面有一个关键字 void 在函数定义的结尾处有一个右大括号,即 } 函数主体中的每个语句都以分号结束。 大括号也可以用于将语句块括起来 C 程序中的一个语句可以跨越多行,并且用分号通知编译器该语句已结束。
C 程序中的注释 /* ************************* 作者: 创建日期: 描述: … … ************************** */ #include <头文件> void main() { … … } /* 此程序由××× 编写 * 用来打印输出“Hello World”*/ 单行注释 多行注释 // 此程序用来打印Hello World #include <stdio.h> void main() { printf("Hello World\n"); } 注释 C 程序可以包含注释,以便向读者作一般说明 在程序中添加注释是一个好的编程习惯,可以增强程序的可读性。 编译器并不处理这些注释
高级语言的编译和执行 可以…我现在可以理解了 哎呀…我理解不了 高级语言程序 高级语言由编译/解释程序转换为机器代码 编译程序/解释程序(编译器/解释器) 这种机器代码计算机可以理解 编译程序/解释程序 机器代码 高级编程语言中的指令 计算机硬件
C 源程序 目标文件 可执行程序 编译和执行C程序 源程序:是用户创建的文件,以“.c”为文件扩展名保存 目标文件:是编译器的输出结果。这类文件的常见扩展名为“.o”或“.obj” 编译 可执行文件:是连接器的输出结果。可执行文件的扩展名为“.exe”。 头文件:含有函数的声明和预处理语句,用于帮助访问外部定义的函数。头文件的扩展名为“.h”。 连接 C语言函数库
C程序的开发过程 分析问题 编制程序 编译中发现错误,转回修改源程序 编译 连接 连接中发现错误,转回修改源程序 调试运行 调试运行中发现问题,表明分析本身有错误,重新分析问题 完成
TC2.0 • 为了方便程序开发,人们开发了一类称作 IDE的软件 • T C是目前国内比较流行的一种语言源程序的编译系统,使用该系统也可以编辑和运行C语言的源程序
演示 演示:使用TC编辑和运行程序的过程
总结 2-1 • 算法就是解决问题的具体方法与步骤 • 流程图是算法的一种图形化表示方式 • 程序是为让计算机完成某项任务而编写的逐条执行的指令序列 • C语言的特点包括:结构化的程序设计语言、语句简洁、功能强大、移植性好
总结 2-2 • C程序的基本结构包括:预处理语句、main函数,main函数中的内容使用{ }括起来,每条语句必须用分号结束 • C程序编写完成后,首先需要通过编译转换成目标文件,然后通过连接创建可执行程序,最后才可以执行该程序 • 可以使用TC编辑和运行C程序
第三章 变量和数据类型
回顾 • 程序是为执行一项任务而编写的有序指令集 • 算法是解决问题的具体方法和步骤 • 流程图是算法的图形化表现形式 • C语言的特点 • C程序的编译和运行过程 • 编译器将源程序转换成机器能理解的程序 • 连接器用于连接相关的目标文件以生成可执行程序
目标 • 理解变量和常量的含义 • 熟悉基本数据类型- int、char、float 和 double • 使用算术运算符 • 理解类型转换 • 熟练使用 scanf() 和 printf() 函数 • 熟练使用 getchar() 和 putchar() 函数
C语言中的基本元素 程序 指令 常量是在程序中保持不变的量 常量用于定义具有如下特点的数据: • 在程序中保持不变 • 在程序内部频繁使用 • 需要用比较简单的方式替代某些值 标识符 关键字 常量 运算符 分隔符 等
内存 变量 程序 编写程序时,常常需要将数据存储在内存中,方便后面使用这个数据或者修改这个数据的值。 10 9.5 0.5 存储 Rate 通常使用变量来存储数据。使用变量可以引用存储在内存中的数据,并随时根据需要显示数据或执行数据操纵。 Rate * 5% 将值存储为DiscAmt Rate-DiscAmt 将值存储为Result
声明和使用变量 • 声明变量: Datatype variablename; • 定义时初始化变量: Datatype variablename = value; • 定义后初始化变量: variablename = value; 给变量赋值,除了给一个直接的值以外,还可以通过计算获得。
变量命名 • 变量的命名规则: • 变量名可以由字母、数字和 _(下划线)组合而成 • 变量名不能包含除 _ 以外的任何特殊字符,如:%、# 、逗号、空格等 • 变量名必须以字母或_(下划线)开头 • 变量名不能包含空白字符(换行符、空格和制表符称为空白字符) • C 语言中的某些词(例如 int 和 float 等)称为保留字,具有特殊意义,不能用作变量名 • C 语言区分大小写,因此变量 price 与变量 PRICE 是两个不同的变量 在 C 语言中,变量命名需要遵循一定的规则 有效名称 无效名称 principal 123rate lastname zip code cost_price city currency$ marks_3 discount%
基本数据类型 数据 数据类型 数值 非数值 Africa 2.175 char 整型 非整型 123 9/12/2003 int float The quick brown fox 整型 非整型 Jackie Chan short int double 非数值 数值 long int 999 9002.12 数据属于不同类别 TRUE
使用整型变量 • 声明: int page_number; long int population; unsigned int age; • 可按如下方式初始化: page_number=0; int max_marks = 100; 在同一语句中可以声明多个类型相同的变量: int page_number, copies, paper_width;
单精度浮点型 float 在 C语言中用于存储单精度浮点数 • 声明: float selling_price; • 初始化: float selling_price = 11.3; selling_price = 65.90; float 32 位 10-38至10+38 ,7位有效数字
内存 float double 双精度浮点型 213.5671435568967 • 声明: • double pr; • 初始化: • pr= 213.5671435568967; • double d = 35.4; 64位 16位有效数字 取值范围:10-308至 10308
字符型3-1 在线保险单 年龄:_____ 保险总额:_____ 性别:_____ 数值型 23 int/float 98340 字符型 ' M ' char
字符型3-2 "2" ' ' '5' 'p' '$' 有效的字符型值 '2' 正确 X '2' + '2' = 4
char 字符型3-3 占 8 位内存 示例: char g; g='m'; signed 或 unsigned unsigned 0 至255 char g='m'; Signed -128 至+127
输入/输出函数 #include <stdio.h> void main() { int num; printf("请输入一个数:"); scanf("%d",&num); printf(" \n%d 的平方为%d \n",num,num*num); } 输入/输出函数 (printf/scanf) 用于接受和显示数据或信息 转换字符串 转义序列
printf 函数5-1 int v = 150; printf ("%d", v); v "%d" printf 将一些信息按照指定的格式送到标准输出(显示器) 将按指定的格式显示该变量的值
printf 函数5-2 int v = 150; printf ("%d", v); 输出结果:150
printf 函数5-3 int s = 5500; printf ("%10d", s); "%10d" 输出结果:5500 输出结果的左边显示了 6 个空格
printf 函数5-4 float c = 78.53; printf ("%f", c); 9.4786789; 输出结果:78.530000 9.478679 默认情况下精确到六位小数
printf 函数5-5 double m = 168.2251074; printf ("%7.2f", m); " %7.2f" 输出结果: 168.23 宽度,表示所有的数字和小数点所占的位数。不够7位右对齐。 精度(精确到小数点后多少位)