第2章 简单C程序设计_第1页
第2章 简单C程序设计_第2页
第2章 简单C程序设计_第3页
第2章 简单C程序设计_第4页
第2章 简单C程序设计_第5页
已阅读5页,还剩185页未读 继续免费阅读

下载本文档

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

文档简介

第2章简单C程序设计《C语言程序设计》2023/2/31《解析C程序设计(第2版)》第2章简单C程序设计讲授方法——解析法“解析法”是从实际问题入手,剖析求解问题的关键点(进行知识的发现),然后结合问题讲解需要的知识点,最后给出问题的求解办法和实现过程,并举一反三。各章节以问题入手,分析并讲述需要的知识点,然后再实现该问题,并通过思考题延伸知识点或引入新的问题,环环相扣,层层推进,充分体现解析法的精髓,达到通俗易懂、由浅入深的效果,举一反三,培养迁移知识的能力。

2023/2/32《解析C程序设计(第2版)》第2章简单C程序设计本章内容圆周长和面积问题

1大小写字母转换问题2关键字与表达式基本数据类型常量与变量数据类型转换运算符和表达式C语句三角形面积问题3格式化输入输出预处理C程序结构及书写规则

42023/2/33《解析C程序设计(第2版)》第2章简单C程序设计首先分析第一个C程序#include<stdio.h>/*预处理命令*/main()

/*主函数*/{printf("hello,world!\n");/*库函数,输出字符序列*/}问题:(1)这个程序包括哪些组成部分?(2)这里显示的是字符序列,能不能显示数字数据呢?2023/2/34《解析C程序设计(第2版)》第2章简单C程序设计第一个C程序的组成预处理主函数main注释

C程序由函数组成:主函数库函数自定义函数#include<stdio.h>main()/*主函数*/{printf("hello,world!\n");}2023/2/35《解析C程序设计(第2版)》第2章简单C程序设计主函数组成main(){…;}函数头函数体C语句2023/2/36《解析C程序设计(第2版)》第2章简单C程序设计程序说明#include<stdio.h>告诉编译器在本程序中包含标准输入/输出库的信息。printf函数在stdio.h中声明。main表示C语言的一个特殊函数,称之为主函数。每个C程序都必须有一个且只能有一个主函数,整个程序从主函数开始执行,最后结束于主函数。main()表示主函数的函数头。“{}”中的内容是函数体。主函数中的所有操作(或语句)都在这一对“{}”之间。本程序的主函数中只有一条函数调用语句。“/*……*/”表示注释,不执行。

2023/2/37《解析C程序设计(第2版)》第2章简单C程序设计问题?第一个程序显示的是字符序列,能不能显示数字数据呢?C程序还可以包括哪些内容呢?下面仿照第一个C程序来编写其他程序。2023/2/38《解析C程序设计(第2版)》第2章简单C程序设计课堂练习仿照C语言第一个程序,编写C程序在屏幕上直接输出圆的周长和面积。编写程序输出如下形状的图形:************************2023/2/39《解析C程序设计(第2版)》第2章简单C程序设计问题的提出及分析例2-1仿照C语言第一个程序,编写C程序在屏幕上直接输出圆的周长和面积。分析:要计算圆面积和周长,务必知道圆半径,怎样才能获得呢?另外,要输出面积和周长(数值数据),该怎么办呢?2023/2/310《解析C程序设计(第2版)》第2章简单C程序设计问题实现方法1-直接输出圆面积和周长#include<stdio.h>/*LI2_1.C*/#include<stdio.h>intmain(){ printf("circumference=%f\n",2*3.14159*5.3);/*输出周长*/ printf("area=%f\n",3.14159*5.3*5.3);/*输出面积*/ return0;}2023/2/311《解析C程序设计(第2版)》第2章简单C程序设计C程序的基本组成主函数main标识符、关键字、注释基本数据类型常量与变量基本表达式C语句格式化输入输出预处理命令下面围绕问题,分别介绍上述语法知识。2023/2/312《解析C程序设计(第2版)》第2章简单C程序设计问题?前面反复提到标识符、关键字,什么是关键字、标识符呢?2023/2/313《解析C程序设计(第2版)》第2章简单C程序设计涉及到的语法知识-标识符与关键字标识符标识符是变量,函数,标号等的名字或标记两类:系统定义的标识符,例如:printf、scanf、main等用户自己定义的,自己定义标识符时要考虑如下问题:只能用字母、数字和下划线,并且第一个字母只能是字母或下划线;不能与关键字(系统保留的特殊词汇)相同;区分大小写,即R和r是两个不同变量。为便于阅读和理解,对象的取名尽可能直观,最好不要用系统定义的标识符。关键字我们已经学的有:shortlongintfloatdoublecharvoid2023/2/314《解析C程序设计(第2版)》第2章简单C程序设计关键字与标识符关键字(Keyword)又称为保留字,C语言中预先规定的具有固定含义的一些单词如:int,float等标识符(Identifier)系统预定义标识符,如:main,printf,include,stdio等

用户自定义标识符,如:r,Add,x,y

等2023/2/315《解析C程序设计(第2版)》第2章简单C程序设计关键字C语言中的常用的关键字(附录B)有以下32个:(1)类型名关键字:int、char、float、double、short、long、unsigned、void(2)存储类别关键字:auto、static、register、extern(3)控制语句关键字:if、while、do、goto、break、continue、for、default、case、switch、return、else(4)自定义类型关键字:struct、union、enum(5)其他关键字:typedef、sizeof、signed、include、define另外,TurboC2.0扩展关键字有:

