1、第1章 C语言概述本章主要内容:本章主要内容:1.1 C语言简介语言简介1.2 C语言程序语言程序结构结构1.3 C语言程序的执行(重点)语言程序的执行(重点)1.4 VC+运行运行C程序说明程序说明(重点)(重点)本章本章教学要求:教学要求:了解了解C语言的基本特点语言的基本特点 熟悉熟悉C程序的基本程序的基本结构结构掌握掌握使用使用VC+运行运行C语言程序的语言程序的方法方法步步1.1 C语言简介语言简介1.1.1 C语言的发展史语言的发展史 C语言之所以命名为语言之所以命名为C,是因为,是因为 C语言源自语言源自Ken Thompson发明的发明的B语言语言 1983年由美国国家标准局(
2、年由美国国家标准局(American National Standards Institute,简称,简称ANSI)开始制定)开始制定C语语言标准,于言标准,于1989年年12月完成,并在月完成,并在1990年春天发年春天发布,称之为布,称之为ANSI C,有时也被称为,有时也被称为 C89 或或 C90。第1章 C语言概述1.1 C语言简介语言简介1.1.1 C语言的特点语言的特点1简洁紧凑、灵活方便简洁紧凑、灵活方便2运算符丰富运算符丰富 3数据类型丰富数据类型丰富4表达方式灵活实用表达方式灵活实用 5允许直接访问物理地址,对硬件进行操作允许直接访问物理地址,对硬件进行操作 6生成目标代码
3、质量高,程序执行效率高生成目标代码质量高,程序执行效率高 7可移植性好可移植性好 第1章 C语言概述1.2 C语语言程序结构我们通过一个简单的例子说明C语言程序的结构。【例【例1-1】#include int main()/*主函数:求两数之和*/int a,b,sum;/*定义三个变量a,b,sum*/a=2;b=4;/*给a、b赋值*/sum=a+b;/求和的结果赋给sum printf(%d+%d=%d,a,b,sum);/输出sum的值 return 0;第1章 C语言概述1.2 C语语言程序结构C语言程序的结构:(1)C程序是由函数构成的,每一个函数完成相对独立的功能。一程序是由函数
4、构成的,每一个函数完成相对独立的功能。一个程序可以由多个函数组成,但至少包含一个函数,即个程序可以由多个函数组成,但至少包含一个函数,即main函数,函数,它称为主函数,程序总是从它称为主函数,程序总是从main函数开始执行,并在函数开始执行,并在main函数中结函数中结束的。束的。(2)C语言程序通常使用英文小写字母书写,只有符号常量或其他语言程序通常使用英文小写字母书写,只有符号常量或其他特殊用途的符号才使用大写。应该注意的是,特殊用途的符号才使用大写。应该注意的是,C语言对大小写是区分语言对大小写是区分的,它们代表着不同的字符。的,它们代表着不同的字符。(3)C语言程序是由一条条语句组成
5、的,每个语句都具有规定的语语言程序是由一条条语句组成的,每个语句都具有规定的语法格式和特定的功能。上面程序中,法格式和特定的功能。上面程序中,printf()是输出变量数值的函数是输出变量数值的函数调用语句;调用语句;a=2是赋值语句。是赋值语句。(4)C语句以分号(;)结束,分号是语句不可缺少的组成部分。语句以分号(;)结束,分号是语句不可缺少的组成部分。第1章 C语言概述1.2 C语语言程序结构C语言程序的结构:(5)C语言程序中,一个语句可以占用多行,一行也可以有多个语句。语言程序中,一个语句可以占用多行,一行也可以有多个语句。(6)C语言程序中使用大括号语言程序中使用大括号“”和和“”
6、来表示程序的结构层次范围。来表示程序的结构层次范围。一个完整的程序模块要用一对大括号括起来,以表示该程序模块的范围。一个完整的程序模块要用一对大括号括起来,以表示该程序模块的范围。应该注意的是,左大括号应该注意的是,左大括号“”和右大括号和右大括号“”应该成对使用。应该成对使用。(7)为了增加程序的可读性,可以使用适量的空格和空行。但是,变)为了增加程序的可读性,可以使用适量的空格和空行。但是,变量名、函数名和量名、函数名和C语言保留字中间不能加入空格。除此之外的空格和空语言保留字中间不能加入空格。除此之外的空格和空行可以任意设置,行可以任意设置,C语言编译系统是不会理会这些空格和空行的。语言
7、编译系统是不会理会这些空格和空行的。(8)可以用)可以用*或或/对对C程序中的任何部分作注释。一个好的、有程序中的任何部分作注释。一个好的、有使用价值的源程序都应当加上必要的注释,以增加程序的可读性。使用价值的源程序都应当加上必要的注释,以增加程序的可读性。第1章 C语言概述1.3 C语言程序的执行语言程序的执行1.3.1 C程序调试步骤程序调试步骤1编辑编辑 编辑是建立或修改编辑是建立或修改C源程序文件的过程,并以文件的形式存储在磁盘上,源程序文件的过程,并以文件的形式存储在磁盘上,C源程序文件的扩展名为源程序文件的扩展名为“.c”。2编译与连接编译与连接 编译是通过编译器将源程序转换为机器
8、代码,生成目标程序的过程。在编译是通过编译器将源程序转换为机器代码,生成目标程序的过程。在C语言源程序的编译过程中,可以检查出程序中的语法错误。连接是把语言源程序的编译过程中,可以检查出程序中的语法错误。连接是把一个一个C语言应用程序与所用到的库函数以及其他目标程序连接为一个整语言应用程序与所用到的库函数以及其他目标程序连接为一个整体,生成可执行文件体,生成可执行文件(*.exe)的过程。的过程。3运行运行 生成的可执行文件,既可在编译系统环境下运行,也可以脱离编译系统生成的可执行文件,既可在编译系统环境下运行,也可以脱离编译系统直接执行。直接执行。4其他操作其他操作 修改系统路径;调试程序;
9、打开源程序等。修改系统路径;调试程序;打开源程序等。第1章 C语言概述1.3 C语言程序的执行语言程序的执行1.3.1使用使用Visual C+调试调试C语言程序语言程序1.启动Visual C+6.0开发环境第1章 C语言概述1.3 C语言程序的执行语言程序的执行1.3.1使用使用Visual C+调试调试C语言程序语言程序2.建立C语言源程序文件第1章 C语言概述1.3 C语言程序的执行语言程序的执行1.3.1使用使用Visual C+调试调试C语言程序语言程序3.编辑C语言程序的内容第1章 C语言概述1.3 C语言程序的执行语言程序的执行1.3.1使用使用Visual C+调试调试C语言
10、程序语言程序4.建立并运行可执行程序(1)在“组建”菜单中单击“编译”,建立目标文件。(2)在“组建”菜单中单击“组建”,建立可执行程序。第1章 C语言概述1.3 C语言程序的执行语言程序的执行1.3.1使用使用Visual C+调试调试C语言程序语言程序4.建立并运行可执行程序根据错误信息提示对源程序文件进行修改之后,再重新对源文件根据错误信息提示对源程序文件进行修改之后,再重新对源文件进行编译、构建,即可建立可执行文件。进行编译、构建,即可建立可执行文件。(3)在)在“组建组建”菜单中单击菜单中单击“执行执行”,运行程序,就会弹出一个,运行程序,就会弹出一个窗口,显示程序的运行结果窗口,显
11、示程序的运行结果第1章 C语言概述1.3 C语言程序的执行语言程序的执行1.3.1使用使用Visual C+调试调试C语言程序语言程序5.关闭程序 如果想在不关闭软件的情况下,编辑运行另外一个程序,需如果想在不关闭软件的情况下,编辑运行另外一个程序,需要关闭上一次运行的工作空间,方法是选择要关闭上一次运行的工作空间,方法是选择“文件文件”菜单中菜单中的的“关闭工作空间关闭工作空间”命令,这样才能再编辑、编译一个新的命令,这样才能再编辑、编译一个新的程序,否则即使新建了一个新的程序,否则即使新建了一个新的C语言源程序文件,新编辑语言源程序文件,新编辑了一个程序,但仍然会编译上一次的那个程序,所以
12、一定要了一个程序,但仍然会编译上一次的那个程序,所以一定要关闭工作空间。关闭工作空间。另外,创建另外,创建C程序文件时,可以更改程序的存放位置。写好程序文件时,可以更改程序的存放位置。写好程序以后,也可以依次按程序以后,也可以依次按Ctrl+F7、F7、Ctrl+F5三对组合键三对组合键编译并运行程序。编译并运行程序。第1章 C语言概述1.4 VC+运行C程序说明1.4.1编辑程序编辑程序 在编辑过程中,当输入一个在编辑过程中,当输入一个C语言的关键字时,语言的关键字时,Visual C+系统自系统自动将其设定为蓝色字体以示区别。动将其设定为蓝色字体以示区别。如果输入了一个块结构语句(如如果输
13、入了一个块结构语句(如for(i=0;i10;i+)、while(n (大于)(大于)=(大于等于)(大于等于)b,x=2,ab 字符的比较是按字符的比较是按ASCII码值的大小进行比较。因此,码值的大小进行比较。因此,ab的结果为的结果为0。第2章 数据类型、运算符和表达式1逻辑运算符逻辑运算符C语言提供了三种逻辑运算符:语言提供了三种逻辑运算符:&(逻辑与)(逻辑与)|(逻辑或)(逻辑或)!(逻辑非)(逻辑非)第2章 数据类型、运算符和表达式2优先级和结合性优先级和结合性 逻辑运算符的优先级由高到低依次为:逻辑运算符的优先级由高到低依次为:!&|与其它运算符相比,与其它运算符相比,&和和|
14、运算符低于关系运算符,运算符低于关系运算符,!高于高于算术运算符。即:算术运算符。即:!算术运算符算术运算符 关系运算符关系运算符&|赋值运算符赋值运算符 逻辑运算符的结合性为逻辑运算符的结合性为“左结合左结合”。第2章 数据类型、运算符和表达式3逻辑表达式逻辑表达式 用逻辑运算符将关系表达式或逻辑量连接起来的式子称为用逻辑运算符将关系表达式或逻辑量连接起来的式子称为逻辑表达式。例如:逻辑表达式。例如:a&b,a|b,(x0)&(y0)说明:说明:(1)若)若x=1,y=2,则,则(x0)&(y0)的值为的值为1。(2)a,b,c三数中三数中a为最大的条件是:为最大的条件是:(ab)&(ac)
15、。(3)若)若a=4,则,则!a的值为的值为0。在逻辑运算中,将非零值认作为在逻辑运算中,将非零值认作为1,因此它的逻辑非值就,因此它的逻辑非值就是是0。第2章 数据类型、运算符和表达式 C语言提供一种特殊的运算符语言提供一种特殊的运算符逗号运算符,它将两个表逗号运算符,它将两个表达式连接起来。如:达式连接起来。如:3+5,6+9称为逗号表达式。称为逗号表达式。逗号表达式的一般形式为:逗号表达式的一般形式为:表达式表达式1,表达式,表达式2,表达式,表达式n 逗号表达式的逗号表达式的求解过程求解过程是:先求解表达式是:先求解表达式1的值,再求表达式的值,再求表达式2的值。整个逗号表达式的值是最
16、后那个表达式的值。的值。整个逗号表达式的值是最后那个表达式的值。第2章 数据类型、运算符和表达式整型、单精度型、双精度型数据可以混合运算。前已述及,字整型、单精度型、双精度型数据可以混合运算。前已述及,字符型数据可以与整型通用,因此,符型数据可以与整型通用,因此,整型、实型(包括单、双整型、实型(包括单、双精度)、字符型数据间可以混合运算精度)、字符型数据间可以混合运算。例如:。例如:10+a+1.5-8765.1234+b是合法的。在进行运算时,不同类型的数据要先转换成同一类是合法的。在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。型,然后进行运算。第2章 数据类型、运算符和表
17、达式可以使用强制类型转换运算符将一个表达式转换成所需类型。可以使用强制类型转换运算符将一个表达式转换成所需类型。例如:例如:(double)a(将(将a转换成转换成double类型)类型)(int)()(x+y)(将(将x+y的值转换成整型)的值转换成整型)(float)()(5%3)(将(将5%3的值转换成的值转换成float类型)类型)其一般形式为:其一般形式为:(类型名)(表达式)(类型名)(表达式)第2章 数据类型、运算符和表达式第2章 数据类型、运算符和表达式格式化输出格式化输出printf()(重点)(重点)格式化输入格式化输入scanf()(重点)(重点)字符的输入输出字符的输入
18、输出格式化输出printf()printf的一般格式的一般格式格式格式printf(格式控制,输出表列);格式控制 格式控制是用双引号括起来的字符串,它包括格式说明和普通字符两部分。(1)格式说明 格式说明由“%”和格式字符组成,它的作用是说明计算机中的数值将以何种形式显示在屏幕上。第第3 3章章 顺序结构程序设计顺序结构程序设计格式化输出printf()(2)普通字符 普通字符是需要原样输出的字符。如:x=、y=。普通字符的使用使输出结果更加清晰、易懂。比如,输出结果x=5就比只输出5更容易使人理解。float x;printf(x=%fn,x);第第3 3章章 顺序结构程序设计顺序结构程序
19、设计格式化输出格式化输出printf()输出表列 输出表列是需要输出的数据,它可以是常量、变输出表列是需要输出的数据,它可以是常量、变量或表达式,各输出项之间以逗号作为间隔。执量或表达式,各输出项之间以逗号作为间隔。执行行printf函数时输出项将按格式符指定的格式输出。函数时输出项将按格式符指定的格式输出。第第3 3章章 顺序结构程序设计顺序结构程序设计格式化输出格式化输出printf()格式字符格式字符C语言中的格式字符主要有以下几种,语言中的格式字符主要有以下几种,如表如表3-1所示所示。第第3 3章章 顺序结构程序设计顺序结构程序设计格式化输出格式化输出printf()1输出整型数据的
20、格式字符输出整型数据的格式字符d:按整型数据的实际长度输出。按整型数据的实际长度输出。md:m为指定的输出宽度。若数据位数小于为指定的输出宽度。若数据位数小于m,当,当m为正数时,则左端补空格;当为正数时,则左端补空格;当m为负数时,则右端为负数时,则右端补空格。若数据位数大于补空格。若数据位数大于m,按实际位数输出。,按实际位数输出。ld:用于输出长整型数据。用于输出长整型数据。o:以八进制数形式输出。以八进制数形式输出。x:以十六进制数形式输出。以十六进制数形式输出。u:以无符号型整数形式输出。以无符号型整数形式输出。第第3 3章章 顺序结构程序设计顺序结构程序设计格式化输出格式化输出pr
21、intf()【例【例3-2】#include int main()int a,b;a=123,b=12345;printf(*%d*,*%d*n,a,b);printf(*%5d*,*%4d*n,a,b);printf(*%-5d*,*%-4d*n,a,b);return 0;第第3 3章章 顺序结构程序设计顺序结构程序设计格式化输出格式化输出printf()【例【例3-3】#include int main()long x;x=123456;printf(%ldn,x);return 0;程序运行结果:程序运行结果:123456第第3 3章章 顺序结构程序设计顺序结构程序设计格式化输出格式化
22、输出printf()【例【例3-4】#include int main()int a,b,c;a=10;b=010;c=0 x10;printf(%d,%o,%xn,a,b,c);printf(%d,%d,%dn,a,b,c);return 0;程序运行结果:程序运行结果:10,10,1010,8,16第第3 3章章 顺序结构程序设计顺序结构程序设计格式化输出格式化输出printf()【例【例3-5】#include int main()unsigned int a;a=4294967295;printf(%u,%dn,a,a);return 0;程序运行结果:程序运行结果:429496729
23、5,-1第第3 3章章 顺序结构程序设计顺序结构程序设计格式化输出格式化输出printf()2输出实型数据的格式字符输出实型数据的格式字符 f:以小数形式输出实数,保留以小数形式输出实数,保留6位小数。位小数。m.nf:输出数据共占输出数据共占m位,其中有位,其中有n位小数,小数点占位小数,小数点占1位。位。如果数据长度小于如果数据长度小于m,则左端补空格,即数据右对齐,则左端补空格,即数据右对齐;-m.nf:当当数据长度小于数据长度小于m时,右端补空格,即数据左对齐。时,右端补空格,即数据左对齐。【例【例3-6】第第3 3章章 顺序结构程序设计顺序结构程序设计格式化输出格式化输出printf
24、()【例【例3-7】#include int main()float x=123.456;printf(%fn,x);printf(*%-10.3f*n,x);printf(*%10.1f*n,x);return 0;第第3 3章章 顺序结构程序设计顺序结构程序设计格式化输出格式化输出printf()【例【例3-8】#include int main()float r=2.5,s;s=3.14*r*r;printf(s=%fn,s);printf(s=%.2fn,s);return 0;第第3 3章章 顺序结构程序设计顺序结构程序设计格式化输出格式化输出printf()3输出字符型数据的格式符
25、输出字符型数据的格式符c:输出单个字符。输出单个字符。mc:按指定宽度按指定宽度m输出字符。若输出字符。若m为正值,则输出字符右为正值,则输出字符右对齐;若对齐;若m为负值,则输出字符左对齐。为负值,则输出字符左对齐。【例【例3-9】第第3 3章章 顺序结构程序设计顺序结构程序设计格式化输出格式化输出printf()4输出字符串的格式符输出字符串的格式符 s:按实际长度输出字符串。按实际长度输出字符串。ms:按指定宽度按指定宽度m输出字符串。输出字符串。当当m为正数时,字符串右对齐输出;为正数时,字符串右对齐输出;m为负数时,字符串为负数时,字符串左对齐输出;如果左对齐输出;如果m小于字符串长
26、度,则按实际长度输出。小于字符串长度,则按实际长度输出。m.ns:只输出字符串的前只输出字符串的前n个字符,共占个字符,共占m列。当列。当m为正为正数时,字符串右对齐输出;数时,字符串右对齐输出;m为负数时,字符串左对齐输为负数时,字符串左对齐输出。出。【例【例3-10】第第3 3章章 顺序结构程序设计顺序结构程序设计格式化输入scanf()scanf的一般格式格式:格式:scanf(格式字符,地址表列);例如:例如:scanf(%d,&a);说明:说明:(1)“地址表列”是变量的内存地址,它是通过对变量的“求地址”运算得到的,“”就是求地址运算符。(2)scanf函数也使用格式符,格式符的作
27、用是表示用户想要将输入的文本转换为何种形式存储在内存中。第第3 3章章 顺序结构的程序设计顺序结构的程序设计第第3 3章章 顺序结构程序设计顺序结构程序设计格式化输入scanf()scanf的用法整型、实型数据的输入scanf(“%d,%d,%d”,&a,&b,&c);scanf(%d%d%d,&a,&b,&c);如果格式符之间以逗号间隔,则输入的数据间也要以逗号间隔。比如,要给变量a、b、c分别赋值1、2、3,则在执行时输入数据如下:1,2,3第第3 3章章 顺序结构程序设计顺序结构程序设计格式化输入scanf()【例【例3-11】#include int main()int a,b;flo
28、at c,d;scanf(%d,%d,&a,&b);scanf(%f,%f,&c,&d);printf(%d,%d,%.1f,%.1fn,a,b,c,d);return 0;第第3 3章章 顺序结构程序设计顺序结构程序设计格式化输入scanf()【例【例3-12】#include int main()float a,b;scanf(%f%f,&a,&b);printf(a=%.1f b=%.1fn,a,b);return 0;程序运行结果:2.5凵 2.6a=2.5 b=2.6第第3 3章章 顺序结构程序设计顺序结构程序设计格式化输入scanf()(3)scanf(a=%d,b=%d,&a,&
29、b);若要给a、b分别赋值为1、2,则运行时输入:a=1,b=2【例【例3-13】#include int main()int a,b,c,d;scanf(a=%d,b=%dn,&a,&b);scanf(c:%d,d:%d,&c,&d);printf(%d%d%d%dn,a,b,c,d);return 0;第第3 3章章 顺序结构程序设计顺序结构程序设计格式化输入scanf()【例【例3-14】#include int main()int a;printf(输入年龄:);scanf(%d,&a);printf(年龄:%dn,a);return 0;程序运行结果:输入年龄:10年龄:10第第3
30、3章章 顺序结构程序设计顺序结构程序设计格式化输入scanf()字符型数据的输入 scanf(%c,%c,%c,&a,&b,&c);在字符输入时,如果scanf中的格式符间以逗号间隔,输入数据时,字符间也以逗号间隔。scanf(“%c%c%c”,&a,&b,&c);在字符输入时,如果scanf中的格式符间没有间隔,输入数据时,字符要连续输入。第第3 3章章 顺序结构程序设计顺序结构程序设计格式化输入scanf()【例【例3-15】#include int main()char a,b,c;scanf(%c,%c,%c,&a,&b,&c);printf(%c%c%cn,a,b,c);return
31、 0;第第3 3章章 顺序结构程序设计顺序结构程序设计格式化输入scanf()【例【例3-16】#include int main()char a,b,c;scanf(%c%c%c,&a,&b,&c);printf(%c%c%cn,a,b,c);return 0;程序运行结果:youyou第第3 3章章 顺序结构程序设计顺序结构程序设计格式化输入scanf()【例【例3-17】编写程序,求圆面积。分析:分析:圆面积的计算公式为:s=r2,因为键盘上不能输入,所以用3.14代替。第第3 3章章 顺序结构程序设计顺序结构程序设计字符的输入输出字符的输入输出getchar()和和putchar()g
32、etchar函数函数格式:格式:变量=getchar();第第3 3章章 顺序结构程序设计顺序结构程序设计字符的输入输出字符的输入输出getchar()和和putchar()putchar函数函数格式:格式:putchar(c);第第3 3章章 顺序结构程序设计顺序结构程序设计顺序结构程序设计举例顺序结构程序设计举例求一元二次方程ax2+bx+c=0的根。分析:要用计算机解方程,必须给出求解方程的算法,对于一元二次方程ax2+bx+c=0来说,就是要给出求根公式。给公式中的变量赋值,计算机就可以求出方程的根了。因为求根公式中用到了平方根函数sqrt(x),所以程序必须将数学头文件:math.h
33、包含到程序中。第第3 3章章 顺序结构程序设计顺序结构程序设计顺序结构程序设计举例顺序结构程序设计举例输入任意三个整数,求和及平均值。分析:编写该程序时,有两个地方需要注意:定义变量时,平均值变量aver要定义为实型,不能定义为整型,否则误差太大。求平均值时,sum除以实数3.0,而不是除以整数3,如果除数和被除数都是整数,那么商也将是一个整数,这样也会造成误差大的错误。第第3 3章章 顺序结构程序设计顺序结构程序设计顺序结构程序设计举例顺序结构程序设计举例从键盘输入一个小写字母,将其转换为大写字母输出。分析:大写字母的ASCII码值等于小写字母的ASCII码值减32。第第3 3章章 顺序结构
34、程序设计顺序结构程序设计顺序结构程序设计举例顺序结构程序设计举例输入三角形的三条边,求三角形面积。三角形面积的计算公式为:分析:为简单起见,设输入的三条边a、b、c能构成三角形,所以读者运行程序时,给变量的赋值必须保证三边长的值可以构成三角形,否则运行结果将是错误的。第第3 3章章 顺序结构程序设计顺序结构程序设计顺序结构程序设计举例顺序结构程序设计举例在屏幕上用“*”画出一个三角形。程序如下:#include int main()printf(*n);printf(*n);printf(*n);printf(*n);printf(*n);return 0;第第3 3章章 顺序结构程序设计顺序
35、结构程序设计第4章 选择结构程序设计本章主要内容:本章主要内容:4.1 if 语句语句(重点)(重点)4.2 switch语句语句4.3 选择结构程序设计举例(重点)选择结构程序设计举例(重点)本章教学要求:本章教学要求:了解了解选择结构的特点选择结构的特点 熟悉熟悉选择结构程序设计的一般方法选择结构程序设计的一般方法 掌握掌握 if 语句和语句和 switch 语句的使用方法语句的使用方法 4.1 if语句语句 if 语句也称为条件语句,它根据一个条件的真和假有选择地执行或不执行某个语句。C语言提供了三种形式的if语句,可以实现单分支选择结构、双分支选择结构和多分支选择结构。4.1.1 复合
36、语句复合语句是用一对大括号“”括起来的一组语句。复合语句的一般形式为:说明部分;说明部分;语句部分;语句部分;第第4 4章章 选择结构程序设计选择结构程序设计4.1 if语句语句注意:复合语句中的右大括号“”后面没有分号;一个复合语句在语法上等价于单个语句,凡一个语句能够出现的地方都能出现复合语句,换句话说,复合语句在逻辑上是一个语句;复合语句中说明部分的变量,其作用域只限于该复合语句内部,在复合语句外无意义;后面将要介绍的if子句和else子句以及while、for的循环体,在语法上均看作为单个语句,若需要多个语句,必须写成复合语句的形式。另外,函数体语法上也是一个复合语句,但复合语句可以嵌
37、套,而函数体中不可以嵌套函数。第第4 4章章 选择结构程序设计选择结构程序设计4.1 if语句语句4.1.2 单分支单分支 if 语句语句格式:if(表达式)语句;功能:先计算表达式的值,如果表达式的值为真(非先计算表达式的值,如果表达式的值为真(非0值),则执行其后的语句,否则,跳过该语句,执值),则执行其后的语句,否则,跳过该语句,执行行if语句的后续语句。语句的后续语句。其流程图如图4-1所示。第第4 4章章 选择结构的程序设计选择结构的程序设计4.1 if语句语句说明:(1)表达式通常是关系表达式或逻辑表达式,也可以是任意类型的表达式(如整型、实型、字符型等)。在if语句的判断中只要表
38、达式的值为非0,就执行表达式后面的语句。(2)表达式两侧的圆括号不能省略。(3)格式中的语句可以是单个语句,也可以是复合语句。如:if(ac,则交换其值,使得bc。这样就得到了由小到大的顺序。由于篇幅所限,这里程序只运行了一次,理论上,要测试程序正确,需要验证程序的每一个分支。对于本例,需要把a、b、c排序的三种情况都测试一次,才能证明程序是正确的。第第4 4章章 选择结构程序设计选择结构程序设计4.1 if语句语句4.1.3 双分支 if 语句格式:if(表达式)语句1;else 语句2;功能:先计算表达式的值,当表达式的值为真(非先计算表达式的值,当表达式的值为真(非0值),则执值),则执
39、行语句行语句1;否则执行语句;否则执行语句2。其流程图如图4-2所示。第第4 4章章 选择结构程序设计选择结构程序设计4.1 if语句语句说明:说明:(1)if 和else 是C语言的关键字,且else 不是独立的语句,它是if语句的一部分。使用时else必须与if成对使用,共同组成一条if-else 语句。(2)“语句1”称为if子句,“语句2”称为else子句,它们可以是单个语句或是复合语句。(3)在此形式的if语句中,无论if子句或else子句形式上多么复杂,它们都是if或else的子语句,分别代表双分支选择结构的分支之一,不要把子语句理解为独立的语句。第第4 4章章 选择结构程序设计选
40、择结构程序设计4.1 if语句语句【例【例4-4】输入三个整数,输出最大值。分析:分析:假设三个数为a、b、c,先求出a和b中的大者,再将其和c比较,就可得出三数中的最大值。思考:思考:如果程序中if(mc),该分支的语句将如何变化?请读者自行修改练习,并比较两种用法。第第4 4章章 选择结构程序设计选择结构程序设计4.1 if语句语句4.1.4 多分支 if 语句格式:if(表达式1)语句1;else if(表达式2)语句2;else if(表达式3)语句3;else if(表达式n)语句n;else 语句n+1;功能:依次判断表达式的值,如果其中一个表达式的值非0,则执行相应的语句,然后跳
41、出整个if语句继续执行后续语句。如果所有的表达式都为0,则执行语句n+1,然后执行后续语句。其流程图如图4-3所示。第第4 4章章 选择结构程序设计选择结构程序设计4.1 if语句语句说明:说明:(1)无论有多少分支的if-else if语句,它们都是一个if语句,在分析程序时尤其要注意这点,不要把一个多分支if语句理解为多个语句。(2)最后一个else常作为缺省条件,即当前面的条件表达式测试都失败时,则执行语句n+1。【例【例4-6】输入一个百分制成绩,要求输出其对应的五级制的等级,即90分以上为A,8089为B,7079为C,6069为D,60分以下为E。思考:思考:如果程序中if(mc)
42、,该分支的语句将如何变化?请读者自行修改练习,并比较两种用法。第第4 4章章 选择结构程序设计选择结构程序设计4.1 if语句语句4.1.5 条件运算符?:C语言提供一种简单方式来表示if-else 语句的一种形式。这被称为条件表达式,使用条件运算符“?:”实现,格式:表达式1?表达式2:表达式3功能:如果表达式1为真(非0),整个条件表达式的值等于表达式2的值,否则,整个条件表达式的值等于表达式3的值。第第4 4章章 选择结构程序设计选择结构程序设计4.2 switch语句 switch语句的功能与if-else if类似,都是用来解决多分支选择问题的。但是,在某些情况下,switch语句使
43、用更加方便。4.2.1 switch语句格式:格式:switch(表达式)case 常量表达式1:语句序列1;case 常量表达式2:语句序列2;case 常量表达式n:语句序列n;default:语句序列;第第4 4章章 选择结构程序设计选择结构程序设计4.2 switch语句switch语句的执行过程:先计算switch表达式的值,然后将该值与各case后面的常量表达式的值进行比较。当其值与某一常量表达式的值相同时,就从该case后面的语句开始执行,直到switch语句结束时为止;若其值与所有的常量表达式的值都不相同,就执行default后面的语句,若不存在default,则程序继续执行s
44、witch语句之后的语句。第第4 4章章 选择结构程序设计选择结构程序设计4.2 switch语句说明:(1)switch表达式是选择条件,可以为任何类型。(2)case后面的常量表达式是值为常数的表达式,通常为常量或符号常量。类型必须和switch表达式的类型相同;(3)switch语句中的所有case常量表达式的值必须各不相同;(4)每个case(称为一种情况)下可以有零或多个语句,有多个语句时可以不加。(5)当switch找到与表达式相匹配的case时,将从该case开始,执行其后的所有分支,直到switch语句结束。如果希望程序只执行与表达式相匹配的case,其它不执行,则需要使用br
45、eak语句。break语句的作用是,使程序的执行跳出switch语句,执行switch语句后面的语句。第第4 4章章 选择结构程序设计选择结构程序设计4.2 switch语句【例【例4-7】运行下列程序,熟悉switch的用法。第第4 4章章 选择结构程序设计选择结构程序设计4.2 switch语句【例【例4-8】运行下列程序,写出运行结果。第第4 4章章 选择结构程序设计选择结构程序设计4.2 switch语句【例【例4-9】从键盘输入两个实数和一个四则运算符(、)执行相应的运算并输出运算结果。第第4 4章章 选择结构程序设计选择结构程序设计4.2 switch语句 4.2.2 switch
46、 和if-else 在解决多分支选择问题时,用switch或者用if-else通常是没有一定之规的。如果选择是基于求实型变量或表达式的值,就不能使用switch。如果变量必须落入某个范围,也不能很方便地使用switch。这样写是很简单的:if(变量1&变量0:两个不等实根;b2-4ac=0:两个相等实根;b2-4ac0:两个共轭复根。第第4 4章章 选择结构程序设计选择结构程序设计4.3 选择结构程序设计举例【例【例4-11】输入三角形的三条边,求三角形面积。三角形面积的计算公式为:分析:分析:第3章曾经做过这道题,当时要求运行程序时输入的三边长必须能够构成一个三角形,否则程序将出现错误。构成
47、三角形的条件是任意两边之和大于第三边,现在使用条件语句可以很方便地解决这个问题。第第4 4章章 选择结构程序设计选择结构程序设计4.3 选择结构程序设计实例选择结构程序设计实例【例【例4-12】编写程序,将百分制成绩转换为五级制成绩。转换方法:成绩90分:优 80成绩90分:良 70成绩80分:中 60成绩70分:及格 成绩60分:不及格第第4 4章章 选择结构程序设计选择结构程序设计4.3 选择结构程序设计举例【例【例4-13】输入年月日,判断其为该年度的第几天。分析:分析:以2015年8月29日为例,要判断这一天是2015年的第几天,需要将前7个月的天数求和,再加29。所以,switch(
48、m-1)结构从case 7分支进入,一直向下执行,直到case 0为止,求出了1-7月份天数的累加和,再加上8月份的天数,正好是241天。2月份是个特殊的月份,要判断是否为闰年。第第4 4章章 选择结构程序设计选择结构程序设计本章结束!第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5
49、章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第5章 循环结构程序设计第6章 数组本章主要内容:本章主要内容:6.1 数组的概念数组的概念6.2 一维数组(重点)一维数组(重点)6.3 二维数组(重点)二维数组(重点)6.4 字符数组字符数组 本章教学要求:本章教学
50、要求:1.了解了解数组中数据的存储方法数组中数据的存储方法 2.熟悉熟悉数组的概念、数组元素的表示方法数组的概念、数组元素的表示方法3.掌握掌握数组的编程方法数组的编程方法6.1 数组的基本概念数组的基本概念本节介绍数组的定义和数组程序设计要解决的问题。本节介绍数组的定义和数组程序设计要解决的问题。6.1.1 数组解决的问题数组解决的问题 类型相同的一组数的存储类型相同的一组数的存储 类型相同一组数的处理类型相同一组数的处理 通过对下标的控制实现对数组的处理:通过对下标的控制实现对数组的处理:循环变量控制下标循环变量控制下标 处理的数组映射到下标处理的数组映射到下标 如:如:40个学生成绩的存