1、C语言程序设计语言程序设计IIC程序设计提高篇程序设计提高篇上期考试情况总结上期考试情况总结填空调试填空调试40程序设计程序设计60总分总分优良优良8557人人84%10人人1519人人28%合格合格60812%2537%3551%不合不合格格34%3349%1421%本期学习的主要内容本期学习的主要内容指针指针结构体结构体单链表单链表文件操作文件操作指针的好处:指针的好处:(1)能够动态地分配内存。)能够动态地分配内存。(2)能够直接对地址操作。)能够直接对地址操作。(3)调用函数时可以传递多个)调用函数时可以传递多个数据,也可以得到多个值。数据,也可以得到多个值。组织多个不组织多个不同数据
2、类型同数据类型的相关数据的相关数据 一种用指针、结构体一种用指针、结构体动态构成的数据结构,动态构成的数据结构,可方便地进行数据插可方便地进行数据插入、删除的操作。入、删除的操作。将处理的数将处理的数据、结果永据、结果永久保存到磁久保存到磁盘中盘中 本期学习要求本期学习要求理论理论30学时上机学时上机14学时课设学时课设20学学时时上课上课“三到三到”耳到耳到嘴到嘴到手到手到上机上机填写预习报告填写预习报告调试记录调试记录课外增加上机课外增加上机编程规范介绍(一)编程规范介绍(一)优秀程序员的必备素质优秀程序员的必备素质第一部分第一部分 排版排版严格采用阶梯层次组织程序代码严格采用阶梯层次组织
3、程序代码及时折行及时折行一行只写一条一句一行只写一条一句if、for、do、while等语句格式规定等语句格式规定空行空行空格空格对变量的定义,尽量位于函数的开始位置对变量的定义,尽量位于函数的开始位置程序各部分的放置顺序程序各部分的放置顺序采用阶梯层次组织程序代码采用阶梯层次组织程序代码 各占一行,与引用对齐各占一行,与引用对齐函数体开始、结构(枚举)声明、函数体开始、结构(枚举)声明、if、for、do、while、switch、casedo-while是个特例(是个特例(后可以跟后可以跟while)使用使用Tab缩进缩进及时折行及时折行选低优先级操作符前换行选低优先级操作符前换行使换行适
4、当缩进(至少一个使换行适当缩进(至少一个Tab)一行只写一条语句(只出现一次分号)一行只写一条语句(只出现一次分号)if、for、do、while、case、switch、default各占一行,且各占一行,且if、for、do、while后无论语句多少都要加花括号后无论语句多少都要加花括号空行空行定义变量与程序块之间定义变量与程序块之间相对独立的程序块之间相对独立的程序块之间空格空格逗号后,分号后(逗号后,分号后(for循环)循环)比较、赋值、算术、逻辑等双目运算符比较、赋值、算术、逻辑等双目运算符前后加空格前后加空格!、+、-等单目运算符与运行表达式等单目运算符与运行表达式之间之间不加空格
5、不加空格-、.前后前后不加空格不加空格if、for、while、switch等等后面加空格后面加空格,突出关键字突出关键字变量定义变量定义同一行内不要定义过多变量同一行内不要定义过多变量同一类的变量在同一行内定义,或相邻同一类的变量在同一行内定义,或相邻行定义行定义数组、指针复杂类型定义放在定义区的数组、指针复杂类型定义放在定义区的最后最后变量定义区不做较复杂的变量赋初值变量定义区不做较复杂的变量赋初值程序放置顺序程序放置顺序1、#include 2、#include 用户自定义文件用户自定义文件3、#define 宏定义宏定义4、全局变量定义、全局变量定义5、函数原型声明、函数原型声明6、m
6、ain函数定义函数定义7、用户自定义函数、用户自定义函数第二部分第二部分 注释注释注释的原则和目的注释的原则和目的函数头部应进行注释函数头部应进行注释进行注释时的注意事项进行注释时的注意事项注释的原则和目的注释的原则和目的原则是有助于对程序的阅读理解,注释原则是有助于对程序的阅读理解,注释不宜太多也不能太少,注释语言必须准不宜太多也不能太少,注释语言必须准确、易懂、简洁确、易懂、简洁目的是解释代码的目的、功能和采用的目的是解释代码的目的、功能和采用的方法,提供代码以外的信息,帮助读者方法,提供代码以外的信息,帮助读者理解代码,防止没有必要的重复注释信理解代码,防止没有必要的重复注释信息息函数头
7、部应进行注释函数头部应进行注释列出:函数的目的列出:函数的目的/功能、输入参数、输出参功能、输入参数、输出参数、返回值、调用关系数、返回值、调用关系/*function:函数名称函数名称description:函数功能描述函数功能描述calls:被本函数调用的函数清单被本函数调用的函数清单called by:调用本函数的函数清单调用本函数的函数清单input:输入参数,每个参数的作用、取值及关系输入参数,每个参数的作用、取值及关系output:输出参数说明输出参数说明return:函数返回值的说明函数返回值的说明others:其它说明其它说明*/注释时注意事项注释时注意事项注释应与其描述的代码
8、相近,在代码上方或注释应与其描述的代码相近,在代码上方或右方(单条语句注释)右方(单条语句注释)全局变量要有较详细的注释,包括功能、取全局变量要有较详细的注释,包括功能、取值范围、哪些函数存取等值范围、哪些函数存取等注释与描述内容进行同样的缩排注释与描述内容进行同样的缩排注释与其上面的代码用空行隔开注释与其上面的代码用空行隔开对变量定义和分支语句(条件、循环等)必对变量定义和分支语句(条件、循环等)必须编写注释须编写注释注释时注意事项注释时注意事项对于对于switch结构中无结构中无break的的case,在在下一个下一个case之前注明之前注明在程序块结束行右方加注释标记,表明在程序块结束行
9、右方加注释标记,表明某程序块的结束某程序块的结束注释格式尽量统一,使用注释格式尽量统一,使用/*.*/第三部分第三部分 命名规则命名规则三种流行的命名法则三种流行的命名法则命名的基本原则命名的基本原则变量名的命名规则变量名的命名规则函数命名规范函数命名规范函数参数命名规范函数参数命名规范三种流行的命名法则三种流行的命名法则驼峰命名法(首字母小写)驼峰命名法(首字母小写)printEmployeePaychecksprint_employee_paychecks匈牙利命名法匈牙利命名法m_lpszStr帕斯卡命名法(与驼峰类似,首字母大写)帕斯卡命名法(与驼峰类似,首字母大写)命名的基本原则命名
10、的基本原则标识符的命名要清晰、明了标识符的命名要清晰、明了对于变量命名,禁止取单个字符对于变量命名,禁止取单个字符i、j等等不要使用数字或较奇怪的字符不要使用数字或较奇怪的字符变量名的命名规则变量名的命名规则使用使用“匈牙利法则匈牙利法则”变量名变量名=变量类型变量类型+变量的英文意思变量的英文意思类型类型开头部分开头部分类型类型开头部分开头部分boolbdoubledintiunsigned intwshort intnunsigned long intdwlong intl0结尾字符串结尾字符串szcharc指针指针punsigned charby全局变量全局变量g_floatf静态变量静
11、态变量s_函数的命名规范函数的命名规范尽量使用英文表达出函数完成的功能尽量使用英文表达出函数完成的功能必须使用函数原型声明必须使用函数原型声明函数参数命名规范函数参数命名规范参数名称的命名参照变量命名规范参数名称的命名参照变量命名规范传递大结构的参数,采用指针或引用方传递大结构的参数,采用指针或引用方式传递式传递第四部分第四部分 可读性可读性避免使用默认的运算优先级避免使用默认的运算优先级使用有意义的标识,避免直接使用数字使用有意义的标识,避免直接使用数字源程序中关系较为紧密的代码应尽可能源程序中关系较为紧密的代码应尽可能相邻相邻不要使用难懂的技巧性很高的语句、复不要使用难懂的技巧性很高的语句
12、、复杂的表达式杂的表达式练习练习请同学们课后继续学习有关请同学们课后继续学习有关“编码规范编码规范”的相关内容并将其应用在日后的课程练的相关内容并将其应用在日后的课程练习当中。习当中。在在“考试平台考试平台”下练习,进一步熟悉规下练习,进一步熟悉规范要求。范要求。C语言程序设计基础语言程序设计基础对对C语言程序设计基础知识的回顾语言程序设计基础知识的回顾程序设计的步骤程序设计的步骤定义目标定义目标描述程序的用途描述程序的用途分析问题分析问题确定输出结果、输入数据及确定输出结果、输入数据及处理输入数据和生成输出所需活动的步骤处理输入数据和生成输出所需活动的步骤设计程序逻辑设计程序逻辑用程序流程图
13、等工具设用程序流程图等工具设计程序流程并进行手工检查计程序流程并进行手工检查编写程序代码编写程序代码将程序逻辑转化为将程序逻辑转化为C语句语句输入、测试、调试程序输入、测试、调试程序整理程序文档整理程序文档C语言程序设计基础语言程序设计基础理解理解C程序的基本结构程序的基本结构掌握掌握C语言中数据的描述方法语言中数据的描述方法数据类型数据类型变量与常量变量与常量运算符与表达式运算符与表达式掌握掌握C程序的逻辑结构程序的逻辑结构顺序结构顺序结构分支结构(分支结构(if,ifelse,switch)循环结构循环结构(while,dowhile,for)C语言程序的基本结构特点语言程序的基本结构特点
14、#include void main()prinf(“Good morning,everyone!n”);v 一个完整的语言程序,是由一个一个完整的语言程序,是由一个main()main()函数(函数(又称主函数)和若干个其它函数结合而成的,或又称主函数)和若干个其它函数结合而成的,或仅由一个仅由一个main()main()函数构成。函数构成。v 一个函数由函数头和函数体构成。函数头指明函一个函数由函数头和函数体构成。函数头指明函数名、函数参数、函数返回值类型。函数体实现数名、函数参数、函数返回值类型。函数体实现函数功能。函数功能。v 函数定义之外,可包含外部说明,如函数定义之外,可包含外部说
15、明,如includeinclude命令命令和外部变量说明。和外部变量说明。C(C+)数据类型三种三种逻辑结构逻辑结构顺序结构顺序结构分支结构分支结构循环结构循环结构1.理解三种逻辑结构的应用场合理解三种逻辑结构的应用场合2.了解实现分支、循环结构的语句有哪些?了解实现分支、循环结构的语句有哪些?如何执行的?分别应用在什么场合?如何执行的?分别应用在什么场合?3.根据实际问题,选择适当的语句来实现。根据实际问题,选择适当的语句来实现。练习练习1如下程序段,该程序的输出结果是(如下程序段,该程序的输出结果是()main()main()intint x=1 x=1,a=0a=0,b=0b=0;swi
16、tch(x)switch(x)case 0 case 0:b+b+;case 1case 1:a+a+;case 2case 2:a+a+;b+b+;printf(aprintf(a=%d=%d,b=%dnb=%dn,a a,b)b);A)A)a=2a=2,b=1 b=1 B)B)a=1a=1,b=1 b=1 C)C)a=1a=1,b=0b=0 D)D)a=2a=2,b=2b=2A练习练习2有程序段:有程序段:int n=1;do n=+n*5;while(n=10);则此循环的循环体(则此循环的循环体()。)。A.执行执行1次次 B.执行执行2次次 C.不执行不执行 D.执行无限次执行无限次
17、 B练习练习3假设所有变量均已说明假设所有变量均已说明,写出下列程序段运行后写出下列程序段运行后x的值。的值。()ok1=1;ok2=2;ok3=0;x=15;a=3;b=4;if(!ok1)x+;else if(ok2)if(ok3)x=3;else x=4;运行后运行后x的值为下面哪一个?的值为下面哪一个?A.15 B.3 C.16 D.4 D练习练习4for(i=0;i5;i+)for(j=1;j10;j+)if(j=5)break;if(i2)break;printf(“j=%d,j);printf(“i=%dn,i);输出结果为输出结果为:j=5,i=3模块化程序设计模块化程序设计库
18、函数的使用:使用某个库函数,一定库函数的使用:使用某个库函数,一定要首先使用文件包含预处理命令,将对要首先使用文件包含预处理命令,将对应的头文件包含进来。应的头文件包含进来。在程序中要使用自己定义的函数,有三在程序中要使用自己定义的函数,有三个基本环节:个基本环节:函数定义函数定义 函数调用函数调用 函数声明函数声明函数的使用函数的使用函数定义函数定义 函数头 函数体 函数头函数头是函数的用户界面,其组成形式如下:是函数的用户界面,其组成形式如下:类型名类型名函数名函数名(形式参数表列形式参数表列)函数体函数体是一个语句块,是用一对花括号封装的语句是一个语句块,是用一对花括号封装的语句序列。它
19、描述了函数实现一个功能的过程。序列。它描述了函数实现一个功能的过程。函数的使用函数的使用函数的调用:函数的调用:通过调用表达式进行。调通过调用表达式进行。调用表达式的形式为:用表达式的形式为:函数名函数名(实参表列实参表列)调用表达式的作用调用表达式的作用参数传递参数传递执行函数中的语句执行函数中的语句接收函数的返回接收函数的返回函数声明函数声明把函数定义写在函数调用之前把函数定义写在函数调用之前用函数声明语句用函数声明语句函数的使用函数的使用#include#include intint f(intf(int);void main()void main()intint a=2,i;a=2,i
20、;for for(i=0;i3;i+)i=0;i3;i+)printf(n%d,f(aprintf(n%d,f(a););intint f(intf(int a)a)intint b=0;b=0;staticstatic intint c=3;c=3;b+;c+;b+;c+;return a+b+c;return a+b+c;函数声明函数声明程序运行后输出为:程序运行后输出为:7 78 89 9函数调用函数调用函数定义函数定义变量的作用域和生存期变量的作用域和生存期#include#include intint f(intf(int);intint b b=0;=0;void main()vo
21、id main()intint a=2,i;a=2,i;for for(i=0;i3;i+)i=0;i3;i+)printf(n%d,f(aprintf(n%d,f(a););intint f(intf(int a a)staticstatic intint c c=3;=3;b b+;+;c c+;+;return return a a+b b+c c;全局变量全局变量局部变量局部变量程序运行后输出为:程序运行后输出为:7 79 91111静态局部变量静态局部变量编写程序计算:编写程序计算:m=1-2+3-4+9-10 问题分析:问题分析:这是一个累加问题。累加的奇数项这是一个累加问题。累加
22、的奇数项为正数,偶数项为负数。且加的项数为为正数,偶数项为负数。且加的项数为10,可用循环结构的,可用循环结构的for语句实现。语句实现。如何将该计算功能改为函数,实现如何将该计算功能改为函数,实现n项的项的累加?累加?考虑如何设计函数参数?考虑如何设计函数参数?int fun(int n)int m=0,f=1,i;for(i=1;i=n;i+)m+=i*f;f=f*(-1);return m;void main()printf(m=%dn,fun(10);数组的使用数组的使用(1 1)数组用来处理多个性质相同的数据。)数组用来处理多个性质相同的数据。(2 2)数组用数组名及其下标来区分不同
23、的)数组用数组名及其下标来区分不同的数据。数据。(3 3)数组的下标可以是整型常量或整型变)数组的下标可以是整型常量或整型变量。量。(4 4)数组的下标是)数组的下标是0 0、1 1、2 2等有规律的数,等有规律的数,所以可以很方便用循环变量来提供。所以可以很方便用循环变量来提供。(5 5)数组的下标是从)数组的下标是从0 0开始的。注意检查开始的。注意检查数组下标是否越界。数组下标是否越界。练习练习1已知一数组已知一数组a56,则,则a34之前的数之前的数组元素个数为组元素个数为 _。a00 a01 a02 a03 a04 a05a10 a11 a12 a13 a14 a15a20 a21
24、a22 a23 a24 a25 a30 a31 a32 a33 a34 a35a40 a41 a42 a43 a44 a45 a34之前的之前的数组元素个数数组元素个数为为 3*6+4。数组的应用数组的应用1 1计算计算n n个数据的平均值个数据的平均值 2 2计算计算n n个数据中的最大最小值个数据中的最大最小值 3 3排序(冒泡法)排序(冒泡法)4.4.递推数列的计算递推数列的计算5.5.矩阵运算矩阵运算6.6.字符串匹配搜索字符串匹配搜索练习练习21、指出下面各说明语句中哪个是合法的:()A.int abcd0 x80;B.char 9ab10;C.char chi-200;D.int
25、n,floppyn;2、若定义若定义a2=1,2,3,4,5,6,7;则则a数组数组中行的大小是(中行的大小是()。)。A 2 B 3 C 4 D 无确定值无确定值 AC练习练习3输入一整数输入一整数x,在数组,在数组a中查找中查找x第一次出现的位置。请填空。第一次出现的位置。请填空。#include main()int a10=10,24,34,55,9,17,87,22,9,19,x,i;printf(“Input an integer:”);scanf(_,&x);for(i=0;_;i+)if(_)break;if(_)printf(Not found.n);else printf(Position is:%dn,i);结果:结果:%d i=10 x!=ai一个试图实现数据交换的函数一个试图实现数据交换的函数#include swap1(float f1,float f2)float temp;temp=f1;f1=f2;f2=temp;调用调用swap1函数函数void main()float x=5,y=10;printf(“nbefore:x=%f y=%f”,x,y);swap1(x,y);printf(“nafter:x=%f y=%f”,x,y);Why?预习教材预习教材第六章第六章 指针指针