asm,_cs,_ds,_es,_ss,cdecl,far,near,huge,interrupt,pascal2023/2/316《解析C程序设计(第2版)》第2章简单C程序设计标识符标识符分为:系统预定义标识符(如main、printf等)用户自定义标识符(如Add、r、x,y,sum等)在程序中使用的常量、变量、语句标号以及函数的名称等统称为标识符(Identifier)除库函数的函数名、头文件名和预处理命令由系统定义外,其余都由用户自定义2023/2/317《解析C程序设计(第2版)》第2章简单C程序设计标识符标识符的命名必须遵守以下原则:(1)不能是C语言中的关键字,如int,do,for等等。(2)只能由字母,数字,和下划线三种字符组成,且第一个字符必须是字母或下划线。(3)不要太长。旧的ANSIC规定前6个字符有效;在IBM-PC的MSC系统中取8个字符;TurboC则允许32个字符。(4)见名知义。区分大小写。2023/2/318《解析C程序设计(第2版)》第2章简单C程序设计标识符举例合法的标识符

不正确的标识符

smart

5smart

_decision

bomb?

key_board

key.board

FLOAT

floatYear2008a%2023/2/319《解析C程序设计(第2版)》第2章简单C程序设计注释符C语言的注释符是以“/*”开头并以“*/”结尾的字符序列。在“/*”和“*/”之间的即为注释。注释在程序中起提示、解释程序的作用。注释可出现在程序中的任何位置。程序编译时,不对注释作任何处理。在软件开发过程中,还可以将注释用于程序的调试,暂时屏蔽一些语句。注释与软件的文档同等重要,要养成使用注释的良好习惯,这对软件的维护相当重要。如:/*LI2_1.c*/#include<stdio.h>voidmain(){printf("area=%f\n",3.14159*5.3*5.3);/*输出面积*/printf("circumference=%f\n",2*3.14159*5.3);/*输出周长*/}2023/2/320《解析C程序设计(第2版)》第2章简单C程序设计进一步思考?如果需要计算多个圆的周长和面积,该怎么修改程序?例2-2计算两个圆的周长和面积,要求将给定半径存储起来,并将计算结果输出到屏幕。利用冯氏计算机存储程序的特点,可将半径用变量存储起来、多次使用,还可改变其值,即可解决计算多个的问题。2023/2/321《解析C程序设计(第2版)》第2章简单C程序设计问题的分析甲:请给我计算一下圆的周长和面积。乙:请问半径是多少?甲:5.3。乙:圆的周长=2*π*5.3=33.3

圆的面积=π*5.3*5.3=88.25算法?开始输入半径计算周长和面积输出计算结果结束2023/2/322《解析C程序设计(第2版)》第2章简单C程序设计问题实现方法2-用变量存储半径再计算#include<stdio.h>voidmain(){

floatr=5.3;

printf("circumference=%f\n",2*3.14159*r);/*输出周长*/ printf("area=%f\n",3.14159*r*r);/*输出面积*/ }2023/2/323《解析C程序设计(第2版)》第2章简单C程序设计输入半径-分析计算机如何区分半径,周长,面积?为不同的数据定义不同的变量名,例如:r,circumference,area.计算机上处理的数据有几种类型?这些数据又是什么类型?三种:整数类型(int)、实数类型(float和double)、字符类型(char),不同类型的数据其编码方式和所占空间不同。半径等数据都是实数类型2023/2/324《解析C程序设计(第2版)》第2章简单C程序设计输入半径-分析用什么语句实现输入?用赋值语句或scanf()输入的数据存放在哪?内存系统根据变量的数据类型自动为其分配空间,并将内存地址与变量名进行关联。我们根据变量名使用变量,系统根据其对应的内存地址对数据进行读写。2023/2/325《解析C程序设计(第2版)》第2章简单C程序设计方法2是用赋值语句实现的半径存储:floatr;r=5.3;2023/2/326《解析C程序设计(第2版)》第2章简单C程序设计问题实现方法3—计算多个圆面积和周长#include<stdio.h>intmain(){

floatr; r=5.3;

printf("circumference=%f\n",2*3.14159*r);/*输出周长*/ printf("area=%f\n",3.14159*r*r);/*输出面积*/

r=7.5;

printf(“circumference=%f\n”,2*3.14159*r);/*输出周长*/ printf("area=%f\n",3.14159*r*r);/*输出面积*/ return0;}2023/2/327《解析C程序设计(第2版)》第2章简单C程序设计数据类型(DataType)数据为什么要区分类型?例2-1中“2*3.14159*5.3”的2为整数,5.3和3.14159为实数,其范围不一样开辟不同的内存空间可以参加的运算不同在程序中指定数据的类型就是为了明确存储空间的大小,以便对内存中的数据进行操作不同类型的数据代表不同的数据表示形式合法的取值范围占用内存空间大小可参与的运算种类2023/2/328《解析C程序设计(第2版)》第2章简单C程序设计涉及到的语法知识-数据类型数据类型基本类型构造类型指针类型空类型整型实型(浮点型)字符型枚举类型数组类型结构体类型共用体类型单精度实型双精度实型基本整型长整型短整型无符号整型2023/2/329《解析C程序设计(第2版)》第2章简单C程序设计基本数据类型int整数,在目前绝大多数机器上占4个字节。TC2中是2个字节float单精度浮点数,一般是4个字节长double双精度浮点数,一般是8个字节长char字符,一般是1个字节长用来表示256个ASCII字符,或者0~255的整数枚举型enum注意:字符类型与整数类型在一定范围内可互相转换。即将字符的ASCII码等同于一个整数。2023/2/330《解析C程序设计(第2版)》第2章简单C程序设计基本数据类型的分类16320~4294967295unsigned

