C语言第10讲
c语言程序设计(第四版)-谭浩强

c语言程序设计(第四版)-谭浩强C语言程序设计(第四版)是由谭浩强教授编写的一本广受欢迎的C语言教材。
这本书以其深入浅出的讲解、丰富的实例和清晰的结构,帮助了无数计算机专业的学生和自学者掌握了C语言的基础知识和编程技巧。
第一章:C语言概述谭浩强教授在开篇第一章中对C语言的历史、特点以及C语言在现代编程领域中的应用进行了简要的介绍。
他强调了C语言的高效性、灵活性以及它在操作系统、嵌入式系统等领域的广泛应用。
第二章:C语言基础第二章深入讲解了C语言的基本语法,包括数据类型、运算符、表达式等。
谭教授通过实际的代码示例,帮助读者理解C语言的基本概念。
第三章:控制语句在第三章中,谭教授详细介绍了C语言中的控制语句,包括条件语句(if、switch)、循环语句(for、while、do-while)和跳转语句(break、continue、goto)。
每个控制语句都有详细的解释和示例代码,帮助读者掌握程序流程控制的方法。
第四章:数组第四章讨论了数组的概念、声明和使用。
谭教授特别强调了数组在C语言中的重要性,以及如何使用数组来存储和处理数据集合。
第五章:函数函数是C语言中实现代码复用的重要手段。
第五章详细讲解了函数的定义、声明、调用以及参数传递。
谭教授还介绍了递归函数的概念和应用。
第六章:指针第六章是C语言中的一个难点,谭教授通过详细的解释和丰富的示例,帮助读者理解指针的概念、指针与数组的关系、指针的运算以及指针在函数中的应用。
第七章:结构体与联合体第七章介绍了C语言中的结构体和联合体,这两种数据类型允许程序员创建复杂的数据结构,以满足不同程序设计的需求。
第八章:预处理指令第八章讲解了预处理指令的概念和使用,包括宏定义、文件包含、条件编译等。
这些指令在C语言程序设计中起到了辅助和优化的作用。
第九章:位运算第九章介绍了位运算的概念和应用,包括位逻辑运算、位移运算等。
位运算在处理二进制数据时非常有用。
第十章:文件操作第十章详细讲解了C语言中的文件操作,包括文件的打开、关闭、读写等操作。
C语言教程同步课件10讲(第7章)

register(寄存器变量):建议编译器把变量放进高速的 寄存器。
只适用于自动变量。
register int count = 1;
16
作用范围和存储类别
静态存储类别
静态存储
程序开始执行时创建,在程序执行期间,变量一直存在。
自动被初始化,缺省初值:0 或 ‘\0’。
static(静态变量):可以用于在程序块中定义的变量。
a(); b(); c(); a(); b(); c();
printf("local x in main is %d\n", x);
} void a() { int x = 25; /*initialized each time a is called*/ printf("\nlocal x in a is %d after entering\n", x); x++; printf("local x in a is %d before exiting\n", x); }
{ int x = 7; printf("local x in inner scope of main is %d\n", x); } printf("\nlocal x in outer scope of main is %d\n", x);
22
作用范围和存储类别
案例分析:作用范围与存储类别
作用范围与存储类别
10
例
int a,b; void fun1() { ...... } float x,y; int fun2() { 全局变量x,y 作用域 全局变量a,b 作用域 10-3.c #include <stdio.h> int X=1; printx(); void main() { printf("X in main:%d\n",X); printx(); printf("X in main:%d\n",X); } printx() { int X=2; printf("X in printx:%d\n",X); }
10讲:宏汇编、C语言调用汇编

宏定义可以带参数: 例: SHIFT1 MACRO X,Y MOV CL, X SAL Y,CL ENDM 调用时: SHIFT1 2, BX;BX算术左移2位. 例: SHIFT2 MACRO X,Y,Z MOV CL, X S&Z Y,CL ENDM 调用时: SHIFT2 2, SI,HR;SI逻辑右移2位源自*作业6:P124:题3-2,
22
8.数据返回C程序时,类型不同,使用的寄 存器不同,见表3-6. 例: CHAR 型: AL LONG 型: DX,AX (二) 举例 例3-16 气泡排序用汇编;数组元素在C程序 中输入,基本程序结构如下:
17
;exm3-16.c #include “stdio.h” extren void sort(int*,int); Main() { int aa[50]; … sort(aa,n) … }
1
宏调用:用宏名(也称宏指令)。 宏扩展:汇编时,将宏指令替换成宏体。 例:源程序 汇编时 … … SHIFT MOV CL, 4 … SAL AL, CL SHIFT … MOV CA, 4 SAL AL, CL 注:与子程序一样,可以简化源程序书写, 但有区别.
2
源程序:主程序 子程序 … SHIFT PROC CALL SHIFT MOV CL, 4 … SAL AL, CL CALL SHIFT RET 宏定义与子程序的区别: 1.子程序在运行时起作用;而宏定义在汇 编时起作用. 2.相同程序,子程序省目标码,而宏定义执 行速度快.
PUBLIC 名字 [,…] 功能:定义可以被其它模块引用的全局名字. 二、外部过程的调用 主模块: EXTRN SUB-PROC:FAR CODE SEGMENT MAIN-PROC PROC FAR … CALL SUB-PROC … RET MAIN-PROC ENDP
c语言视频教程

c语言视频教程★视频说明★所有的c语言视频教程都已经收集到百度网盘了,大家只需要转存就可以了;希望能够帮得到大家,谢谢!★视频目录★第01套:C语言基础--百度推荐课程--千锋潘老师第02套:[IT教程网]边用边学C语言视频教程[更新完毕-共享完毕]第03套:[IT教程网]计算机二级等级考试c语言程序设计教程c语言入门到精通视频教程[更新完毕-共享完毕]第04套:[IT教程网]孙鑫C 教程[更新完毕-共享完毕]第05套:[IT教程网]闲云野鹤C语言系列培训教程[更新完毕-共享完毕]第06套:[IT教程网]安全中国C语言视频教程第07套:[IT教程网]C语言视频教学录像第08套:[IT教程网]C语言也能干大事视频教程全集(高清)第09套:[IT教程网]郝斌C语言视频教程第10套:[IT教程网]黑色旋风C语言vip教程第11套:[IT教程网]编程加油站视频学C语言(1-18课)第12套:[IT教程网]嵌入式c语言视频教程-尚观第13套:[IT教程网]全国计算机等级考试二级C语言视频教程第14套:[IT教程网]甲壳虫2012年VIP_C语言初级班(18课)第15套:[IT教程网]编程加油站视频学C语言(1-18课)[共享完毕]第16套:[IT教程网]嵌入式c语言基础视频教程[更新完毕-共享完毕]第17套:[IT教程网]嵌入式c语言视频教程-尚观[更新完毕-共享完毕]第18套:[IT教程网][黑客基地:C语言编程特训班].毒宫玫瑰.共26讲[共享完毕]第19套:[IT教程网][黑鹰基地:C语言编程特训班].桂圆.共18讲[共享完毕]第20套:[IT教程网]微普年薪10W版C语言教学视频【绝密】[共享完毕]第21套:[IT教程网]全国计算机等级考试二级C语言视频教程[更新完毕-共享完毕]第22套:[IT教程网]C语言视频教程-谭浩强版-小甲鱼主讲(2.75G)[共享完毕]第23套:[IT教程网]C语言视频教程[共享完毕]第24套:[IT教程网]C语言,好爽(第一二三季)[更新完毕-共享完毕]第25套:C语言学习资料第26套:【IT教程网】C语言视频教学录像【更新完毕-共享完毕】第27套:【IT教程网】C语言视频教程【更新完毕-共享完毕】第28套:【IT教程网】范磊主讲c语言视频教程【更新完毕-共享完毕】第29套:【IT教程网】黑色旋风C语言vip教程【更新完毕-共享完毕】第30套:【IT教程网】郝斌C语言视频教程【更新完毕-共享完毕】第31套:【IT教程网】C语言也能干大事视频教程全集(高清)【更新完毕-共享完毕】第32套:小七论坛2013年VIPC语言系列教程-第33套:甲壳虫2012年VIP_C语言高级班(7课)★视频截图★。
C语言学习大纲 郝斌

C语言概述:1、为什么学习C语言1). C的起源和发展2).C的特点优点代码量小速度快功能强大缺点危险性高开发周期长可移植性不强3).c的应用领域主要是系统领域4).c的重要性2、怎样学习C语言3、学习的目标了解程序语言及发展历史熟练掌握c语言的语法规则掌握简单的算法理解面向过程的思想,这非常有助于将来对面向对象思想的学习能看懂程序会调试程序掌握将大问题转化为一系列小问题来求解的思想为学习c++、数据结构、c#、java打下良好的基础4、常见的学习问题1、学习java为什么建议先学习C语言2、没学过计算机专业的课程能够学懂C语言3、英语和数学不好能学好C吗32个关键词:(有系统定义,不能重做其他定义)auto break case char constcontinue default do double elseenum extern float for gotoif int long register returnshort signed sizeof static structswitch typedef unsigned unsignedunion void volatile while5、课程规划c语言简介第一讲、基本编程知识第二讲、数据类型第三讲、运算符和表达式第四讲、流程控制(所有语言都一样的)第五讲、函数(体现出面向过程和面向对象的区别)第六讲、数组第七讲、指针(c语言的灵魂)第八讲、变量的作用域和存储方式第九讲、扩展数据类型第十讲、专题:字符串的处理进制转换补码动态内存分配(java、数据结构必学)综合应用:链表的使用6、举例子:一元二次方程# include <># include <>int main (void){01组成的代码可以表示数据也可以表示指令2. 如果01组成的代码表示的是数据的话,那么同样的01代码组合以不同的输出格式输出就会有不同的输出结果scanf () ----Java中已经没有了两种用法:用法一: scanf ("输入控制符",输入参数);功能:将从键盘输入的字符转化为输入控制符所规定格式的数据,然后存入已输入参数的值为地址的变量中。
C语言第10讲-位运算

