290 likes | 497 Views
程序设计基础. 先修课程:计算机文化基础. 辅导教师 杜彪 email: dubiao66@hotmail.com 个人主页 http://www2.ratvu.com/dubiao/. 网上资源. 浙江电大 《 程序设计基础 》 课程资料 http://beta.zjtvu.edu.cn/bmwy/jsj/jxzy/chenxd/cxsjjc/index.htm 瑞安电大的网上学苑 http://www.ratvu.com/jwff/ / 浙江电大在线 http://open.zjtvu.edu.cn/
E N D
程序设计基础 先修课程:计算机文化基础 辅导教师 杜彪 email: dubiao66@hotmail.com 个人主页 http://www2.ratvu.com/dubiao/
网上资源 • 浙江电大《程序设计基础》课程资料 http://beta.zjtvu.edu.cn/bmwy/jsj/jxzy/chenxd/cxsjjc/index.htm • 瑞安电大的网上学苑 http://www.ratvu.com/jwff// • 浙江电大在线 http://open.zjtvu.edu.cn/ • 瑞安电大杜彪老师个人主页 –课程学习http://www2.ratvu.com/dubiao/
程序设计基础导学 • 在学习本课程之前,先讨论一个问题:编一个程序,输入10个整数,找出10个整数中最大的数并输出。 例如有 45 68 32 -12 87 25 56 42 98 76
程序设计方法之一:分而治之 • 在计算机内存中定义存放10个整数的空间和存放最大数的空间; • 输入10个整数; • 找出10个整数中最大的数,并保存; • 输出这个最大的数。 所谓分而治之,是将一个大问题分解成若干个容易解决的小问题并解决它。对于这个问题可编写程序如下:
问题一:如何存放10个数 • 根据冯.诺依曼结构,程序和数据是事先存放在内存中的,所以这10个数是事先放在内存中; • 这10个数的数据类型相同,都是整数; • 这10个数顺序存放,一个紧接一个。
数据结构—程序设计的前提 • 数据结构包括逻辑结构和物理结构 • 逻辑结构——数据之间在逻辑上的关系,包括线性结构(线性表,栈,队列)和非线性结构(树,图) • 物理结构——数据在计算机中的存储结构,包括数组和链表 • 后续知识: • 数组可表示线性表,栈,队列,二叉树;二维数组可表示图; • 链表可表示线性表,栈,队列,树,图; • 数组和链表在表示数据的逻辑结构时各有优缺点。
A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] 数组—最常用的数据结构 • 数组是由若干个类型相同的元素组成;元素的类型决定数组的类型; • 每个数组有一个数组名; • 数组中元素在内存中是按顺序存放的,元素的顺序标号称为数组的下标; • C语言中数组的下标从0开始,最后一个元素的下标为n-1 (n是数组中元素的个数)。 例如,数组名为A,有10个元素,第一个元素为A[0];最后一个元素为A[9];
计算机语言—程序设计时人与计算机的交流工具计算机语言—程序设计时人与计算机的交流工具 • 所谓语言,是由一些符号根据一定的语法规则所组成的集合,人类的语言由句子组成,计算机语言由语句组成; • 计算机语言包括机器语言,汇编语言和高级语言三大类。机器语言由二进制的指令组成,可直接执行,但编写和阅读不方便;如果把机器指令和英文缩写一一对应,便形成汇编语言;于是,人们便发明了高级语言,用接近于英语和数学公式的方法来编写程序; • 高级语言不能直接执行,但可以将整个程序翻译成机器语言后再执行,这个翻译的过程称为编译;有些高级语言如BASIC可以逐条语句翻译并执行并为解释执行。
变量—程序中存放数据的基本单元 • 变量是一个命名的内存存储单元,在程序中可以修改内存变量的值。变量在使用前必须进行说明。如下面程序段计算表达式 2*(3+1) 和 表达式 3*(7-2)的结果: int r; r=2*(3+1); r=3*(7-2); • 其中语句: int r; 说明了一个整型的变量 r, 程序的第一次计算结果 8 存放在 r 中,后来 r 的值被改写成 15。: • 若要在键盘上输入r的值,使用语句: Scanf(%d,&r); 其中i表示输入的类型为整型。当运行到这条语句时,可从键盘上输入一个整数,程序会将这个整数的值保存到变量r指定的内存单元中。
C语言中数组的定义方法 • 说明数组的一般形式为: type name[size]; 其中type是数组元素的类型,除不能是void类型和函数之外,它可以是任何类型,size是个整常数,用于说明数组name中最多可存放多少元素,方括号是个数组类型说明符。例如:说明包含有10个 整数类型元素的数组A,使用如下的变量说明语句: int A[10]; • int表示整数类型,是integer的缩写。
数组中元素的引用 • 数组中元素的引用,使用表达式: 数组名[表达式] 其中“表达式”是一个整型表达式,其值表示某个元素的序号,例如数组A的10个元素为: A[0] , A[1] ,A[2] ,A[3] ,A[4] ,A[5] , A[6] ,A[7] ,A[8] ,A[9] 例如要取得A[2]的值放在变量m中,可使用: m=A[2]; : 若要将A[3]的值改为-12,,可使用: A[3]=-12;
讨论:如何输入数组中的元素 • 这么做行不行? 输入元素A [0]; 输入元素A [1]; 输入元素A [2]; 输入元素A [3]; 输入元素A [4]; 输入元素A [5]; 输入元素A [6]; 输入元素A [7]; 输入元素A [8]; 输入元素A [9];
循环—解决语句重复书写 • i从0到9重复做 输入A [i]; • 用C语言表达为: for (i=0;i<10;i++) scanf(%d,& A [i]); C语言中的另一种表达: i=0; while (i<10) { scanf(%d,&A[i]); i++; } 这样的表达清楚吗?
开始 i←0 i从0到9 i<10吗? N 输入A [i] Y 输入A [i] i←i+1 结束 流程图—描述算法的工具 • 算法是解决问题的步骤,用文字难以表达,最好用流程图 N-S图 (盒图) 输入数组A中10元素的程序流程图
定义整型数组A [10] 和变量m i从0到9 输入A [i] 求出数组A中的最大值存变量m中 输出m的值 主程序算法描述 • 输入10整数并输出其中最大值的算法盒图
输入10个数求最大数的主程序 • 前面已介绍定义变量和数组,及访问和输入数组元素的方法。下面给出主程序,其中/*到*/之间为注解,为了便于理解程序,预编译时会自动删去。 #include <stdio.h> int max(int A [] , int n); void main() { /*定义整型变量m用来存放最大值,数型数组A存入输入数据*/ int m,A[10]; int i; /*i用来存放循环变量*/ /*输出提示信息,提示用户输入*/ printf(“请输入10个整数,用空格或回车间隔:”); /*输入10个整数*/ for (i=0;i<10;i++) scanf(%d,&A [i]); /*求得最大值,放在变量m 中*/ m=max(A,10); /*输出结果m的值*/ printf(“最大的数为%d”,m); }
函数—模块化程序设计的主体 • 在上面这个程序中包括一个main函数,在main函数中调用了三个函数:sacnf, printf和max; • scanf函数用来输入数据;printf函数用来输出数据;这两个已经在头文件stdio.h中声明,是系统预定义的函数,用户在#include指令中指出头文件后可直接使用; • max函数需要用户自已定义,使用这个函数时要告诉计算机函数名,数组名及数组元素的个数;
max函数的设计方法 • C语言中函数定义的一般形式是: 返回值类型 函数名(参数表) 函数体 • 我们先不设计max函数的函数体,先设计函数头部;max函数返回值是数组中的最大值,其类型同数组元素的类型相同,为int ;函数名 为max; 参数表中的参数有二个,一个是整型数据A,另一个是A中的元素个数n,之所以有第二个参数是考虑到函数的通用性,因为有时候数组中元素的个数不一定是10个。函数max的头部形式为: int max(int A [ ] , int n) • 参数表中的每个参数和定义变量类拟,A后的一对方括号表示A是一个数组,但不要给出数组的元素个数。
算法—程序设计的灵魂 • 现在我们讨论一个关键是如何设计max函数? • 为设计这个函数,我们要先设计一个算法,在数组的n个元素中找出最大值; • 方法是让数组中的每个元素参加比较大小的比赛,比赛的方法有很多,方法的好坏影响算法的效率;因些算法是程序设计的灵魂; • 算法是在对问充分分析的基础上得出的,因些对问题的分析非常重要。
问题二:如何求数组中元素的最大值——max函数的算法分析问题二:如何求数组中元素的最大值——max函数的算法分析 • 求数组中最大值的比赛方法最好采用擂台赛,因为我们只需比出第一名;如何上擂台? • 方法是A [0]先上擂台,即假定A [0] 暂时最大,将A [0]保存到暂时最大者;然后让A [1]与A [0]比,若A [1] 比A [0]大,将A [1]存起来,作为暂时的最大者,否则不变;然后让A [2]上,与暂时最大者比,以些类推,直到数组中最后一个元素A [n-1]与暂时最大值比,若A [n-1]比暂时最大值大,则更新这个最大值,否则不变。 • 如何记录暂时最大值,一种方法是定义一个变量用来存放暂时最大值的数值;另一种方法是定义一个整型变量用来记录暂时最大值的下标,如果用变量K表示暂时最大值的下标,则K的初值为0,然后下标为1,2,3,…,n-1的元依次和A [k]比较,这样需定义一个循环变量i,从1到n-1,若A [i]> A [k],则K应更新为i。
K=0 i从1 到n-1 A [i]> A [k] ? Y N K=i 返回A [k] max函数的算法设计 • 定义一个变量K表示暂时最大值的下标 ,K初值为0
max函数的设计 int max(int A[],int n) { /*定义整型变量k用来存放暂时最大值下标,初定A[0]最大,所以K初值为0,i用作循环变量*/ int k=0,i; /*循环,i从1到n-1, A[i]与暂时最大者A[K]比较*/ for (i=1;i<n;i++) if (A[i]> A[k]) k=i; /* 若A[i]比A[k],更新暂时大者下标*/ /*返回最大值*/ return A[k]; } • 思考题:返回k行不行?
上机实验 • 将输入10个数求最大数的主程序和max函数内容合并,保存在一个文件中; • 使用VC6.0 或TC2.0来编译调试程序,建议使用VC6.0, 有关VC使用请参考实验课件 http://www2.ratvu.com/dubiao/cpp/cppsy.doc • 按要求输入10个整数,观察运行结果。 • 习题:计算 1+2+3+4+…+99+100,将结果显示。
实验注意事项 • C语言程序由函数组成,每一个C语言程序有且仅有一个惟一的main函数; • C语言是大小敏感的语言,大写和小写是有区别的; • 由于程序中一般都要用到printf函数来输出结果,所以必须在程序头部加上一行 #include <stdio.h> • 在VC中上机时,每一个实验结束后要关闭工作区。
小结 • 程序的基本结构有三种:顺序,分支和循环; • 程序设计的目的是处理信息,信息在计算机中的存放是数据存储;数据结构包括逻辑结构和存储结构;算法是程序设计的关键; • 算法的描述方法有:伪语言,流程图,盒图(N-S图)
小结和提高 • 程序=数据结构+算法 • 软件=程序+文档 • 程序容易出错,程序的正确性难以正确,程序不易读懂和修改; • 软件是产品,它的生产需要管理,需要用工程化的方法来生产软件;软件的生命周期包括计划阶段,开发阶段和维护阶段;具体包括:可行性研究,需求分析,总体设计,详细设计,编码,测试,运行和维护阶段;每一个阶段都需要文档。
本课程内容 • 第一篇:程序设计与程序设计语言概述 • 第一章导论:计算机文化基础,计算机模型 • 第二章:程序及程序设计,计算机语言概念;了解各种高级语言,常量,变量,表达式,语句,函数; • 第三章,第三章C语言程序设计——数据类型,运算符和表达式,语句,流程控制,函数,数组等。 • 第二篇:数据结构和算法 • 掌握线性结构——线性表,栈,队列的存储结构和常用操作;层次结构——树的概念,网状结构——图的概念;查找和排序; • 掌握算法的描述方法;算法设计中常用方法如穷举法,递归法,回溯法等;算法快慢的评价方法——时间复杂度。 • 第三篇:程序设计方法与原则 • 程序设计方法的发展:模块化,结构化,面向对象等; • 软件工程:用工程化的方法以来计划,开发和维护软件。
本课程学习方法 • 第一篇:程序设计与程序设计语言概述 • 第一章导论,第二章——自学为主,网上讨论 • 第三章,第三章C语言程序设计——实验学习;教师讲解实验,做实验题;完成实验报告; • 第二篇:数据结构和算法——听课,做习题,参加网上讨论,下载网上资料,复习 • 第三篇:程序设计方法与原则——听课,做习题,复习
本课程的建议学习步骤 • 自学第一章和第二章 • 认真学习本导学,组成学习小组,记录好联系电话 • 在家中的计算机上安装Visual C++6.0,掌握VC++集成开发环境的使用,将教材第四章的例程输入并编译,调试,运行 • 预习第三章,第四章,完成你会做的作业,将不懂的做好记号,上课注意听你不懂的部分,也可上网问老师和同学; • 听第三,第四章实验课,完成课后习题,并完成补做的实验题 • 预习第五章,第六章,上课,完成网上的练习题 • 将不会做的题目询问老师,参加网上讨论 • 自学第七章 • 做网上的模拟题,参加复习课,订正习题错误。