long类型符号关键字数的表示范围所占位数整型字符型实型有无(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~2147483647unsignedint0~65535unsigned

short160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127无unsignedchar80~255说明:数据类型所占字节数随机器硬件不同而不同,上表以IBMPC机为例。2023/2/331《解析C程序设计(第2版)》第2章简单C程序设计字符编码

ACSII码(AmericanStandardCodeforInformationInterchange)128个常用字符,用7位二进制编码,从0到127控制字符:0~32,127;普通字符:94个。例如:“a”字符的编码为1100001,对应的十进制数是97;换行0AH10

回车0DH13

空格 20H 32‘0’~‘9’30H~39H 48~57‘A’~‘Z’41H~5AH 65~90‘a’~‘z’ 61H~7AH 97~1222023/2/332《解析C程序设计(第2版)》第2章简单C程序设计字符编码标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。其中0~127如附录A,128~255是特殊符号如:中文、日文。2023/2/333《解析C程序设计(第2版)》第2章简单C程序设计类型长度占字节数随机器不同而不同,一般占一个机器字short≤int≤long可用下面运算测量:sizeof(数据或数据类型符或变量名)求出的结果为表达式值所属类型或者类型占用的字节数2023/2/334《解析C程序设计(第2版)》第2章简单C程序设计sizeof的应用#include<stdio.h>voidmain(void){ printf("DatatypeNumberofbytes\n"); printf("---------------------------------\n"); printf("char%d\n",sizeof(char)); printf("int%d\n",sizeof(int)); printf("shortint%d\n",sizeof(short)); printf("longint%d\n",sizeof(long)); printf("float%d\n",sizeof(float));

printf("double%d\n",sizeof(double));}2023/2/335《解析C程序设计(第2版)》第2章简单C程序设计数据类型修饰符shortshort

int的简写,短整数,一般2个字节长。可简写为shortlonglong

int,长整数,一般是4个字节长。通常简写为longlong

double,长双精度(高精度)浮点数,一般是10个字节长。signed用来修饰char、int、short和long,说明他们是有符号的整数(正整数、0和负整数)。一般缺省都是有符号的,所以这个修饰符通常省略unsigned用来修饰char、int、short和long,说明他们是无符号的整数(正整数和0)请大家课下亲自计算一下每种数据类型能够表达的数据范围!!!并思考:若计算的数据超出范围会怎样?2023/2/336《解析C程序设计(第2版)》第2章简单C程序设计C语言承认的基本数据类型charshortintintlongintsigned(或unsigned)+floatdoublelongdouble2023/2/337《解析C程序设计(第2版)》第2章简单C程序设计数据在内存中的存储格式整型(以补码方式存储)实型(默认为double型,以浮点数指数形式存储)N=S×2j字符型(存放ASCII码值)阶码符号阶码的数值尾数符号尾数的数值阶码j尾数S2023/2/338《解析C程序设计(第2版)》第2章简单C程序设计如何选择恰当的数据类型?具体问题具体分析,尽量选择取值范围较大些的数据类型1+2+3+…1!+2!+3!+…13+23+33+…2023/2/339《解析C程序设计(第2版)》第2章简单C程序设计【例】求两个整数的和。#include<stdio.h>voidmain(){

int

