C语言程序设计技术(下)ppt.ppt_第1页
C语言程序设计技术(下)ppt.ppt_第2页
C语言程序设计技术(下)ppt.ppt_第3页
C语言程序设计技术(下)ppt.ppt_第4页
C语言程序设计技术(下)ppt.ppt_第5页
已阅读5页,还剩202页未读 继续免费阅读

下载本文档

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

文档简介

TheCProgrammingLanguage C语言程序设计技术 下 TheCProgrammingLanguage 第11讲函数 1 一 函数的定义与调用1 函数的定义 函数体 2 函数值非void型函数的函数值必须用return语句返回 3 函数调用 例如 c 2 max 13 25 m max a max b c 说明 1 调用函数前 应对函数原型进行声明 2 实参的个数必须与虚参个数相同 类型必须匹配 3 实参可以是一个表达式 虚参只能是变量 4 当虚参是一个指针或数组时 实参与虚参的值双向传递 5 函数不能嵌套定义 但可嵌套调用 6 函数的实参类型与虚参类型不相同时将实参转换为虚参的类型 7 函数的返回值与函数类型不相同时将返回值转换为函数值的类型 例1 P106例4 2 已知a 2 b 3 求a b的值 include includevoidmain void intadd intx inty inta 2 b 3 c clrscr c add a b printf d d d n a b c getch 求和 intadd intx inty intt printf x和y的值分别是 d d n x y t x y x 2 x y 2 y printf 改变后的x和y的值分别是 d d n x y returnt 二 函数嵌套调用在一个子函数中调用另一个函数称为函数嵌套调用 例2 P125例4 14 从键盘输入一正整数limit limit 6 验证从6到n之间的所有偶数都可以分解为两个奇素数之和 例如98 19 79 include include includevoidmain void intprime intm intn a b limit clrscr while 1 printf nInput1number 6 n scanf d for n 6 n limit n 2 for a 3 a n 2 a 2 if prime a b n a if prime b printf d d d n n a b break getch 判断一个数是否为素数 intprime intm inti k k sqrt m 1 for i 2 i k i if m i 0 return0 return1 BYEBYE TheCProgrammingLanguage 第12讲函数 2 一 函数递归调用在一个函数中 如果直接或间接调用自己 则称为递归调用 如 intf intn if n 1 return0 returnf n 1 n 例1 逆序输出一个整数的各位数字 includevoidmain void voidprintd longn longn scanf ld voidprintd longn if n 0 putchar n n putchar n 10 0 if n 10 printd n 10 二 局部变量和全局变量1 在函数内部定义的变量称为局部变量 2 在函数外部定义的变量称为全局变量 说明 1 局部变量只在函数内部起作用 函数结束时 所占内存空间被释放 2 全局变量在定义它的后面任一个函数中都起作用 3 全局变量与局部变量同名时 使用局部变量 4 函数的虚参视同局部变量 例2 P113例4 7 分析程序运行结果 includeinty z voidmain void voidabc intx intx x 10 y 20 z 30 printf ok1 x dy dz d n x y z abc x printf ok2 x dy dz d n x y z voidabc intx inty printf ok3 x dy dz d n x y z x 100 y 200 z 300 printf ok4 x dy dz d n x y z 例3 P126例4 15 输入100个整型数 寻找其最大值和最小值 include includeintMax Min voidmain void voidfind inta intn intdata 100 i clrscr for i 0 i 100 i scanf d 查找数组中的最大值和最小值 voidfind inta intn inti Max Min a 0 for i 1 iMax Max a i if a i Min Min a i BYEBYE TheCProgrammingLanguage 第13讲指针 1 一 指针变量1 指针概念与定义表示某个变量所在内存地址的变量称为指针变量 简称为指针 指针变量的说明方法 例 inta p p1 s是指向字符型数据变量的指针 2 指针运算符 1 取变量的地址例p a 2 取出或改变指针所指向的变量之值 例int p a a 10 p 3 指针可以加上一个整型量 以便指向另一个变量 例 intd 11 p 4 两个同类型的指针可以进行减法运算 例 intd 100 p1 p2 m p1 d p2 m的值等于p1与p2相距的整型变量的个数 即m 8 3 说明 1 指针的类型与其代表的变量的类型必须相同 例 int p i float pf f p i是合法的而p f是非法的 2 指针必须先赋值后使用 例如 int p p p 2 是非法的 3 数组名及函数名可代表其所在内存的开始地址 4 函数调用中的虚参使用指针时 将双向传递变量的值 例1 P146例5 11 交换两个变量的值 includevoidmain void voidswap int x int y inti j printf 输入两个整数 scanf d d voidswap int x int y intp p x x y y p 例2 将三个数排序 includevoidmain void voidsort int q1 int q2 int q3 inta b c printf 输入三个整数 scanf d d d voidsort int q1 int q2 int q3 voidswap int x int y if q1 q2 swap q1 q2 if q1 q3 swap q1 q3 if q2 q3 swap q2 q3 voidswap int x int y intp p x x y y p BYEBYE TheCProgrammingLanguage 第14讲指针 2 一 指针与一维数组设有定义 inta 100 p指针赋值方法 p a 0 或p a元素a i 引用方法 p i 或p i 例1 P139例5 5 用四种方法打印数组中的元素 include includevoidmain void inti c 10 20 30 40 int cp c clrscr for i 0 i 3 i printf d c i printf n for i 0 i 3 i printf d c i printf n for i 0 i 3 i printf d cp i printf n for i 0 i 3 i printf d i cp i printf n getch 二 指针与二维数组 设二维数组为inta m n 指针变量为p1 指针变量指向二维数组首地址指针说明方法 int p 指针赋值方法 p 元素a i j 引用方法 p n i j 例2 includevoidmain void inta 2 3 p inti j p for i 0 i 2 i for j 0 j 3 j printf 4d p 3 i j printf n 2 指向数组的行指针变量 1 指针说明方法int p n 2 指针赋值方法p a 3 第i行元素的首地址 即a i 0 的地址 p i 或p i 4 元素a i j 引用方法 p i j 或 p i j 或p i j 或 p i j 例3 P141例5 7 用二维数组指针变量输出二维数组中的每个元素 include includevoidmain void inta 3 4 1 2 3 4 5 6 7 8 9 10 11 12 int p 4 inti j clrscr p a for i 0 i 3 i for j 0 j 4 j printf 2d p i j printf n getch 三 指针数组 相同类型指针的集合称为指针数组 例4 P144例5 10 输出数组的值 includevoidmain void inta 2 3 1 2 3 4 5 6 p 2 inti j p 0 a 0 p 1 a 1 for i 0 i 2 i for j 0 j 3 j printf 4d p i j printf n 元素a i j 引用方法 p i j 或 p i j 或p i j 或 p i j BYEBYE TheCProgrammingLanguage 第15讲指针 3 一 指针与字符数组 例1 P143例5 9 不断输入字符串a 直到它与已知字符串p相等为止 若不相等 则提示是比p大还是小 include includevoidmain void char p 12345678 a 10 pa pp flag clrscr while 1 gets a pp p pa a flag m while pp 0 if pa pp flag g break if pa pp flag l break pa pp if flag m 二 函数与指针一个函数可以返回一个指针值 例2 P147例5 12 求字符串的左子串 include include include includevoidmain void char left char s intn char p s 100 s1 10 intn strcpy s 1234567890 gets s1 n atoi s1 p left s n gotoxy 1 1 printf s n s s p free p char left char s intn char t intl l strlen s 1 t malloc l strcpy t s if n l t n 0 returnt 例3将字符串中的每一个字符循环向右移动若干位 include include includevoidmain void voidMoveStr char s intn chars 101 intn printf source gets s printf Howmanycolumnyouwanttomove scanf d voidMoveStr char s intn chard p intLenth Lenth strlen s p s Lenth 1 d p for p s p p p 1 p d n if n MoveStr s n BYEBYE TheCProgrammingLanguage 第16讲结构与联合 一 结构1 结构体定义struct 例 structdate intyear month day 例 structstudent charname 9 sex 3 intage structdatebirthday 2 结构体变量说明 1 structdate intyear moth day structdated1 d2 2 structdate intyear moth day d1 d2 3 struct intyear month day d1 d2 3 结构体成员访问 例1 P159例6 1 结构体在程序中的使用 include include includestructstudent longnum charname 20 charsex floatscore voidmain void structstudentstu1 clrscr stu1 num 200402L strcpy stu1 name ZhangHong stu1 sex f stu1 score 92 5f printf num ldname s n stu1 num stu1 name printf sex cscore 5 2f stu1 sex stu1 score getch 二 结构体与指针1 结构型指针变量说明struct 如 structstudent p 2 成员引用 指针变量 成员名或指针变量 成员名 例2 P167例6 7 计算一组学生的平均成绩和不及格人数 include includestructstudent longnum char name charsex floatscore structstudentstu 5 200401L Zhouping M 65 4 200402L Zhangping M 72 5 200403L Liufang F 95 5 200404L Chengling F 87 200405L Wangming M 58 2 voidmain void structstudent ps voidave structstudent ps clrscr ps stu ave ps getch voidave structstudent ps intcount 0 i floatave sum 0 for i 0 iscore if ps score 60 count 1 printf s f n sum ave sum 5 printf ave f ncount d n ave count 三 联合定义方法 union 如 unionabc inti chara b 例3 P172例6 9 分析程序运行结果 includevoidmain void union longi intk charc s 10 x x i 0 x12345678L printf k x n x k printf c c n x c printf s x t x t x s 0 x s 1 printf x t x n x s 2 x s 3 BYEBYE TheCProgrammingLanguage 第17讲顺序文件 一 文件分类1 按存取方式分类 1 顺序文件只能按顺序读取 改写文件中的数据 若按读方式打开文件 则只能读取数据 而不能修改数据 反之 若按写方式打开文件 则只能写数据 而不能读数据 2 随机文件无论按何种方式打开文件 既能读取数据 也能修改数据 2 按存储格式分类 1 文本文件这种文件在磁盘中存放时每个字符对应一个字节 用于存放对应的ASCII码 例如 数5678的存储形式为 ASCII码 00110101001101100011011100111000 十进制码 5678 2 二进制文件二进制的编码方式来存放数据 例如 数5678的存储形式为 0001011000101110只占二个字节 二 顺序文件存取方法1 定义文件指针变量FILE fpfp为文件型指针 2 打开文件FILE fopen char fname char mode mode常用值 w 写文本文件r 读文本文件wb写二进制文件rb读二进制文件wb 随机读 写二进制文件rb 随机读 写二进制文件 3 关闭文件fclose fp 4 输出字符串fputs char s FILE fp 将串s输出到文件fp中 5 读取字符串fgets char s intn FILE fp 从文件fp中读取n 1个字符送到s中 读到换行符 ASC码为10 时 将自动结束读取 6 格式化输入与输出 1 fscanf fp 格式串 数据 2 fprintf fp 格式串 数据 7 检测文件是否结束intfeof FILE fp 文件结束时返回1 否则返回0 例1 生成若干随机数并存储到磁盘中 include include includeintGetData intd voidDisplayData intd intn voidSaveData intd intn char fname intLoadData int p char fname voidmain void intn d 101 chars 41 n GetData d DisplayData d n gets s SaveData d n s n LoadData d s if n DisplayData d n intGetData intd intn i do printf Inputnumberofdata scanf d voidSaveData intd intn char fname FILE fp inti fp fopen fname w if fp printf savefail return for i 1 i n 1 i fprintf fp d d i fclose fp intLoadData int p char fname FILE fp intn fp fopen fname r if fp printf readfail return0 n 0 while feof fp fscanf fp d p n fclose fp returnn voidDisplayData intd intn inti for i 1 i n 1 i printf 6d d i if i 10 0 printf n puts n BYEBYE TheCProgrammingLanguage 第18讲随机文件 一 二进制文件存取函数 1 读取数据原型 longfread void p longsize longn FILE fp 功能 按照二进制数据格式读取n项数据 每项数据占size个字节 存储到由指针p指向的存储区中 函数返回实际读取的数据项数 2 存储数据原型 longfread void p longsize longn FILE fp 功能 按照二进制数据格式将指针p指向的存储区中n的n项数据存储到文件中 函数返回实际存储的数据项数 例1 生成一个二进制文件 然后修改其中的某一项 include includeintGetData intd voidDisplayData intd intn voidSave intd intn char fname intLoadData int p char fname intCorrectData char fname voidmain void intn d 10001 chars 41 n GetData d DisplayData d n printf Filename gets s Save d n s if CorrectData s return n LoadData d s if n DisplayData d n intGetData intd intn i scanf d voidDisplayData intd intn inti for i 1 i n 1 i printf d d i puts n voidSave intd intn char fname FILE fp inti fp fopen fname wb if fp return fwrite intCorrectData char fname chars 21 Temp txt FILE fpr fpw inti n p data x fpr fopen fname rb if fpr return0 fread fpw fopen s wb if fpw fclose fpr return0 printf correctwhichitem newdata scanf d d fwrite for i p 1 i n 1 fpr fopen s rb if fpr return0 fpw fopen fname wb if fpw fclose fpr return0 while feof fpr fread fclose fpr fclose fpw return1 intLoadData int p char fname FILE fp inti n fp fopen fname rb if fp return0 fread n i 1 fclose fp returnn 二 随机文件 1 文件指针定位原型 intfseek FILE fp longoffset intwhence 功能 将文件指针移到由whence所确定的位置开始 偏移offset个字节的位置处 定位成功时函数返回0 否则返回非0值 whence 0 或SEEK SET 文件首1 或SEEK CUR 当前位置2 或SEEK END 文件末尾 例2 修改二进制文件中的某一项 intCorrectData char fname FILE fpr intoffset n p data fpr fopen fname rb if fpr return0 fread printf whichitem newdata scanf d d offset p 1 2 fseek fpr offset SEEK SET fwrite 例3 分析下面程序的功能 include includevoidmain void FILE fp inti x if fp fopen d intb1 dat rb NULL printf filecannotopen n exit 0 for i 0 i 3 i fseek fp 2 i sizeof int 0 fread fseek fp 2L sizeof int SEEK END fread BYEBYE TheCProgrammingLanguage 第19讲位运算与预处理命令 一 位运算1 按位或运算符为 运算规则 0 0 0 0 1 1 1 0 1 1 1 1 例1 P220例9 1 设字符变量a 3 b 5 求a b 2 按位与运算符为 运算规则 0 0 0 0 1 0 1 0 0 1 1 1 例2 P221例9 2 设字符变量a 3 b 5 求a b 3 按位异或运算符为 运算规则 0 0 0 0 1 1 1 0 1 1 1 0 例3 P222例9 5 设字符变量a 57 b 42 求a b 00111 01 0010101 0001 011 4 位取反运算符 运算规则 1 0 0 1 例4 P223例9 8 对有符号整型变量i 100和无符号整型变量j 100分别进行取反操作 0000000001100100 1111111110011011 i 101 j 65435 5 移位运算符 运算规则 将二进制数向左移位 右边补0 例5 设a 60 b 135求a 2 b 1 a 2 00111100 2 2 11110000 2 240b 1 10000111 2 1 00001110 2 14 6 右移位运算符 运算规则 将二进制数位向右移动 最高位为 时左边补0 最高位为 时补1 例6 设a 60 b 135求a 2 b 1 a 2 00111100 2 2 00001111 2 15b 1 10000111 2 1 11000011 2 195 例7 P225例9 13 从键盘输入一个正整数 输出由8 11位构成的数 includevoidmain void intnum mask x printf Inputaintegernumber scanf d num 8 mask 15 x num 二 预处理命令 2 文件包含 1 绝对路径查找 include该命令表示在TC INCLUDE中去查找指定的文件 并将该文件添加到源文件中 2 相对路径查找 include 文件名 先在当前目录中查找文件 未找到时再到TC INCLUDE中去查找 2 宏定义 1 无参宏语法 define字符串如 definePI3 14 2 有参宏 define 字符串 如 defineM x x 1 defineS y y y definemax a b a b a b 例8 P236例10

温馨提示

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

评论

0/150

提交评论