《C语言程序设计》中职全套教学课件_第1页
《C语言程序设计》中职全套教学课件_第2页
《C语言程序设计》中职全套教学课件_第3页
《C语言程序设计》中职全套教学课件_第4页
《C语言程序设计》中职全套教学课件_第5页
已阅读5页,还剩578页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

模块1C语言简介全套可编辑PPT课件共12个模块,内容包括:C语言简介,C语言快速入门——C语言程序结构认识,数据类型、变量、常量及格式声明,运算符——C语言的血液,C语言程序的三种结构,数组,函数,指针,结构体与联合体,预处理命令,链表的基本概念及要点和文件等。1.1计算机语言发展简介计算机语言总的来说可以分为机器语言、汇编语言和高级语言三大类。这一分类同时体现了计算机语言发展的一个过程。为了减轻使用机器语言编程的痛苦,人们进行了一种有益的改进:用一些简洁的英文字母或符号串来代替一个特定指令的二进制串,如用“MOV”代表数据传递,用“ADD”代表加法等,从而使程序具备了一定的可读性,这就是汇编语言。但是计算机是不能直接识别这些符号的,需要专门的程序来将这些字符翻译成二进制的机器语言,这种翻译程序就是汇编程序。汇编语言和机器语言实质相同,都依赖于机器硬件,直接对硬件进行操作,程序的可读性和可移植性均不好,不利于计算机的推广使用。汇编语言属于计算机低级语言。1631.1计算机语言发展简介随着计算机技术的不断发展,计算机语言也逐步发展到了高级语言阶段。高级语言与低级语言的显著不同点就是:高级语言以接近人类思维的语言描述方式来进行编程,因而程序的可读性很好,易学易用。高级语言经历了从早期语言到结构化程序设计语言、从面向过程到面向对象程序设计语言的发展过程。现在,高级语言有Basic、C、C++、C#、Pascal、Fortran、PHP、Delphi、Java等,计算机语言的蓬勃发展,极大地拓展了计算机的开发应用。高级语言组织的代码同样不能直接被计算机识别执行,必须经编译器编译生成可执行文件,程序方可运行。在所有计算机高级语言中,可以说C语言是很经典的一门基础性高级语言。它是一门过程语言,兼有汇编和高级语言的特性,很受广大编程爱好者的欢迎。1.2C语言的特点C语言诞生于20世纪70年代初,后来美国政府为C语言制定了一套ANSI标准,成为现行的C语言标准。自1978年开始,C语言先后被移植到大、中、小、微型机上。下面是一个简单的C程序例子,其功能是输出《登鹳雀楼》全诗到显示器上:1.2C语言的特点#include<stdio.h>main(){printf("登鹳雀楼\n");printf("王之焕\n");printf("白日依山尽,\n");printf("黄河入海流。\n");printf("欲穷千里目,\n");printf("更上一层楼。\n");}程序中#include<stdio.h>是包含头文件,main()是C程序必备的主函数,{}中间的是main函数的函数体,printf()是头文件stdio.h中定义的库函数,其功能是向屏幕输出""中的内容,\n是换行符。1.2C语言的特点说明:入门学习者常用的TurboC或Win-TC是不支持中文字符的,建议读者安装Dev-C++进行学习。总体上来说,C语言具有以下显著的特点:(1)语言简洁、紧凑,使用方便、灵活。C语言使用32个关键字、9种控制语句,程序书写形式自由。(2)数据类型和运算符丰富。C语言共有45个运算符,丰富的运算符说明C语言能进行丰富的运算。(3)可移植性强。C程序不做修改基本上就可用于各种型号的计算机和各种操作系统中。(4)能直接操作硬件。C语言能实现汇编语言的大部分功能,可以直接对硬件进行操作。这是其他高级语言所不能达到的。1.3附表1.3.1C语言的数据类型C语言的数据类型如图11所示。图1-1C语言的数据类型1.3附表1.3.2C语言运算符表C语言共有45个运算符,按运算符的级别高低(执行的先后顺序)排列如表1-1所示。表1-1C语言运算符1.3附表1.3.2C语言运算符表表1-1C语言运算符续表1.3附表1.3.3C语言的32个关键字所谓关键字,就是C语言已内定其功能而不能做其他用途的词,如auto用于定义自动变量、break用于中止循环等。1.3附表1.3.4C语言的9种控制语句(1)if()~else:条件控制语句;(2)for()~:循环语句;(3)while()~:循环语句;(4)do~while():循环语句;(5)continue:结束本次循环语句;(6)break:中止循环或switch语句;(7)switch:多分支选择语句;(8)goto:转向语句;(9)return:从函数返回语句。1.4C程序上机步骤1.4.1C语言集成开发环境简介C语言的编译器比较多,对于一个初学者来说,用Win-TC或Turbo-C均可入门,随着学习的深入,可逐渐向集成开发环境转换。由于C语言简单易学、使用广泛,因而其集成开发环境也是很丰富的,如CodeBlocks、EclipseCDT、Dev-C++、AnjutaDevStudio等。下面简单介绍Dev-C++的使用方法。1.4C程序上机步骤1.4.2Dev-C++上机步骤在Windows7环境下,下载并安装好Dev-C++。首次运行软件时,在语言环境选项中注意选择“简体中文/Chinese”。进入软件界面后,按Ctrl+N快捷键或执行“文件”→“新建”→“源代码”菜单命令(图1-2),打开代码编辑器。图1-2打开代码编辑器1.4C程序上机步骤1.4.2Dev-C++上机步骤在代码编辑器中编辑好代码,保存文件,按F9执行编译,再按F10执行运行(或按F11直接执行编译和运行)。若程序有误,将会给出提示;若程序无误,将直接生成一个可执行文件(.exe)予以执行,并显示程序运行结果,如图1-3所示。图1-3显示程序运行结果1.4C程序上机步骤1.4.3一个C语言程序的完成过程从上面的例子可以看出,一个C程序的完成过程是:(1)编辑:输入源程序并存盘(扩展名为.c);(2)编译:将源程序翻译为目标文件(扩展名为.obj);(3)链接:将目标文件生成可执行文件(扩展名为.exe);(4)运行:执行.exe文件,得到运行结果。C语言优点很多,亦有不足,如语法限制不太严格、程序安全性较低等。但瑕不掩瑜,时至今日,C语言仍然为全球广泛使用的计算机语言之一。ThankYou!C语言快速入门——C语言程序结构认识模块22.1一个C程序例子——快速认识C语言程序结构本节通过一个例子来认识C语言程序的基本结构。在程序中,除注释里的内容外,所有的符号都必须是英文符号。注释符为/*…*/。程序示例(程序中的行号不是程序的一部分,只是方便解释程序):/*程序功能:比较输入的两个整数,输出最大的那一个,再输出3.14乘以最大值的积*/1.#include"stdio.h"/*预处理,包含头文件stdio.h*/2.#definePI3.14/*定义宏名PI*/3.intmax(intx,inty);/*声明函数原型*/4.intmain()/*主函数*/5.{/*主函数体开始*/6.inta,b,c=0;/*声明部分。定义3个整型变量*/7.scanf("%d%d",&a,&b);/*执行语句。在键盘上输入2个10进制整数*/8.c=max(a,b);/*执行语句。调用自定义max函数,把结果赋给c。此句执行的是第12~18行*/2.1一个C程序例子——快速认识C语言程序结构9.printf("Themaxnumberis%d\n",c);/*执行语句。在屏幕上输出最大的数并换行*/10.printf("PI*c=%f\n",PI*c);/*执行语句。输出PI*c的结果并换行*/11.}/*主函数体结束*/12.intmax(intx,inty)/*自定义函数max*/13.{/*max()函数体开始*/14.intz;/*声明部分。定义一个整型变量z*/15.if(x>y)z=x;/*执行语句。若x>y,则把x赋给z*/16.elsez=y;/*执行语句。否则把y赋给z*/17.return(z);/*执行语句。z值返回到max函数的调用处c=max(a,b);*/18.}/*max()函数体结束*/2.2程序详解2.2.1预处理——#include"stdio.h"(1)#开头为“预处理命令”(关于预处理,详见模块10)。(2).h表示该文件是头文件(关于头文件,详见模块10.4)。stdio.h为C语言标准输入/输出头文件,它里面定义了scanf()和printf()等标准输入/输出函数。在一个C语言程序中,当要使用到库函数时,必须包含该库函数所在的头文件。(3)包含头文件有两种方式:#include"stdio.h"和#include<stdio.h>。<>和""的区别是:①<>表示编译时直接在软件设置指定的路径(如TurboC或Win-TC所在文件夹下的include文件夹)寻找stdio.h头文件。有则加载,没有则报错。②""表示编译时先在正在编辑的源代码文件所在的文件夹里面寻找stdio.h头文件,如果没有,就转到软件设置指定的路径中寻找(转为<>寻找方式)。2.2程序详解2.2.2宏定义——#definePI3.14define是宏定义命令,PI是宏名(通常用大写字母表示),3.14是字符串常量,意思是用PI这个宏名来代表3.14这个常量。2.2程序详解2.2.3函数原型声明——intmax(intx,inty);什么是函数?函数就是一个子程序(或模块),这个子程序实现一个单一的功能,如求面积的功能、求最小公倍数的功能等(关于函数,详见模块7)。max()是一个自定义函数,其调用于第8行,定义于第12行,因此,调用处于定义之前。规则是:当自定义函数定义于其调用之后时,要在其调用之前对函数原型进行声明。一般来说,函数原型声明于main()外面的程序头部位置,且以“;”结束。2.2程序详解2.2.4主函数——intmain()main()是C程序的主函数。一个C程序有且只能有一个main()函数。C程序的执行始于main()函数也终于main()函数。(1)int指函数类型为int型。因为main()函数是系统调用的,运行完毕要返回一个值给操作系统,以确定main()是否正确执行。返回0表示main()正常结束,否则说明程序运行出错,需调用错误处理。(2)main()函数在程序中的位置可随意,不会影响程序的执行。(3)2.2程序详解2.2.5函数体开始和结束——{和}在这里“{”是main()函数的函数体开始的地方,到第11行“}”处则是main()函数的函数体结束的地方。C语言的函数由函数首部和函数体构成。函数首部包括函数名、函数返回值类型、参数名、参数类型等;函数体则由“{}”括起来。2.2程序详解2.2.6变量的定义及初始化——inta,b,c=0;这是函数体的声明部分,声明必须以“;”结束。在这里声明了3个整型(int)变量,分别是a、b、c;声明多个变量时变量之间用“,”隔开,其中,变量c被初始化为0。变量,意即变化的量,是相对于常量而言的。变量是C语言中最重要的名词之一。可以说,变量是C语言活的灵魂。2.2程序详解2.2.6变量的定义及初始化——inta,b,c=0;数据类型变量名;例如:(1)“inta;”定义(或声明)一个名为a的整型(int)变量。(2)“floatb_1;”声明一个名为b_1的单精度浮点型(float)变量。(3)“longx;”声明一个名为x的长整型(long)变量。具体数据类型请查阅“1.3.1C语言的数据类型”。变量的声明一般在函数体的首部,必须以“;”结束。1.变量的定义方法2.2程序详解2.2.6变量的定义及初始化——inta,b,c=0;(1)变量名只能由字母、数字和下划线组成,不能用关键字做变量名。(2)变量名不能以数字开头,长度不能超过32个字符,多余的不被识别。(3)变量名中大、小写字母被视为不同的字符,习惯上变量名用小写字母表示。(4)可以同时声明多个同类型变量,变量名中间用“,”隔开。(5)变量定义必须放在变量使用之前,一般放在函数体的开始部分。2.变量的命名规则2.2程序详解2.2.6变量的定义及初始化——inta,b,c=0;变量的初始化就是在定义(声明)变量时给变量赋一个初始值。赋值方法是用赋值运算符“=”。注意它不是数学运算中的“等于”符号,C语言中“等于”符号的写法是“==”。例如:(1)“inta=5;”读作:定义(或声明)一个整型变量a并初始化其值为5。这样,在变量a的内存中就有了一个整型值5。(2)“floatx_1=3.65;”读作:声明一个单精度浮点型变量x_1并初始化其值为3.65。3.变量的初始化此句以下为语句执行部分。本句表示输入两个十进制整数到变量a和b所在的内存空间中。(1)C语言的函数体由声明部分和执行部分组成。执行部分就是一系列执行语句的组合。语句必须以“;”结束(C语言语句有5种形式,见模块2.3)。2.2程序详解2.2.7C语言标准输入函数——scanf("%d%d",&a,&b);2.2程序详解2.2.7C语言标准输入函数——scanf("%d%d",&a,&b);(2)scanf()是C语言的标准输入函数,使用方法是:①scanf(“格式控制”,地址列表);②%d是格式声明,按指定的格式输入。格式声明的方法是:%+格式字符这里%d表示十进制带符号的整数。③地址列表中的变量必须带地址与运算符&。④“格式控制”和地址列表之间必须用“,”隔开。“scanf("%d%d",&a,&b);”表示输入两个十进制整数到变量a和b所在的内存空间中。⑤输入时只能用空格、回车或Tab键作为数据分隔符,不可用其他符号。⑥格式控制里如果有普通字符(除格式声明和转义字符外的字符),则需原样输入。2.2程序详解2.2.8自定义函数调用——c=max(a,b);该句是执行语句,调用自定义函数max(执行第12~18行),a,b是实参(实际参数),并把结果赋值给变量c。该句包含函数调用语句“max(a,b);”,整体上是赋值语句“c=max(a,b);”。执行该语句后,变量c内存中的原值(0)将被新值[max(a,b)的调用结果]覆盖,即c中的值不再是0,而是函数调用结果这个新值。2.2程序详解2.2.9C语言标准输出函数—printf("Themaxnumberis%d\n",c);该句是执行语句,输出最大的数并换行。(1)printf()是C语言的标准输出函数,使用方法是:printf(“格式控制”,输出列表);“格式控制”和输出列表之间用“,”隔开。(2)格式控制包括:①普通字符:需原样输出的字符。“Themaxnumberis”(包括空格)是普通字符,原样输出。②格式声明:%d是格式声明(说明同上)。③转义字符:用于实现指定的功能,如\n用于实现换行(也称换行符)。01左边“PI*c=”是普通字符,原样输出。02%f是格式声明,输出浮点数。03\n是转义字符,换行。04右边PI*c是输出列表,即PI*c的结果。2.2程序详解2.2.10格式控制运用——printf("PI*c=%f\n",PI*c);该句是执行语句。输出PI*c的结果并换行。2.2程序详解2.2.11自定义函数,形参与实参——intmax(intx,inty)自定义函数max()的功能是比较两个数的大小,并返回大的那个数。函数首部说明如图2-1所示。图2-1函数首部说明“intmax(intx,inty)”是函数首部,注意不能像语句一样带“;”。(1)max为函数名。取函数名时最好能和函数的功能意思接近。因为当一个程序自定义多个函数时,函数名有助于我们快速地判定该函数的功能。(2)(intx,inty)中的x和y是max函数的两个形参(形式参数)。定义形参时必须定义其数据类型(此处为int型)。形参的类型必须和实参一致。第8行“c=max(a,b);”的实参a和b的类型为int,所以形参x和y也必须定义为int型。(3)2.2程序详解2.2.11自定义函数,形参与实参——intmax(intx,inty)1.具体说明2.2程序详解2.2.11自定义函数,形参与实参——intmax(intx,inty)永远是形参调用实参,即形参把实参调过来进行运算,再把运算结果返回。形参在调用实参的过程中占用存储单元,该存储单元不是实参所在存储单元。2.形参和实参的关系第13行“{”是max函数体开始的地方,第18行“}”是max函数体结束的地方。“intz;”是max()函数体的声明部分,它定义一个整型变量z。2.2程序详解2.2.12自定义函数体声明部分——intz;第15~17行是函数体执行部分。本句意为:如果x>y成立,就执行“z=x;”,即把x赋值给变量z。if()是C语言条件判断语句,具体用法如下:if(表达式)表达式1;/*注意中间不能有任何符号*/else表达式2;/*注意中间不能有任何符号*/运算过程是:如果表达式成立(为真),就执行表达式1;否则,就执行表达式2。“elsez=y;”是执行语句。如果x>y不成立,就执行“z=y;”,即把y赋值给变量z。2.2程序详解2.2.13自定义函数体执行部分——if(x>y)z=x;返回运算结果z。return为函数返回语句,返回到main()函数调用处。如果一个函数被定义为void型,则不能用return语句,也不能在主函数中使用该函数的值;若定义非void型,需用return返回结果。一个return只能返回一个结果。2.2程序详解2.2.14函数返回语句——return(z);2.3知识要点通过例子清晰地认知了C语言的程序结构。本模块应掌握以下知识要点:(1)C语言程序由函数组成,即函数是构成C语言程序的基本单位。(2)函数由函数首部和函数体构成。①函数首部一般包括函数名、函数返回值类型、参数名和参数类型。②函数体由声明部分和执行部分(语句)组成,处于一对{}中。③声明和语句的区别:声明确定了变量等在内存中有了位置和内存空间的大小,语句是可以执行的运算过程。④C语言语句可以描述如下:a.控制语句:如if等9种控制语句。b.函数调用语句:如“printf("good");”。c.表达式语句:如“x=y;a=a+b;”等。d.空语句(只有分号),如“;;”表示两条空语句。e.复合语句:多条语句在一对{}中,视为一条语句,如“{t=a;a=b;b=t;}”,注意复合语句{}外不能加“;”。2.3知识要点(3)函数功能是单一的,即一个函数只能实现一个功能。(4)一个C程序有且只能有一个main()函数(主函数),程序的执行始于它,也终于它。其位置可以任意,不影响程序的执行。(5)当自定义函数定义在调用之后时,应在调用之前声明该函数的原型。一般声明在程序头部位置。(6)程序注释“/**/”位置也可随意,不影响程序的执行。(7)C语言程序允许一行写几条语句,也允许一条语句拆开写在几行上,习惯用小写字母书写语句。(8)C语言程序所有的符号都必须使用英文符号。1232.4自我测试在显示器屏幕上分行输出“school”“student”“study”3个单词。在显示器屏幕上用“*”号输出字符“E”。仿照本模块程序结构示例,试写一个程序,实现过程是:从键盘输入2个整数,自定义一个名为sum的求和函数,该函数的功能是对输入的两个整数进行求和并将值返回主函数。在主函数中输出该值。ThankYou!数据类型、变量、常量及格式声明模块33.1常量3.1.1常量的类型1)2)3)常量可分为整型常量、实型常量、字符常量和字符串常量。十进制整型常量:由正负号和数字0~9组成,如-36、25等。1.整型常量八进制整型常量:由正负号和数字0~7组成,且必须以0开头,如025(对应十进制数为:2×81+5×80=21)等。十六进制整型常量:由正负号、数字0~9和字母A~F(不区分大小写)组成,且必须以0x开头,其中字符A~F依次表示10~15,如0xd、0x15(对应十进制数为:1×161+5×160=21)等。1)十进制实型常量由正负号、数字0~9和小数点组成,如1.23、-3.4等。在C语言中,5/2和5.0/2结果是不同的,前者被认为是两个整型数据相除,结果仍为整型,后者5.0为实型常量,则结果为实型。因此,5/2结果为2(取整),5.0/2结果为2.5。2)指数形式的实型常量由正负号、数字0~9、小数点和字母E(不区分大小写)组成。其一般形式是aEn。其中,a为1~9的实数,默认小数位为6位;E为阶码标志,代表底数10;n为阶码,只能是十进制整数。例如:0.11写成指数形式就是1.100000E-01,即1.100000×10-1。125.6写成指数形式就是1.256000E+02,即1.256000×102。3.1常量3.1.1常量的类型2.实型常量注意:小数点是实数的标志。3.1常量3.1.1常量的类型3.字符常量1)普通字符常量由单引号''括起来的单个字符就是普通字符常量,如'A','a'等。字符常量在内存中占1个字节(B)的内存空间。2)转义字符由一个斜杠“\”开头,不同于字符原有意义,故称为转义字符。\':表示单引号字符,即。\":表示双引号字符,即"。\\:表示反斜杠字符,即\。\a:响铃。\b:退格。\n:换行。\f:换页。\r:回车。\t:到下一个制表位。\ddd:表示3位八进制数所代表的字符,\xhh:表示2位十六进制数所代表的字符,3.1常量3.1.1常量的类型由一对双引号括起来的字符序列就是字符串常量,如"English","A"等。系统会自动给字符串常量加一个结尾符'\0',因而字符串常量在内存中所占的空间为实际长度+1,故"A"和'A'是完全不同的,"A"是字符串常量,在内存中占2B的空间;'A'是字符常量,在内存中占1B的空间。4.字符串常量3.1常量3.1.2常量的进制转换(1)十进制(D)。例如,(35)10或35D。(3)八进制(O)。例如,(145.65)8或145.65O。(4)十六进制(H)。例如,(3C)16或3CH。1.数制的表示(2)二进制(B)。例如,(10000001)2或10000001B。3.1常量3.1.2常量的进制转换2.进制相互转换(1)十进制转二进制(基数2)。整数部分“除2取余”,小数部分“乘2取整”。例如:13.625D=B?所以,13.625D=1101.101B。以此类推,十进制转八进制(基数8)、十六进制(基数16)方法同上。(2)二进制转十进制。例如:1101.101B=1×23+1×22+0×21+1×20+1×2-1+0×2-2+1×2-3=13.625D,即数码(如1)乘以位权(如23)之和。3.1常量3.1.2常量的进制转换(3)二进制与八进制互转。八进制范围内的有效数字与其二进制的对应如下:①二进制转八进制——“三位一并”法,即整数部分自低(右)至高(左)三位一并,小数部分自高(左)至低(右)三位一并,不足部分补0。即1100101.1101B=145.64O。②八进制转二进制——“一分为三”法。3.1常量3.1.2常量的进制转换(4)二进制与十六进制互转。十六进制范围内的有效数字与其二进制的对应如下:①二进制转十六进制——“四位一并”法,方法同二进制转八进制类似。1011101010.11101B=001011101010.11101000B=2EA.E8H②十六进制转二进制——“一分为四”法,方法同八进制转二进制类似。3C9.7AH=001111001001.01111010B=11111001001.0111101B3.2变量3.2.1整型变量1.基本型整型(int)和短整型(short)例如,“intx_1=128;”声明一个名为x_1的int型变量并初始化其值为128。“shortx_2=-1;”声明一个名为x_2的short型变量并初始化其值为-1。(1)内存空间长度:2B(16bit)。(2)所表数的范围:-32768~32767(-215~215-1)。(3)对应的格式声明:①%d或%i:有符号十进制整数,若为正,则省略“+”号。②%u:无符号十进制整数。③%o:八进制整数。④%x:十六进制整数。3.2变量3.2.1整型变量1.基本型整型(int)和短整型(short)(4)说明:关于负数的%u(无符号)、%o(八进制)、%x(十六进制)输出。整数在内存中都是以补码形式存在的,因而对负数的运算必须先求其补码,然后按指定的格式输出,如-1(长度2B,16bit,即16位)。提示:①原码:最高位为符号位,1表示负,0表示正。正数的原码、反码、补码一致。②反码:保持最高位不变,其余按位取反。③补码:在反码的基础上加1,即反码+1(二进制1)。3.2变量3.2.1整型变量2.无符号整型(unsignedint)和无符号短整型(unsignedshort)例如:unsignedintx_3=16;unsignedshortx_4;(1)内存空间长度:2B(16bit)。(2)所表数的范围:0~65535(0~216-1)。(3)对应格式声明:%d、%u、%o、%x。unsigned的数据范围是0~65535,-1按%u输出时为65535,即65536-1。由此可知:-2按%u输出对应65536-2=65534;-3按%u输出对应65536-3=65533;……以此类推。3.2变量3.2.1整型变量3.长整型(long)例如:longx_5;(1)内存空间长度:4B(32bit)。(2)所表数的范围:-2147483648~2147483647(-231~231-1)。(3)对应格式声明:%ld、%lu。4.无符号长整型(unsignedlong)例如:unsignedlongx_5;(1)内存空间长度:4B(32bit)。(2)所表数的范围:0~4294967295(0~232-1)。(3)对应格式声明:%ld、%lu。3.2变量3.2.2实型变量例如:floaty_1=3.14;声明一个名为y_1的单精度浮点型变量并初始化其值为3.14。(1)内存空间长度:4B(32bit)。(2)所表数的范围:10-37~1038。有效数字:6~7位。(3)对应格式声明:①%f:单精度浮点数,默认保留6位小数。②%e:指数形式。③%g:浮点数形式,输出时省略无意义的0。1.单精度浮点型(float)3.2变量3.2.2实型变量2.双精度浮点型(double)例如:doubley_2;(1)内存空间长度:8B(64bit)。(2)所表数的范围:10-307~10308。有效数字:15~16位。(3)对应格式声明:%f、%e、%g。3.长双精度浮点数(longdouble)例如:longdoubley_3;(1)内存空间长度:16B(128bit)。(2)所表数的范围:10-4931~104932。有效数字18~19位。(3)对应格式声明:%lf、%le、%lg。3.2变量3.2.3字符变量例如:charc='A';声明一个名为c的字符变量并初始化其值为字符A。(1)内存长度:1B(8bit)。(2)格式声明:①%c:单个字符。②%d:该字符的ASCII码值。1.字符型(char)3.2变量3.2.3字符变量“charch[]="Howareyou";”声明一个字符数组ch并初始化其值为字符串"Howareyou",“char*p="WelcometoChina!";”定义一个字符指针变量并初始化其值为字符串"WelcometoChina!"的首地址。例如:charch[]="Howareyou";char*p="WelcometoChina!";printf("%s\n",ch);/*输出字符串"Howareyou"*/printf("%s\n",p);/*输出字符串"WelcometoChina!"*/关于字符指针变量和字符数组,以后再讲。2.字符串只能赋给字符数组或对字符指针变量初始化