a=23,b=45;/*定义两个整型变量*/printf("sum=%d\n",a+b);}其中,“%d”表示按十制整数输出。2023/2/340《解析C程序设计(第2版)》第2章简单C程序设计问题?如果我们希望将面积和周长、以及两数和保存起来,应该怎么办?2023/2/341《解析C程序设计(第2版)》第2章简单C程序设计数据的两种形式数据的表现形式有两种:常量变量在上述程序中,常量(常数):5.3、23、45变量:r、a、b2023/2/342《解析C程序设计(第2版)》第2章简单C程序设计常量与变量常量是一种在程序中保持固定类型和固定值的数据。编译系统从数据形式上可以区分(除枚举类型外)。常量分为:整型常量实型常量字符常量字符串常量枚举常量变量是在程序执行过程中可以改变。2023/2/343《解析C程序设计(第2版)》第2章简单C程序设计涉及到的语法知识-常数与常量十进制:以非0数字开头,如:123,-9,0八进制:以0数字开头,如:0123,011,067十六进制:以0x数字开头,如:0x123,0xff整型常量十进制:必须带小数点,如:123.0,.9,0.0,-10.指数形式:E或e前面必须有数值,后边必须是整数,如:1.23E3,.9e-2,5e2,-8E-4实型常量普通字符:如:’a’,’2’,’H’,’&’,’#’,表示字符的ASCII码值转义字符:如:’\n’,’\167’,’\x1f’,’\\’,’\’’字符常量常量字符串常量:用双引号引起来,系统最后自动加’\0’。如:”Hello”,”a”枚举常量(枚举元素)思考:‘3’与3有何不同,“a”与‘a’有何不同还有一种常量称为符号常量例:#definePI3.14159格式:#define符号常量名常量2023/2/344《解析C程序设计(第2版)》第2章简单C程序设计十进制:以非0数字开头,如:123,-9八进制:以0数字开头,如:0123,011,067十六进制:以0x数字开头,如:0x123,0xff定点数形式:必须带小数点,如:123.05,0.9,0.0,-10.5浮点数形式:如:1.23E3,.9e-2,5e2,-8E-4普通字符:如:’a’,’2’,’H’,’&’,’#’,表示字符的ASCII码值转义字符:如:’\n’,’\167’,’\x1f’,’\a’,’\\’,’\’整型常量实型常量字符常量字符串常量:用双引号引起来,如:”Hello”,”a”枚举常量(枚举元素):如enumbox{pencil,pen}中的pencil、pen值分别为0、1常量图2-2常量的分类2023/2/345《解析C程序设计(第2版)》第2章简单C程序设计整型常量整型常量十进制:18、-31longint型常量123l、123L、123456l、123456Lunsignedint型常量123u、123U根据实际数据大小确定int型还是long型2023/2/346《解析C程序设计(第2版)》第2章简单C程序设计八进制与十六进制常量以数字“0”开始的整型常量是八进制数022、-037010和10大小不一样因为八进制并不常用,所以此种表示法比较少见以“0x”或者“0X”开始的整型常量是十六进制A~F和a~f用来表示十进制的10~15十六进制的形式比较常用0x12、-0x1F,-0x1f2023/2/347《解析C程序设计(第2版)》第2章简单C程序设计整型常量的几种形式三种形式:●十进制整数:由数字0~9和正负号表示.如123,-456,0●八进制整数:由数字0开头,后跟数字0~7表示.如0123,011●十六进制整数:由0x开头,后跟0~9,a~f,A~F表示.如0x123,0Xff例12与12L例30000为int型65536为longint型整型常量的类型●根据其值所在范围确定其数据类型●在整常量后加字母l或L,认为它是longint

型常量问题:0123=()100x123=()100Xff=()1083291255问题:0123=(

)100x123=()100Xff=()102023/2/348《解析C程序设计(第2版)》第2章简单C程序设计实型常量实型常量十进制小数形式:123.45、456.78指数形式:1e-2、4.5e3float型常量123.45f、456.78F、1e-2f、4.5e3Flongdouble型常量123.45l、456.78L、4.5e3L缺省为double2023/2/349《解析C程序设计(第2版)》第2章简单C程序设计字符(Character)常量字符常量的表示方法’a’,’A’,’5’,’%’,’$’……单引号内只能有一个字符,除非用“\”开头就是一个普通整数,也可以参与各种数学运算每个字符具有一个0~255之间的数值,可从ASCII表查出注意:’5’和整数5的区别字符的数学运算在密码学内用得比较多用“\”开头的字符为转义字符例如,’\n’,代表1个字符附录A2023/2/350《解析C程序设计(第2版)》第2章简单C程序设计字符常量——转义符转义字符一些特殊字符(无法从键盘输入或者另有它用)用转义字符表示<转义字符含义\n\v\r\a\‘\ddd\t\b\f\\\“\xhh转义字符含义换行垂直制表回车响铃单引号3位8进制数代表的字符水平制表退格换页反斜线双引号2位16进制数代表的字符2023/2/351《解析C程序设计(第2版)》第2章简单C程序设计例2-3转义符举例/*LI2_3.c*/#include<stdio.h>voidmain(void){printf("*********\n\tABC123\nabc321\t\b\n*********\n");}2023/2/352《解析C程序设计(第2版)》第2章简单C程序设计字符串(String)常量用双引号括住的由0个或多个字符组成的字符序列"Iamastring"""表示空字符串转义字符也可以在字符串中使用引号只作为字符串开始和结束的标志C语言内部用’\0’表示字符串的结束除注释外,是唯一可以出现中文的地方"x"和’x’是不同的<string.h>里定义了一系列专门的字符串处理函数2023/2/353《解析C程序设计(第2版)》第2章简单C程序设计为什么需要常量?假如不使用常量,直接使用常数,有什么影响?程序的可读性变差容易发生书写错误修改麻烦常量只能在定义时赋值,以后不能再改变其值符号常量(宏常量)枚举常量常数、符号常量和枚举常量,都可以用来表示一个永远不会改变的数建议不要直接使用常数,而用后二者代替2023/2/354《解析C程序设计(第2版)》第2章简单C程序设计符号常量也可以用标识符代表常量,称为符号常量。其定义格式为:#define符号常量常数或字符序列2023/2/355《解析C程序设计(第2版)》第2章简单C程序设计符号常量符号常量也称宏常量一般采用大写字母表示不是语句,而是一种编译预处理命令宏替换使用字符序列替换2023/2/356《解析C程序设计(第2版)》第2章简单C程序设计求圆面积和圆周长另解/*求圆面积和圆周长*/#include<stdio.h>#definePI3.14159#definer1.5voidmain(void){

printf("area=%f\n",PI*r*r);