位 段
三、位段的引用 变量名. 位段名 可以用赋值语句赋值 例: x.a=4; =6; 可以在表达式中引用, C语言将自动将其转换 为int类型 例: x.a++; =y.aa+1; 可以用整型格式输出 例: printf(“a=%d b=%d c=%d”, x.a, x.b, x.c);
第十讲 --位 --位 运 算
本章教学内容、 本章教学内容、要求
内容
– 1、数的码制,即原码、反码、补码;
– 2、 位运算符,与、或、异或、取反、位移等; – 3、位段的定义与引用。
要求
– 1、掌握数的码制,学会原码、反码、补码 的运算; – 2、掌握与、或、异或、取反、左移、右移等 位运算符; – 3、了解位段的定义与引用。
小
1、数的码制‘ 2、位运算及其应用; 3、位段的定义与引用 重点:位的运算
结
6、右移运算符 ( >> ) 如: a >> 2 表示将 a 的各二进位右移 2 位。 移到右端的低位被舍弃,对无符号数,高位补 0 。 注:右移1 位相当于除以 2 ,右移 n 位相当于除以 2的 n 次方。 7、位运算符与赋值运算符结合可以组成扩展的赋值运算符。如: &= ; |= ; >>= ; <<= ; ^= ; 例如: a &= b 相当于 a = a&b a <<= 2 相当于 a = a<<2
例如,设某个系统存储单元长度为8(一个字节),且有如下的定义: struct { unsigned a:4; unsigned b:2; unsigned c:6; }x;
a
b
c
位 段
4、可以定义无名位段。 例如: struct { unsigned a:4; unsigned :3; 此位段无名,该 3位闲置不用。
C语言讲义(1-5)
C语言讲义(1-5).txt如果有来生,要做一棵树,站成永恒,没有悲伤的姿势。
一半在土里安详,一半在风里飞扬,一半洒落阴凉,一半沐浴阳光,非常沉默非常骄傲,从不依靠从不寻找。
本文由zqh——2008贡献doc文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
第 1章C 语言基础1.1 C 语言概述1.1.1 C 语言的产生与发展语言的产生 1. C 语言的产生 C 语言于 1972 年~1973 年间, 诞生于美国的贝尔实验室, 由 Denis.M.Ritchie 创建. C 语言的产生基于两个方面的需要.一是为满足 UNIX 操作系统开发的需要.二是为拉近高级语言与硬件之间距离的需要.C 语言集高级语言与汇编语言优点于一身. 2. C 语言的发展 1972 年~1973 年间, 贝尔实验室的 D.M.Ritchie 在保留B 语言优点的基础上, 创建了 C 语言. 1973 年,UNIX 操作系统被用 C 语言改写,称为UNIX 第五版.UNIX 以后的第六版,第七版,SYSTEM Ⅲ和 SYSTEMⅤ都是在第五版的基础上发展起来的.这期间 C 语言也被多次改进.1975 年,UNIX 的第六版公布,C 语言开始受到人们的普遍关注. UNIX 操作系统的广泛使用,促进了 C 语言的迅速发展与普及,C 语言的发展与普及反过来又促进了 UNIX 操作系统的推广.1978 年,出现了独立于 UNIX 和 PDP 计算机的 C 语言,从此 C 语言被迅速移植到大,中,小型与微型机上.当年,B.W.Kernighan 和D.M.Ritchie 以 UNIX 第七版的 C 编译程序为基础,出版了影响深远的名著《The C Programming Language》 . C++语言是 C 语言发展的新阶段,是一种更好的 C 语言,是应用广泛的面向对象的程序设计语言. 目前,C 语言已经发展成为迄今为止最流行的计算机程序设计语言. 3. C 语言的标准与方言 C 语言的广泛应用还是在不同的开发团体之间出现了问题,各机构推出了自己的 C 语言版本,某些执行过程的微小差别却不时引起 C 程序之间的不兼容. 美国国家标准协会(ANSI)从 1983 年开始经过长达五年的努力,制定了 C 语言的新标准——ANSI C.现在提及 C 语言的标准都是指新标准.ANSI C 比原标准 C 有很大的发展, 解决了经典定义中的二义性, 给出了 C 语言的新特点. Kernighan 和 Ritchie 也以新标准改写了他们的经典著作.任何 C 程序都必须遵循 ANSI C 标准,本教材的主体也以 ANSI C 作为基础.1.1.2C 语言的特点(1)C 语言简洁, 紧凑, 压缩了一切不必要的成份.(2) C 语言运算丰富, 将括号, 赋值, 强制类型转换, 取变量地址等都以运算实现. (3)C 语言数据类型丰富, 具有现代语言的各种数据类型; 用户能扩充数据类型, 能够实现各种复杂的数据结构, 完成各种问题的数据描述. (4) C 语言是一种结构化程序设计语言, 具有结构化语言所要求的三种基本结构. (5) C 语言是高级语言中的低级语言.C 语言允许直接访问物理地址,能进行位运算,能实现汇编语言的大部分功能,能直接对硬件进行操作. (6) C 语言提供编译预处理机制,有利于大程序的编写和调试. (7) C 语言编译系统小,生成的目标代码质量高,程序的执行效率高. (8) C 语言的输入和输出功能用库函数实现,编写的程序移植性好. (9) C 语言语法限制不太严格,程序设计自由度大,对程序员要求较高.1.2 基本语法成份1.2.1 字符集字符是可以区分的最小符号, 构成程序的原始基础.C 语言字符集是 ASCII 字符集的一个子集, 包括英文字母,数字及特殊字符: 英文字母: a~z 和 A~Z 数字: 0~9 特殊字符:空格 !# % [ ] { } 由字符集中的字符可以构成 C 语言进一步的语法成份, 如标识符, 关键字, 特殊的运算符等. ^ & * - - + = ~ < > / \ |., : ; ?′〃 ( )1.2.2标识符标识符在程序中用来标识各种程序成份, 命名程序中的一些实体, 如变量, 常量,函数,类型, 标号等对象的名字. C 语言规定, 标识符必须以英文字母或下划线开头, 是字母, 数字, 下划线的序列. 以下是合法的标识符: i,j,k,x,c,a1,a2,op,y_1,zhou_prg,radius, cout,sun,day 以下是不合法的标识符: a.1,1computer,x+y,!abc,99999,$100,π,3c C 语言中的标识符严格区分字母的大小写,标识符 abc 与标识符 ABC 是不同的标识符.习惯上, 符号常量用大写字母表示,变量名称用小写字母表示. prime,program,sort,max,min,prg_1, 标准 C 中,标识符的长度可以任意,一般有效长度为 8 个字符,Turbo C 中标识符最大长度为 32 个字符. 标识符取名时不能与关键字同名, 也不要与系统预先定义的标准标识符(如标准函数)同名.系统使用的一些内部标识符往往以下划线开头,为避免与系统使用的内部标识符发生冲突,用户定义的标识符一般也不要用下划线开头. 标识符的名称一般选用相应的英文单词或拼音形式缩写, 尽量不要使用简单代数符号, a, c, 如 b, x,y,z 等.最好能"见名知义" ,以提高程序的可读性.标识符大多数采用"匈牙利"表示法,即每个单词第一个字母大写,如 StudentName,YearMonthDate. 由系统预先定义的标识符称为标准标识符,由用户定义的标识符称为自定义标识符.程序设计中往往需根据实际需要定义大量的标识符.标识符必须先定义,后使用.1.2.3关键字关键字关键字又称为保留字, 由系统提供, 用以表示特定的语法成份, 如类型名称 int, float,语句特征 if, switch, while, 运算符号 sizeof 等, 是构成 C 语言的语法基础. 常见关键字有 31 个, 参见附录 A. 关键字有特定的语法含义, 不允许用户重新定义. 关键字在程序中像国家的名字一样, 绝对不能拼错.1.2.4运算符运算符实际上可以认为是系统定义的函数名字,这些函数作用于运算对象,得到一个结果值.运算符通常由 1 个或多个字符构成.C 语言沿用了大量的常规运算符,如加法运算符"+",减法运算符 "",地址运算符"&",大于运算符">",不等运算符"!=",逻辑与运算符"&&",条件运算符"?:", 点运算符".",字节数运算符"sizeof"等. 根据运算对象的个数不同,可分为单目运算符,双目运算符和三目运算符,又称为一元运算符, 二元运算符和三元运算符.1.3例 1-1C 程序的结构在屏幕上输出"C 语言程序设计" ./*程序 1 - 1, 输出〃C 语言程序设计〃*/ #include 〃stdio.h〃 main( ) {printf(〃C 语言程序设计〃); } 运行结果: C 语言程序设计例 1 – 2 求两个整数之和. /*程序 1 - 2, 求两个整数之和*/ #include 〃stdio.h〃 main( ) {int a, b; int sum; printf(〃请输入两个整数 a, b: 〃); scanf(〃%d, %d〃, &a, &b); sum=a+b; printf(〃和=%d\n〃, sum); } 输入数据: 1999, 5 运行结果: 和=2004 例 1-3 求两个数的最大值. /*程序 1 - 3, 求两个数的最大值*/ #include 〃stdio.h〃 float max(x, y) float x, y; {float t; if (x>y) else t=y; return(t); } main( ) {float a, b; float m; printf(〃请输入两个数: 〃); scanf(〃%f, %f〃, &a,&b); m=max(a, b); /*调用求最大值的函数*/ printf(〃最大值=%6.2f \n〃, m); } /*主函数*/ t=x; /*求最大值函数*/输入数据: 12.1, 3.45 运行结果: 最大值= 12.101.3.1C 程序的结构1.函数 (1) C 语言程序由若干函数组成. ①必须有一个且只能有一个主函数 main( ),主函数的名字为 main. ②可以是系统预定义的标准函数,如 scanf 函数,printf 函数等,参见附录 C. ③大多数函数由程序员根据实际问题的需要进行定义,函数之间是平行的关系.基于此,C 语言被称为函数式语言. (2) 函数由函数头(函数的说明部分)与函数体(函数的语句部分)两部分组成. ①函数头给出函数的特征描述, 包括函数的属性, 类型, 名字, 参数及参数类型. 如例 1-3 中的求最大值函数的函数头: float max(x, y) float x, y; /*函数属性缺省, 函数类型实型, 函数名字 max, 函数参数 x, y, 实型*/ ②函数体给出函数功能实现的数据描述和操作描述, 是程序中用花括号括起的若干语句. 如例 1 - 1 中的函数体: {printf(〃C 语言程序设计〃); } 例 1-3 中求两个数的最大值函数 max 的函数体: { float t; if (x>y) t=x; else t=y; return(t); } 函数体可以为空,可以没有数据描述部分. 由此可以给出理论上最小的 C 语言程序: main( ) { }语句 2. 语句 (1) 语句是组成程序的基本单位, 函数功能的实现由若干条语句完成.说明性语句完成数据描述, 执行性语句完成操作描述. (2) 语句由若干关键字加以标识, 如if-else 语句,do-while 语句等. (3) C 语言本身没有输入/输出语句, C 语言的输入/输出操作由 scanf 函数和 printf 函数等库函数完成. (4) C 语言语句必须以分号结束. 其它3. 其它 1) 预处理命令 C 程序开始往往含有以 "#" 开头的命令, 它们是预处理命令. 如例 1-1 中#include〃stdio.h〃, 用以指明包含文件. 2) 程序注释在程序中还有以"/*"开始, 以"*/"结束的内容, 它们是程序中的注释部分, 用以帮助阅读程序.1.3.2C 程序的书写(1) 一行一般写一条语句.当然一行可以写多条语句, 一条语句也可以写在多行上. (2) 整个程序采用紧缩格式书写.表示同一层次的语句行对齐, 缩进同样多的字符位置.如循环体中的语句要缩进对齐, 选择体中的语句要缩进对齐. (3) 花括号的书写方法较多, 本书采用花括号对齐的书写方式, 左边花括号处于第一条语句的开始位置, 右边花括号独占一行, 与左边花括号对齐. (4) 在程序中恰当地使用空行, 分隔程序中的语句块, 增加程序的可读性.1.4 C 程序的实现1.4.1 实现步骤C 程序在计算机上的实现与其它高级语言程序的实现一样, 一般要经过编辑,编译,连接,运行四个步骤,如图 1-1 所示.(*Turbo C*)编辑源程序编译头文件目标文件连接库文件执行文件运行图1-11.4.2程序的执行C 程序的执行总是从主函数 main( )开始, 不管主函数在程序中什么位置.其它函数通过被调用执行.函数中的语句依先后顺序执行, 除非改变了程序的执行流程.1.4.3TURBO C 上机操作1.启动 Turbo C 只需执行 TC.EXE 文件,即可启动 Turbo C,进入 Turbo C 的操作界面. TC 是 DOS 程序,现在一般运行在 Windows 下的 DOS 环境. 如需使用中文,还需先将计算机置于中文操作系统管理下. 用 TC 加源程序文件名可快速启动 Turbo C,立即进入编辑操作.操作界面 2. TURBO C 操作界面图 1-2 1) 主操作界面Turbo C 的主操作界面Turbo C 主操作界面由主菜单区,编辑窗口区,信息窗口区及热键区四部分组成. Turbo C 的操作采用菜单驱动,主菜单包括 File(文件操作),Edit(编辑操作),Run(运行操作), Complie(编译操作),Project(工程文件),Options(编译选择)及 Debug(跟踪排错)各项. 热键区提供常用操作的快速功能键方式,如 F1(帮助),F2(保存文件),F3(装入文件),F5(缩放窗口),F6(切换窗口),Alt+F5(用户屏幕),Alt+X(退出 Turbo C)等. 2) 主窗口当前操作窗口为主窗口(工作窗口), 主窗口为双线框表示, 按 F6 可切换主窗口, 按 F5 可缩放主窗口. 3) 菜单选择方式一: 按 F10 进入主菜单区, 通过菜单项的大写字母选择相应菜单项, 或通过光标控制键(→, ←, ↑, ↓)移动高亮度光棒至相应菜单项, 按回车选择相应菜单项. 方式二: 用热键 ALT 加相应菜单项的大写字母, 选择相应菜单项. 对子菜单项的选择, 操作方法类似.3. 编辑编辑在编辑窗口中进行, 有多种方式进入编辑环境: 方式一: 选择 Edit 项. 方式二: 选择 File 项的子项 New, 用于编辑新程序. 方式三: 选择 File 项的子项 Load, 装入要修改的程序, 用于修改程序. 方式四: 启动时采用快速启动方式. TURBO C 的编辑操作是 Wordstar,WPS 等字处理软件编辑操作的子集, 它与 Wordstar,WPS 的编辑操作完全类似.4. 编译 TURBO C 将编译,连接一道完成.按热键 F9 或选择 Compile 项进入编译.编译时发生错误, 返回编辑步骤,修改程序后, 再编译程序.5. 运行按热键 CTRL+F9 或选择 Run 项下的子项 Run, 运行计算机中的程序. ALT+F5 键或选择 Run 项按下的子项User Screen 进入用户屏幕, 查看程序运行结果. 运行时发生错误, 返回编辑步骤, 修改程序后, 再编译, 运行程序. 对于没编译的程序, 选择运行会先自动进行编译操作, 再运行程序.6. 退出上机过程完成后, 按热键 ALT+X 或选择 File 项的子项 Quit 退出 TURBO C, 返回操作系统状态. 退出 TURBO C 后还可用操作系统命令来显示源程序和运行程序.习题一1. 简述 C 语言的主要特点.2. 简述标识符的命名方法,并与关键字进行比较.3. 简述C 语言程序的结构. 4. 简述 C 语言程序的实现步骤. 5. C 语言程序的书写有何特点? 6. 注释在程序中有什么作用? 7. 下列标识符中,哪些是不正确的标识符?为什么? C do SUM ¥123 3S (xyz) Co.Ltd printf OK! max com PI language for_ c prg*18. 抄写例 1-3 中的程序,注意 C 语言程序的结构与书写格式. 9. 上机运行例 1-1,例1-2,例 1-3 的程序,了解上机方法与步骤,熟悉实习环境.10. 模仿例 1-1 编写程序,输出自己的姓名,性别及年龄. 11. 模仿例 1-2 编写程序,求两个整数的积. 12. 模仿例 1-3 编写程序,求两个数的最小值. 13. 编写一个最小的 C 语言程序,并请上机运行. 14. 浏览 C 语言程序设计的相关网站.第 2章基本数据类型型2.1 整2.1.1 基本整型1. 类型名称 int 取值范围2. 取值范围 -32768~+32767(-215~215-1) 数据表示方法3. 数据表示方法整型数据的表示方法与数学中的类似,不能有分隔符. C 语言允许使用八进制整数与十六进制整数,八进制整数加前导符 0(数字),十六进制整数加前导符 0x(数字 0 和字母 x).4.运算操作 (1) 算术运算包括:+(加法), (减法),*(乘法),/(除法),%(求余). 运算规则除除法外,与数学中的相同. 整数的除法运算是整除,结果得到商,如 5/3 结果为 1.对于负数,多数机器采用向零取整法,如 5/3 结果为 1. 求余运算又称取模运算,结果得到余数,即 a%b 等于 a(a/b)*b,如 5%3 结果为 2,5%3 结果为 2. 求余运算在许多场合都非常有用,如判断整数 a 是不是 b 的倍数,可看 a%b 是否等于零;a%10 可得到 a 的个位数字,(a/10)%10 可得到 a 的十位数字,如此可分离一个整数的每一位数字. 一般只有除数大于 0 时,求余运算才有意义.当 a 小于 0 时,a%b 等于 ((a)%b). (2) 关系运算包括: <(小于), <=(小于等于), ==(等于) !=(不等于) >(大于) >=(大 , , , 于等于)等六种, 运算规则与数学中相同, 运算结果为逻辑类型数据.关系运算成立结果为 1, 不成立结果为 0. 存储5. 存储 C 标准没有具体规定各类数据存储的字节数, 各种机器处理有所不同, 一般以一个机器字(Word)存放 1 个 int 数据, PC 机上 int 数据存储用两个字节. 机器中用最高位表示数的符号, 正数符号位用 0 表示, 负数符号位用 1 表示. 负数在机器中存放的是其补码. 6. 应用例 2-1 求两个整数的积. /*程序 2 - 1, 求两个整数之积*/ #include 〃stdio.h〃main( ) {int a, b; int m; printf(〃请输入两个整数 a, b: 〃); scanf(〃%d, %d", &a, &b); m=a*b; printf(〃积=%d\n〃, m); } 输入数据: 2000, 3 运行结果: 积=60002.1.2拓展整型类型修饰符 1. 类型修饰符 short: 缩短数值所占字节数. long: 扩大数值所占字节数. signed: 有符号位, 缺省方式. unsigned: 无符号位. 短整型 2. 短整型短整型类型名称为 short int 或 short, 在 TURBO C 中, 短整型与基本整型相同. 长整型 3. 长整型长整型类型名称为 long int 或 long, 取值范围为-231~231-1(-2 147 483 648~2 147 483 647), 长整型数据可加后缀 L 表示, 在 TURBO C 中, 存储占 4 个字节, 运算与基本整型相同. 4.无符号整型无符号数相对于有符号数的主要区别是数的最高位不做符号处理,而是常规的数字位,表示的数的绝对范围是有符号数的 2 倍. 相应地,无符号整型有无符号基本整型,无符号短整型和无符号长整型三种. 无符号基本整型,类型名称为 unsigned int 或 unsigned,取值范围为 0~2161,即 0~65 535,存储占 2 个字节. 无符号短整型,类型名称为 unsigned short int 或 unsigned short ,取值,运算,存储与无符号基本整型相同. 无符号长整型,类型名称为 unsigned long int 或 unsigned long,取值范围为 0~2321,即 0~4 294 967 295,存储占 4 个字节. 无符号整型常用于处理大整数及地址数据. 八进制数与十六进制数一般只用于 unsigned 类型数据. 例 2-2 整数 9 的机器表示. 作为 int:0000000000001001. 作为short int:0000000000001001. 作为 long int:00000000000000000000000000001001. 以上第一位为符号位,表示正整数. 以下第一位为正常的数据位,是非符号位. 作为 unsigned int:0000000000001001. 作为unsigned short int:0000000000001001. 作为unsigned long int:00000000000000000000000000001001.2.2 浮点型2.2.1 单精度型类型名称 1. 类型名称 float取值范围 2. 取值范围绝对值范围为 10-38~1038, 7 位有效数字. 数据表示方法 3. 数据表示方法实数有一般形式和指数形式两种表示方法. 一般形式又称小数表示法, 是一种常规形式, 由整数部分, 小数点,小数部分三部分组成.C 语言中的实数可以没有小数部分或没有整数部分, 如 20., .375.指数形式由尾数,指数符号 e 或 E,指数三部分组成, 尾数是一般形式的实数.指数形式适于表示较大或较小的实数.如 2.34e10,2.34e-10, 相应于数学中 2.34×1010,2.34×10-10 . 运算操作 4. 运算操作实型数据的运算操作有算术运算和关系运算两大类, 运算符同整型, 运算规则与数学中实数的运算规则相同, 但运算结果可能是一个近似值.实数没有求余运算. 存储 5. 存储 4 个字节 6. 应用例 2 – 3 求两个实数的积. /*程序 2 - 3, 求两个实数之积*/ #include 〃stdio.h〃 main( ) {float a, b; float m; printf(〃请输入两个整数 a, b: 〃); scanf(〃%f, %f〃, &a, &b); m=a*b; printf(〃积=%6.3f\n〃, m); 输入数据: 1.1, 2.21 运行结果: 积= 2.4312.2.2双精度型双精度型的类型名称为 double 或 long float,较单精度型提高了计算精度,取值的绝对值范围为 10308~10308,有效数字为 16 位. 双精度型数的表示方法与运算操作同单精度型数,要占用 8 个字节存储. 计算机中太大的数不能表示,太小的数也不能表示,超出数的表示范围称为溢出,相应有上溢与下溢.对于大的数的处理必须通过间接的方法进行.有不少的实数在机器中只能近似表示.2.3 字符型2.3.1 字符型数据1.类型名称字符的类型名称:char.2.取值范围字符型数据的取值范围:ASCII 码字符集中的任何字符.3.数据表示方法用单引号作界定符,将字符引起表示字符数据,如'a','+','%',':','1','2'. 说明: (1) 单引号字符本身及双引号,反斜杠字符本身由于有特定的含义,不能如此表示,因而需采用其它表示方法. (2) 字符数据本身除了可以直接出现外,还可以通过反斜杠后跟 ASCII 码来描述.ASCII 码可采用三位八进制数或两位十六进制数表示,相应描述形式是\ddd 与\xhh(位数不够,加 0 补位),这种表示方法称为转义表示或转码表示.如此,字符 A 可表示为'A','\101','\x41'. 尤其是一些特殊的字符只能这样表示,如图形字符'■'可表示成'\376',单引号,双引号,反斜杠可分别表示成'\047','\042','\134'. (3) 对一些常用的特殊字符,C 语言还提供特定的字符来转义表示. ′\n′: 回车换行′\′′: 单引号字符′\a′: 响铃报警′\f′: 走纸换行′\t′: 横向跳格 '\0' ,空操作字符(NULL) (4) 数字字符与数字是不同的数据,如'9'与 9 不同. ′\\′: 反斜杠字符′\′′: 双引号字符′\b′: 退格′\r ′: 回车′\u′: 竖向跳格运算操作 4. 运算操作 C 语言的字符数据在存储时实际上是存储其 ASCII 码,存储形式与整数的存储形式相同.基于此, C 语言规定字符数据与整型数据在 ASCII 码取值范围内通用,因而 C 语言中字符数据可进行整型数据的相关运算及操作.①′a′+′b′, 等于 97+98; ②′a′+2, 等于 97+2; ③′a′<′b′等于 97<98.5.存储字符的存储占用 1 个字节.6.应用例 2-4 输出 ASCII 码表.ASCII 码用整型数据描述,字符当然用字符类型描述. 程序如下: /*程序 2-4,输出ASCII 码表*/ #include "stdio.h" main( ) { int i; char ch; printf("ASCII 码表\n"); for(i=0;i<=255;i++) { ch=i; printf("字符%c,ASCII 码%d\n",ch,i); } } 运行结果略.2.3.2字符串数据多个字符构成的序列称为字符串,简称字串,是非数值问题处理的基础. 1.字串表示用双引号作界定符, 将字符序列引起表示字串数据, 如"chinaone", "computer", "$123.45", "\nabc", "%d%f". 2.字串存储字串数据的存储除存储构成字符串的字符序列本身外, 还必须附加存储字符串的结束标志空操作字符 '\0'. 存储一个字串的字节数等于字符个数加 1,即字串长度再加 1. 注意字串''a''与字符'a'的区别:表示方式不同,存储也不同.2.4 逻辑类型2.4.1 逻辑类型C 语言没有专门提供逻辑类型,而是借用整型,字符型,实型来描述逻辑数据. C 语言规定:0 作为逻辑数据代表假,非 0 的数作为逻辑数据代表真. C 语言同时规定:逻辑数据真为1,逻辑数据假为 0. 在一个式子里面要注意区分作为普通数据的数与作为逻辑数据的数.例如:2<3 为真,表达式的值为 1;2>3 为假,表达式的值为 0.2.4.2逻辑运算C 语言中,逻辑类型数据是数,可以进行数的所有运算,如算术运算,关系运算.但逻辑类型数据更主要的是进行逻辑运算.基本的逻辑运算包括逻辑非运算"!,逻辑与运算"&&"和逻辑或运算 " "‖"三种. 假定有逻辑数据 p,q,逻辑运算的运算规则为: !p,得到与 p 相反的逻辑数据.p 为真,!p 为假;p 为假,!p 为真. p&&q,只有 p,q 同时为真时,运算结果为真;只要 p,q 有一个为假,运算结果为假. p‖q,只要 p,q 中有一个为真,运行结果为真;只有 p,q 同时为假,运算结果为假. 例如: ① ! (2>3)等于 1. ② (2>3)&&(3>2)等于 0. ③ (2>3)‖(3>2)等于 1. ④ (6%2==0)&&(6%3==0)等于 1.2.5 标准函数标准函数完成一些比较复杂的运算和比较常用的操作.对标准函数应了解三个方面:函数的名称, 函数参数及类型(相当于数学函数中的自变量),函数值及类型.另外,还应了解函数包含在哪个库文件中以及函数的调用方法. 函数调用通过函数名进行,以实际数据(实参)代替函数中的参数(形参). 函数调用格式:函数名(实参). 数学函数包含在头文件 math.h 中,调用前需用预处理指令#include "math.h"指明. 常用的数学函数如下(参数 x 为 double 或 float,int 型数,函数值为 double 型): (1) acos(x),求 x 的反余弦,x 必须在1~1 的范围内.(2) asin(x),求 x 的反正弦,x 必须在1~1 的范围内. (3) atan(x),求 x 的反正切.(4) cos(x),求 x 的余弦,x 的单位必须为弧度. (5) exp(x),求 e x 的值. (6) fabs(x),求 x 的绝对值. (7) (8) (9) floor(x),求不大于 x 的最大整数. log(x),求 lnx. log10(x),求 lgx.(10) pow(x,y),求 x y. (11) sin(x),求 x 的正弦,x 的单位必须为弧度. (12) sqrt(x),求 x 的平方根,x 必须大于等于 0. 对于其它数学中常用的函数,应尽量利用已有的标准函数来处理.2.6 量的定义方法2.6.1 常量的定义常量是在程序运算过程中不变的量. (1) 常量在程序中经常直接出现, 如123,3.14159,′a′, 〃computer〃, 此时只要求它们符合相应类型数据的表示方法. 相应于各种数据类型, 有整型常量, 浮点型常量, 字符型常量及字符串常量. (2) 常量定义指的是定义符号常量, 它用一个标识符来代表一个常量,通过宏定义预处理指令来实现. 格式: #define 标识符常量由用户命名的标识符是符号常量名.符号常量名一般大写.一旦定义,在程序中凡是出现常量的地方均可用符号常量名来代替. 对使用了符号常量的程序在编译前会以实际常量替代. 例 2 – 5 求圆的面积. /*程序 2 - 5, #define R main( ) 求圆的面积*/ 2 #define PI 3.14 #include 〃stdio.h〃{float s; s=PI*R*R; printf(〃面积=%6.3f〃, s); } 运行结果: 面积=12.5602.6.2变量定义变量定义方法 1. 变量定义方法格式: 类型名变量表; 变量表是用逗号分开的变量名. 例如: ① int i, j; /*定义 i, j 为整型变量*/ ② float x, y; /*定义 x, y 为实型变量*/ ③ char ch; /*定义 ch 为字符型变量*/ 2.变量的初始化定义了变量,变量并没有值.可以在定义变量的同时给出变量初值,对其进行初始化. 例如: ① int i=9,j=38;/*定义整型变量 i,初值为 9;整型变量 j,初值为 38*/ ② float r=1.5;/*定义实型变量 r,初值为1.5*/ ③ char answer= 'y';/*定义字符型变量 answer,初值为字符 y*/ 3.数据分析方法进行程序设计,一方面是对数据进行描述,另一方面是对操作进行描述.对于一个问题,到底需要定义哪些量,定义什么样类型的量,必须经过数据分析. 数据分析根据求解的问题选择适当的类型来描述数据,明确求解问题用到的量的名字及类型. 对于任何问题,我们都可将数据分成三大类:输入数据,中间数据和输出数据.输入数据反应程序运行的数据源;中间数据是程序运行的中间结果;输出数据是程序运行的结果,反应编程的目的. 相应地,程序中用输入量来描述输入数据,用中间量来描述中间数据,用输出量或称结果变量来描述输出数据. 对于一个问题, 在开始设计程序时输入量, 输出量一般是明确的, 中间量往往不能一下子全部确定, 可在程序的编制过程中根据需要动态追加. 数据分析一般采用如下格式: 数据分析: 输入量: 中间量: 输出量: 例 2-6 求三角形的面积与周长问题的数据分析. 输入数据是三角形三边,中间数据是半周长,输出数据是面积与周长. 本问题的数据分析如下: 数据分析: 输入量:三边 s1,s2,s3,float 中间量:半周长 hl,float 输出量:面积 s,周长 l,float 相应的变量定义如下: float s1,s2,s3;/*三角形三边*/ float hl;/*半周长*/ float l,s;/*周长,面积*/ 一般将作用相同的变量放在一起定义,以增加程序的可读性.习题二1. 从类型名称,取值,主要运算三个方面综述基本整型.2. 从类型名称,取值,主要运算三个方面综述单精度实型.3. 从类型名称,取值,主要运算三个方面综述字符型.4. 字符数据与字符串数据有什么区别?5. C 语言中逻辑类型数据如何描述?6. 下列变量定义中,哪些地方不正确? (1) a,b,c:int; (2) float x;y;z; (3) char c1,c2; int c1; (4) int i,y,long k; (5) n1,n2,n3,long; (6) int char,zhang,li; (7) int i=j=k=1; (8) boolean b1,b2;7. 取一个适当的名字描述下列数据,并考虑用哪种数据类型较好.(1) 一个人去年的年龄. (2) 一个人的体重. (3) 考试的分数. (4) 今天的温度. (5) 地球到月亮的距离. (6) 一天的开支. 8. 给出下列问题的数据分析. (1) 求两个整数的和,积与平均值. (2) 求两个实数的和,积与平均值. (3) 求长方形的面积和周长. (4) 求正方形的面积和周长. (5) 解方程 ax+b=0. (6) 求一元二次方程 ax2+bx+c=0 的两个实根. 9. 给出上题中相应的变量定义. 10. 编写程序,求两个整数的和,积与平均值. 11. 编写程序,求两个实数的和,积与平均值. 12. 编写程序,求正方形的面积和周长. 13. 编写程序,求长方形的面积和周长. 14. 编写程序,解方程 ax+b=0.第 3章主要内容: 3.1 3.5 表达式基础 3.2 算术表达式 3.3 其它表达式表达式赋值表达式 3.4逻辑表达式。
数据结构与算法复习题10(C语言版)讲课稿
数据结构与算法复习题10(C语言版)习题9解答判断题:1.用向量和单链表表示的有序表均可使用折半查找方法来提高查找速度。
答:FALSE (错。
链表表示的有序表不能用折半查找法。
)2.有n个数据放在一维数组A[1..n]中,在进行顺序查找时,这n个数的排列有序或无序其平均查找长度不同。
答:FALSE (错。
因顺序查找既适合于有序表也适合于无序表;对这两种表,若对于每个元素的查找概率相等,则顺序查找的ASL相同,并且都是(n+1)/2;对于查找概率不同的情况,则按查找概率由大到小排序的无序表其ASL要比有序表的ASL小。
)3.折半查找是先确定待查有序表记录的范围,然后逐步缩小范围,直到找到或找不到该记录为止。
( )答:TRUE4.哈希表的查找效率主要取决于哈希表哈希表造表时选取的哈希函数和处理冲突的方法。
答:TRUE5.查找表是由同一类型的数据元素(或记录)构成的集合。
答:TRUE单选题:6.对于18个元素的有序表采用二分(折半)查找,则查找A[3]的比较序列的下标为( )。
A. 1、2、3B. 9、5、2、3C. 9、5、3D.9、4、2、3答:D (第一次⎣⎦2/)181(+ = 9,第二次⎣⎦2/)81(+ = 4,第三次⎣⎦2/)31(+ = 2, (第四次⎣⎦2/)33(+ = 3,故选D.7. 顺序查找法适合于存储结构为____________的线性表。
A.散列存储B.顺序存储或链式存储C.压缩存储D.索引存储答:B8.对线性表进行二分查找时,要求线性表必须( )。
A .以顺序方式存储 B. 以链接方式存储C .以顺序方式存储,且结点按关键字有序排序D. 以链接方式存储,且结点按关键字有序排序答:C9.设哈希表长m=14,哈希函数为H(k) = k MOD 11。
表中已有4个记录(如下图所示),如果用二次探测再散列处理冲突,关键字为49的记录的存储地址是( )。
A .8 B. 3 C .5 D. 9答:D (计算H(k),即H(49)=49 mod 11 = 5,冲突,进行二次探测再散列。
C语言基础讲义课件
几个基本概念: 类、对象、属性、事件、方法
三类机制: 封装、继承、多态
第一章 C语言概述
§1.3 简单C程序分析
例1.1 打印(显示)一串字符。
/* example1.1 */ #include<stdio.h> void main( ) { printf(“This is an example. \n”); 运} 行结果: This is an example.
else z=y ;
c=max( a , b ) ;
return (z) ;
printf(“max=%d\n ”, c) ;
}
}
14
第一章 C语言概述
C程序结构
1、C程序由函数构成
{一个主函数(main函数)
C程序= 一个主函数+若干其他函数(子或库)
{ { 说明部分
2、函数 { 函数体 }
数据定义(语句) 执行部分
11
第一章 C语言概述
例1.2 已知角度值45°, 求正弦值的2倍。
/*example 1.2*/
#include<stdio.h>
#include<math.h>
void main( ) { float x, y;
x=45; y=2*sin(x*3.14/180); printf(“Y=%f \n”, y); }
第二章 算法
§2.1 算法的概念
算法:为解决一个问题而采取的方法和步骤。 对同一个问题, 算法是不唯一的。例如:
1+2+3+……+100=5050 或 100+1+99+2+98+……+49+51+50= 100+49*100+50=5050
C语言章节教案
章节教案章节名称第1章 C语言概述授课类型理论课(√)、实践课(√)、实习()教学时数1、了解C语言的发展历程教学目的要求2、了解C语言的特点3、掌握C程序的组成结构4、掌握C程序的上机操作环境1.1 C语言出现的历史背景1.2 C语言的特点主要知识点1.3简单的C程序介绍1.4 C程序的上机步骤3教学重点、重点:C语言的组成结构及程序书写规范。
难点难点:C语言实验环境的操作。
教学内容的衡接及学时分配问题:不能及时熟练的掌握TC集成环境的操作,对程序出错时的英文提示信息看不懂。
教学后记教法:对集成环境操作先只介绍精简操作,而后再不断的扩展操作。
而对英文提示信息方面应引导学生先要有耐心的看这些信息,而后养成积累这些提示信息的习惯。
理论内容2学时,实验2学时。
章节名称第2章程序的灵魂——算法授课类型理论课(√)、实践课(√)、实习()教学时数1、了解程序的组成要素教学目的要求2、理解算法的概念和特性3、掌握用算法描述工具来描述算法4、了解结构化程序设计方法2.1算法的概念2.2简单算法举例主要知识点2.3算法的特性2.4怎样表示一个算法2.5结构化程序设计方法4教学重点、重点:C语言程序的组成要素和使用各种算法描述工具描述算法。
难点难点:运用算法和结构化程序设计方法解决实际问题。
教学内容的衡接及学时分配引导学生选择一种适合自己习惯的算法描述工具,而后利用该工教学后记具来分析和解决各类问题,并逐步的培养自己分析问题、解决问题的能力。
基本理论概念2学时,各种算法描述工具2学时,实验2学时。
章节名称第3章数据类型、运算符与表达式授课类型理论课(√)、实践课(√)、实习()教学时数1、掌握基本数据类型及其定义方法教学目的要求2、掌握运算符的种类、运算优先级、结合性。
3、掌握不同类型数据间的转换与运算。
4、掌握表达式类型和求值规则。
3.1 C的数据类型3.2常量与变量3.3整型数据3.4实型数据主要知识点3.5字符型数据3.6变量赋初值3.7各类数值型数据间的混合运算3.8算术运算符和算术表达式3.9赋值运算符和赋值表达式3.10逗号运算符和逗号表达式教学重点、难点重点:C语言的数据类型、常量概念与特性、变量的定义与特性、运算符的优先级与结合性,各类数值型数据间的混合运算。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
WANGJINLING
合 肥 工 业 大 学
函数分类(从不同角度): ① 定义: 库函数:C系统提供,不需定义和说明,在程序前加文件包含 可直接调用。如:printf(“%d”,a)、sqrt(10.5) 用户定义函数:按需要编写的函数(本章讲述)。 ② 功能: 有返回值函数:向主调函数返回一个执行结果。 无返回值函数:完成特定的任务,不返回执行结果(void)。
5.1.2 函数的定义(先定义,后使用)
1. 定义格式: type 函数名(形参表) { 函 说明语句 ; 数 功能语句 ; 体 有返回值函数,应含 } int max(int x ,int y) { int z ; z=x>=y? x : y ; return ( z) ; }
WANGJINLING
举例:通过函数求 x ( 见p118 例 5.6 )
主 调 函 数 #include <stdio.h > double pow(float , int) ; 原型声明。 void main(void) { int i ; 调用函数。 for (i=1; i <=9 ; i++) printf ( “%d , %f \n” , i, pow(2.5 ,i) ); } double pow(float x ,int n ) 定义函数。 { int i ; double p=1 ; for (i=1 ; i<=n ; i++) p=p*x ; return ( p) ; }
2. 说明:
有return语句。
5.1.3 函数的调用
1、调用格式: 函数名(实参表)
用逗号分隔的常量、变量、表达式、 函数等,在函数调用时,必须有确 定值。无参函数不能省略() 。
WANGJINLING
例:int a=3,b=4; max(a,b);
一般函数调用方式有三种: 语 句 形 式: max(a,b); 表达式形式: c=max(a, b)*2+3 ; 函 数 参 数: c=printf(“%d”, max (b , d )) ;
合 肥 工 业 大 学
2、调用过程:(当主调函数执行到函数调用语句时)
void main (void) { int a ,b ,c ; scanf (“%d,%d” ,&a,&b ); c=max( a ,b ); printf (“%5d” ,c ); }
注意:函数的形参和实参是函 数间传递数据的通道,故二者 在个数、类型和顺序上要一一 对应。
WANGJINLING
第五章 函 数
——结构化程序设计基础
合 肥 工 业 大 学
5.1 概述
结构化程序设计要求一种自顶向下的设计方法,即将复杂的 系统划分为相对独立的,功能较为单一的子系统的组合。每个子 系统称为模块,在C语言中表现为函数。即C的全部工作均由各种 不同功能的函数完成。 优点:功能单一完整,可 5.1.1 函数概念 以独立设计,单独调试。 复杂问题 易于维护,通用性强。
2 3 3
2 3 3
X y
合 肥 工 业 大 学
注意:函数调用只能把实参的值传递给形参,而不能把形参 的值反向传递给实参。 例: #include<stdio.h>
void s(int n) { n=n+100; printf("Sub:n=%d\n",n); } void main(void) { int n; scanf("n=%d",&n); s(n); printf("\nMain:n=%d\n",n); }
n
WA 工 业 大 学
函数相对独立,但不孤立,它们通过调用时的 ①参数传递 ②函 数的返回值 ③全局变量(后面介绍)来相互联系。在调用过程中,主 调函数和被调函数存在数据的相互传递。传递包括两方面:
5.2 函数间的数据传递
⑴ 主调函数将值传递给被调函数; ⑵ 被调函数将结果返回给主调函数。 向被调函数传递值
4、函数的声明
WANGJINLING
合 何函数调用)进行函数声明。 肥 声明格式: type 函数名 ( 形参表 ) ; 工 有两种情况可不需对被调函数说明,而直接使用。 ☆ 被调函数的返回值是int 型;(P125 例 5.3 / p117 例 5.5 ) 业 ☆ 被调函数定义在主调函数之前; 大 学
WANGJINLING
a b
int max ( int x , int y ) c z { int z ; z=x>y? x : y ; return (z) ; } (1)计算实参的值,给形参分配内存,从右到左向函数传值,赋值给形参。 (2)程序转移到函数中运行,执行到一个return语句,由函数名把值带回到 主调函数,程序返回到主调函数的调用处继续执行。 (3)如果没有return语句,由最后一个}返回一个不确定的值!
WANGJINLING
合 肥 工 业 大 学
5.3 标准库函数
C语言很多功能都由标准库函数(系统函数)完成。它将 一些常用功能模块编写成函数,分门别类地放在函数库中供用 户使用。如I/O、常用数学函数等,用户可随时从库中调用。不 同的C编译系统,库函数数量不等,但常用函数则大同小异。 1. 库函数的调用 在程序开始处用 #include 将该类函数的头文件包含进来。文 件包含的作用相当于函数的原型声明。 2. 库函数的分类 Turbo C库函数有300多种,给用户提供了良好的接口,为方 便记忆查找(常用的库函数是要记忆的 ),对函数进行了分类。 ①数学函数: #include<math.h> ②输入输出函数: #include<stdio.h> ③字符串处理函数: #include<string.h> ④其他函数: #include<stdlib.h> 例题见 P126~127 / p122~125
实 参
WANGJINLING
主调函数
数据的传递方式:
合 被调函数 肥 工 业 将结果返回给主调函数 大 值传递和地址传递 学
形 参
5.2.1 值传递方式
通过实参与形参的结合,将数据值传递给形参,形参和 实参各自占用不同的存储单元,形参的改变不影响实参(单 向传递)。 见P119例5.8 #include <stdio.h> int mul (int , int ) ; a:2 void main (void ) { int a , b , c ; b:3 主 scanf ( “ %d , %d” , &a ,&b) ; 调 c: 6 a、b实参 c= mul ( a , b ) ; 函 传递参数 数 printf ( “ a*b= %d \n ” , c ) ; y: 3 } x、y形参 int mul (int x ,int y ) x: 2 被 { int z ; 调 z=x*y ; 函 z: 6 return (z) ; 返回值 数 }
WANGJINLING
合 肥 工 业 大 学
5.2.2 地址传递方式
形参实参均为地址(数组名、指针),数据在主调函数和被调 函数中占据相同的存储单元,形参的改变将影响到实参。
#include <stdio.h> 例: 将数组中的最大值与 b a main ( ) 2000H 4 第一个数交换 { void fun( int a[ ] ); 2002H 2 int a[10],i; for(i=0;i<10;i++) scanf(“%d”,&a[i]); ┇ ┇ fun(a); for(i=0;i<10;i++) printf(“%d”,a[i]); 2012H 8 } void fun(int b[ ]) { int max,k,i ; a 2000H max=b[0]; k=0; for(i=1;i<10;i++) b 2000H if (max<b[i]) { max=b[i]; k=i; } max=b[0]; b[0]=b[k]; b[k]=max; return; } 注意:不管“传值”、还是“传址”,都是单向传递,只能实 参传递给形参,反之不行。
WANGJINLING
合 肥 运行结果:n=15 工 Sub: n=115 业 Main: n=15 可见:在函数调用过程中,形参的值发生改变时,对实参 大 的值并不产生影响。 学
3、函数的返回值 格式1:return(表达式);或: return 表达式 ; 格式2:return; 应在定义函数时用void说明类型。 ⑴ 函数中可以出现多个return语句,遇到一个return 语句, 则返回值,且返回调用函数,继续执行。 ⑵ 返回值的类型应与函数的类型一致,如不一致,以函数类 型为准,先转换为函数类型后,再返回。 ⑶ 为了确保参数和返回值类型正确,一般须在函数调用前对 其类型和参数的类型加以说明,称之为原型声明。 int imax ( int ,int )int 原型声明语句,加“;” ; max(void) int max ( int voidint y ) (void ) { x , main { { float z; if (x>=y ) int x,y,z ; … return x ; … return z;/* z先转化为整型*/ return y ; z=imax ( x,y ) ; } } … }
必须的,起点 main()主函数
WANGJINLING
a 函数
b 函数
C 函数
d 函数
e 函数
f 函数 库 函 数
合 各函数之间的关 系称之为接口(参肥 数,返回值),函 工 数-函数通过接口 通讯,交换数据。 业 大 学
函数特点: 一段相对独立的程序,但不能独立运行。 建立函数称为“函数的定义”,使用函数称为“函数 的调用”;调用其他函数的函数称为“主调函数”,被调 用的函数称为“被调函数”。除主(main( ))函数外,其 他函数都不能独立运行。 库函数与自定义函数 被调用的函数可以是系统提供的库函数(Turbo C提供 300多个库函数),也可以是用户根据需要自己编写设计的 函数(本章内容)。 main函数(主函数)是每个程序执行的起始点 main(系统定义)函数可以调用其他任何函数,但不 能被其他任何函数所调用。一个C程序总是从main函数开 始执行(不论main函数在程序中的位置),在main函数中 结束。