例如:printf("%-10d",12);10为输出宽度,不足部分补空格。此处输出时为:左对齐,右补8个空格,即12uuuuuuuu(12占两个字符,u表示空格);“%10d”则为右对齐,左补空格,即uuuuuuuu12。(1)例如:printf("%#x",37);#x表示输出时加前缀0x,输出0x25;用于标注数字为十六进制。(2)例如:printf("%#o",37);#o表示输出时加前缀0,输出045;用于标注数字为八进制。(3)例如:printf("%10.3s","chinese");表示右对齐,位宽10,从左往右取前3个字符,输出chi,左边补7个空格。(4)3.3格式声明补充说明“-”为左对齐;无“-”则为右对齐。

例如:printf("%10.3f",1234.67890);表示右对齐,位宽10,四舍五入保留3位小数,输出1234.679,左边再补2个空格,即输出uu1234.679。(5)例如:printf("%3d",1234);指定了位宽,在位宽不足时按实际长度输出,输出1234。(6)例如:floatx;……printf("%d",x);在进行输入/输出时,最常见的错误就是格式声明和所定义的变量类型不一致,如“%d”格式不是float类型的格式,出错。(7)例如:printf("%%%.2f",3.145678);输出%3.15。(8)3.3格式声明补充说明3.4附表常量的类型见表3-1,变量的数据类型见表3-2。表3-1常量的类型3.4附表表3-2变量的数据类型3.4附表表3-2变量的数据类型续表3.5自我测试1.下列变量定义及初始化正确的是()。A.shorta_1=2.8;B.longenum=31415;C.floatjg=5;D.charxm="Jack";2.下列定义的变量中,在内存中所占空间最大的是()。A.longx_1B.floatx_2C.doublex_3D.unsignedlongx_43.字符串"\\a\10123\x66\a"所占的内存空间是()B。A.8B.9C.10D.114.下列各数中最大的是()。A.0x80B.0174C.11111011BD.125D5.有变量声明“charcome=g;”,则“printf("%s","come");”的输出结果是()。A.103B.gC.comeD.s一、选择题3.5自我测试该段程序的功能是:根据Lucy输入的x_1变量值来计算圆的面积,输入数大于或等于5,就取变量x_2为半径,否则就取变量x_3为半径计算圆的面积,最后输出:Lucysresultis:圆的面积。二、根据前面所学的关于变量定义和格式控制等的相关知识,指出下面程序的错误,修改后上机调试7.scanf("%d",x_1);8.if(x_1>=5)s=N*x_2*x_2;9.elses=N*x_3*x_3;10.printf("%csresultis:",name);11.printf("x_1=%f,s=%f\n",x_1,s);12.}1.include<stdio.h>2.defineN3.143.intmain()4.{charname="Lucy";5.intx_1,floatx_2=3,x_3=4;shorts;6.printf("Pleaseinputx_1\n");3.5自我测试三、指出下列printf()函数的输出结果printf("%u,%d",-1,-1);printf("%o",10);printf("%x",10);printf("%x",10.00);printf("%x",-1);printf("%f",2.1);printf("%e",2.8);printf("%g",2.8000);printf("%c",c);printf("%d",A);printf("%c",97);printf("%s","abcd");printf("\123\164\165\x64\x65\x6e\164");inta=21;printf("%#x",a);intb=21;printf("%#o",b);charch[15]="goodluck";printf("%.4s",ch);floatP=3.1415926;printf("%5.4f",p);ThankYou!运算符——C语言的血液模块44.1第1级:()、[]、->、.(1)()运算符:在多个运算符中,括号运算优先运算。这个与数学运算方式保持一致。例如:inta;a=a+(a=4);/*先()号运算,给变量a赋常量值4;因为“+”运算高于赋值“=”运算,故先执行4+4运算;最后执行赋值“=”运算,结果a值等于8*/printf("%d",a);/*输出8*/(2)[]为变址运算符(后述)。(3)->为指向结构体成员运算符(后述)。(4).为结构体成员运算符(后述)。1.!:逻辑非运算4.2第2级:!、~、++、--、+、-、(类型)、&、*、sizeof()(1)其值为:非0即1,即只有0和1两个逻辑值。例如:inta=6,b=0,c=0,d;d=!a+!b+!c;/*!a结果为0;!b结果为1;!c结果为1;故d最后得2*/printf("%d-%d",!d,d);/*输出0-2*/(2)要领会条件语句中的含义。例如:if条件判断中,if(x)等同于if(x!=0),而if(!x)则等同于if(x==0)。while循环条件判断中,while(x)等同于while(x!=0),而while(!x)则等同于while(x==0)。2.~:按位取反运算(简称位非运算)4.2第2级:!、~、++、--、+、-、(类型)、&、*、sizeof()(1)正整数的位非运算。由于正整数的原反补一致,故直接对原码取反,得新原码,此时最高位变1,即为负,对该新原码求补码即得位非值。可见,正整数位非结果变负。例如:inta=6;printf("%d",~a);/*输出-7*/计算方法如下:2.~:按位取反运算(简称位非运算)4.2第2级:!、~、++、--、+、-、(类型)、&、*、sizeof()(2)负整数的位非运算。由于负整数在内存中是以补码形式存在的,所以必须先对负整数求补码,再取反。此时最高位为0,为正,正数原反补一致,直接计算结果即得位非值。可见,负整数位非结果变正。例如:inta=-6;printf("%d",~a);/*输出5*/计算方法如下:3.++、--:自增自减运算符4.2第2级:!、~、++、--、+、-、(类型)、&、*、sizeof()(1)前置时,如++i,--j,要先增减后运算。(2)后置时,如i++,j--,要先运算后增减。(3)只能用于单个变量自增自减,不能用于表达式,如(x+y)++或--(x+y)是错误的;也不能用于常量,如++3,4--等也都是错误的。例如:inti=3;printf("%d-%d\n",i++,++i);/*printf()函数里的运算是从右往左的,故先计算++i,即先自增1到4,再做输出运算,输出4;执行i++时,先做输出运算,输出4,再自增1,i实际变为5。故输出4-4*/printf("%d\n",i);/*输出自增后的值,即5*/3.++、--:自增自减运算符4.2第2级:!、~、++、--、+、-、(类型)、&、*、sizeof()再如:intx=2,y=3,d;d=y*x+(y--)+(++x);/*先执行++x,变量x增1得值3,而y--要先运算再自减,故先不动,则右边为3*3+3+3,得15,故d被赋值15,y参加了运算,再自减1,为2*/printf("d=%d,x=%d,y=%d\n",d,x,y);/*输出d=15,x=3,y=2*/(4)结合方式:自左向右。例如:a+++b---c;/*实际上就是:(a++)+(b--)-c;*/(5)i++本质就是i=i+1。4.(类型):强制数据类型转换运算符4.2第2级:!、~、++、--、+、-、(类型)、&、*、sizeof()数据类型的转换有两种,一种是自动转换,另一种是强制转换。(1)自动转换:由低向高自动转换,其中有两个必然转换。①float型在运算时一定会先自动转换成double型。②short和char型在运算时一定会先自动转换成int型。4.(类型):强制数据类型转换运算符4.2第2级:!、~、++、--、+、-、(类型)、&、*、sizeof()(2)强制转换:分为显式强制转换和隐形强制转换,显式强制转换必须用()号把转换类型括起来。例如:/*显式强制转换:*/(int)3.58;/*强制转换3.58为整型,即为3*/intx=25,m;floaty=25.0;printf("%f\n",(float)x);/*强制转换变量x为浮点型,输出值为25.000000*//*隐形强制转换:*/m=x+y;/*m是int型,故x+y虽是浮点型,但赋给m时强制转换为int型,即m=50*/printf("%d",m);/*输出50*/5.&地址与运算符和*指针运算符4.2第2级:!、~、++、--、+、-、(类型)、&、*、sizeof()(1)&地址与运算。例如:inta;scanf("%d",&a);/*给变量a输入值,就是输入一个常值到a的内存空间中。不可忘记&*/(2)*指针运算:①定义指针变量。②对地址进行取内容运算。例如:inta=5;int*p=&a;/*等同于“int*p;p=&a;”,定义一个整型指针p并指向变量a的地址*/printf("%d",*p);/*这里*p的含义是:对指针p进行取内容运算。因为p指向了变量a的地址,因此就是*(&a)运算,即对变量a的地址进行取内容运算,即为5*/6.sizeof():内存空间长度运算4.2第2级:!、~、++、--、+、-、(类型)、&、*、sizeof()(1)sizeof()计算的结果都是整型(int)值。(2)16位编译环境下指针的内存长度为2B(32位环境下为4B)。floatf_x;float*p=&f_x;printf("%d\n",sizeof(f_x));/*计算变量f_x的内存空间长度,输出4*/printf("%d\n",sizeof(p));/*计算指针变量p的内存空间长度,输出2*/4.3第3级:*、/、%(1)*乘法运算符(略)。(2)/除法运算符。除法规则:①若两边均为整型,则结果去掉小数部分只取整数部分。例如:printf("%d",5/2);/*取整,输出2*/②若有实数,则结果为浮点型。例如:printf("%f",5/2.0);/*2.0为实数,输出2.500000*/4.3第3级:*、/、%(3)%模运算(求余运算)。运算规则:①要求两边都为整型。例如:printf("%d",5%2);/*输出1*/;printf("%d",5%2.0);/*程序报错*/最常用法:判断一个数是偶数还是奇数。例如,有整型变量x,若x%2==0,则x为偶数,x%2==1则为奇数。②被除数为负,无论除数符号如何,结果都为负。除数的符号对结果无影响。例如:3%2=1,3%-2=1-3%2=-1,-3%-2=-1加法运算和减法运算比较简单,不再详细介绍。

4.4第4级:+(加)、-(减)4.5第5级:<<(左移)、>>(右移)位移运算符(1)移位规则:①正整数位移——左移右补0,右移左补0。例如:inta=7,b=7;printf("%d-%d",a<<2,b>>2);/*a左移2位后结果为28,b右移2位后结果为1*/4.5第5级:<<(左移)、>>(右移)位移运算符②负整数位移——先求补码再位移,左移右补0,右移左补1,位移后得到的是新原码,再进行求补码运算即得位移结果。例如:inta=-7,b=-7;printf("%d-%d",a<<2,b>>2);/*输出-28和-2*/4.5第5级:<<(左移)、>>(右移)位移运算符(2)当位移与位非结合时,由于位非级别高于位移,要注意须先进行位非运算。例如:inta=7,b=-7;printf("%d-%d",~a<<2,~b>>2);/*输出-32和1*/①~a<<2:先~a运算,结果是-8,再-8<<2,-8×22,结果为-32。②~b>>2:先~b运算,结果是6,再6>>2,6/22,结果为1。4.6第6级:关系运算符:<、<=、>、>=常用于if条件控制语句和循环条件语句中。要特别注意不要把赋值符号“=”当作“等于”符号。“=”符号处于第14级的位置。

4.7第7级:等于符号==和不等于符号=4.8第8级:&按位与运算符运算法则:1&1为1,其他为0(1&0、0&1、0&0)。例如:inta=7,b=-7;printf("%d",a&b);/*输出1*/运算过程如右。思考:任意一个数与0进行&运算,结果如何?4.9第9级:^按位异或运算符运算法则:1^1为0,0^0为0,1^0为1,0^1为1。例如:inta=7,b=-7;printf("%d",a^b);/*输出-2*/运算过程如右。思考:任意一个数与0进行^运算,结果如何?4.10第10级:|按位或运算符运算法则:1|1为1,1|0为10|1为1,0|0为0。例如:inta=7,b=-7;printf("%d",a|b);/*输出-1*/运算过程如下:思考:任意一个数与0进行|运算,结果如何?4.11第11级:&&逻辑与运算符运算法则:自左向右运算。①两边同时为真(逻辑值1),表达式的值才为真;②左边为真,继续右边运算;③左边为假(逻辑值0),停止右边运算。例如:inta=7,b=-7;printf("%d\n",a>0&&b>0);/*a>0为真,b>0为假,故a>0&&b>0的值为0,输出0*/printf("%d\n",a>0&&b<0);/*a>0为真,b<0为真,故a>0&&b<0的值为1,输出1*/printf("%d\n",++a>0&&++b);/*++a得8,大于0成立,++b得-6,不为0,故输出1*/printf("%d\n",--b&&++a<0);/*--b得-7,不为0,执行右边;++a得9,小于0不成立,故输出0*/printf("%d"\n,b>0&&++a);/*b>0不成立,不再执行后面的++a,a的值不变,故输出0*/printf("a=%d,b=%d",a,b);/*输出a=9,b=-7*/4.12第12级:||逻辑或运算符运算法则:自左向右运算。①任意一边为真,表达式的值即可为真;②左边为真,不再运算右边;③左边为假,继续右边运算。例如:inta=7,b=0;printf("%d\n",a>0||b>0);/*a>0为真,表达式的值为真,输出1*/printf("%d\n",a<0||b);/*a<0为假,继续右边运算;b为0,故表达式的值为0,输出0*/printf("%d\n",a<0||++b);/*a<0为假,继续右边;++b得1,不为0,为真,故表达式值为1,输出1*/printf("%d\n",b>0||++a);/*b>0为真,不再执行右边,a的值不变,表达式值为1,输出1*/printf("a=%d,b=%d",a,b);/*输出a=7,b=1*/例如:inta=3,b=-3,c=0;printf("%d\n",a+b||b+c&&a+c);/*先&&得1,再||得1*/printf("%d\n",a>c||a+b&&++c);/*先&&得0,再||得1*/4.13第13级:?:条件运算符条件运算符是C语言唯一的一个三目运算符,结合方向自右向左。语法规则:表达式1?表达式2:表达式3;运算法则:如果表达式1成立(值为真),则执行表达式2作为整个表达式的值,否则执行表达式3作为整个表达式的值。例如:inta=7,b=3,c,d;c=a>b?a+b:a-b;/*a>b成立,执行a+b,并把运算结果赋给变量c*/printf("c=%d\n",c);/*输出10*/d=a>c?a+b:c>a?a-b:c-a;/*这里体现了自右向左的结合性(运算方向),可书写为“a>c?a+b:(c>a?a-b:c-a);”,c>a成立,执行a-b,得4,a>c不成立,取“:”后面的值4,赋给变量d*/printf("d=%d",d);/*输出d=4*/4.13第13级:?:条件运算符模块2.2.1的程序目的是让我们快速了解C语言的程序结构。该程序用?:条件运算符写则很简单。比较输入的2数大小:#include<stdio.h>intmain(){inta,b,c;scanf("%d%d",&a,&b);c=a>b?a:b;printf("%d\n",c);}同样,比较输入的3个数大小,也可用三目运算符来实现:(a>b?a:b)>c?(a>b?a:b):c;/*看作3个表达式*/“=”外,其他也称复合运算符(由2个运算符构成),运算方向自右至左。1.=运算符(1)一定要把它和等于符号==区分开来。①“a=2;”读法是:把2赋给变量a。“a==2;”读法是:a等于2。②“a=b+(a=2);”要注意括号里的“a=2”不能加分号,因为它只是语句里的一部分。(2)要特别注意只能给变量赋值,不能给表达式赋值。所谓表达式,就是由运算符构成的式子,如a+b。inta_1,b,c;a_1=10;/*给单个变量赋值,正确*/b+c=20;/*不能给表达式赋值,错误*/a_1=b+c=30;/*不能给表达式赋值,错误*/4.14第14级:=、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=赋值运算符除2.+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=复合赋值运算符以+=为例:(1)“a+=b;”等同于“a=a+b;”。(2)“a+=b+c;”等同于“a=a+b+c;”,其他各运算符一样,以此类推。(3)有多个复合赋值运算符时要注意变量值的变化。例如:inta=5;a+=a-=12+8;/*自右往左,加号优于复合赋值符,故先算12+8得20;接着a-=20,即a=a-20,结果为-15,即a=-15;a被重新赋值,再运算a+=-15,即a=a+(-15),结果为-30,即a=-30;a被重新赋值-30*/4.14第14级:=、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=赋值运算符除运算方向自左至右。语法规则:表达式1,表达式2,…,表达式n。运算规则:以最后一个表达式的值作为整个逗号表达式的值。4.15第15级:,逗号运算符4.16程序示例:评比奖学金学校奖学金评比办法:语、数、外各科均以100分计,总的条件是语、数、外各科必须60分(含)以上方可评比。具体等级是:(1)语、数、外各科均在90分以上(含)或平均分在90分以上(含)为一等奖,输出:“Firstprize!”。(2)语、数、外各科均在80分以上(含)90分以下或平均分在80分以上(含)90分以下为二等奖,输出“Secondprize!”。(3)语、数、外各科均在70分以上(含)80分以下或平均分在70分以上(含)80分以下为三等奖,输出“Thirdprize!”。不符合上述条件的没有奖,输出“Noprize!”。本程序主要是条件的满足问题,哪些条件是逻辑与,哪些是逻辑或。另外,条件的书写可能比较长,可以预先用变量保存条件的逻辑值。本程序用到的if…elseif…else,学习者可查阅“5.3.3程序示例——if()多分支选择结构”的介绍。ThankYou!C语言程序的三种结构模块55.1算法简述算法是指对整个问题解决过程的描述。这个描述可以是自然语言,也可以是流程图等,其中流程图是算法描述中使用最为普遍的一种。例如:的士计费规则:起步价5元,含2公里范围,2~10公里(含)以内每公里以1.5元计,10公里以外(超出10公里的部分)每公里以2元计。程序图如图5-1所示。图5-1的士计费规则程序图1有穷性:算法必须能在执行有限个步骤之后终止。2确切性:算法的每一步骤必须有确切的定义。3输入项:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件。4输出项:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的。5可行性:算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称为有效性)。一般来说,算法具备五个明显的特征:5.1算法简述5.2顺序结构程序设计5.2.1顺序结构程序设计示例1.#include"stdio.h"2.intmain()3.{4.chara,b,c;/*定义a,b,c三个字符变量*/5.charch[10];/*定义一个名为ch的一维字符数组,数组长度10*/6.printf("PleaseinputT,o,m:\n");/*提示输入T,o,m这3个字符*/7.a=getchar();/*从键盘获取一个字符,赋给字符变量a*/8.b=getchar();/*从键盘获取一个字符,赋给字符变量b*/9.scanf("%c",&c);/*从键盘给字符变量c输入值*/10.putchar(a);/*输出字符变量a的值*/5.2顺序结构程序设计5.2.1顺序结构程序设计示例11.putchar(b);/*输出字符变量b的值*/12.printf("%c",c);/*输出字符变量c的值*/13.putchar(!);/*输出一个“!”号*/14.putchar(\n);/*输出一个换行符,即换一行*/15.printf("TomsASCIIis:%d\n",a+b+c);/*输出3个字符变量所存放字符的ASCII码之和*/16.printf("PleaseinputLucy:\n");/*提示输入“Lucy”*/17.scanf("%s",ch);/*输入Lucy这个字符串*/18.printf("%s\n",ch);/*输出Lucy这个字符串*/19.printf("LucysASCIIis:%d\n",L+u+c+y);/*输出“Lucy”每个字符的ASCII码之和*/20.}字符变量只能用来存放单个字符,在内存中占1个字节的内存空间。5.2顺序结构程序设计5.2.2程序详解1.chara,b,c;——字符变量5.2顺序结构程序设计5.2.2程序详解字符变量只能存放单个字符,那字符串怎么办呢?当然得用字符数组了。这里声明了一个名为ch的一维字符数组,长度为10,即字符个数(包括空格及结尾符\0。C语言中空格也是字符)不能超过10个。这里要区分两个概念,一个是字符数组实际长度,另一个是字符数组内存长度。例如:①chara[10]="good";字符数组a的实际长度为4(4个字符),内存长度为10。②charb[]="good";字符数组b的实际长度为4,内存长度为5。上列表明,在给字符数组初始化赋字符串时,系统会自动在串后面加上结尾符\0,但是不会计入数组的长度,即数组实际长度仍为4。如果没有定义数组长度而初始化了字符串,计算内存长度时要加上这个结尾符(占1B),如“charb[]="good";”,则sizeof(b)的结果就是5。2.charch[10];——一维字符数组5.2顺序结构程序设计5.2.2程序详解(1)输入字符串:scanf("%s",ch)。(2)输出字符串:printf("%s",ch)。要注意的是:在用scanf输入字符串时,因为scanf以空格、回车和Tab键作为分隔符,因此,若输入了空格,系统将其默认为结尾符,表示输入到此结束,这点要特别注意。而且,数组名代表了数组首元素首地址,不用加地址与&运算符。数组名代表了数组首元素首地址,只需数组名,便可输出整个串。关于数组,我们以后再进行详述,这里略微提及一下。字符数组因为存放的是字符串,因而可以用%s这个字符串格式声明进行输入和输出。举例说明:5.2顺序结构程序设计5.2.2程序详解a=getchar();——C语言的getchar()函数。从键盘获取一个字符给字符变量a。getchar()函数是C语言中用于从键盘获取单个字符的函数,不能用于获取字符串。括号中不能有任何参数。给字符变量从键盘输入值,除了用getchar()这个函数外,还可用scanf()函数。例如:a=getchar();/*等同于“scanf("%c",&a);”,第9行就是如此*/3.getchar()函数5.2顺序结构程序设计5.2.2程序详解putchar(a);——C语言的putchar()函数。输出变量a的值(字符)。putchar()函数是C语言中用于输出单个字符的函数。其括号中的参数可以是变量,也可以是字符常量,输出字符常量时,要加单引号。例如,第13行的“!”输出“putchar('!');”和第14行的换行符输出“putchar('\n');”。除了用putchar()外,单个字符输出当然也可以用printf()函数,如第12行的“printf("%c",c);”。由此可见,若变量a中存放字符'g',则输出g的方式:putchar(a);/*等同于“putchar('g');”,等同于“printf("%c",a);”*/4.putchar()函数5.2顺序结构程序设计5.2.2程序详解printf("TomsASCIIis:%d\n",a+b+c);输出存放在a、b、c这3个变量里的字符的ASCII码值之和。要注意a、b、c是变量而不是常量字符,因而不能加单引号。第19行的“printf("LucysASCIIis:%d\n",L+u+c+y);”中,L、u、c、y是常量字符,因而需加单引号。5.字符变量与字符常量5.2顺序结构程序设计5.2.3顺序结构程序设计举例【例5-1】求直角三角形的斜边——hypot()函数。输入两直角边的值,如果输入了负数,就取其绝对值,求第三边的长。#include<stdio.h>#include<math.h>intmain(){floatx,y,z;printf("Input2sides:\n");scanf("%f,%f",&x,&y);z=hypot(fabs(x),fabs(y));/*调用数学库函数hypot()求第三边*/printf("TheNO.3sideis:%.2f\n",z);printf("TheNO.3integeris:%f\n",sqrt(abs(z)));/*输出整数部分绝对值的开平方值*/}5.2顺序结构程序设计5.2.3顺序结构程序设计举例输入输出效果:Input2sides:-1,2TheNO.3sideis:2.24TheNO.3integeris:1.414214(1)hypot()函数是求直角三角形斜边的长度,包含于数学头文件math.h中。用法是:doublehypot(doublex,doubley)。(2)函数fabs()是取浮点数的绝对值,这里是防止输入了负数,因为边长不能为负。用法是:fabs(doublex)。(3)abs()是取整型数的绝对值。用法是:abs(intx)。(4)sqrt()是求算术平方根函数。sqrt(abs(z))意为:先取浮点数z的整数部分的绝对值,再对该绝对值开平方。5.3选择结构程序设计5.3.1程序示例——if()简单的单分支选择结构使用方法:if(表达式){语句序列;}如果if()括号里的表达式为真,就执行{}里的语句序列,否则不执行。如果只有一条语句,则{}可以省略,如本例中就是如此。5.3选择结构程序设计5.3.2程序示例——if()简单的双分支选择结构使用方法:if(表达式){语句序列1;}else{语句序列2;}如果if()括号里的表达式值为真,执行语句序列1,否则执行语句序列2。5.3选择结构程序设计5.3.2程序示例——if()简单的双分支选择结构【例5-3】输入一个年份,判断是否为闰年。闰年的断定方法是:能被4整除但不能被100整除或能被400整除的年份为闰年。#include<stdio.h>intmain(){intyear;scanf("%d",&year);if((year%4==0&&year%100=0)||year%400==0)printf("%d是闰年\n",year);elseprintf("%d不是闰年",year);}5.3选择结构程序设计5.3.3程序示例——if()多分支选择结构使用方法:if(表达式1){语句序列1;}elseif(表达式2){语句序列2;}elseif(表达式3){语句序列3;}……else{语句序列;}哪个if表达式的值为真,就执行它的语句序列,如果都不为真,就执行最后一个else的语句序列。5.3选择结构程序设计5.3.3程序示例——if()多分支选择结构模块5.3.1的火车货运站计费程序我们用多分支结构编写如下:printf("Pleaseinputw:");scanf("%d",&w);if(s<1000)money=M*s*w;elseif(s<2000)money=M*0.95*s*w;elseif(s<3000)money=M*0.92*s*w;elseif(s<5000)money=M*0.90*s*w;elsemoney=M*0.88*s*w;printf("\nmoney=%.2f",money);}模块5.3.1的火车货运站计费程序我们用多分支结构编写如下:#include<stdio.h>#defineM5.0intmain(){ints,w;floatmoney;printf("Pleaseinputs:");scanf("%d",&s);5.3选择结构程序设计5.3.4程序示例——if语句嵌套的多分支选择结构模块5.3.1的火车货运站计费程序我们用嵌套的多分支结构编写如下:elseif(s<3000)money=M*0.92*s*w;elseif(s<5000)money=M*0.90*s*w;elsemoney=M*0.88*s*w;elsemoney=M*s*w;/*不符合s>=1000这个条件,执行这一句*/printf("\nmoney=%.2f",money);}#include<stdio.h>#defineM5.0intmain(){ints,w;floatmoney;printf("Pleaseinputs:");scanf("%d",&s);printf("Pleaseinputw:");scanf("%d",&w);if(s>=1000)/*在满足这个条件的前提下,执行下面的语句*/if(s<2000)money=M*0.95*s*w;5.3选择结构程序设计5.3.4程序示例——if语句嵌套的多分支选择结构要注意一种情况,有多个if和else时,else总是和它最近的if进行配对。如下例,根据对输入的两个整型值进行比较判断,输出相应的结果:if(y<0)/*上面x>y若为1,再判断此处x<0是否为真,为真输出Tom,否则输出Lucy*/printf("%s","Tom");elseprintf("%s","Lucy");elseprintf("Jack");/*第1个if里,若x>y为假,直接执行这个else,输出Jack*/}#include<stdio.h>intmain(){intx,y;scanf("%d%d",&x,&y);/*输入2个整型值*/if(x>y)/*判断x>y的逻辑值为1还是0,为1,执行下面的if语句,否则,执行和该if对应的最末尾else,输出Jack*/5.3选择结构程序设计5.3.5程序示例——switch()语句多分支选择结构结构如下:switch(表达式){case常量1:语句序列1;/*注意常量值后面用的是冒号,不可与分号混淆*/case常量2:语句序列2;……case常量n:语句序列n;default:语句序列;}5.3选择结构程序设计5.3.5程序示例——switch()语句多分支选择结构switch()括号里的表达式将是一个确定的值。如果“{}”中哪个case后面的常量等于这个值,就从它后面的语句序列开始执行,直到遇到break语句或switch语句结束的“}”为止。如果没有和它相等的值,就直接执行default后面的语句序列,退出switch。模块5.3.1的火车货运站计费程序我们用switch语句多分支结构编写如下:分析:条件中里程数都是1000的倍数,根据题意有以下条件分段:s<1000有1~999/1000等于0的结果s>=1000&&s<2000有1000~1999/1000等于1的结果s>=2000&&s<3000有2000~2999/1000等于2的结果s>=3000&&s<5000有3000~3999/1000等于3和4000~4999/1000等于4的结果s>=5000去除上述条件后,剩最后这个条件,可设为default5.3选择结构程序设计5.3.5程序示例——switch()语句多分支选择结构由此,我们便可确定switch()括号里的表达式为s/1000,而case后面常量则是0~4的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论