printf("circumference=%f\n",2*PI*r);}area=7.068577circumference=9.4247702023/2/357《解析C程序设计(第2版)》第2章简单C程序设计源代码#include<stdio.h>#definePI3.14159voidmain(){floatr=5.3; printf("area=%f\n",PI*r*r);printf("circumference=%f\n",2*PI*r);}2023/2/358《解析C程序设计(第2版)》第2章简单C程序设计枚举(Enumeration)常量枚举即一一列举,枚举类型描述一组有限个整型数据值的集合。例子:enumweeks{SUN,MON,TUE,WED,THU,FRI,SAT};enumweekstoday;enumresponse{no,yes,none};enumresponseanswer;today=TUE;answer=yes;

if(answer==yes)printf("TodayisTuesday.\n");elseprintf("TodayisNOTTuesday.\n");2023/2/359《解析C程序设计(第2版)》第2章简单C程序设计变量概念:其值可以改变的量三要素:变量名、变量值、存储单元使用变量的基本原则变量必须先定义,后使用所有变量必须在第一条可执行语句前定义存储单元的地址使用&获取3a变量名变量值存储单元2023/2/360《解析C程序设计(第2版)》第2章简单C程序设计涉及到的语法知识-变量使用变量的基本原则变量必须先定义,后使用,为什么?所有变量必须在第一条可执行语句前定义变量的类型要根据实际情况(数据类型及范围)设定,否则导致类型溢出和舍入误差。一条声明语句可声明若干个同类型的变量声明变量,是初始化变量的最好时机不被初始化的变量,其值为危险的随机数例:

unsignedintx,y,sum=0;

charesc='a'; floateps=1.5;2023/2/361《解析C程序设计(第2版)》第2章简单C程序设计a变量名变量值存储地址3200A图2-4变量的三要素2023/2/362《解析C程序设计(第2版)》第2章简单C程序设计定义变量变量初始化:定义时赋初值

例:inta,b,c;floatdata;决定分配字节数和数的表示范围合法标识符例:inta=2,b,c=4;floatdata=3.67;charch=‘A’;intx=1,y=1,z=1;intx=y=z=1;变量的使用:先定义,后使用例

intstudent;stadent=19;//Undefinedsymbol‘statent’infunctionmain例

floata,b,c;c=a%b;//Illegaluseoffloatingpointinfunctionmain变量定义位置:一般放在函数开头main(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;printf(“data=%f\n”,data);}变量定义可执行语句main() {inta,b=2;a=1;floatdata;data=(a+b)*1.2;printf(“data=%f\n”,data);}编译程序根据变量定义为其分配指定字节的内存单元…...地址inta=1,b=-3,c;abc2字节2字节2字节地址地址…...内存1-3随机数变量定义的一般格式:

数据类型变量1[,变量2,…,变量n];2023/2/363《解析C程序设计(第2版)》第2章简单C程序设计【例】求两个整数的和。#include<stdio.h>voidmain(){

inta=23,b=45;/*定义两个整型变量*/

intsum;/*定义存放结果的整型变量*/sum=a+b;

/*赋值语句*/printf("sum=%d\n",sum);/*显示程序运算结果*/}其中,“%d”表示按十制整数输出。2023/2/364《解析C程序设计(第2版)》第2章简单C程序设计整型变量例inti=10,j,k;j=1;/*赋值语句*/k=20;/*赋值语句

*/printf(“%d\n”,sizeof(int));/*结果为?*/printf(“%d\n”,sizeof(i));/*结果为?*/printf(“%d\n”,sizeof(long));/*结果为?*/printf(“%d\n”,sizeof(10L));/*结果为?*/2023/2/365《解析C程序设计(第2版)》第2章简单C程序设计整型变量分类有符号整型变量●基本型:一般占2个字节(16位),int●短整型:一般占2个字节(16位),shortint●长整型:一般占4个字节(32位),longint

有符号整型变量使用signed修饰,但缺省的数据类型即表示有符号整型数据,因此可以省略修饰符signed。无符号整型变量●无符号基本型:一般占2个字节(16位),unsignedint●无符号短整型:一般占2个字节(16位),unsignedshortint●无符号长整型:一般占4个字节(32位),unsignedlongint1111111111111111unsignedint型:最大:655350000000000000000最小:00111111111111111int型:最大:327671000000000000000最小:-327682023/2/366《解析C程序设计(第2版)》第2章简单C程序设计整型变量取值范围

ANSI标准建议各种整型数据所占位数和数值范围如右表所示(TurboC与该表定义一致):注意:在微机上用long型可以得到大范围的整数,但同时会降低运算速度,因此除非不得已,不要随便使用long型数据。类型名称比特数最小取值范围[signed]short[int]有符号短整型16-32768~32767即-215~(215-1)[signed]int有符号基本整型16-32768~32767即-215~(215-1)[signed]long[int]有符号长整型32-2147483648~-2147483647即-231~(231-1)unsignedshort[int]无符号短整型160~65535即0~(216-1)unsignedint无符号基本整型160~65535即0~(216-1)unsignedlong[int]无符号长整型320~4294967295即0~(232-1)2023/2/367《解析C程序设计(第2版)》第2章简单C程序设计整型变量有符号整数的范围-32768~32767,无符号整数的范围0~65535。无符号整数使用unsigned修饰。在声明变量时,如果不指定unsigned或指定signed,则表示有符号型数据,符号位有效。如果指定unsigned,则表示无符号型数据,符号位为该数本身。032767有符号整型变量a:111111111111111符号位165535无符号整型变量c:111111111111111代表数据的第一位1-1有符号整型变量b:111111111111111如:inta,b;a=32767;b=-1;unsignedintc;c=65535;032767有符号整型变量a:111111111111111符号位165535无符号整型变量c:111111111111111代表数据的第一位1-1有符号整型变量b:111111111111111032767有符号整型变量a:111111111111111符号位165535无符号整型变量c:111111111111111代表数据的第一位1-1有符号整型变量b:111111111111111032767有符号整型变量a:111111111111111符号位165535无符号整型变量c:111111111111111代表数据的第一位1-1有符号整型变量b:1111111111111112023/2/368《解析C程序设计(第2版)》第2章简单C程序设计整型变量的溢出

