




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章
C语言基本语法
C语言程序设计
—进阶篇2022/11/2内容概述C语言基本数据类型整型、实型、字符型的常量形式及变量定义整型、实型、字符型变量的格式化输入输出C语言的类型转换运算符及表达式2022/11/2教学目标掌握数据类型的概念,了解C语言能够处理的数据类型。掌握各种类型常量的特点及表示形式。掌握各种类型变量的定义及使用掌握数据的输入输出的基本方法。掌握C语言的运算符、表达式及运用方法。2022/11/2
在C语言中,任何数据呈现给用户的形式只有两种:常量和变量。而无论数据是常量还是变量,都必须属于各种不同的数据类型。在一个具体的C语言系统里,每个数据类型都有固定的表示方式,这个表示方式实际上就确定了可能表示的数据范围和它在内存中的存放形式。C语言为数据提供了丰富的类型,这些数据类型主要分为:基本数据类型、构造数据类型、指针类型和空类型四大类。
4.1C语言的数据类型
2022/11/2C基本数据类型
基本数据类型最主要的特点是,其值不可以再分解为其它类型。基本类型整型字符型浮点型单精度双精度枚举短整型长整型2022/11/2
整型常量即整数,按不同的进制区分,整数有三种表示方法:八进制数:以0开始的数,如:06、0106、0677等。十六进制数:以0X或0x开始的数,如:0X0D、0XFF、0x4e、0x123等。十进制数:以非0开始的数,如:220、-560、+369等。4.2.1整型常量4.2整型数据2022/11/21、整型变量的分类整型变量分为四种:基本型、短整型、长整型、无符号型基本型: 用“int”定义,在不同的编译系统中它的长度可能不同,如在TurboC下int变量占2个字节,而在VC++下6.0环境下int变量占4个字节。
4.2.2整型变量2022/11/2短整型:用“shortint”或“short”定义,占2个字节。长整型:用“long”或“longint”定义,占4个字节。无符号型:用“unsigned”定义
不存放符号,数据不带符号数。 无符号整型:“unsignedint”
无符号短整型:“unsignedshortint”
无符号长整型:“unsignedlongint”
注意:如无指定,则为有符号数。2022/11/2整型变量取值范围类型说明符数的范围 分配字节数
int-2147483648~2147483647 ■■■■
shortint-32768~32767 ■■
signedint-32768~32767 ■■
unsignedint0~4294967295 ■■■■
longint-2147483648~2147483647 ■■■■
unsignedlong0~4294967295 ■■■■
int根据特定的系统对应shortint或longintunsignedint根据特定的系统对应unsignedshortint或unsignedlongint超过变量所能表示的范围,产生计算错误:溢出.2022/11/22、整型变量的定义一般形式:
类型说明符变量名标识符例如:
inta,b,c;longx,y;unsignedp,q;2022/11/2在定义变量时,应注意以下几点:
允许在一个类型说明符后,说明多个相同类型的变量。各变量名之间用逗号间隔,类型说明符与变量名之间至少用一个空格间隔。最后一个变量名之后必须以“;”结尾。变量定义必须放在变量使用之前。2022/11/2十进制数形式由数码0~9和小数点组成。例如:
0.0、25.0、5.789、0.13、5.0、300.、-267.8230等均为合法的实数。注意,必须有小数点。
4.3.1实型常量
实型常量也称为实数或浮点数。在C语言中,实数只采用十进制,它有两种形式:十进制数形式和指数形式。
4.3实型数据2022/11/2指数形式
由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。其一般形式为:
aEn(a为十进制数,n为十进制整数)其值为a*10n。如:
2.1E5(等于2.1*105) 3.7E-2(等于3.7*10-2) 0.5E7(等于0.5*107) -2.8E-2(等于-2.8*10-2)2022/11/2以下则不是合法的实数: 345(无小数点)
E7(阶码标志E之前无数字) -5(无阶码标志) 53.-E3(负号位置不对) 2.7E(无阶码)
标准C允许浮点数使用后缀。后缀为“f”或“F”即表示该数为浮点数。
如356.f和356.是等价的。2022/11/2注意:实型常量不分单、双精度,都按双精度double型处理。
因此:(1)十进制小数形式:必须有小数点。(2)指数形式:字母e前必须有数字,字母e后必须为整数,规范化的指数形式输出。
2022/11/2#include<stdio.h>main(){
printf("%f\n",356.);
printf("%f\n",356);
printf("%f\n",356.f);}结果为:
356.0000000.000000356.000000课堂练习1:分析下面程序的运行结果。2022/11/24.3.2实型变量
1实型数据在内存中的存放形式
实型数据一般占4个字节(32位)内存空间,按指数形式存储。如实数3.14159在内存中的存放形式如下:+.3141591
数符小数部分指数小数部分占的位(bit)数愈多,数的有效数字愈多,精度愈高。指数部分占的位数愈多,则能表示的数值范围愈大。2022/11/2
实型变量分为:单精度(float型)、双精度(double型)。
实型变量定义的格式和书写规则与整型相同。例如:
floatx,y;
doublea,b,c;2.实型变量的分类2022/11/23实型数据的舍入误差
由于实型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的。不同的编译器下处理的精度不同。课堂练习2:分析下面程序的运行结果。#include<stdio.h>main(){ floata,b; a=123456.789e5; b=a+20;
printf("%f\n",a);
printf("%f\n",b);}运行结果(VC++):12345678848.00000012345678848.000000
可见一个大数与一小数间运算会产生什么结果?2022/11/25.4.1字符常量
4.4字符型数据1、字符常量字符常量是用单引号括起来的一个字符。例如:
'a'、'A'、'3'、'='、'+'、'?'
注意英文字母区分大小写。C字符常量特点:字符常量只能用单引号括起来。字符常量只能是单个字符,不能是字符串。字符可以是字符集中任意字符。如‘5’不同于5。2022/11/22、转义字符
转义字符是一种特殊的字符常量。转义字符以反斜线“\”开头,后跟一个或几个字符。 转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。转义字符主要用来表示那些用一般字符不便于表示的控制代码。常用的转义字符及其含义如下表:2022/11/2转义字符转义字符的意义ASCII代码\n换行10\t横向跳到下一制表位置9\b退格8\r回车13\f走纸换页12\\反斜线符"\"92\'单引号符39\"双引号符34\a鸣铃7\ddd1~3位八进制数所代表的字符
\xhh1~2位十六进制数所代表的字符
2022/11/2
广义地讲,C语言字符集中的任何一个字符均可用转义字符来表示。表中的\ddd和\xhh正是为此而提出的。ddd和hh分别为八进制和十六进制的ASCII代码。如\101表示字母“A”(见附录I),\102表示字母“B”,\134表示反斜线,\X0A表示换行等。
常见字符的值:
20H-空格 30H-‘0’-----39H-‘9' 41H-'A' 61H-'a'内码(ASCII码)在32~126范围内为可显示字符。
2022/11/2#include"stdio.h"voidmain(){charc1='\101',c2='\x42';
printf("a\tbc\bABC\n");printf("xyz\t%c%c\n",c1,c2);}运行结果:abABC
xyzAB
【例4.1】分析以下程序的执行结果。2022/11/2
字符串常量是由一对双引号括起来的字符序列。例如,“CHINA”、“CLanguage”、“$abc!”等都是合法的字符串常量。
字符串常量和字符常量之间的区别:字符常量由单引号括起来,字符串常量由双引号括起来。字符常量只能是单个字符,字符串常量则可以含一个或多个字符。可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。在C语言中没有相应的字符串变量,但是可以用一个字符数组来存放一个字符串常量。3、字符串常量2022/11/2字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字符数加1。增加的一个字节中存放字符‘\0’(ASCII码为0)。例如:字符串"Cprogram"在内存中所占的字节为:C
program\0‘a’和“a”的区别是:“A”存储方式为A\0但‘A’存储方式为:A2022/11/2举例"TEST""""a"'T''E''S''T'\08469838400\0'a'\00097002022/11/2
在C语言中,可以用一个标识符来表示一个常量,称为符号常量。符号常量在使用之前必须先定义。其一般形式为:
#define标识符常量
例如:#definePI3.1415926符号常量一经定义,以后在程序中所有出现该标识符的地方均以该常量值代替。符号常量的标识符习惯上用大写字母表示,变量标识符用小写字母表示,以示区别。
4、符号常量
2022/11/2运行结果:s=19.634954
#include"stdio.h"#definePI3.1415926voidmain(){floats,r;r=2.5;s=PI*r*r;
printf("s=%f\n",s);}【例4.2】符号常量的使用。2022/11/24.4.2字符变量
字符变量用来存储字符常量,即单个字符。说明形式:
char字符变量名;字符变量在内存中占一个字节,其定义的格式和书写规则都与整型变量相同。例如:chara,b;2022/11/2例如定义字符型变量charch;若赋值ch=‘x’;则在内存为变量分配一个字节的空间,并存放‘x’的ASCII码值120。所以也可以给字符型变量赋整型值ch=120;011110002022/11/2#include"stdio.h"voidmain(){ chara,b; a=120; b=121;
printf("%c,%c\n",a,b);
printf("%d,%d\n",a,b);}【例4.3】整型数据与字符数据的相互输出。2022/11/2#include"stdio.h"voidmain(){ chara,b; a='a'; b='b';
a=a-32; b=b-32;
printf("%c,%c\n%d,%d\n",a,b,a,b);}【例4.4】大小写字母转换。2022/11/2#include"stdio.h"voidmain(){chara,b;
printf("inputcharactera,b:");
scanf("%c%c",&a,&b);
printf("%c%c\n",a,b);}
【例4.5】运行并分析程序的执行结果。运行时输入MN和MN各输出什么结果?试一试:“%c%c”中加上空格会怎样?(即“%c%c”)2022/11/24.4.3字符数据的输入输出输入输出字符型数据可以用scanf()函数和printf()函数,使用格式苻“%c”。实际应用中,有很多字符输入输出的情况,为此,C语言提供了更为简洁的库函数。2022/11/21、putchar
函数(字符输出函数)功能:在显示器上输出单个字符。一般形式为:
putchar(字符变量);例如:
putchar('A');(输出大写字母A)
putchar(x);(输出字符变量x的值)
putchar(‘\101’);(也是输出字符A)
putchar('\n');(换行)2022/11/22.getchar函数(键盘输入函数)功能:从键盘上输入一个字符。其一般形式为:
getchar();通常把输入的字符赋予一个字符变量,构成赋值语句,如:
charc; c=getchar();2022/11/2【例4.6】输入输出单个字符。#include"stdio.h"voidmain(){charc;
printf("inputacharacter:");c=getchar();
putchar(c);
putchar('\n');}2022/11/2使用putchar和getchar函数应注意的问题:Getchar()函数只能接受单个字符,输入数字也按字符处理。输入多于一个字符时,只接收第一个字符。使用putchar()输出控制字符则执行控制功能,不在屏幕上显示,如putchar('\n');使用本函数前必须包含文件“stdio.h”。2022/11/24.5格式化输入输出
C语言不提供输入/输出语句,数据的输入/输出是通过函数调用语句来实现的。在C标准函数库中提供了一些输入/输出函数,它是以标准的输入/输出设备(键盘、显示器等)为输入/输出对象的。常用的输出函数有printf()函数和putchar()函数。输入函数有scanf()和getchar()。2022/11/2
使用标准输入输出库函数时要用到“stdio.h”文件,因此源文件开头应有以下预编译命令: #include<stdio.h>或 #include"stdio.h"二者的区别:使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找;使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。用户编程时可根据自己文件所在的目录来选择某一种命令形式。
2022/11/2功能:按用户指定的格式,把指定的数据显示到显示器屏幕上。一般形式:
printf(“格式控制字符串”,输出表列);其中
格式控制字符串用于指定输出格式;
输出表列中给出了各个输出项;要求格式字符串和各输出项在数量和类型上应该一一对应。
4.5.1printf函数(格式输出函数)2022/11/2类型:类型字符用以表示输出数据的类型;标志:-、+分别表示输出数据左、右对齐;输出最小宽度:用十进制整数来表示输出的最少位数。精度:精度格式符以“.”开头,后跟十进制整数。本项的意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。长度:长度格式符为h,l两种,h表示按短整型量输出,l表示按长整型量输出。在C中格式字符串的一般形式为:
[标志][输出最小宽度][.精度][长度]类型2022/11/2格式字符意
义d以十进制形式输出带符号整数(正数不输出符号)o以八进制形式输出无符号整数(不输出前缀0)x,X以十六进制形式输出无符号整数(不输出前缀Ox)u以十进制形式输出无符号整数f以小数形式输出单、双精度实数e,E以指数形式输出单、双精度实数g,G以%f或%e中较短的输出宽度输出单、双精度实数c输出单个字符s输出字符串2022/11/2【例4.7】运行并分析程序的执行结果。#include"stdio.h"voidmain(){
inta=15;floatb=138.3576278;doublec=35648256.3645687;chard='p';
printf("a=%d,%5d,%o,%x\n",a,a,a,a);
printf("b=%f,%lf,%5.4lf,%e\n",b,b,b,b);printf("c=%lf,%f,%8.4lf\n",c,c,c);printf("d=%c,%8c\n",d,d);}2022/11/2功能:按用户指定的格式从键盘上把数据输入到指定的变量之中。一般形式
scanf(“格式控制字符串”,地址表列);
其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串。地址表列中给出各变量的地址。例如:
scanf(“%d,%d”,&a,&b);4.5.2scanf函数(格式输入函数)2022/11/2变量的地址和变量值的关系如下:在赋值表达式中给变量赋值,如:
a=3则a为变量名,567是变量的值,&a是变量a的地址。2022/11/2使用scanf()函数还必须注意以下几点
(1)scanf()函数中没有精度控制。例如,
scanf("%5.2f",&a);×不能企图用此语句输入小数为2位的实数。(2)scanf()中要求给出变量地址,如给出变量名则会出错。例如,scanf("%d",a);×应改为scanf("%d",&a);√2022/11/2(3)在输入多个数值数据时,若格式控制串中没有非格式字符作为输入数据之间的间隔则可用空格,Tab或回车作为间隔。(4)在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。例如,“scanf("%c%c%c",&a,&b,&c);”,输入为“d□e□f”时,则把'd'赋予a,'□'赋予b,'e'赋予c。只有当输入为def时,才能把'd'赋于a,'e'赋予b,'f'赋予c。如果在格式控制中加入空格作为间隔,如“scanf("%c□%c□%c",&a,&b,&c);”,则输入时各数据之间可加空格。2022/11/2说明:(1)C语言的格式化输入/输出比较繁琐,在以GUI为主流的应用程序的输入输出中较少使用(scanf()函数则用不到),但它的另一种形式sprintf()函数中的格式化数据处理则经常会用到。(2)如何获得有关sprintf()函数的用法知识?请使用微软开发者网络—MicrosoftDeveloperNetwork(MSDN)。它是一个有关计算机软件设计知识的海洋,是微软平台的软件开发和应用人员的最好的获取知识的工具。(3)读者从现在开始,应该逐步学会如何获取书本上没有的知识,从MSDN、Internet……。请查阅字符串输出函数puts()的用法。
2022/11/24.6数据类型转换在编写程序的过程中,经常会将一种数据类型的值赋给另一种不同数据类型的变量的情况。由于数据类型有差异,在赋值时就要进行数据类型的转换。数据类型转换自动类型转换(隐式转换)强制类型转换(显示转换)2022/11/24.6.1自动类型转换整型、实型、字符型数据间可以混合运算。系统在运算时的转换规则是:将存储长度较短的运算对象转换成存储长度较长的类型,然后再进行处理。这种转换是系统自动进行的1.各类数据类型间混合运算时的类型转换规则2022/11/2
高double←float↑
unsignedlong←long
↑
unsigned←unsignedshort
↑低int←char,short
2022/11/2(1)水平方向的转换:如float型数据必先转换为double型数据,char型或short型数据必先转换为int型数据,然后进行运算。(2)垂直方向的转换:如int型数据与unsigned型数据进行运算,int型转换为unsigned型;int型数据与double型数据进行运算,int型直接转换为double型后进行运算。2022/11/22.赋值时的类型转换实型赋予整型,舍去小数部分。整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。字符型赋予整型,由于字符型为1个字节,而整型为2个字节,故将字符的ASCII码值放到整型量的低8位中,高8位为0。整型赋予字符型,只把低8位赋予字符量。非unsigned与unsigned数据类型相互赋值时,直接传送数值。当赋值运算符两侧的类型不同时,需进行类型转换,这种转换也是系统自动进行的。2022/11/2在赋值运算时,最好是赋值号右侧的数据类型级别等于或低于赋值号左边的变量的类型级别,否则,会导致运算精度降低,甚至出现意想不到的结果。2022/11/2【例4.8】运行以下程序并分析程序运行结果。#include"stdio.h"voidmain(){
int
a,b=321,c;floatx,y=1.23;charc1='a',c2;c=y;x=b;
a=c1;c2=b;printf("%d,%f,%d,%c\n",c,x,a,c2);}2022/11/24.6.2强制类型转换强制类型转换的一般形式为(类型说明符)(表达式)例如:若有定义“int
a,x,y;则(float)a把a转换为单精度实型(double)(x+y)把x+y的结果转换为双精度实型2022/11/2需要说明的是,强制类型转换是为了本次运算的需要,对数据类型进行的临时转换,并没有改变数据原来的类型。例如
(double)(x+y)的类型是double,但变量x和y的类型还是int。2022/11/2强制转换运算符优先级比算术运算符高。例如,已知有变量定义:intb=7;floata=2.5,c=4.7;求算术表达式a+(int)(b/3*(int)(a+c)/2.0)%4的值根据运算符结合性规则,上述表达式要自左之右执行,b/3为2,2*int(a+c)为14,14/2.0为7.0,强制类型转换后为7,7%4为3;a的值2.5与3相加,最终结果为5.5。2022/11/24.7运算符与表达式在第二章中,我们已经介绍了:算术运算符:+、-、*、/、%;关系运算符:>、<、==、>=、<=、!=;逻辑运算符:!、&&、||。C语言中常用的运算符还有自增自减运算符、条件运算符、逗号运算符等。2022/11/21自增、自减运算符及其表达式1形式++i,--i
使用i之前,先使i的值加/减1i++,i--
使用i之后,再使i的值加/减12说明++i和--i的值是加/减1之后i的值i++和i--的值是加/减1之前i的值++和--只能用于变量,不能用于常量和表达式++和--的结合方向是“自右向左”2022/11/2(1)单独使用时++i;等价i++;等价i=i+1;(2)j=++i;(3)j=i++;若i的初始值为3i=4;j=4;i=4;j=3;2022/11/2#include<stdio.h>#include<stdio.h>voidmain(){
inti; i=8; printf("%5d",++i); printf("%5d",--i); printf("%5d",i++); printf("%5d",i--); printf("%5d",-i++); printf("%5d\n",-i--);}【例4.9】运行以下程序并分析程序运行结果。2022/11/2++、--运算符应用于逻辑表达式“a&&b&&c”和“a||b||c”时需格外注意
例如:若a=0;b=1;c=2;执行d=a++&&b++&&--c;之,a,b,c,d的值各是什么?分析:因变量a先参加表达式的运算,后自增,所以参加表达式运算的值是0,所以整个表达式的值是0,即d=0,a自增变为1,b++和—c没有得到执行,所以b=1,c=2。即运算结果:d=0,a=1,b=1,c=22022/11/2若a=0;b=1;c=2;
执行d=a++||b++||--c;后a,b,c,d的值各是什么?分析:因变量a先参加表达式的运算,后自增,所以第一个||前的表达式值为0(假),需要运算第二个表达式即b++,由于b=1,所以整个表达式的值为1,即d=1,b自增后变为2,第三个表达式—c没有得到执行,所以c=2。即运算结果:d=1,a=1,b=2,c=2。2022/11/21.条件运算符条件运算符由问号“?”和比例号“:”组成,用于连接三个运算对象,是C语言中唯一的一个三目运算符。
2.条件表达式一般形式:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 法学概论考试常见试题及答案攻略
- 网络管理员考试各类问题试题及答案
- 法学概论考试的创新与突破及试题及答案
- 2025年VB中的项目实施与管理考察题及答案
- 网络安全中的社会工程学考核试题及答案
- 项目管理的关键要素试题及答案
- 行政管理重要参考试题及答案
- 2025年软件工程基础试题及答案
- 老年病科工作总结与未来规划计划
- 儿科病房护士工作计划
- 液化石油气充装操作规程
- 研究生高分论文写作(上篇)
- 工学一体化教学参考工具体例格式9:学习任务工作页
- 抖音短视频帐号策划运营表
- 南昌大学理工科类实验(尖子班)选拔考试
- 现浇混凝土箱梁专项施工方案
- 国产数据库发展研究报告
- 教师专业发展第9章-教师个人自传课件
- 企业主要负责人履行安全生产职责专项检查表
- 国家电网招聘之管理类通关题库带答案
- 农业气象学(山东联盟-青岛农业大学)知到章节答案智慧树2023年
评论
0/150
提交评论