c语言程序设计21第二十一讲(总复习).ppt

上传人:xin****828 文档编号:7181693 上传时间:2020-03-15 格式:PPT 页数:80 大小:505.50KB
返回 下载 相关 举报
c语言程序设计21第二十一讲(总复习).ppt_第1页
第1页 / 共80页
c语言程序设计21第二十一讲(总复习).ppt_第2页
第2页 / 共80页
c语言程序设计21第二十一讲(总复习).ppt_第3页
第3页 / 共80页
点击查看更多>>
资源描述
你到C 仅一步之遥 高级语言程序设计 主讲教师 贾彩燕计算机与信息技术学院计算机科学与技术系cyjia 考试 时间 1月6日14 30 16 30地点 SY210 答疑 时间 1月5日14 00 18 00地点 九教北509或507 考试题型及分数分布 选择题 15题 每题2分 共30分 读程序写结果 5道题 共20分 程序填空 4道题 10个空 每空2分 共20分 编程题 3道题 共30分 总成绩 平时成绩 30 考试成绩 70 两点提示 读程序细心一些编程题不要空着 能写多少写多少 课程内容 第一章程序设计和C语言第二章数据对象与计算第三章变量 函数和控制结构第四章基本程序设计技术第五章C程序结构 函数 第六章数组第七章指针第八章文件和输入输出第九章结构和其它数据机制第十章程序开发技术第十一章标准库 重点 数据 控制 数据C数据类型及存储性质控制结构顺序 选择 循环结构函数定义 声明及调用数组一维数组 字符数组指针数组与指针的关系结构结构的定义及使用链表的定义及操做 文件文件的打开 关闭文件的读写从问题到程序的编程思想程序的函数分解模块化程序设计 难点 递归指针数组与指针的关系命令行参数动态内存分配链表 要点1 算法及其表示方法 程序 数据结构 算法程序程序规定了计算机执行的动作和动作的顺序 算法 解决问题的方法和步骤算法的几个特性有穷性确定性 无二义可执行性有0个或多个输入有0个或多个输出 要点2 运算符及表达式 运算符 表达式及其优先级关系一元运算符 优先级最高 自增 自减运算符 循环每年必考 算术运算符 和 关系运算符 考点 逻辑运算符 考点 位运算符条件运算符赋值运算符逗号运算符 例1 inta 1 b 10 do b a a while b 0 执行完之后b的值是 8 b a 2 5 a 4 a 15 b 40 intx 10 y 3 z 则语句printf 4d n z x y x y 输出什么 3 例2 判断char型变量ch是否为大写字母的正确表达式是 A A A ch A ch ch C 例3 按位与运算 inta 7 b 12 c a变量c的值是 A 19B 4C 5D 9B 例4 假设a b为int型变量 执行语句a 10 b a 10 a a 之后 a b的值为 A 11 10B 9 11C 10 11D 9 9A 要点3 C语言的基本数据类型 标识符 关键字 常量 变量C语言的基本数据类型int float double char变量的存贮类型及其作用域autoregister 不常用static 循环考点 extern 例5 下面程序的输出结果是 intmain inta 2 i for i 0 i 3 i printf d n f a A 7B 7C 7D 789107911137 A intf inta intb 0 staticintc 3 b c return a b c 例6 已知c为字符型 则执行c2 A 6 3 后 c2中的值为 A BB 68C 不确定的值D C注意 字符型数据可以看作整型数据B 要点4 条件if语句 条件if语句的三种形式Ifelse语句和switch开关语句的差别switch开关语句的形式swith 常量表达式 case表达式1 语句 break case表达式2 语句 break default 语句 例7 以下程序的输出结果是 intmain inta 0 i for i 0 i 4 i switch i case0 case3 a 2 break case1 case2 a 3 default a 5 printf d n a 20 要点5 循环语句 循环语句的三种常见形式循环结构的三要素 循环不变关系如何从循环中跳出breakcontinue常见问题及算法累加 累乘函数的极数展开逼近 累加 累乘 方程求根 递推逼近 求最大约数和最小公倍数 递归和递推 Fibonacci数列 递归和递推 求100以内的素数 求水仙花数等等 例8 有下面程序段 inti j r for i 20 j 7 r i j i j j r continue printf 3d j 运行结果是 1 例9 完成下列程序段 任意输入一个数m 判断是否是素数 intmain intm i k k sqrt m 1 for if m i 0 break if printf disaprimenumber n m elseprintf disnotaprimenumber n m include includeintmain intm i k scanf d 例10 以下函数针对长度为Len的整型数组narr采用冒泡排序法进行非递减排序 请补全程序 intBubbleSort intnarr intLen inti j intTemp if Len 0 return 1 for i 0 i Len i for j 0 j Len i j if 判断大小关系 Temp narr j 交换元素 return0 intBubbleSort intnarr intLen inti j intTemp if Lennarr j 1 判断大小关系 Temp narr j 交换元素narr j narr j 1 narr j 1 Temp return0 要点6 函数 函数的定义 声明及调用intmax inta intb 函数头 函数接口 intmaxvalue 函数体maxvalue a b a b returnmaxvalue 函数返回值 函数可无返回值 函数声明的原则和意义函数接口及设计函数定义和使用者内外部的观点函数的参数传递单向传递双向传递 几种常见错误 1 函数嵌套定义 intmain intmax intx inty returnx y x y 解决方案 将函数的定义放置在其他函数之外 不允许嵌套定义 intmax intx inty returnx y x y intmain inta 10 b 8 max a b 几种常见错误 2 某函数的定义在调用该函数的函数之后 intmain inta 10 b 8 max a b intmax intx inty returnx y x y 解决方案 将函数的定义放置在调用该函数的函数之前或者声明该函数的存在 intmax intx inty returnx y x y intmain inta 10 b 8 max a b intmax intx inty intmain inta 10 b 8 max a b intmax intx inty returnx y x y 几种常见错误 3 调用函数时将数据类型也写上 intmax intx inty returnx y x y intmain inta 10 b 8 max inta intb 解决方案 只有在定义和声明的时候需要写上数据类型 无论是参数或者是返回值 而在调用时则只需要写函数名以及变量 intmax intx inty returnx y x y intmain inta 10 b 8 max a b 几种常见错误 4 将数组作为参数时 intfind inta returna i intmain inta 10 printf d n find a 解决方案 数组作为参数时只需将数组名作为实际参数 a 10 是其中一个元素 a 只在几种情况下有意义 1 定义数组时不标明数组大小 通过初始化的元素个数确定数组大小 2 定义或声明函数时 intfind inta returna i intmain inta 10 printf d n find a 函数参数的意义 函数最重要的有四部分 函数名字 函数返回值类型 函数参数 函数体 对于调用某一个函数的函数 称为主调函数 而言 前三部分是需要关注的 简单来说 主调函数A将参数传递给某函数B B通过计算得到返回值 将返回值传递给主调函数A intmax intx inty returnx y x y intmain inta 10 b 8 intc max a b printf d n max a b voidswap int p int q intt p p q q t intmain inta 10 b 8 swap a b printf 4d 4d n a b 只需通过返回值返回结果 需要通过参数返回结果 C语言的参数机制称为值参数 简称值参 f内对a和b的操作与m和n没有任何关系 例11 以下是递归求最大公约数的函数 请补充intgcd intm intn if m n elseif m n else intgcd intm intn if m n returnm elseif m n returngcd n m elsereturngcd m n n 要点7 基本输入输出语句 getchar putchar scanf printf gets puts 数的批量输入输出 基本输入输出 循环结构 例12 intm scanf d a是int型变量 c是字符变量 scanf c c 输入70之后结果是 7 例13 输入一批数据 采用循环固定次数for i 0 i n i scanf 采用scanf的返回值inta 10 i 0 while scanf d 其他类型的数字类似 但是如果输入字符串时 无法通过scanf返回值是否等于1来确定 因为数字也可作为字符串的内容 判断scanf是否返回EOF作为输入结束的条件 要点八 数组 数组名是数组在内存中的首地址数组下标从0开始一维数组上的重要操作排序查找插入删除位置交换统计 求最大值 平均值等 常见问题及算法筛法求素数等多项式求值二维数组的定义及存储方式行主序二维数组可以视为特殊的一维数组初始化方法二维数组的使用矩阵相加 相乘 转置求最大元素 求鞍点等 字符数组和字符串的关系字符串结束标志字符数组初始化字符串求长字符串拷备字符串拼接处理字符串的常用函数strcpy strcmp strcat strlen strstr 注意 不允许给字符数组直接赋值charstr 10 str bjtu 要点九 指针 变量和地址取地址运算符和取内容运算符指针做函数参数 传地址 形参 实参都是变量内容交换形参 实参都是地址地址交换数组做函数参数的本质 指针和数组的关系一级指针和一维数组p arr int p arr 10 下标法指针地址法指针法字符指针和字符数组p str char p str 10 p bjtu 指针和二维数组p 指针要点 inta p 是错误的 指针要点 inta 10 20 a是一个二维数组 实质上也可把a当作一个一维数组 只不过a数组中的每一个元素是一个一维数组 因此 a 1指的是a数组中的第二个元素 即a的第二行的地址 而 a 1 指的是第二行第一个元素的地址 因此 a 1 2是第二行第三个元素的地址 a 1 2 是第二行第三个元素的值 intc int x int y 定义了一个函数c 形式参数为x和y 均为整型指针类型 在调用函数c时 可以用数组名作为实际参数 也可以用指针作为实际参数 指针要点 int p p是一个整型指针 scanf d p 运行错误 因为p这个指针 不知道指向哪儿 两种方法 1 inta p 即 使用指针时一定要注意指针指向哪个变量或者哪块内存 如果没有令该指针指向一块内存 则无法访问该指针所指向的变量的值 即 p 数组与指针的实质 看见指针p或者数组a就要知道是一个地址 与普通变量不同 字符数组与字符指针 chara 20 char p Programming a不能改变自身的值 p指向一个字符串常量 无法通过 p修改p指向的字符串常量的值 即 允许a 0 Q 或者 a Q 不允许charb 20 a b 即 允许p a 不允许 p Q 或者p 0 Q 为何普通变量作为函数参数时不能改变主调函数中形式参数的值 而指针或者数组就可以呢 例14 下面程序的运行结果是 voidswap int a int b int t t a a b b t intmain intx 3 y 5 p A 3 5B 5 3C 3 3D 5 5 A 例15 以下程序的输出结果是 include includeintprintlength inta printf d n sizeof a return0 intprintlength2 char a printf d n strlen a return0 intmain inta 10 char b helloworld printlength a printlength2 b 411 下列程序段的输出结果为 inta 6 7 8 9 10 ptr a ptr 2 2 printf d d n ptr ptr 2 A 8 10B 6 8C 7 9D 6 10D 例16 例17 设以下程序生成可执行文件test exe 当键入testCProgrammingExam后的输出结果是 includeintmain intargc char argv inti printf d argc for i 0 i argc i printf Args d s n i argv i return0 要点十 动态内存分配 C程序中内存的分配程序区数据区栈 动态存储区 堆 动态存储区 静态存储区常量区动态内存分配和指针malloc calloc realloc 动态内存分配时要防止空指针if p NULL 要点十一 文件 文件的打开与关闭FILE fp charfname file txt fp fopen fname w fp fopen file txt w fclose fp 文件的读写fgetc fputc fgets fputs fread fwrite 文件的格式化读写fscanf fscanf fp d fprintf 文件的定位rewind fseek ftell 要点十二 结构与链表 结构的定义及使用会定义学生结构 会结构上的输入 输出 统计操作共用体的定义及使用链表的定义和其上的操作创建插入删除遍历 统计 例18 设有n个人围成一个圆圈 从编号为m的人开始由1开始报数 每次正好报到数k的人退出游戏 后面一个人重新由1开始报数 请求出最后剩下的那个人的编号 如何用链表实现 解题思路 首先建立一个单向链表 每一个人是一个节点 单向链表的结构 不停往后报数 直到报到k就删除当前节点直到最后只剩下1个节点 单向链表的结构 structperson intnum structperson next 最初状态 假设n 7 m 2 k 3 head 2next 3next 4next 5next 6next 7next 找到第一个报到3的人 head 2next 3next 4next 5next 6next 7next 第一个报到3的人出列 即删除该节点 head 2next 3next 5next 6next 7next 找到第二个报到3的人 head 2next 3next 5next 6next 7next 第二个报到3的人出列 即删除该节点 head 2next 3next 5next 6next 找到第三个报到3的人 head 2next 3next 5next 6next 第三个报到3的人出列 即删除该节点 head 2next 5next 6next 找到第四个报到3的人 head 2next 5next 6next 第四个报到3的人出列 即删除该节点 head 2next 5next 6next 找到第五个报到3的人 head 2next 5next 6next 第五个报到3的人出列 即删除该节点 head 2next 5next 找到第六个报到3的人 head 2next 5next 第六个报到3的人出列 即删除该节点 5next head 只剩下一个节点 5next 判断只剩下一个节点 head next head 输出结果 head num head 涉及到的几种链表操作 构造链表删除链表节点插入链表节点遍历链表节点 构造链表 n 7一个循环 总共循环7次 每次构造一个节点 并将新构造的节点插入到链表的最后 while i 0 inext p q p 6next 5next q p 构造链表 用函数实现 参数为人数n 返回值为structperson structperson constructlink intn structperson p NULL q NULL head for i 0 inum i 1 if NULL q q next p elsehead p q p q next head returnhead 删除链表节点 删除p节点 让q的next指向r q next r free p 6next 5next q p 7next r 5next q 7next r q next p next free p 删除链表节点 用函数实现 参数为structperson p 需要删除的节点 structperson q p的前一个节点 返回值void voiddeletenode structperson p structperson q q next p next free p return 遍历链表节点 用函数实现 参数为structperson p 返回值void voidprintlink structperson head structperson p head do printf 4d p num p p next while p head return intmain structperson head s intn m k count 0 i printf inputthenumbern m k scanf d d d 要点十三 编译预处理 编译预处理的目的 意义常用的编译预处理 define include ifdef else endif类型定义及其使用typedef 有如下程序段 运行之后的输出结果是 definesquare x x xintx 2 y 3 printf d square x y A 25B 11C 10D 15B 例19 例20 以下对结构体类型变量的定义中 不正确的是 A typedefstructaa intn floatm AA AAtd1 B struct intn floatm aa structaatd1 C defineAAstructaaAA intn floatm td1 D struct intn floatm td1 B Q A
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!