一个int型变量的最大允许值为:32767。如果再加1,则结果会变成-32768。032767a:1111111111111111-32768b:000000000000000例:voidmain(){inta=32767,b;longc;b=a+1;c=(long)a+1L;printf(“a=%d,b=%d,c=%ld”,a,b,c);}运行结果为:32767,-32768,32768例:voidmain(){intx=-1;unsignedinty;y=x;printf(“%d,%d,%u\n”,x,y,y);}运行结果为:-1,-1,65535无符号数输出时,最高位数值变成符号位。如符号位为1,则输出负数。2023/2/369《解析C程序设计(第2版)》第2章简单C程序设计【例2-4】已知A=23456,B=56789,C=A+B,打印一个求A、B两数和C的竖式。源代码如下:/*LI2_4.C*/#include<stdio.h>intmain(){ longa=23456,b=56789,c; printf("%8ld\n",a); printf("%2c%6ld\n",'+',b); printf("%8s\n","--------"); c=a+b; printf("%8ld\n",c); return0;}2023/2/370《解析C程序设计(第2版)》第2章简单C程序设计实型变量实型变量float:占4字节,提供6~7位有效数字,10-37~1038double:占8字节,提供15~16位有效数字,10-307~10308例floata;a=123456.123;/*a=123456.1共7位*/doubleb;b=123456.123;/*b=123456.123000000共15位*/printf(“%d\n”,sizeof(float));/*结果为4*/printf(“%d\n”,sizeof(a));/*结果为4*/printf(“%d\n”,sizeof(double));/*结果为8*/printf(“%d\n”,sizeof(b));/*结果为8*/2023/2/371《解析C程序设计(第2版)》第2章简单C程序设计在例2-1中,用实型变量来存放圆面积和周长:#include<stdio.h>#definePI3.14159voidmain(){floatr=5.3,s,p;

s=PI*r*r;

p=2*PI*r; printf("area=%f\n",s); printf("circumference=%f\n",p);}2023/2/372《解析C程序设计(第2版)》第2章简单C程序设计实型变量的存储形式

一个实型变量在内存中是按浮点数指数形式存放的。系统把一个实型数据分成小数部分和指数部分,分别存放。不少C编译系统以24位表示小数部分(包括符号),以8位表示指数部分(包括指数的符号)。小数部分占的位(bit)数愈多,数的有效数字就越多,精度愈高。指数部分占的位数越多,则能表示的数值范围就越大。+.3141592+.314159*102符号小数部分指数31.4159

如实数:31.4159的指数形式为:.314159*102

,它在内存中的存放形式可以表示为右图所示。图中用十进制表示的,实际上在计算机中是用二进制来表示小数部分,用2的幂次来表示指数部分。1000xx….xx阶符阶码数符尾数2023/2/373《解析C程序设计(第2版)》第2章简单C程序设计课堂练习已知球的半径R=5,求球的表面积(公式是S=4πR2)。2023/2/374《解析C程序设计(第2版)》第2章简单C程序设计实型变量的溢出例:voidmain(){floata,b;a=123456.789e5;b=a+20.0f;printf(“a=%f\nb=%f\n”,a,b);}运行结果:

a=12345678848.000000b=12345678848.000000输出结果是a与b相等。虽然理论上b应比a大20,应为12345678920。而实型变量只能保证7位有效数字,后面的数字是无意义的,并不准确地表示该数。因此应该避免将一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数。同样,计算1.0/3.0*3.0的结果并不等于1。由于实型变量是用有限的存储单元存储的,因此能提供的有效数字总是有限的,在有效位以外的数字将被舍去,由此可能会产生一些误差。2023/2/375《解析C程序设计(第2版)》第2章简单C程序设计实型数据的有效数字#include<stdio.h>voidmain(){

floata;

doubleb; a=123456.789e4; b=123456.789e4;

printf("%f\n%f\n",a,b);}1234567936.0000001234567890.000000

