Upload
halima
View
134
Download
4
Embed Size (px)
DESCRIPTION
第二章 C 语言的基本知识. 2.1 字符集和标识符 2.2 变量与常量 2.3 C 语言的数据类型 2.4 整型数据 2.5 浮点数 2.6 字符型数据. 2.1 字符集和标识符. 字符集 字符集是高级语言的编译系统所能识别的字母、 数字、和特殊符号。每种高级语言都有自己特定的字 符集合。 标识符 标识符是用来标识在 C 程序中的变量、常量(指符号常量)、数据类型和函数的。通俗一点说,标识符是程序员为变量、常量或者函数起的名字,它实际上是一个字符序列。. C 语言的字符集合包括:. - PowerPoint PPT Presentation
Citation preview
第二章 第二章 CC 语言的基本知识语言的基本知识 2.1 字符集和标识符 2.2 变量与常量 2.3 C语言的数据类型2.4 整型数据2.5 浮点数 2.6 字符型数据
2.1 2.1 字符集和标识符字符集和标识符字符集
字符集是高级语言的编译系统所能识别的字母、数字、和特殊符号。每种高级语言都有自己特定的字符集合。
标识符 标识符是用来标识在 C 程序中的变量、常量(指符号
常量)、数据类型和函数的。通俗一点说,标识符是程序员为变量、常量或者函数起的名字,它实际上是一个字符序列。
(1) 大、小写英文字母: A , B ,… , Z ,a , b ,… z
(2) 数字: 0 , 1 , 2 ,…, 9
(3) 运算符: + – * / % > < = & | ? ! ^ ~
(4) 括号: ( ) { } [ ]
(5) 标点符号: ' " : ;
(6) 特殊符号: \ _ $ #
(7) 空白符:空格符、换行符、制表符。
C 语言的字符集合包括:
(1) 字母或下划线中的任一字符打头。
(2) 在第一个字符后,可以是任意的数字、字母、下划线组成的序列。长度不超过 8 个。
关键字(保留字)标识符的分类: 特定字 用户定义字
任何一个标识符必须符合下列语法规则:
关键字:又称保留字,一般为小写字母。关键字是 C 编译程序预先登录的标识符,它们
代表固定的意义,用户不能随便使用。
若随便使用,可能出现意想不到的错误,编译能通过,但运行结果不对,且不容易检查错误之所在。
关键字(保留字)
特定字
特定字:具有特殊含义的标识符。它们虽然不是关键字,但是在习惯上把它们看成关键字。所以一般用户定义的标识符也不要使用它们。
特定字包括:
define undef include
ifdef ifndef endif line
用户按照语法规则定义的标识符。用户定义字可以用来标识用户自己使用的变量,符号常量、数据类型以及函数等。
注意 (1) 不能使用关键字和特定字。 (2) 用户定义字为了标识不同的对象,标识符的前 8 个(甚
至 7 个)字符要有区别。 (3) 标识符最好有含义。 (4) 避免使用容易混淆的字符。如 l 与 1 , 0 与 o, z 与 2 等。 (5) 大、小写代表不同的意义。 (6) 尽量不要与某个库函数同名。
用户定义字
2.2 2.2 变量与常量变量与常量 变量
变量是由程序命名的一块计算机内存区域,是用来存储一个可以变化的数值。
常量 与变量一样,常量也是存储在内存中的,但是,常量
的数值在程序执行过程中不会发生改变。 无名常量(或称文字常量) 符号常量(用预处理命令 #define 为常量命名)
在使用一个变量之前,程序员必须为每个变量起个名字,同时还要声明它的数据类型,以便编译系统根据不同的数据类型为其静态地分配内存空间。我们称之为定义变量。
定义变量的格式为: 类型说明符 变量名表 ;
不定值
定义变量
2.3 2.3 CC 语言的数据类型 语言的数据类型 整型 int 基本数据类型 浮点型 float double 字符型 char 数组 以 [] 为标志 结构 struct 构造类
型 复杂数据类型 联合 union 枚举 enum 指针类型 以 * 为标志
C
语言的数据类型
整型 短整型 short int 长整型 long int 普通整型 int 浮点型 普通浮点型 float 双精度浮点型 double 字符型 char
不同数据类型的数据由于其在内存的存储方式不同,存储所占的二进制位( bit )大多不相同。即使是相同类型的数据在不同种类的计算机所占位( bit )数也不完全相同。
2.4 2.4 整型数据整型数据 整型变量
整型常量
用printf显示整型数据
用scanf输入整型数
按照整型变量所占的二进制位数来分类: short (短整型) int (普通整型) long (长整型)
根据整型变量是否带符号位来分类: 不带符号的整型变量 带符号的整型变量
无符号用关键字 unsigned 表示
说明整型变量的语法是: 限定词 int 变量名表;
在 IBM PC 机上,普通整型占 16位( bit ),短整型也占 16位( bit ),而长整型占 32位( bit )。根据整型数据所占的位数,计算一个整型数据能表示的数据的取值范围。
第0位是符号位,如果符号位为 0 ,表示是正整数,从0到 15位全为 1 时表示的数最大。
0111… … 1 + 1= 215
15 个 1 则 16bit 能表示的最大整数是 215 –1 ,即 32767 。 如果符号位为 1 ,表示是负整数,从0到 15位都为 0
时表示的数最小。10… … 00 15 个 0 在计算机中,这个数是 -215 的补码表示。因此,最小整数是 -215 ,即 -32768 。
整型常量表示: 十进制表示 八进制表示 以数字 0开头 十六进制表示 以数字 0和 x开头。 int a,b,c; a = 10; b = 010; c = 0x10;
长整型:要在数字后加上字母 L 。 long s; s=10L ;
需要注意的是:如果整型常量超过机器所能表示的范围,则会发生溢出,而在 C 语言中的整数溢出并不会使程序出错,而是得到一个非正确的值。
int a,b; a = 10000; b = 10000000; 变量 b 的值会被系统认为是 -27008 。
%d 表示把数据按十进制整型输出;%o 表示把数据按八进制整型输出;%x 表示把数据按十六进制整型输出;%u 表示把数据参数按无符号整型输出。注意:除了 %d ,其余的格式都将数据作为无符号数输出。printf("%ld",100000L); 正确printf("%d",100000L); 结果 -31072
用 printf显示整型数据
例 2.1#include "stdio.h"void main(){ int x,y,z; x=129, y=0127 , z=0x128; printf("%d,%d,%d\n",x,y,z); printf("%o,%o,%o\n",x,y,z); printf("%x,%x,%x\n",x,y,z); } 运行结果:129,87,296201,127,45081,57,128
例 2.2#include "stdio.h"void main(){ int x,y,z; x=-129, y=-0127 , z=-0x128;
printf("%d,%d,%d\n",x,y,z); printf("%o,%o,%o\n",x,y,z); printf("%x,%x,%x\n",x,y,z);
}运行结果:-129,-87,-296177577,177651,177330ff7f,ffa9,fed8说明: -0127 和 -0x128并不是八进制和十六进制常量,“ -” 实际
是运算符 ; 使用 %o 和 %x显示的常量和变量是无符号数。
使用域宽和对齐方式来控制显示格式
在 % 和转换说明符之前加整数数字,表示数据显示的域宽 ;
在 % 后面加符号“ -” ,数据显示时左对齐,没有符号“ -” ,数据显示时右对齐。
printf("%-6x%-6x%-6x\n",x,y,z);
例 2.3 #include "stdio.h"void main(){ int x,y,z; x=129, y=0127 , z=0x128; printf("%6d%6d%6d\n",x,y,z); printf("%6o%6o%6o\n",x,y,z); printf("%-6x%-6x%-6x\n",x,y,z); }运行结果: 129 87 296201 127 45081 57 128
scanf 是格式输入函数,其功能是按指定的格式将标准输入设备(例如键盘)输入的内容送入变量中。
scanf 函数的使用格式: scanf(" 格式信息 ", 输入项 1 ,输入项 2 ,… );
其中,“格式信息”与 printf 的用法相似,可以在其中使用 % 和转换字符来指定数据的输入方式。需要注意的是,输入项必须使用地址,普通变量的地址是在变量名前加取地址符 & 。
用 scanf输入整型数
输入整型数据的转换字符有 d , o , x , u
%d 表示把数据按十进制整型输入;%o 表示把数据按八进制整型输入;%x 表示把数据按十六进制整型输入;%u 表示把数据参数按无符号整型输入。
与 printf 函数类似,如果希望输入的数据是长整型,需要在转换字符前加 l 。
例 2.4#include "stdio.h"void main(){ int x, y, z1; long z2;
scanf("%d%o%x%ld",&x,&y,&z1,&z2); printf("\n%d,%d,%d,%ld",x,y,z1,z2);
}
若输入为: 10 10 10 100000↙(回车符)显示结果为10,8,16,100000
注意(1) scanf读入一组整数时, scanf扫视输入信息,跳过空
格、 tab 或换行,寻找下一个输入域。一个输入域就是一个连续的非空白字符的数字串。例如,若输入为: 782 319 20 ↙(回车符)38
则输入域有四个。
(2) 格式信息中除了有 %开始的转换说明,还可以有普通字符,只是这些字符不是显示在屏幕上的,而是要求使用者在输入数据时,要在相应位置输入相同的字符(除了空格、 tab 或换行符)。
例 2.5
#include "stdio.h"
void main()
{
int x, y, z1,z2;
scanf("x=%dy=%oz1=%xz2=%u",&x,&y,&z1,&z2);
printf("\n%d,%d,%d,%d",x,y,z1,z2);
}
如果输入为: 10 10 10 10↙(回车符)则显示结果为是 0,484,2971,0
正确的输入?
2.5 2.5 浮点数浮点数 浮点变量
浮点常量
用printf显示浮点数据
用scanf输入浮点数
浮点变量 单精度浮点数( float ) 双精度浮点数( double ) long double 定义浮点变量: float a,b; double c,d;
单精度浮点数和双精度浮点数两者在计算机上的表示方式是完全相似的,只是所占的二进制位数不同,单精度浮点数的有效数字(或称精度)和取值范围与双精度浮点数不同。
浮点数在机器中的表示一般分为三部分:符号位、阶码、尾数。
32 位浮点数的有效数字的个数是 7 位十进制数字,取值范围为 10-38 ~ 1038, 64 位浮点数的有效数字的个数是 15 位十进制数字,取值范围为 10-308 ~ 10308。不同的机器可能会有一些微小的差别。
0 1 7 8 31
符号位 阶码 尾数
浮点常量 小数表示法 127.3 科学计数法 1.273×102
在 C 语言中,实际上也是用这两种方式,只不过 102
用 E+2 表示。 C 程序中的浮点常数由整数部分、小数部分、指数部分构成。浮点常量构成规则是:(1) 整数部分可以不写,小数部分也可以不写,但不能同
时不写。(2) 指数部分可以省略(相当于使用小数表示法)(3) 若有指数部分, e (或 E )两边都至少有一位数。(4) 指数的数字必须是整数(范围为 1 到 3位的整数),
可以为负或正,正号可以省略。
例如, 4.50E3 、 1.0 、 1. 、 .1234 、 123.4 都是合法
的浮点常量。 注意: 浮点常量在存储时按 double 类型存储,即占
32位( bit )。 浮点常量也象整型常量一样,如果浮点常量超
过机器所能表示的范围,则会发生溢出。 浮点溢出也不会使程序出错,而是得到一个非正确的值 。
%f显示小数表示的普通浮点数%e显示科学记数法表示的浮点数
输出双精度( double )类型时,还需要在转换字符前加上字母 l 。 输出浮点数时控制输出域宽和有效位: 在 % 与 f (或 e )之间加上两个数字并在两个数字
之间加一个句点“ .” 。 例如, %10.3f 表示输出格式是域宽 10 ,有效位 3 。 注意 : 域宽的含义、缺省有效位、与数据本身的域宽的关系
用 printf显示浮点数据
例 2.6#include "stdio.h"void main(){ float x; double y; x=12.3456789;y=987654.321098; printf("\n%e,%le",x,y); ① printf("\n%f,%lf",x,y); ② printf("\n%.3f,%.3lf",x,y); ③ printf("\n%14.3f,%14.3lf",x,y); ④ printf("\n%-14.3f,%-14.3lf",x,y); ⑤ printf("\n%8.3f,%8.3lf",x,y); ⑥ printf("\n%14f,%14lf",x,y); ⑦}
例 2.7
void main()
{
double x, y;
scanf("%lf%le",&x,&y);
printf("\n%lf,%lf",x,y);
printf("\n%le,%le",x,y);
}
若输入为123.56789 1.2345678e17
则运行结果为:123.567890,123456780000000000.000000
1.234568e+3,1.234568e+17
用 scanf输入浮点数
2.6 2.6 字符型数据字符型数据 字符变量 字符常量 用 printf显示字符 用 scanf输入字符用 getchar输入字符和用 putchar输出字
符字符串常量
字符变量数据类型说明符 char例如, char aloha,beta,c; 一个字符变量能存储一个字节的信息,每个字符有固定的编码,最常用的就是 ASCII 编码。 标准 ASCII 编码是把每个字符和与 0~127 的数值联系起来,用 7位二进制表示,再将最高位充 0 ,就是一个字节了。 例如,在 ASCII 编码表中, A 用数值 65 表示,其 8位二进制表示是: 01000001
字符常量 C 语言中的字符常量是用单引号将一个字符括起来。例如 'a'、 'b'。可以用字符常量为字符变量赋值:char alpha='a';char beta='b';注意:(1) 引号中的字符只能是一个字符。 (2)不能用双引号括起一个字符表示单个字符常量。(3) 非图形字符,如退格,换行等,也可以表示成字符型常量。表示方法是使用转义符 \与一些特殊字符构成转义序列。例如‘ \n’ 就是一个转义序列,表示“回车换
行”。(4)字符型数据可以像整型数据一样参与四则运算。' b'-' a'=198-97=1
用 printf显示字符 使用转换说明%c就可以输出单个字符了。例 2.8#include "stdio.h"void main(){ char c='H'; char d='I'; char e='!'; printf("%c%c%c\n",c,d,e);}运行结果为:HI!
用 scanf输入字符 %c 控制输入单个字符。
注意: 尽量不要将%c 与其它转换说明一起使用。
当 scanf读入一组数据时,如果不使用 %c做转换时,scanf扫视输入信息,跳过空格、 tab 或换行,寻找下一个输入域。
但是若使用 %c做转换时,情况则不同, scanf 不会跳过空格、 tab 或换行,而是直接把下一个字符输入给参数,不论它是什么。
例如, scanf("%d%c",&i,&c);
键盘输入 29 w
c 的内容不是字符‘ w’ ,而是空格。
解决的方法是在控制字符串中加空格分隔。 scanf("%d %c",&i,&c);
用 getchar输入字符和用 putchar输出字符
getchar() 函数的用法 getchar()是接收一个从标准输入输出设备上输入的字符。 一般的标准输入设备是键盘。该函数没有参数,函数返回的数据类型为整型,值为字符的 ASCII 码值。
例 2.9
#include "stdio.h"
void main()
{
int c;
c=getchar();
printf("%c",c);
}
putchar() 函数的用法
putchar() 是向标准输入输出设备上输出一个字符,一般的标准输出设备是屏幕终端。
putchar() 与 getchar() 不同,输出字符做为函数的参数,放在括号里。所以括号里的内容是不能缺省的。
putchar() 函数返回的数据类型为整型,值为字符的ASCII码值。
若想输出字符 a ,可以用几种方式?int c ; c='a';putchar( c); 以及putchar('a'); 和putchar(97);对于不可打印的字符,输出方式有两种:putchar(007) ; 和putchar('\007');
例 2.10输入一个字符,按字符原封不动输出。#include "stdio.h"void main(){ int c,i; c=getchar(); i=putchar(c);}或者#include "stdio.h"void main(){ putchar(getchar()) */} 什么叫“系统的仿效返回 ”?
字符串常量 用双引号括起来的字符序列是字符串常量。 "how are you" "1234.5" 字符串的存储与字符不同。 C 编译程序在存储字符串常量时自动采用 \0作为字符串结束标志。 "how" 实际上所占的字节数是 4 。 “a” 与‘ a’ 是完全不同的,前者是字符串常量,占的
字节数是 2 ,后者是字符常量,占的字节数是 1 。 字符串常量的输出 printf("how are you"); printf("%s","how are you");