c语言与程序设计(编辑修改稿)内容摘要:

()。 } /* 成绩输入 模块代码 */ int input() { for(i=0。 i3。 i++) for(j=0。 j4。 j++) scanf(“ %d,” ,s[3][4])。 } /* 求平均成绩 模块代码 */ int average() { int sum。 for(i=0。 i3。 i++) { sum=0。 for(j=0。 j4。 j++) sum+=s[i][j]。 ave[i]=sum/4。 } } /* 输出平均成绩 模块代码 */ int output() { for(i=0。 i3。 i++) printf(“ %f” ,ave[i])。 } 26 来提高自己软件开发的能力。 五 、 模块结构化 编程 的 指导原则 为了让学生能达到最佳的项目编程效果,以下提供几条适于模块结构化编程的指导原则,可供学生参考。 模块应有一个入口点和一个退出点。 如图 32中的控制流从各模块的顶部流入,从底部返回处退出。 每个模块只执行一个任务。 例如在计算学生平均成绩的示例中成绩输入、求平均以及输出计算结果是三个不同的任务,应 分别处理,不要将无关的任务放于同一模块中,只将完成同一任务的语句组合在一起。 编程注意事项: 程序应有自我记录。 即可利用描述变量、模块和函数的标识符 利用注释记录代码,并说明特殊或复杂的处理 利用简单的代码编写结构 利用注释标识模块和函数 每个模块包含的语句不应超过 20条 以上列出的编程指导原则只要大家理解了,是不难做到的,真诚地希望参与本实验的学生一定会在更短的时间内编出高质量的程序来 ,到那时,你一定能够享受到模块结构化编程所带来的如下所说的好处: (1)更易于维护 程序。 即便于更新或修改。 (2)更易 于设计和编写程序,开发期间出现的错误将大量减少。 (3)程序的可靠性更高,生产运行期间出现的错误将大量减少。 (4)更易于其他人(甚至是不熟悉程序的人)读取和理解程序。 (5)更易于测试调试程序。 (6)更易于编写和维护文档。 27 六 、 项目编程 矩阵运算。 请输入一个 3 行 3 列矩阵的所有元素,然后输出两条对角线元素之和。 (1)要求: ① 该程序应由一个主函数和 3 个子函数构成,子函数分别完成矩阵元素输入、两条对角线元 素求和、输出结果。 ② 画出层次图、程序流程图及源代码清单。 (2)相关知识 :矩阵运算。 在软件开发中,矩阵是一种常见的数据组织形式,在语言上矩阵与二维数组相对应,故通常总是用二维数组存储矩阵元素。 有时在试题中会给出计算公式。 因此 ,计算过程中的主要工作是核对下标。 与矩阵相关的主要问题包括: ① 计算矩阵的 对角线元素 之和(此时矩阵为方阵, M=N,对角线可以是一条或两条,通常为一条,即主对角线); ② 计算矩阵的 周边元素 之和,即四 周的元素和; ③ 矩阵的 上三角 或 下三角 之和; ④ 两矩阵之和矩阵 ,即将两个矩阵的各个元素对应求和; ⑤ 矩阵及其 转置矩阵 之和; ⑥ 两矩阵的乘积 矩阵。 (3)本项目设计 步骤 : ① 项目层次图 图 33 矩阵运算层次图 28 ② 请完成其它三个子 模块的程序流程图 图 34a 主程序流程图 图 34b 输入矩阵元素程序流程图 图 34c 矩阵运算程序流程图 图 34d 打印输出程序流程图 29 ③ C 源代码 清单 30 将下列给出的城市名列表按 降 序排 序。 Atlanta Boston Chicago Denver Hoston LosAngeles Miami NewYork (1) 项目 要求: ① 可利用 StrCmp()、 StrCopy()函数。 ② 该程序应由一个主函数和 2个子函数构成,子函数分别完成 城市名列表的排序和输出排序后的城市名列表。 ③ 画出层次图、程序流程图及源代码清单。 (2) 相关知识: ① StrCmp():字符串比较函数。 格式: strcmp(字符串 1,字符串 2) 说明: 函数结果可由如下函数值得出: 字符串 1=字符串 2,函数值为 0; 字符串 1字符串 2,函数值为一正整数; 字符串 1字符串 2,函数值为一负整数; ② StrCopy():字符串复制函数 格式: strcpy(字符 数组 1,字符串 2) 功能 : 将字符串 2 复制到字符数组 1 中。 (3)请画出 main 函数与城市名表列排序和打印输出函数的流程图。 (4)程序流程图 31 (5) C源代码清单 32 请设计一个 fun函数,其功能是给一维数组输入任意 4个整数后,应如下规律输出。 如输入整数 1,2,3,4,则程序运行后将输出以下方阵: 要求: ① 该程序由一个主函数和 一个 fun 函数组成 ② 按以下给出 程序结构填写 fun 函数中的 C代码 define M 4 main() { int a[M]。 fun(a)。 } int fun(int a[]) { int i,j,k,m。 for(i=0。 iM。 i++) scanf(“ %d” , amp。 a[i])。 } 33 七 、 思考题 : (1) 函数都有哪些调用方式。 解答: (2) 参数在进行信息传递时,都具有哪些传递方式,各有什么特点(即实参与形参的传递)。 解答: (3) 根据你对局部变量和全局变量的理解 , 在什么情况下用 局部变量 合适,在什么情况下用 全局变量 合适。 解答: (4) 从课堂的教学以及上机的实践教学中,你是如何理解模块化程序设计的。 为什么提倡模块化。 (如果你没有充分理解的话,可去书店或上网查阅有关这方面 的资料,一定弄清楚这个问题。 ) 解答: 34 九 、 课外 选做题: 请编写一个 fun 函数,用于计算给定整数 num 各位数字之积。 例如,若输入 252,则应输出结果是, 20;输入 202,输出结果是 0。 设某学校在校生的年龄在 17岁到 23岁, 请编写一个 fun 函数,用于统计该校 5000 人各年龄的人数。 请编写 fun 函数,在下列给出的一个有序的数列中插入一个数,且当该数插入后,应使该数列仍然有序。 60, 68, 78, 88, 90, 93, 95, 96, 98, 100 35 实验 4 指针与链表 一、实验学时: 4 二、实验目的: 深刻理解 指针 的 特点和作用 学习 并应用 指针来设计算法 学习和掌握 利用指针对内存进行动态分配 学习和掌握 指针 的 编程技巧 三、必须学习和 掌握 的知识点: 指向变量的指针变量 指向 数组和多维数组 的指针变量 指向 函数 的指针变量 指向字符串的指针变量 指针数组 用指针处理链表 四 、 主要 知识点讲解 内存的动态分配 : 动态内存管理使程序员可以在程 序运行过程中随时申请一块空闲内存,在使用后即可释放。 比较之下,它比程序中定义的变量或数组更能灵活有效地使用并节约内存。 因为程序中变量或数组一经定义,即使不再使用也必须占用内存。 动态内存管理函数: (1) malloc 函数的一般使用格式 (类型 *)malloc(字节数 ) 以字节数为单位,动态分配存储空间。 当存储空间被分配成功时,将返回的是该内存块的首地址,否则返回值为 0。 例如, float *p。 p=(float *)malloc(5*sizeof(float))。 上述语句表示, malloc 函数动态分配到了 5 个内存块,每个内存块为 4 36 个字节(即实型数 的存储长度 ),并且指针变量 p将指向的是 5个内存块的首字节的地址。 见图 41所示。 图 41 指针 p指向 5个内存块的首地址 (2) free 函数的一般使用格式 free(动态分配的内存 块 首地址 ) 其作用是释放掉由 malloc 函数分配的内存空间,也就是将该内存空间归还给系统,以便另行分配使用。 例如, float *p。 p=(float *)malloc(5*sizeof(float))。 free(p)。 指向变量的指针变量 , 示例 : float a,*p1。 p1=amp。 a。 图 42 指针 p指向变量 a的首 字节 地址 变量 a 所占用的存储空间是由 4个字节组成,如果假设地址编号是从2020开始,则变量 a所占用内存的地址编号应该是 2020,2020, 2020, 2020,而指针 p中所存放的地址编号是 2020,也就是变量 a的首 字节 地址。 指向一维数组和多维数组的指针变量 , 示例 : float a[3],b[2][3],*p1,(*p2)[3]。 p1=a。 p2=b。 图 43a 指针 p1指向数组 a的首 地址 37 指针 p1 被定义为是指向一维数组的指针变量。 如果执行了 p1=a;该指针变量 p1 具有 的是 一维数 a 的首地址 ( C 语言规定,数组名代表地址常量,即该数组的首地址) , 见图 43a。 如果该首 地址编号是 FFB6, 则 a代表的是 FFB6。 而 当执行 p1++时,也就是让指针 p1 向高字节方向增加 1时,相当于增加 4个字节的长度,此时, p1 将具有 a[1]元素的地址,地址编号是 FFBA, 见图 43b 所示, 依次类推。 图 43b指针 p1指向 a[1]元素的地址 指针 p2 被定义为是指向二维数组的指针变量 指针 ,也称为 p2 是行指针。 此时, p2 具有 二 维数 b 的 首地址,地址编号是 FFA6,见图 43c。 图 43c 指针 p2指向数组 b的首地址 如果此时 执行了 p2++操作时,也就是让指针 p2 向高字节方向增加 1 时,相当于增加 12个字节的长度 (就即相当于 p2具有了下一行的首列地址) ,也就是 a[1][0]元素的地址,地址编号是 FFB2,依次类推。 见图 43c 所示。 图 43d 指针 p2指向 b[1][0]元素 的地址 38 请同学们 思考 :若要求利用行指针输出上述 b数组中的所有元素的地址和所有元素值的话,则代码将如何编写。 指向函数的指针变量,示例 : int fun( ), (*p)( ),a=5,b=7,c。 p=fun。 …… 指针 p 具有函数 fun 的入口地址 (每个函数都有一个入口点,称该入口点即为该函数的入口地址) , 本例函数的入口 地址编号是 0046,见图44。 在 C语言中,函数的。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。