2023/2/376《解析C程序设计(第2版)》第2章简单C程序设计【例2-5】实型量精度示例。源代码如下:/*LI2_5.C*/#include<stdio.h>voidmain(){floata;/*定义单精度实型变量*/doubleb;/*定义双精度实型变量*/a=33333.33333333333333;/*对变量a赋值*/b=33333.33333333333333;/*对变量b赋值*/printf("a=%f\nb=%f\n",a,b);/*输出变量a、b的值*/}程序的运行结果如下:a=33333.332031b=33333.3333332023/2/377《解析C程序设计(第2版)》第2章简单C程序设计字符型数据变量字符型变量字符变量存放字符ASCII码值,占一个字节char与int数据间可进行算术运算例:chara;intx,s;a=‘D’;/*a=68;*/x=‘A’+5;/*x=65+5;*/s=‘!’+‘G’/*s=33+71;*/printf(“%d\n”,sizeof(char));/*结果为1*/printf(“%d\n”,sizeof(a));/*结果为1*/printf(“%d\n”,sizeof(x));/*结果为2*/没有字符串变量,用字符数组存放2023/2/378《解析C程序设计(第2版)》第2章简单C程序设计例2-6字符型变量用整型量赋值及输出/*LI2_6.c*/#include<stdio.h>intmain(){chara,b;a=120;

/*对字符变量赋以整型值*/b=121;printf("%c,%c\n",a,b);/*把字符变量按字符型量输出*/printf("%d,%d\n",a,b);/*把字符变量按整型量输出*/return0;}2023/2/379《解析C程序设计(第2版)》第2章简单C程序设计【例2-7】打印由ASCII码表里的桃心字符组成的空心正方形。其源代码如下:/*LI2_7.C*/#include<stdio.h>intmain(){charc;c=3;printf("%2c%2c%2c%2c\n",c,c,c,c);printf("%2c%6c\n",c,c);printf("%2c%6c\n",c,c);printf("%2c%2c%2c%2c\n",c,c,c,c);

return0;}2023/2/380《解析C程序设计(第2版)》第2章简单C程序设计【例2-8】枚举型变量示例。源代码如下:/*LI2_8.C*/#include<stdio.h>intmain(){enumdayOfWeek{Mon=1,Tue,Wed,Thu,Fri,Sat,Sun};/*定义一个枚举类型*/enumdayOfWeekdayNum;/*定义枚举变量dayNum*/inti;dayNum=Fri;

/*给枚举变量赋值*/printf("Wedis%ddayOfWeek\n",Wed);

printf("Friis%ddayOfWeek\n",dayNum);/*输出枚举变量的值*/i=0;i=dayNum+1;/*混合运算*/printf("iis%d\n",i); return0;}

2023/2/381《解析C程序设计(第2版)》第2章简单C程序设计【例2-10】已知圆锥的体积公式V=πR2h/3,其中R=4.56,h=7.89。求圆锥的体积。源代码如下:/*LI2_10.C*/#include<stdio.h>intmain(){floatr=4.56,h=7.89,v;v=3.14159*r*r*h/3; printf("V=%f\n",v); return0;}2023/2/382《解析C程序设计(第2版)》第2章简单C程序设计【说明】πR2h/3还可以表示为:1.0/3*3.14159*r*r*h或者(float)1/3*3.14159*r*r*h,后者(float)表示强制类型转换。2023/2/383《解析C程序设计(第2版)》第2章简单C程序设计大小写字母转换问题提出问题:【例2-11】将小写字母换成大写字母,然后分别以整型和字符型输出。2023/2/384《解析C程序设计(第2版)》第2章简单C程序设计分析问题-char型与int型之间的关系在例2-6中声明a、b为字符型,但在赋值语句中赋以整型值。从结果看,a、b值的输出形式取决于printf函数格式控制字符串中的格式字符,当格式字符为“c”时,对应输出的变量值为字符,当格式字符为“d”时,对应输出的变量值为十进制整数。因此,char与int数据间可进行算术运算。2023/2/385《解析C程序设计(第2版)》第2章简单C程序设计解决问题例2-11:小写字母转换为大写字母

/*LI2_11.c*/#include<stdio.h>intmain(){chara,b;a='x';b='y';a=a-32;/*char与int数据间可进行算术运算*/b=b-32;printf("%c,%c\n%d,%d\n",a,b,a,b);return0;}2023/2/386《解析C程序设计(第2版)》第2章简单C程序设计数据类型转换数据类型转换分:自动类型转换(隐式转换)强制类型转换(显式转换)不同类型的数据混合运算时,首先要自动转换成同一类型,再计算,这种转换称为自动类型转换,也称隐式转换。2023/2/387《解析C程序设计(第2版)》第2章简单C程序设计自动类型转换同种数据类型的运算结果,还是该类型不同种数据类型的运算结果,是两种类型中取值范围更大的那种longdouble>double>float>long>int>short>char2023/2/388《解析C程序设计(第2版)》第2章简单C程序设计自动类型转换规则doublefloatlongunsignedintchar,short低高说明:必定的转换运算对象类型不同时转换2023/2/389《解析C程序设计(第2版)》第2章简单C程序设计自动类型转换在进行赋值操作时,会发生类型转换将取值范围小的类型转为取值范围大的类型是安全的反之是不安全的如果大类型的值在小类型能容纳的范围之内,则平安无事但是,浮点数转为整数,会丢失小数部分,非四舍五入反之,转换后的结果必然是错误的,具体结果与机器和实现方式有关。避免如此使用,好的编译器会发出警告2023/2/390《解析C程序设计(第2版)》第2章简单C程序设计自动类型转换例子例charch;inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+‘a’+i*f-d/l例inti;floatf;doubled;longl;2023/2/391《解析C程序设计(第2版)》第2章简单C程序设计【例2-12】混合运算示例。源代码如下:/*LI2_12.C*/#include<stdio.h>intmain(){ doublex,y; floata,b,c,d; x=5.67;y=6.789;

