《C程序设计复习要点.ppt》由会员分享,可在线阅读,更多相关《C程序设计复习要点.ppt(88页珍藏版)》请在第壹文秘上搜索。
1、C程序设计技术复习要点 一基本概念部分一基本概念部分 C语言的基本概念(数据类型,常量,变量,语言的基本概念(数据类型,常量,变量,表达式的书写方法等)表达式的书写方法等) 当两个整数相除时,得到的结果仍然是整数。既取整运算。例如:7/5结果为1,-7/5结果为-1,3/5结果为0. 求模运算就是求余数,参加求模运算的两个对象必须都是整型对象,运算结果的符号与第一个运算对象相同。例如:7%5结果为2,-7%5结果为-2,7%(-5)=2。 优先级高 ( ) 函数 +、- *、/、% +、- 优先级低 典型运算符的使用(典型运算符的使用(+,-,复合赋值等),复合赋值等)复合赋值符:凡是双目运算
2、符都可以与赋值运算符一起组成复合赋值符,其结合性为右结合性。这些复合赋值符共有10个,它们是: +=、-=、*=、/=、%=、=、&=、=、|= +i、 -i。自增、自减运算符的前缀形式对变量实施的运算是“先增/减值后引用”。i+、 i-。自增、自减运算符的后缀形式对变量实施的运算是”先引用后增/减值”。例1-9 自增、自减运算符使用示例。 例1-14 表达式混合运算中的 自动数据类型转换示例。例1-15 表达式混合运算中的强制数据类型转换示例。高 double floatlongunsigned 低 int short,char图1.4 系统自动数据类型转换规则 关系运算和逻辑运算关系运算和
3、逻辑运算在在C C程序设计语言中没有逻辑数据类型,所以在进行关系运算时程序设计语言中没有逻辑数据类型,所以在进行关系运算时: :用数值用数值“1 1”表示逻辑概念上的表示逻辑概念上的“真真”,用数值用数值“0 0”表示逻辑概念上表示逻辑概念上的的“假假”; ;例如:例如:5=55=5/ /* *结果为结果为1 1* */ / 10=10 10=10/ /* *结果为结果为1 1* */ / 5 5!=5=5/ /* *结果为结果为0 0* */ / 53 53/ /* *结果为结果为1 1* */ / 35 35/ /* *结果为结果为0 0* */ / 例例2-12-1 关系运算示例。关系运
4、算示例。 该程序运行执行语句该程序运行执行语句c=5-1=a+2=a+2=a+2=a+2=和和=结合,即先计算表达式结合,即先计算表达式5-1=a+25-1=a+2得到结果得到结果0 0,然后计算表达式然后计算表达式0=b-210=b-21的结果也为的结果也为0 0,最后将该,最后将该0 0值赋值给变量值赋值给变量c c。 所以,该程序运行的输出结果为:所以,该程序运行的输出结果为:c=0c=0 对逻辑表达式从左到右扫描求解;对逻辑表达式从左到右扫描求解; 在逻辑表达式的求解过程中,在逻辑表达式的求解过程中,任何时候只要逻辑任何时候只要逻辑 表达式的值已经可以确定表达式的值已经可以确定,则求解
5、过程不再进行。,则求解过程不再进行。 例如有定义:例如有定义:int a=1,b=2,c=0;int a=1,b=2,c=0;,则逻辑表达式,则逻辑表达式a+|b+&c+ a+|b+&c+ 的的计算过程得到结论为:计算过程得到结论为:逻辑表达式的值为逻辑表达式的值为1 1、变量、变量a a的值为的值为2 2、变量、变量b b的值为的值为2 2(原值)、变量(原值)、变量c c的值为的值为0 0(原值)。(原值)。 例例2-32-3 关系表达式运算和逻辑表达式运算示例关系表达式运算和逻辑表达式运算示例 。例例2-22-2 逻辑表达式运算示例逻辑表达式运算示例 。 基本控制结构(基本控制结构(特别
6、注意特别注意+,-运算符进入运算符进入条件表达式条件表达式) 流程控制语句 条件语句ifelse循环语句 for语句、while语句、dowhile语句提前结束本次循环语句continue循环或多分支终止语句break无条件转移语句goto返回语句return 复合表达式语句 C语言允许把一组语句括在花括号之中构成一个语句块,称之为复合语句。例如 char ch; ch=getchar(); putchar(ch); 要特别注意各控制结构的流程要特别注意各控制结构的流程2.2.6 switch2.2.6 switch语句与程序的多分支结构语句与程序的多分支结构switch(expession)
7、case constand1: sentences1; break;case constand2: sentences2;break;case constandN: sentencesN;break;default:sentencesN+12 2)执行过程:)执行过程:首先,首先,对作为条件的表达式(对作为条件的表达式(expressionexpression)求值;)求值; 然后,然后,在语句结构的花括号内在语句结构的花括号内从上至下从上至下查找所有的查找所有的casecase分支,当找到与条件表分支,当找到与条件表达式值相匹配的达式值相匹配的casecase时,将其作为控制流程执行的入口,
8、并时,将其作为控制流程执行的入口,并从此处开始执行相从此处开始执行相应的语句段,直到遇到应的语句段,直到遇到breakbreak语句或者是语句或者是switchswitch语句结构的右花括号语句结构的右花括号“ ”为止。为止。 switch(number) case 1: statement1; case 2: statement2; case 3: statement3; default: statement4;statement5;?2 习题:P84页,一、 6. For (i=1;i+4;);后,循环控制变量i的值是?要特别注意该题,分析该题;理解该题的考要特别注意该题,分析该题;理解该
9、题的考点!点!特别注意特别注意+,-运算符进入条件表达式!运算符进入条件表达式! 数组的定义和数组元素的访问数组的定义和数组元素的访问 例3-3 用数组存放一组统计数据,然后用“*”表示的条形图输出这组数据。程序输出效果如下所示: Element Value Striation 1 11 * 2 3 * 3 7 * 4 10 * 5 20 * 例3-4 打印如下所示的杨辉三角形的前10行(要求使用一维数组处理) 例3-5 在二维数组a34中依次选出各行最大元素值存入一维数组b3对应元素中。 程序运行结果: array a: 3 16 87 65 4 32 11 108 10 25 12 27
10、array b: 87 108 273.3.2 常用排序方法3.3.3 常用查找方法 例3-9 编程序实现冒泡排序算法,对随机生成的20个整数按升序进行排序并输出。 上面程序中用变量flag作为标志,每一趟排序开始时将其设置为0,当本趟排序过程中有数据交换时将flag设置为1,表示数据还没有排序完成;当本趟排序过程中没有一次数据交换时,flag保持为0值,表示被排序的数据已经完全满足排序的要求,没有必要再继续进行以后的排序过程,程序中用break语句退出排序循环。 程序的一次执行结果为: Before sorting . 293 31 365 849 867 166 487 826 487 7
11、75 331 630 294 5 242 136 953 123 849 65 After sorting . 5 31 65 123 136 166 242 293 294 331 365 487 487 630 775 826 849 849 867 953 例3-10 编程序实现选择排序算法,对随机生成的20个整数按升序进行排序并输出。 程序的一次运行结果为: Before sorting . 341 74 545 498 809 626 913 433 567 560 130 479 505 95 96 143 851 634 830 665 After sorting . 74 95
12、 96 130 143 341 433 479 498 505 545 560 567 626 634 665 809 830 851 913 1顺序查找(Linear search) 顺序查找又称为线性查找。其基本过程是:从待查表中的第一个记录开始,将给定的关键字值与表中每一个记录的关键字值逐个进行比较。如果找到相符合的记录时,查找成功,如果查找到标得末端都未找到相符合的记录时,查找失败。顺序查找法适应于被查找集合无序的场合。 例3-11 编程序实现顺序查找算法,在随机生成的20个整数中查找指定值,要求程序能够显示出查找进行比较的次数以及本次查找成功与否。 程序的一次运行结果为: 请输入被查
13、找的整数值: 43 被查找数据集合如下. 15 5 70 43 64 17 10 4 58 96 39 51 5 51 67 0 49 56 12 12 查找43成功,共进行了4次比较。 例3-12 编程序实现折半查找算法,在随机生成的20个整数中查找指定值,要求程序能够显示出查找进行比较的次数以及本次查找成功与否。 程序中首先输出随机产生、未经排序的查找数据集合,执行结果中用数组元素形式显示出来的是排序后与查找关键字key值相同的元素。 程序的一次执行结果如下所示: 下面是未排序的查找数据集合. 41 28 91 83 86 62 96 93 41 57 79 47 12 94 36 34
14、56 36 2 97 请输入被查找的关键字值: 91 查找a15成功,共进行了4次比较。 函数的定义,声明和调用函数的定义,声明和调用 C程序的一般结构 C程序源文件1源文件i源文件n函数1预处理语句函数m说明/定义部分执行语句部分图4.1 C程序的一般结构宏代换(不带参,带参)宏代换(不带参,带参) 宏定义分为代参数的宏定义和不代参数的宏定义两种。 1不代参数的宏定义 不代参数的宏定义编译预处理语句的一般形式是:#define 宏标识符 字符串 宏调用的格式为:宏标识符 宏调用的作用是:在宏定义的作用范围之内,将所有的宏标识符用指定的字符串替换。式中,宏标识符也称为宏名或常量标识符,习惯上使
15、用大写字母书写。 在C程序的设计中,正确地理解宏定义的关键在于理解宏调用仅仅就是一个替换而不会进行任何的合并、计算等等操作。在阅读理解包含宏调用问题的C程序时一定要做到先将宏替换完成、然后操作宏替换完成后的表达式 例4.25 宏调用替换问题的理解示例。 /* Name: ex04-25.cpp */ #include #define N 2 #define M N+2 #define MN 2*M void main() int x=MN;printf(x=%dn,x); 错误的理解方式是:错误的理解方式是:N2N2、M4M4(2+22+2)、)、MN8MN8(2 2* *4 4),从),从而
16、认为上面程序的而认为上面程序的输出结果是输出结果是x=8x=8。正确理解的方式应正确理解的方式应为:为:MN2MN2* *N+2N+2、MN2MN2* *2+22+2,因而程,因而程序执行的正确结果:序执行的正确结果:x=6x=6。 带参数的宏定义 在C程序设计过程中如果有需要,也可以使用带参数的宏定义。定义代参数的宏定义的一般形式如下:#define 宏标识符(形参表) 表达式样式字符串宏调用的格式为:宏标识符(实参表) 宏调用的作用是:在宏定义的作用范围之内,将所有的宏标识符用指定的表达式样式字符串替换,然后用宏调用中的实际参数代替通过替换形成的表达式中的形式参数。 在程序设计中使用带参数宏定义时,为了避免当实际参数本身是表达式时引起的宏调用错误,在定义代参数的宏定义时最好将宏定义中表达式的形式参数用括号括起来,下面的例4.26展示了这方面的问题。例4.26 代参数宏定义使用示例(不能正确处理表达式样式实际参数)。/* Name: ex04-26.cpp */#include #define PI 3.145926#define S(r) PI*r*rvoid main()doub