版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计
张春飞主讲教学要求掌握程序设计语言的基本知识常用算法初步的程序设计能力如何尽快学会用C语言进行程序设计?学习方法:
了解程序设计语言(C语言)
读懂、模仿、改写、编写不断的编程实践第1章程序设计与C语言
1.1程序与程序设计语言
1.2C语言的发展及主要特点
1.3初识C语言程序
1.4C语言程序的调试学习目标理解程序的基本概念。掌握计算机程序设计的一般步骤了解程序设计语言的发展过程1.1程序与程序设计语言广义地讲程序是解决一个实际问题的基本步骤。在计算机中,程序是指导计算机执行某个功能或功能组合的一组指令。每一条指令都让计算机执行完成一个具体的操作,一个程序所规定的操作全部执行完毕后,就能产生计算结果。程序的概念1.1程序与程序设计语言程序设计的一般过程1.1程序与程序设计语言程序设计语言1.1程序与程序设计语言机器语言汇编语言高级语言面向过程面向对象CPU指令系统,由0、1序列构成的指令码组成如:10000000加
10010000减用助记符号描述的指令系统如ADDR0,R1面向机器的语言客观世界可以分类,对象是类的实例对象是数据和方法的封装对象间通过发送和接受消息发生联系程序设计关键是定义类,并由类派生对象学习目标了解C语言的发展历史掌握C语言的主要特点1.2C语言的发展及主要特点产生过程 时间:70年代初 地点:美国贝尔实验室 目的:用于UNIX操作系统C标准
《K&R》标准:K&R合著《TheCProgrammingLanguage》
ANSIC:1983年
87ANSIC:1987年
1990年国际标准的ANSICC语言的发展历史1.2C语言的发展及主要特点1、C语言的标识符要求区分大小写。 2、语言简洁、紧凑,使用方便灵活。
3、模块化程序设计。
4、运算符丰富,数据结构丰富。
5、具有结构化的控制语句。
6、语法限制不太严格,程序设计自由度大。
7、允许直接访问物理地址,能够进行位操作,可以直接对硬件进行编程。
8、生成目标代码质量高,程序执行效率高。
9、可移植性好。1.2C语言的发展及主要特点C语言的主要特点1.3初识C语言程序学习目标理解C语言程序的基本结构掌握C语言程序的基本组成元素能够编写简单的C语言程序1.3初识C语言程序//FileName:chap1_1.c
//注释#include<stdio.h>
//预处理命令intmain()
//主函数{
//函数体 printf(“ThisisthefirstCprogram.\n”);//输出语句 return0;
//返回语句}案例说明编写一个简单的C程序,用于输出指定信息。程序源码1.3初识C语言程序程序详解1、第1行以“//”开始的一段文字称为注释,注释文字可以由任意字符组成。注释不参与程序的运行,主要用于对程序的某些关键部分进行说明,其目的是提高程序的可读性。注释可以出现在程序中的任意地方。2、第3~7行是该程序的主要组成部分,在C语言中称为主函数,函数名为main。可见,C程序是由函数构成的。任何C程序有且仅有一个主函数,主函数可以出现在程序的任意位置,C程序就从这个主函数开始执行。3、第4~7行是函数main()的函数体,由大括号“{}”括起来。这一对大括号以及其中的程序也被称为程序块。4、在函数main()中,第5行和第6行是完成函数功能的主要成分,在C语言中称为语句。每一条语句都是以“;”作为结束标记。学习目标掌握C语言程序的开发过程熟悉C语言程序的调试环境1.4C语言程序的调试1.4C语言程序的调试利用C语言编制程序的最终目的是高效地解决现实世界各领域中的实际问题,对实际问题进行分析,以C语言构建程序的思想为指引设计解决问题的方案,是构建C程序的第一步,通常称为程序设计。在此基础上,按照C语言的规则编写出C程序,把这个C程序存储在计算机中,运行后产生正确的结果,是构建C程序的第二步,通常称为程序生成。
1.4.1C语言程序的开发过程从确定C程序算法开始编写代码到上机运行得到结果,C语言程序的开发过程如下图所示:1.4.2VisualC++集成开发环境利用VisualC++6.0集成环境开发C程序的过程如下:1.启动VisualC++6.0环境2.编辑源程序文件3.编译和连接4.执行1.启动VisualC++6.0环境启动VisualC++6.0方法
单击“开始”-“程序”-“MicrosoftVisualstudio6.0”-“MicrosoftVisualC++6.0”命令标题栏工具栏项目工作区窗口菜单栏文档窗口状态栏输出窗口2.编辑源程序文件编辑源程序文件方法
①单击“文件”-“新建”,弹出“新建”对话框。②选择“文件”选项卡。单击“C++SourceFile”选项,在“文件”文件框中输入文件名,单击“确定”按钮。系统自动返回VC6主窗口。③显示文件编辑区窗口,在文件编辑区窗口输入源程序文件。3.编译和连接编译方法
在VC++环境中单击工具栏中的按钮,或者按Ctrl+F7键,或者选择Build菜单中的Compile选项3种方式都可以进行程序的编译。执行编译命令后,输出窗口会显示出编译结果。连接方法
在VC++环境中单击工具栏中的按钮,或者按F7键,或者选择Build菜单中的Build选项3种方式都可以进行程序的连接。执行连接命令后,输出窗口会显示出连接结果。4.程序执行在VC++环境中单击工具栏中的按钮,或者按Ctrl+F5键,或者选择Build菜单中的Execute选项3种方式都可以运行程序。可执行程序运行后,将显示为DOS控制台状态,按任意键返回VisualC++6.0环境。执行方法
第2章C语言的基本知识
2.1标识符和关键字
2.2数据类型
2.3常量与变量
2.4运算符和表达式
2.5不同数据类型数据间的混合运算学习目标对照了解自然语言和C语言的组成要素掌握C语言中的字符集掌握C语言中标识的概念及用户定义标识的规则2.1标识符和关键字熟记C语言中的关键字自然语言与C语言组成要素对比自然语言字词句段章单词短语C语言字符标识符表达式语句函数程序按照“字-词-句-段-章”的自然语言的学习顺序学习C语言是一种非常有效的学习方法。
2.1标识符和关键字字符集2.1标识符和关键字字符是组成语言的最基本的元素,国际上使用最广泛的计算机字符编码是ASCII码,标准的ASCII码字符集包括128个字符。
字符说明字母字符包括大写字母A~Z以及小写字母a~z共52个字符数字字符包括0~9共10个字符空格符空格符只在字符常量和字符串常量中起作用特殊字符特殊字符是不可显示、不可打印的字符,用于计算机设备的操作控制以及在数据通信时进行传输控制其他字符其它字符包括图形符、标点符和运算符等2.1标识符和关键字标识符所谓标识符就是用来标识在C语言程序中出现的符号常量、变量、数据类型、函数和语句的字符序列,C语言中的标识符是由字符组成,满足一定的构成规则。
C语言规定,标识符由字母、数字、下划线组成,且第一个字符不能使用数字字符。例如,a、_3x、BOOK1、sum5、student_1都是合法的标识符,而-3x、bowy-1、3Student、$Map、Sum@Mul、a>b等是不合法的,不能用作C语言的标识符。
autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile2.1标识符和关键字关键字关键字是系统定义的、具有特定含义、专门用作特定用途的C语言标识符,也称为保留字。标准C语言中共有32个关键字。
2.2数据类型学习目标了解C语言的数据类型掌握C语言中的基本数据类型2.2数据类型C语言的数据类型数据类型基本类型空类型指针类型构造类型整型字符型实型枚举型数组结构体共用体基本数据类型2.2数据类型类型名称中文名称字节数(Byte)位数(bit)数值范围备注char字符型18−128~127−27~(27−1)int整型216−32768~32767−215~(215−1)float单精度实型432−3.4×10−38~3.4×10386~7位有效数字double双精度实型864−1.7×10-308~1.7×1030815~16位有效数字
ANSIC标准规定,简单类型的前面还可以加上修饰符,使简单类型的语义更加丰富,方便C编程人员选用恰当的数据类型。这样的修饰符共有4种:
(1)signed:有符号; (2)unsigned:无符号; (3)long:长型; (4)short:短型。2.3常量与变量学习目标理解常量与变量的概念熟练掌握整型、实型及字符型常量与变量的定义和使用2.3.1常量与变量的概念常量
在程序运行过程中其值保持不变的量称为常量。常量可以分为符号常量和直接常量两种。
直接常量是直接以自身的存在形式体现值和类型的,例如,123,-5是整型常量,1.5,1.2E-2是实型常量,’x’是字符常量,”first”是字符串常量。
符号常量是采用宏定义命令定义的常量。基定义形式如下:
#define符号常量名常量 例如:#definePI3.14159定义PI为一个符号常量,C编译系统在处理程序时会将程序中全部的PI均用3.14159代替。2.3.1常量与变量的概念变量
在程序运行过程中其值可以被改变的量称为变量。变量在内存中根据其数据类型占据一定的存储单元,用来存入可能变化的值。变量的定义C语言中的变量遵循“先定义,后使用”的原则,就是必须先对将要使用的变量进行变量定义,说明变量的数据类型,然后才能使用该变量。变量定义的一般形式为:
类型说明符变量名标识符,变量名标识符,…;例如:inti,j,k;//定义i,j,k为整型变量2.3.1常量与变量的概念变量的初始化
C语言中允许在变量定义的同时对变量赋初始值,也称为变量的初始化。例如:
inta=2;
charc=’x’;floatx=1.2,y=2.4;2.3.1常量与变量的概念变量的基本操作一个变量可以看成是一个存储数据的容器。有两个对变量的基本操作:
一是向变量中存入数据,这个操作被称为“赋值”;二是取得变量当前的值,以便在程序运行时使用,这个操作被称为“取值”。2.3.2整型常量与变量整型数据在内存中是以二进制方式存放的,最高位为符号位,并以补码表示。将一个十进制整数转化为补码表示的方法如下:(1)对于正数,其补码表示与原码相同。(2)对于负数,其补码表示为它的反码加1;负数的反码为其绝对值的所有位(含符号位)取反得到。2.3.2整型常量与变量例如:求-10的补码的方法是:①取-10的绝对值10;②10的绝对值的二进制形式为:0000000000001010(一个整数占16位);③对0000000000001010取反得到:1111111111110101;④再加1得1111111111110110。2.3.2整型常量与变量(1)十进制整型常量其形式是:d其中,d可以是从0~9的一个或多个十进制数位,第一位不能是0。进位规则为:逢十进一。(2)八进制整型常量其形式是:0d其中,d可以是一个或多个八进制数(0~7之间),起始0是必须的引导符。进位规则为:逢八进一。(3)十六进制整型常量其形式是:0xd其中,d可以是一个或多个十六进制数(从0~9的数字,或是从’a’到’f’的字母)。引导符0是必须的,字母X可以用大写或小写,进位规则为:逢十六进一。整型常量在C语言中整型常量可以表示为十进制、八进制和十六进制三种形式。
2.3.2整型常量与变量整型变量整型变量可以分为以下几类:(1)基本整型类型说明符为int,在内存中占2个字节,其取值范围为-32768~32767。(2)短整型类型说明符为shortint或short,在内存中所占字节数和取值范围均与基本整型相同。(3)长整型类型说明符为longint或long,在内存中占4个字节,其取值范围为-2147483648~2147483647。(4)无符号型类型说明符为unsigned,此类型的整数没有负数。2.3.2整型常量与变量实例分析//FileName:chap2_1.c#include<stdio.h>intmain(){ inta,b,c,d;//定义a、b、c、d为基本整型变量
unsignedu;//定义u为无符号基本整型变量
a=10;b=-20;u=5; c=a+u; d=b-u;
printf("c=%d,d=%d\n",c,d);
return0;}程序运行结果如下:c=15,d=-252.3.3实型常量与变量实型数据又称为浮点型数据,是带小数部分的数据。根据能够表示的大小和精度,浮点型数据分为单精度、双精度两类,类型说明符分别为float和double。浮点型数据在内存中以指数形式存储。C语言将一个浮点型数据分成小数和指数两个部分存储。例如,实数3.14159在内存中的存放形式如图所示。2.3.3实型常量与变量(1)十进制小数形式由正负号、数码0~9和一个小点组成,小数点前面和后面可以没有数字。例如.123//表示实数0.123-.123//表示实数-0.123123.//表示实数123.0(2)指数形式由十进制小数或整数与字母e或E组成。一般形式如下:
aEn或aen其中,a可以是十进制小数或整数,n必须为十进制整数,整体表示数a×10n。对于指数形式表示的实型常量,要求字母e或E前面必须有数字,后面必须为整数。实型常量在C语言中,实型常量有两种表示形式:十进制小数形式和指数形式。2.3.3实型常量与变量实型变量实型变量可以分为以下3类:(1)单精度型类型说明符为float,在内存中占4个字节,其取值范围的绝对值为10-38~1038,提供6~7位有效数字。(2)双精度型类型说明符为double,在内存中占8个字节,其取值范围的绝对值为10-308~10308,提供15~16位有效数字。(3)长双精度型类型说明符为longdouble,在内存中占10个字节,其取值范围的绝对值为10-4932~104932,提供18~19位有效数字。2.3.3实型常量与变量实例分析//FileName:chap2_2.c#include<stdio.h>intmain(){ floata,b;//定义a、b为单精度浮点型变量
doubled;//定义d为双精度浮点型变量
a=3.56;b=12345.678; d=12345.6789;
printf("%f,%f,%f\n",a,b,d);
return0;}程序运行结果如下:3.560000,12345.677734,12345.678900
2.3.4字符型常量与变量在C语言中字符型数据包括字符和字符串两种。字符型数据在内存中存储的是字符的ASCII码值的二进制形式,一个字符的存储占用一个字节。2.3.4字符型常量与变量(1)普通字符常。是用单引号括起来的一个字符。该字符可以是数字、字母等ASCII字符集中除“’”和“\”以外的所有可显示字符。(2)转义字符。转义字符是一种特殊的字符常量。转义字符以反斜杠开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。字符常量C语言中,字符常量分为普通字符常量和转义字符两种。2.3.4字符型常量与变量2.3.4字符型常量与变量字符变量每个字符变量被分配一个字节的内存空间。由于字符变量在内存中存放的是字符的ASCII码值,所以也可以把它们看成是整型量。字符型数据与整型数据之间的转换比较方便。字符数据可以参与算术运算,也可以与整型量相互赋值,还可以按照整数形式输出。2.3.4字符型常量与变量实例分析//FileName:chap2_4.c#include<stdio.h>intmain(){ shortintn=97;//字符'a'的ASCII码为97
printf("%d,%c,%d,%c\n",n,n,n+1,n+1);
return0;}程序运行结果如下:97,a,98,b
程序说明2.3.4字符型常量与变量字符’a’的ASCII码为97,变量n以整型数据方式输出时为97,以字符方式输出时为’a’,如图所示;n+1的结果为98,字符’b’的ASCII码为98,n+1以整数方式输出时为98,以字符方式输出时为’b’。
2.3.4字符型常量与变量字符串常量
C语言中的字符串常量是由一对双引号括起来的字符序列。字符串常量和字符常量是不相同的量,其区别如下:(1)从表示形式上看,字符常量是由单引号括起来的,字符串常量是由双引号括起来的。(2)从字符的个数上看,字符常量只能是单个字符,字符串常量可以包含0个或多个字符。(3)有字符变量,但没有字符串变量。C语言没有专门的字符串类型变量,而是使用字符型数组或字符型指针来存储字符串。(4)字符常量在内存中占1个字节,字符串常量在内存中的字节数是字符个数加1。因为C语言规定,每一个字符串的末尾加一个字符串结束标志\0(ASCII码为0)。2.4运算符和表达式学习目标熟练掌握C语言提供的各种运算符掌握运算符的优先级和结合性能够应用运算符构建相应的表达式2.4运算符和表达式基本概念运算是对数据进行加工的过程,用来表示各种不同运算的符号称为运算符。参加运算的数据称为运算量或操作数。用运算符将运算量连接起来的符合C语言语法规则的式子称为运算表达式,简称表达式。2.4运算符和表达式C语言的运算符2.4运算符和表达式使用C语言的运算符的注意事项1.运算符的功能2.运算符的优先级3.运算符的结合性4.运算结果及其表示2.4.1算术运算符及算术表达式算术运算符
C语言算术运算符可以分为基本算术运算符、自增、自减运算符和正负号运算符三类。
(1)基本算术运算符基本算术运算符包括5种:+(加)、-(减)、*(乘)、/(除)、%(取余)。(2)自增和自减运算符C语言中的自增运算符为++,自减运算符为--,都是单目运算符,具有右结合性。运算符“++”表示操作数加1,运算符“--”表示操作数减1。(3)正负号运算符正负号运算符是单目运算符,如-a,-b,-5,+8等。
实例分析//FileName:chap2_6.c#include<stdio.h>intmain(){inti,k; i=5;k=++i;//赋值时,i先增1,再将i的值赋给k
printf("k=%d,i=%d\n",k,i);
i=5;k=--i;//赋值时,i先减1,再将i的值赋给k
printf("k=%d,i=%d\n",k,i);
i=5;k=i++;//赋值时,先将i的值赋给k,再将i增1
printf("k=%d,i=%d\n",k,i);
i=5;k=i--;//赋值时,先将i的值赋给k,再将i减1
printf("k=%d,i=%d\n",k,i); return0;}2.4.1算术运算符及算术表达式在使用自增自减运算符时,应注意以下几个问题。①自增和自减运算符的优先级高于基本算术运算符。②自增和自减运算符的操作数只能是变量,不能是常量和表达式。程序运行结果如下:k=6,i=6k=4,i=4k=5,i=6k=5,i=42.4.1算术运算符及算术表达式算术表达式用算术运算符将运算对象连接起来,符合C语法规则,并能说明运算过程的式子,称为算术表达式。
算术达式的构成规则如下:(1)数值型常量、数值型变量、数值型函数调用;(2)+(算术表达式)、-(算术表达式);(3)++整型变量、--整型变量、整型变量++、整型变量--;(4)(算术表达式)双目算术运算符(算术表达式);(5)有限次使用上述规则获得运算式也是算术表达式。
2.4.2关系运算符及关系表达式关系运算符
关系运算实际上就是比较运算,将给定的两个运算对象过行比较,判断比较的结果是否符合给定的条件,若符合条件为“真”,否则为“假”。
2.4.2关系运算符及关系表达式关系表达式
关系表达式是由关系运算符连接表达式构成的,具体构成规则如下:
表达式关系运算符表达式其中的表达式主要是算术表达式,也可以是字符型数据或关系表达式、逻辑表达式、条件表达式、赋值表达式、逗号表达式等。关系表达式的值为逻辑值,逻辑值有true(用整数1表示)和false(用整数0表示)。2.4.3逻辑运算符及逻辑表达式逻辑运算符
ANSIC标准规定,参与逻辑运算的操作数可以不是逻辑值,该操作数为非0时表示真,为0时表示假,但逻辑运算的结果只可以取逻辑值(真或假),返回值为1或0。
2.4.3逻辑运算符及逻辑表达式逻辑运算真值表逻辑表达式
用逻辑运算符和圆括号将操作数连接起来的、符合C语法规则的式子称为逻辑表达式。具体构成规则如下:
单目逻辑运算符表达式或
表达式双目逻辑运算符表达式其中的表达式主要是关系表达式,也可以是字符型或算术表达式、条件表达式、赋值表达式、逗号表达式等。
2.4.3逻辑运算符及逻辑表达式逻辑运算的短路特性在逻辑表达式求解时,并不是所有的逻辑运算符都要被执行,当表达式的运算结果能够确定以后,运算过程将立即终止,后面的部分不予执行。这种现象称为逻辑运算符的短路现象,也叫懒惰求值法。具体情况如下。(1)x&&y&&z
只有x为真(非0)时,才需要判断y的值,只有x和y都为真的情况下才需要判断z的值。(2)x||y||z
只有x为假,才需要判断y的值,只有x和y都为假才需要判断z的值。2.4.3逻辑运算符及逻辑表达式2.4.4赋值运算符及赋值表达式赋值运算符赋值运算符(=)用于赋值运算,是C语言中最基本的运算符,分为基本的赋值运算和复合赋值运算。由”=”连接的式子称为赋值表达式。(1)基本赋值运算符的符号为“=”,作用是将右侧的表达式赋值给左侧的变量,是双目运算符。由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。(2)复合的赋值运算,在赋值运算符“=”之前可以加上算术运算符或移位运算符构成复合的赋值运算符。C语言规定可以使用10种复合赋值运算符,分别为+=、−=、*=、/=、%=、<<=、>>=、&=、^=、|=。【例2-10】假设变量x=10,y=20,计算各赋值表达式的值。(1)x+=10(2)x*=y+20(3)x+=x−=x/10实例分析2.4.4赋值运算符及赋值表达式计算结果:(1)20(2)400(3)182.4.5条件运算符及条件表达式
条件运算符(?:)是C语言中唯一的一个三目运算符,其目的是进行条件判断。条件运算符的一般格式为:
表达式1?表达式2:表达式3条件运算符的运算规则可以描述为:如果“表达式1”的值为非0(即逻辑真),则运算结果等于“表达式2”的值;否则,运算结果等于“表达3”的值//FileName:chap2_11.c#include<stdio.h>intmain(){intn;
printf("输入一个整数n:");
scanf("%d",&n);
printf("%d是一个%s\n",n,(n%2==0?"偶数":"奇数"));
return0;}实例分析程序运行结果如下:输入一个实数n:5↙5是一个奇数2.4.5条件运算符及条件表达式编写一个程序,输出用户输入的整数是奇数还是偶数。2.4.6逗号运算符及逗号表达式C语言提供一种特殊的运算符—逗号运算符。其功能是用它将两个表达式连接起来,组成一个表达式,称为逗号表达式。逗号表达式的一般形式如下:
表达式1,表达式2逗号表达式的运算过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。
2.4.6逗号运算符及逗号表达式//FileName:chap2_12.c#include<stdio.h>intmain(){
inta=2,b=4,c=6,x,y;
y=((x=a+b),(b+c));
printf("y=%d,x=%d\n\n",y,x);
return0;}实例分析程序运行结果如下:y=10,x=62.4.7sizeof运算符及sizeof表达式
sizeof是C语言的一种单目操作符。将sizeof运算符与操作数组合在一起构成的式子称为sizeof表达式。sizeof运算符用来获得一个数据或数据类型在内存中所占空间的字节数。Sizeof表达式的一般形式如下:
sizeof(表达式)或
sizeof(数据类型名)
2.4.7sizeof运算符及sizeof表达式//FileName:chap2_13.c#include<stdio.h>intmain(){inta=2;
printf("%d,",sizeof(int));
printf("%d,",sizeof(long));
printf("%d,",sizeof(float));
printf("%d,",sizeof(double));
printf("%d,",sizeof(char));
printf("%d,",sizeof(6));
printf("%d,",sizeof(a));
printf("%d",sizeof(a+6));
return0;}程序运行结果如下:4,4,4,8,1,4,4,4实例分析C语言运算符的优先级与结合性
2.5不同数据类型数据间的混合运算
学习目标理解混合运算中数据的自动类型转换掌握强制类型转换规则2.5不同数据类型数据间的混合运算
很多情况下,在进行某种数值运算的过程中,会对操作数的数据类型进行类型转换,有些转换由系统自动进行,有些转换由程序员人为指定。对于系统自动进行的类型转换通常要遵循一定的转换规则,如图所示。
2.5.1自动类型转换自动类型转换发生在不同数据类型的量混合运算时,由编译系统自动完成。自动转换遵循以下规则。(1)若参与运算量的类型不同,则先转换成同一类型,然后进行运算。(2)转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。(3)所有的浮点运算都是以双精度进行的,即使仅含有float单精度量运算的表达式,也要先转换成double型,再进行运算。(4)char型和short型参与运算时,必须先转换成int型。2.5.2强制类型转换除赋值转换外,系统自动进行的数据类型转换都是低精度类型向高精度类型的转换,如果需要将高精度类型的数值转换为低精度类型,必须由程序员人为指定,即强制转换。因此,强制类型转换需指定转换后的数据类型。强制类型转换的一般形式如下:
(类型说明符)(表达式)其功能是把表达式的值的数据类型强制转换成类型说明符所指定的类型。例如,(float)a表示将变量a转换成float型,而(int)(x+y)表示将表达式“x+y”的值转换成int型。2.5.2强制类型转换强制类型转换注意事项(1)强制类型转换的过程中有可能造成信息的丢失。(2)如果被转换的数值在指定的结果类型中无法表示,那么虽然符合C语言的语法,这种转换也是没有意义的。(3)无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型,即原变量不会发生任何变化。(4)C语言将强制转换类型符看做是单目运算符,单目运算符的优先级高于双目运算符。2.5.2强制类型转换实例分析//FileName:chap2_15.c#include<stdio.h>intmain(){floatx;
inti;
x=4.5;
i=(int)x;//将x临时强制转换成整型,离开本行x还是单精度型
printf("x=%f,i=%d",x,i);
return0;}程序运行结果如下:X=4.500000,i=4第3章控制结构
3.1算法的基本知识
3.2顺序结构程序设计
3.3选择结构程序设计
3.4循环结构程序设计
3.5转移控制语句
3.6综合实例学习目标理解算法的特性和要素掌握常用的算法描述方法3.1算法的基本知识广义上讲,算法是解决某一问题的方法和步骤。狭义上,算法指的是计算机算法,即对特定问题求解步骤的一种描述,它是计算机指令的有限序列,其中每一条指令表示计算机可以进行的一个或多个操作。算法的概念3.1算法的基本知识算法的特性3.1.1算法的特性和要素(1)有穷性(2)确定性(3)可行性(4)有零个或多个输入(5)有一个或多个输出算法的要素3.1.1算法的特性和要素一个计算机所能执行的算法必须具备以下两个要素:
(1)基本操作即构成算法的操作取自哪个操作集。计算机操作主要包括:算术运算、关系运算、逻辑运算、函数运算、位运算及I/O操作等。由于不同的计算机语言所对应的操作集略有不同,所以在设计算法前,应先确定编程语言。
(2)控制结构每个算法都是由一系列的操作组成。同一操作序列,按不同的顺序执行,就会得到不同的结果。控制结构即如何控制组成算法的各操作的执行顺序。一个算法只能由3种结构组成,即顺序结构、选择结构、循环结构。3.1.2算法的描述算法的描述方法有很多种,最常用的有自然语言、伪代码、流程图、N-S图、PAD图和计算机语言等。自然语言3.1.2算法的描述自然语言是人们在日常生活、工作、学习中通用的语言,一般不需要专门学习和训练就能理解用这种语言所表达的意思。但用自然语言描述程序(或算法)的流程时,一般要求直接而简练,尽量减少语言上的修饰。实例分析3.1.2算法的描述
用自然语言描述sum=1+2+3+…+99+100的算法。①定义变量sum,并置初始值为0。②计算1+2+3+…+99+100的和,并将结果赋给sum。③输出变量sum的值。
流程图3.1.2算法的描述流程图是一种传统的算法表示方法,用一些图框表示各种操作,用流程线表示操作的执行顺序。用图形表示算法,直观形象、易于理解。ANSI(AmericanNationalStandardInstitute)规定了一些常用流程图符号。实例分析3.1.2算法的描述用流图描述sum=1+2+3+…+99+100的算法
N-S图3.1.2算法的描述
N-S图是由I.Nassi和B.Shneiderman于1973年共同提出的一种结构化描述方法。在这种流图图中,去掉了所有的流程线,算法写在一个矩形框内,在该矩形框内还可以包括其他的矩形框。N-S流程图用以下的流程图符号。N-S图3.1.2算法的描述实例分析3.1.2算法的描述用N-S图描述sum=1+2+3+…+99+100的算法
程序设计语言3.1.2算法的描述对于采用自然语言、流程图和N-S图描述的算法,计算机是不能执行的。要让计算机执行一个算法,必须把该算法转换成计算机语言。用计算机语言表示算法必须严格遵循所使用语言的语法规则。实例分析3.1.2算法的描述【例3-1】编程求1+2+3+…+99+100的累加和。//FileName:chap3_1.c#include<stdio.h>intmain(){ inti,sum; i=1;sum=0; while(i<=100) {
sum=sum+i;
i++; } printf("Thesumis%d\n",sum); return0;}程序运行结果如下:Thesumis5050学习目标熟练掌握C语言中的基本语句掌握格式化输入输出函数的基本用法3.2顺序结构程序设计语句构成3.2.1表达式语句表达式语句是由表达式加上分号(;)组成。其一般形式如下:
表达式;这里的表达式是指C语言中任何合法的C表达式。例如:x=y+z;//赋值表达式语句y+z;
//加法运算语句,但计算结果不能保留,无实际意义i++;
//自增1语句,即i的值增1
注意事项3.2.1表达式语句使用赋值语句时需要注意以下几点。
(1)在赋值符“=”右边的表达式也可以是一个赋值表达式。例如:
a=b=c=5;
(2)注意赋值表达式和赋值语句的区别。 赋值表达式是一种表达式,它可以出现在任何允许表达式出现的地方,而赋值语句则不能。语句构成3.2.2函数调用语句函数是C程序的基本组成单位,一个函数的执行是通过在程序中调用这个函数来实现的,调用函数的操作由C语句来完成,通常称为函数调用语句。其一般形式如下:
函数名(参数表);例如,“printf("hello!");”就是一个函数调用语句。
注意事项3.2.2函数调用语句一个完整的计算机程序应具备输入输出功能,C语言本身并不提供数据的输入输出语句,有关的输入输出操作都是通过调用C标准库函数来实现的。C语言提供的输入输出标准库函数有getchar()、putchar()、scanf()和printf()等。引用C语言标准库函数时,必须用编译预处理命令“#include”将头文件“stdio.h”包含到用户源程序中,即在程序的开始写一行命令#include<stdio.h>或者#include”stdio.h”。
getchar()3.2.2函数调用语句字符输入函数的一般形式如下:
intgetchar()功能:接收从终端输入的一个字符,并返回其ASCII码值。例如:
intch=getchar();//从输入终端(如键盘)接收一个字符并把它赋给ch变量。
putchar()3.2.2函数调用语句字符输出函数的一般形式如下:
intputchar(charch)
功能:向终端输出一个字符,并返回该字符的ASCII码值。
实例分析3.2.2函数调用语句//FileName:chap3_2.c#include<stdio.h>intmain(){
charch1,ch2,ch3,ch4;
ch1=getchar();
ch2=getchar();
ch3=getchar();
ch4=getchar();
putchar(ch1); putchar('\n');
putchar(ch2); putchar('\n');
putchar(ch3); putchar('\n');
putchar(ch4);
return0;}程序运行结果如下:C++↙C++printf()3.2.2函数调用语句格式化输出函数的一般形式如下:
intprintf(char*format[,argument,...]);
功能:函数printf将一组参数,按format给定的格式,把数据格式化并且输出到标准输出设备。若出错,则返回负数。向终端输出一个字符,并返回该字符的ASCII码值。函数调用的一般形式为:
printf("格式控制字符串",输出项列表);
3.2.2函数调用语句%[标识][宽度][.精度]格式字符printf()方括号表示该项可有可无◆-:左对齐输出,缺省为右对齐输出◆+:正数输出加号(+),负数输出减号(-)◆空格:正数输出空格代替加号(+),负数输出减号(-)。十进制整数,指定输出宽度。▼指定宽度>实际宽度,补空格。▼指定宽度≤实际宽度,按实际输出。▼不指定宽度,按实际输出。输出精度指示符。◆对整数,表示至少要输出的数字个数,不足补0,多则原样输出。◆对实数,表示小数点后至多输出的数字个数,不足补0,多则舍入处理。◆对字符串,表示最多输出的字符个数,不足补空格,多则丢弃。整型数据d/i以有符号十进制形式输出整型数o以无符号八进制形式输出整型数x/X以无符号十六进制形式输出整型数u以无符号十进制形式输出整型数实型数据f以小数形式输出实型数e/E以指数形式输出实型数g/G按数值宽度最小的形式输出实型数字符型数据c输出一个字符s输出字符串其他%输出字符%本身scanf()3.2.2函数调用语句格式化输入函数的一般形式如下:
intscanf(格式控制字符串,地址列表)功能:按照格式控制的要求,将从终端输入的数据赋值给地址列表中的各个变量。格式控制字符串的含义和函数printf()中的格式控制字符串类似,地址列表列出了各变量的地址,由取地址运算符“&”后跟变量名组成。函数调用的一般形式为:
scanf("格式控制字符串",地址列表);3.2.2函数调用语句scanf()%[*][宽度
]格式字符输入赋值抑制字符:该格式要求输入数据,但不赋值,即在地址列表中没有对应有地址项。宽度指示符:该输入项最多可输入的字符个数。如遇空格或不可转换的字符,读入的字符将减少。g/G输入指数形式的单精度实型数输入一个字符串s输入单个字符c字符型数据输入指数形式的单精度实型数e输入小数形式的单精度实型数f实型数据输入无符号十六进制整型数x/X输入无符号八进制整型数o/O输入无符号的十进制整型数u/U输入十进制整型数d/D整型数据//FileName:chap3_7.c#include<stdio.h>intmain(){
inta,b,temp;
printf("Pleaseinputab:\n");
scanf("%d%d",&a,&b);
temp=b;
b=a;
a=temp;
printf("a=%d,b=%d\n",a,b);
return0;}实例分析3.2.2函数调用语句运行结果如下:Pleaseinputab:23↙a=3,b=2语句构成3.2.3空语句仅由分号“;”组成的语句称为空语句。空语句是不执行任何操作的语句。例如,
while(getchar()!='\n')
{
;//循环体为空语句
}空语句通常起到占位的作用,在程序没有完全开发完成前,可用空语句占位,以便后续开发填充代码。
语句构成3.2.4复合语句把多个语句用大括号括起来组成的语句称为复合语句。在语法上,复合语句相当于单条语句,而不是多条语句。其一般形式为:
{
语句1
……
语句n
}复合语句可以放在能够使用语句的任何地方,它建立一个新的作用域或块。复合语句是C语言中唯一不用分号“;”结尾的语句。
输入摄氏温度c的值,计算华氏温度f的值。(计算公式为:f=9*c/5+32)//FileName:chap3_8.c#include<stdio.h>intmain(){
floatc,f;
printf("Pleaseinputc:");
scanf("%f",&c);
f=9*c/5+32;
printf("f=%6.2f\n",f);
return0;}实例分析运行结果如下:Pleaseinputc:28↙f=82.403.2顺序结构程序设计学习目标熟练掌握if语句的各种用法掌握switch语句的用法3.3选择结构程序设计能够编写简单的选择结构程序3.3.1
if语句
if语句是实现选择结构最常用的语句,其作用是根据给定的条件,判断执行哪些语句,要执行的语句可能有一条或多条。if语句包括基本if语句、双分支if语句、多分支if语句和嵌套if语句四种形式。
3.3.1
if语句基本if语句该语句的一般形式如下:
if(表达式)
语句功能:如果表达式的值为真,则执行其后面的语句,否则不执行该语句。
3.3.1
if语句双分支if语句这是if语句比较完整的形式,包含一条if子句和一条else子句。该语句的一般形式如下:
if(表达式)语句1
else语句2功能:如果表达式的值为真,则执行语句1,否则执行语句2。
3.3.1
if语句多分支if语句该语句的一般形式如下:
if(表达式1)语句1
elseif(表达式2)
语句2
...
elseif(表达式n)
语句n
else语句n+1功能:依次判断表达式的值,当出现某个表达式的值为真时,则执行其对应的语句,然后跳转到整个if语句之后继续执行程序;如果所有的表达式均为假,则执行else后的语句,即语句n+1。
3.3.1
if语句多分支if语句3.3.1
if语句嵌套的if语句当if语句的操作语句中包含其他if语句时,称为嵌套的if语句。该语句的基本形式如下:
功能:如果表达式1的值为真(非0),执行if子句的内嵌if语句,否则执行else子句的内嵌if语句。内嵌if语句就是if子句和else子句的操作语句,可以是上述if语句3种形式中的任何一种。说明:在嵌套的if语句结构中,一定要注意else与if之间的对应关系。在C语言中规定的对应原则是:
else总是与它前面最近的一个尚未匹配的if相匹配。
嵌套的if语句3.3.1
if语句3.3.1
if语句实例分析编写程序,输入一个x的值,按以下函数计算并输出y的值。
-1(x<0)y=0(x=0)
1(x>0)
3.3.1
if语句实例分析3.3.1
if语句实例分析//FileName:chap3_15.c#include<stdio.h>intmain(){
intx,y;
scanf("%d",&x);
if(x<0)
y=-1;
else
if(x==0)
y=0;
else
y=1;
printf("y=%d\n",y);
return0;}3.3.1
if语句实例分析求一个任意的一元二次议程ax2+bx+c=0的解。3.3.1
if语句实例分析//FileName:chap3_16.c#include<stdio.h>#include<math.h>intmain(){
floata,b,c,d,x1,x2,p,q;
scanf("%f,%f,%f",&a,&b,&c);
if(a==0)
printf("Inputerror!");
else
{
d=b*b-4*a*c;
if(d==0)
printf("x=%f\n",-b/(2*a));
elseif(d>0) {
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("x1=%.2f,x2=%.2f\n",x1,x2);
} else {
p=-b/(2*a);
q=sqrt(-d/(2*a));
printf("x1=%.2f+%.2fi\n",p,q);
printf("x2=%.2f-%.2fi\n",p,q);
}
}
}3.3.2
switch语句
C语言提供了一种switch语句专门处理多分支的情形,使程序变得简洁易懂。switch语句的一般形式如下:
switch(表达式)
{
case常量表达式1:语句块1
case常量表达式2:语句块2…
case常量表达式n:语句块n
default:语句块n+1
}功能:首先计算switch后面括号内的“表达式”,然后依次与各个case后面的“常量表达式”的值进行比较,当“表达式”的值与某一个case后面的“常量表达式”的值相等时,就选择这个标号作为入口,执行该case子句后面的语句块,并继续执行其后的所有case子句直到程序结束。如果“表达式”的值与所有case后面的“常量表达式”的值都不相等,则执行default后面的语句。
3.3.2
switch语句实例分析输入一个百分制成绩,要求输出对应的成绩等级。//FileName:chap3_18.c#include<stdio.h>intmain(){floatscore;inttemp;chargrade;printf("Pleaseinputthescore:");scanf("%f",&score);temp=(int)score/10;
switch(temp) {
case10:
case9:grade='A';break;
case8:grade='B';break;
case7:grade='C';break;
case6:grade='D';break;
default:grade='E';
} printf("scoreis%.2f,gradeis%c\n",score,grade); return0;}学习目标熟练三种基本的循环控制语句掌握循环的嵌套3.4循环结构程序设计能够应用基本的循环语句编写复杂的程序3.4.1
while语句基本形式一般为关系表达式或逻辑表达式,也可以是C语言其他类型的合法表达式
用来控制循环体是否执行称为内嵌语句,可以是基本语句、控制语句,也可以是复合语句是循环重复执行的部分while(表达式)语句
3.4.1
while语句语句流程3.4.1
while语句实例分析用while循环求1~100的累加和。
3.4.1
while语句实例分析//FileName:chap3_21.c#include<stdio.h>intmain(){intsum=0,i=1;while(i<=100){sum=sum+i;i++;
}printf("sum=%d\n",sum);return0;}运行结果如下:sum=5050注意事项3.4.1
while语句如果while的(表达式)值为0,则循环体一次也不执行(例如当i的初值=101)。在循环体中必须有使循环趋向结束的操作,否则循环将无限进行(死循环)。在循环体中,语句的先后位置必须符合逻辑,否则会影响运算结果。
3.4.2
do-while语句基本形式do
语句
while(表达式);语句流程3.4.2
do-while语句实例分析用do…while循环求n!。3.4.2
do-while语句算法描述:(1)定义变量n,接受用户的输入;(2)定义累乘器变量multi,multi←1;(3)定义变量i,i←1;(4)如果n<0,则给出相应的提示信息;否则,如果n=0,则直接输出变量multi的值1;
否则,执行第5~6步。(5)如果i<=n,则循环执行以下语句multi←multi*i,实现累加功能;i++;(6)输出multi的值。实例分析3.4.2
do-while语句//FileName:chap3_24.c#include<stdio.h>intmain(){intn,i=1;longintmulti=1;
printf("pleaseinputn(n>=0):");
scanf("%d",&n);
if(n<0)
printf("invalidinput!");
elseif(n==0)
printf("%d!=%ld\n",n,multi);else
{
do
{
multi=multi*i;
i++;
}while(i<=n);
}
printf("%d!=%ld\n",n,multi);
return0;}3.4.3
for语句基本形式for(表达式1;表达式2;表达式3)
语句循环初始条件循环控制条件循环体语句流程3.4.3
for语句实例分析输出Fibonacci数列1、1、2、3、5、8、13…的前20项,要求每输出5项后换行。3.4.3
for语句实例分析3.4.3
for语句实例分析3.4.3
for语句//FileName:chap3_29.c#include<stdio.h>intmain(){ intf1,f2,f,i; f1=f2=1; printf("%10d%10d",f1,f2);//前2项先输出
for(i=3;i<=20;i++)//迭代从第3项开始
{
f=f1+f2;f1=f2;f2=f;
printf("%10d",f);//一行输出够五个,就换行
if(i%5==0)
printf("\n"); } return0;}3.4.3
for语句省略表达式1、2、3,即:
for(;;)就等同于:while(1),会无限循环(死循环)省略表达式1和表达式3,即:
for(;表达式2;)就等同于:while(表达式2)省略表达式2,即:
for(表达式1;;表达式3)就等同于:表达式1;while(1){…表达式3;}注意事项3.4.4循环的嵌套如果将一个循环语句放在另一个循环语句的循环体中,就构成了循环的嵌套。内嵌的循环结构内还可嵌套循环结构,构成多层嵌套。3种循环语句都可以在循环嵌套中使用。
3.4.4循环的嵌套实例分析输入n的值,计算并输出1~n的阶乘之和。3.4.4循环的嵌套实例分析3.4.4循环的嵌套实例分析//FileName:chap3_30.c#include<stdio.h>intmain(){
intn,s,i,j,t;
scanf("%d",&n);
s=0;
i=1;
while(i<=n)
{
t=1;
for(j=1;j<=i;j++)
t=t*j;
s=s+t;
i++;
}
printf("Theresultis%d\n",s);
return0;}学习目标熟练break和continue语句的用法3.5转移控制语句能够应用break和continue语句解决实际问题3.5.1
break语句基本形式
break语句除用于退出switch结构外,还可用于由while、do…while和for构成的循环结构中。当执行循环体遇到break语句时,break所在循环将立即终,从循环语句后的第一条语句开始继续往下执行。
break语句的一般形式如下:
break;3.5.1
break语句语句流程3.5.1
break语句实例分析算法描述:(1)接收用户输入的m的值;(2)循环变量赋初值i←2,循环条件i<=m-1,循环变量i++,循环执行以下语句:如果m能被i整除,则结束循环。(3)循环结束后判断m与i的关系,如果m等于i,则输出m是素数。否则输出m不是素数。判断任意一个数是否为素数。3.5.1
break语句实例分析//FileName:chap3_34.c#include<stdio.h>intmain(){
intm,i;
scanf("%d",&m);
for(i=2;i<=m-1;i++)
{
if(m%i==0)
break;
}
if(i==m)
printf("%disprimenumber\n",m);
else
printf("%disnotprimenumber\n",m);
return0;}3.5.2
continue语句基本形式
continue语句与break语句不同,当在循环体中遇到continue语句时,程序将不执行continue语句后面尚未执行的语句,开始下一次循环,即只结束本次循环的执行,并不终止整个循环的执行。
continue语句的一般形式如下:
continue;3.5.2
continue语句语句流程3.5.2
continue语句实例分析把100~120之间不能被3整除的整数输出。3.5.2
continue语句实例分析//FileName:chap3_35.c#include<stdio.h>intmain(){
intn;
for(n=100;n<=120;n++)
{
if(n%3==0)
continue;
printf("%d",n);
}
return0;}3.6综合实例实例分析统计选票。现有选票如下:3,1,2,1,1,3,3,2,1,2,3,3,2,1,1,3,2,0,1,4,-1。-1是结束标志。设1选李,2选张,3选王,0和4为废票,问谁会当选?
3.6综合实例实例分析3.6综合实例实例分析//FileName:chap3_38.c#include<stdio.h>intmain(){
intvote,lvote=0,zvote=0,
wvote=0,invalidvote=0;
scanf(“%d”,&vote);
while(vote!=-1)
{
switch(vote)
{
case1:lvote++;break;
case2:zvote++;break;
case3:wvote++;break;
case0:
case4:invalidvote++;
}
scanf(“%d”,&vote);
}
printf(“Li:%2d,Zhang:%2d,Wang:%2d,Invalid:%2d”,lvote,zvo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026下半年幼儿园保教知识与能力教师资格历年真题教师资格巩固训练试卷及解析
- 企业筹资管理考卷题目及答案
- 学年总结材料积累留存实操技巧
- 脐静脉知识考核试题及答案
- 小学三年级美术与劳动技术融合实践课:《纸雕小天鹅》教案
- 高中生物学·高三二轮复习《细胞的结构基础》教学设计
- 初中七年级道德与法治《洞察、管理与创造:做积极情绪的真正主人》单元整体教学设计
- 初中七年级地理(人教版)气温知识清单
- 小学科学三年级上册《鸟》核心概念建构探究式教案
- 初中八年级英语上册 Unit 7 Seasons Task 板块项目式学习教学设计
- 生产副总管理的思路和规划
- 2024年中国装饰公司100强企业排名
- JGJ142-2012 辐射供暖供冷技术规程
- NB-T10935-2022除氧器技术条件
- 烟煤胶质层指数测定仪不确定度评定报告
- 染色定型车间管理制度
- 机械工程材料与热加工课程概论1-6章
- 房屋出售独家委托协议
- 费森尤斯CRRT操作流程1
- 汨罗2022小学教师招聘考试真题及答案解析
- GB/T 41831-2022项目管理专业人员能力评价要求
评论
0/150
提交评论