a=7.89f;b=8.9f; printf("sizeofx=%d,sizeofa=%d\n",sizeof(x),sizeof(a)); c=x+a;d=y+b;/*混合运算*/ printf("c=x+a=%f,d=y+b=%f\n",c,d); printf("sizeofx+a=%d,sizeofc=%d\n",sizeof(x+a),sizeof(c)); printf("sizeofx=%d,sizeofa=%d\n",sizeof(x),sizeof(a)); return0;}2023/2/392《解析C程序设计(第2版)》第2章简单C程序设计【例2-13】赋值表达式中数据类型转换示例。源代码如下:/*LI2_13.C*/#include<stdio.h>intmain(){inta,b=322;floatx,y=8.88;charc1='k',c2;a=y;/*单精度型转整型*/printf("%d\n",a);x=b;/*整型转单精度型*/a=c1;/*字符型转整型*/c2=b;/*整型转字符型*/printf("%d,%f,%d,%c\n",a,x,a,c2); return0;}2023/2/393《解析C程序设计(第2版)》第2章简单C程序设计强制类型转换(Casting)类型转换运算符:(类型)消除从大到小的警告l=(long)i;可以通过“(类型)表达式”的方式把表达式的值转为任意类型强转时,你必须知道你在做什么强转与指针,并称C语言两大神器,用好了可以呼风唤雨,用坏了就损兵折将2023/2/394《解析C程序设计(第2版)》第2章简单C程序设计数据强制转换举例#include<stdio.h>voidmain(){

intm=5;printf("m/2=%d\n",m/2);printf("(float)(m/2)=%f\n",(float)(m/2));printf("(float)m/2=%f\n",(float)m/2);printf("m=%d\n",m);}m/2=2(float)(m/2)=2.000000(float)m/2=2.500000m=5精度损失问题较高类型向较低类型转换时可能发生2023/2/395《解析C程序设计(第2版)》第2章简单C程序设计【例2-14】将一个华氏温度(F),转换为摄氏温度输出。公式为c=5/9(F-32)。源代码如下:/*LI2_14.C*/#include<stdio.h>intmain(){ floaths=100,ss

;ss=(float)5/9*(hs-32);printf("%f\n",ss); return0;}2023/2/396《解析C程序设计(第2版)》第2章简单C程序设计【例2-15】枚举型的强制类型转换示例。枚举常量(枚举元素)不能直接赋予整数,但可以先将整数转换为枚举型,然后再赋给枚举元素。源代码如下:/*LI2_15.C*/#include<stdio.h>intmain(){enumegg{a,b,c};enumeggtest;test=c;/*对枚举变量赋值*/printf("枚举变量判断:test枚举对应的枚举元素是c\n");printf(“a=%d,b=%d,test=%d\n”,a,b,test);test=(enumegg)0;/*类型转换*/printf("枚举变量test值改变为:%d\n",test); return0;}2023/2/397《解析C程序设计(第2版)》第2章简单C程序设计提出问题从以上例子可以看出,程序本质上是处理数据的指令集合,对数据的运算是程序的核心操作,而数据的运算是通过表达式来完成的。如例2-1中的“3.14159*5.3*5.3”、例2-12中的“x+a”、例2-14中的“(float)5/9*(hs-32)”都是对数据运算的表达式。如果要对整数按数位进行拆分,要用到哪些运算符、组成什么样的表达式呢?2023/2/398《解析C程序设计(第2版)》第2章简单C程序设计C语言提供了哪些运算符?能组成哪些表达式呢?【例2-16】已知一个两位正整数,输出这个数的十位和个位数字。【分析】对于一个两位正整数x,它的十位数字等于x÷10的商的整数部分,可以用x/10求得,它的个位数字等于x÷10的余数部分,可以用x%10求得。其源代码如下:/*LI2_16.C*/#include<stdio.h>intmain(){ intx=68,s,g; s=x/10; g=x%10; printf("%d的十位数字是%d,个位数字是%d\n",x,s,g); return0;}2023/2/399《解析C程序设计(第2版)》第2章简单C程序设计运算符与表达式C运算符算术运算符:(+-*/%++--)关系运算符:(<<===>>=!=)逻辑运算符:((!&&||)位运算符:(<<>>~|^&)赋值运算符:(=及其扩展)条件运算符:(?:)逗号运算符:(,)指针运算符:(*&)求字节数:(sizeof)强制类型转换:(类型)分量运算符:(.->)下标运算符:([])其它:(()-)2023/2/3100《解析C程序设计(第2版)》第2章简单C程序设计学习运算符要特别注意运算符功能与运算量关系要求运算量个数要求运算量类型运算符优先级别结合方向结果的类型不要拘泥于细节不要死记硬背在使用中慢慢掌握2023/2/3101《解析C程序设计(第2版)》第2章简单C程序设计基本算术运算符基本算术运算符:+-*/%结合方向:从左向右优先级:----->*/%----->+-(2)(3)(4) 说明:“-”可为单目运算符时,右结合性两整数相除,结果为整数;有一实数相除,结果为实数%要求两侧均为整型数据例5/2=-5/2.0=例5%2=-5%2=

温馨提示

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

评论

0/150

提交评论