530 likes | 703 Views
第 2 章 C 语言的基本知识. 2.1 字符集和标识符 2.1.1 字符集 字符集是高级语言的编译系统所能识别的字母、数字和特殊符号。 C 语言的字符集包括: ( 1 )大小写英文字母; ( 2 )数字; ( 3 )运算符: + - * / % > < = & | ? ^ ~ ( 4 )括号 : ( ) { } [ ] ( 5 )标点符号:’ “ : ; ( 6 )特殊符号: _ $ # ( 7 )空白符:空格符、换行符、制表符. 2.1.2 标识符.
E N D
第2章 C语言的基本知识 2.1 字符集和标识符 2.1.1 字符集 字符集是高级语言的编译系统所能识别的字母、数字和特殊符号。 C语言的字符集包括: (1)大小写英文字母; (2)数字; (3)运算符:+ - * / % > < = & | ? ^ ~ (4)括号: ( ) { } [ ] (5)标点符号:’ “ : ; (6)特殊符号:\ _ $ # (7)空白符:空格符、换行符、制表符
2.1.2 标识符 标识符 由字母、数字、下划线组成且由字母或下划线开头的字符串。 C语言的标识符有: 关键字:保留字,C编译程序预先登录的标识符,表示固定含义。 特定字:具有特殊含义的标识符,如:include、define等 用户自定义字:用户按语法规则定义的标识符
用户自定义标识符使用时应注意: (1)可用来命名变量及作为常量名、函数名、类型名、文件名等,一个程序内不得有重复名。 如: _sum, sum, student_name, price等 (2) 大小写代表不同的意义; (3)需注意标识符长度,视不同系统而定。 设允许8个字符。 则: student_ name、student_ number 为同一名字。 (4)避免使用易混淆的字符,如1和l、0和o等; (5)标识符最好“见名知义”
§2.2 常量与变量 2.2.1变量 • 变量:程序执行过程中其值可以改变的量 • 变量有两个要素:变量名与变量值 • 变量名: 用标识符命名,大小写敏感,不能使用关键字 命名原则: • 见名知意: name/xm(姓名)、salary/gz(工资) • 不宜混淆 如l与I, o与0 • 例:判断下列标识符号合法性 • sum Sum M.D.John day Date 3days • student_name #33 lotus_1_2_3 • char a>b _above $123 M.D.John 3days #33 char a>b $123
其实定义一个变量就是请求分配一片存储区域(如同一个容器),并给这片存储区起一个名字(变量名),然后可以在这片存储区中存放数据(变量的值)。其实定义一个变量就是请求分配一片存储区域(如同一个容器),并给这片存储区起一个名字(变量名),然后可以在这片存储区中存放数据(变量的值)。 • 定义变量时必须指明其类型,类型不同则分配得到的存储区的大小不同(即占用的字节数不同)。 学习要点: 记住表示不同数据类型的关键字和它所分配得到的字节数
C语言中, 变量须先定义,后使用 如: int student student=30; 则若写成student=30, 则未定义, 编译时指出其错。 一旦变量被定义,即可在编译时为其分配相应数量的单元。 一旦变量被定义, 其类型便确定。则可检查其运算的合法性。 如: a % b 表示a整除以b的余,则a,b必须为整型量。
2.2.2常量和符号常量 常量 程序运行过程中不能被改变的量。 一般的数据显式写法均表示常量。 如程序中: 20 整型常量 15.8 实型常量 'a' 字符常量
还可用一个符号表示一个常量 符号常量 定义格式: #define 标识符 常量 例2.1: #define PRICE 30 main ( ) { int num, total; num=10; total=num*PRICE; printf("total=%d",total); }
#define PRICE 30 符号常量(一般用大写,以区分变量) 再如: =3.1415629 #define PAI 3.1415629 优点:一改全改
2.3 C语言数据类型 §2.3.1 数据类型 著名计算机科学家沃思提出: 程序=数据结构+算法
举 一个例子:以考生各科成绩及总分排队问题为列。 成绩的存放 ––– 以数组形式 排队方法 –––– 算法 所以,存放数据的方式直接反映了一种语言的数据表达能力。 数据的存储方式又称之为:数据类型。
前面已述. C数据类型丰富,分为: 整型 字符型 基本类型 单精度 实型 双精度 枚举 数组 构造类型 数据类型决定: 1. 数据占内存字节数 2. 数据取值范围 结构体 指针类型 共用体 空类型 数据有常量、变量之分,均为其中一种类型。 本章先学习前三种基本类型。
§2.4 整型数据 2.4.1 整型常量 整型常量 整型常数 C语言提供了三种形式 十进制 如: 256, 308, -120等
八进制 以数字0开头表示的整数 例:0235, 0146 -012等. 0235=2×82+3×8+5=15710 0146=1×82+4×8+6=10210 -012=-(1×8+2)=-1010 十六进制 以"0x"开头的整型数 如: 0x16, 0x28
2.4.2 整型变量 一、分类: 分为四种:基本型、短整型、长整型、无符号型 1.基本型: 用"int"定义 2.短整型: 用"short int"或 "short"定义 3.长整型: 用"long "或 "long int "定义
4.无符号型: 不存放符号,则不带符号数. (1)无符号基本型:用unsigned int或unsigned定义; (2)无符号短整型:用unsigned short定义; (3)无符号长整型:用unsigned long定义。 上述各种类型所占内存单元数及取值范围视不同机器而不同。
表2-1 带限定词后不同类型整数的长度和范围(带方括号部分可以省略) 注意:不同版本的C,类型长度不一定完全相同。
二、定义方法 整型变量分别以下列方式定义 1.基本整型: int a, b, c; 2.短整型 short int 或 short a, b, c; 3.长整型 long int 或 long a, b, c;
4.无符号型 unsigned a, b, c; unsigned short a, b, c; unsigned long a, b, c; 例2-2: main ( ) {int a, b, c, d; /*指定a, b, c, d为整型变量*/ unsigned u; /*指定u为无符号整型变量*/ a=12; b= –24; u=10;
c=a+u; d=b+u; printf("a+u=%d, b+u=%d\n",c,d); } 运行结果为 a+u=22, b+u= –14 由此看到: 不同类型的整型数据可进行算术运算。
三、关于整型常量 程序中出现的整型常数, 系统按以下规则分配变量(内存单元)或赋值给相应变量 1.当常数(量)在 – 32768~32767之间,则可赋给int, long int 变量。 2.若超越,而在–2147483648~2147483647之间,则可赋给 long int 变量。
3.若int, short int 长度相同,则二者皆可赋值。 4.一个非负整数<32768 则可赋给 unsigned int。 5.一个常数后加 'l',或'L',表示长整数. 如123l. 主要用于函数调用时形、实参数传递。
四 数据的溢出 在 c中一个int型变量的最大允许值为32767,如果再加1,会出现什么情况? 例2-3: 整型数据的溢出。 main() { int a, b; a=32767; b=a+1; printf("%d,%d“, a, b); } 运行结果为 32767,-32768
2.4.3 用printf显示整型数据 • printf函数的功能是按照指定的格式显示数据。 • 为给要显示的数据指定格式需要用转换说明符%和转换字符,根据需要转换字符有不同,显示整型数据的转换字符有:d、o、x、u等,分别表示: %d:表示把数据按十进制整数输出; %o:表示把数据按八进制整数输出; %x:表示把数据按十六进制整数输出; %u:表示把数据按无符号整数输出。 如下例: 函数回顾
2.4.3 用printf显示整型数据(续) 例2-4:将整型变量按不同进制输出 #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,296 201,127,450 81,57,128
2.4.3 用printf显示整型数据(续) (1)d格式符,有以下几种用法: • %d:按整型数据的实际长度输出; • %md:m为指定的输出字段的宽度。 若数据位数小于m,则左端补空格; 若数据位数大于m,则按实际位数输出。 • %ld,输出长整型数据,也可指定宽度。
2.4.3 用printf显示整型数据(续) 例2-5:d格式符的不同使用方法。 #include “stdio.h” void main() { int a=123,b=12345; printf(“%4d,%4d \n”,a,b); long c=135870; printf(“%ld”,c); printf(“%8ld”,c); } 运行结果:
2.4.3 用printf显示整型数据(续) (2)o格式符,以八进制形式输出整数,不带符 号,即将符号位也一起作为八进制数的一部分输出。 (3)x格式符,以十六进制形式输出整数,也不带符号位。 (4)u格式符,用来输出unsigned型数据,以十进制形式输出。也可用来输出有符号的int型。 (5)在%后面加符号“-”,数据显示左对齐,否则右对齐。
2.4.3 用printf显示整型数据(续) 例2-6:o、x、u格式符的使用 • #include "stdio.h" • void main() • { • int a=-1; • printf("%x,%o,%d \n",a,a,a); • unsigned int b=65535; • int c=-2; • printf("%d,%o,%x,%u \n",b,b,b,b); • printf("%d,%o,%x,%u \n",c,c,c,c); • /* printf("%d",8*sizeof(int)); */ • } 运行结果:
2.4.4 用scanf输入整型数据 scanf 函数(格式输入函数) • scanf(格式说明,地址表列) 地址表列是用地址运算符”&”取变量的地址 例2-7:scanf输入整数 main() { int a,b,c; scanf(“%d,%d”,&a,&b); printf(“a=%d,b=%d”,a,b); 输入:10,15 输出:a=10,b=15 a 10 b 15
2.4.4 用scanf输入整型数据(续) • 使用scanf函数,要注意: • 一个输入域就是一个连续的非空白字符的数字串。 • 格式信息中除了%开始的转换说明符,还可以有普通字符,只是这些字符不是显示在屏幕上,而是要求用户在输入数据时,要在相应的位置输入相同的字符(除空格、tab或换行符)。
如:int a,b,c; • scanf(“%d%d%d”,&a,&b,&c); • 输入形式:10 17 181 • int a,b,c; • scanf(“%d,%d,%d\n”,&a,&b,&c); • 输入形式: 10,11,12 scanf(“a=%3db=%3oc=%x”,&a,&b,&c); 输入形式:a=123b=456c=10
§2.5 实型数据 2.5.1 实型常量 有二种表示形式 1.十进制形式 如: 0.126, 523.64等 2.指数形式 对于较大或较小的数,可用指数形式 0.0000126 1.26E –5 1260000 1.26E+6 或1.26E6 ' E ', 'e ' 均可. (注:e或E之前必须有数字,且后指数必须为整数) 例如:3.5E-5 2e3 错误:E2 3.6e3.5 .e6 e
2.5.2 实型变量 分为单精度型与双精度型. 分别为 float x, y, z; (单精度) double a, b, c; (双精度) 有的版本还支持: long double 一般地: 单精度占4字节内存单元; 双精度占8字节内存单元.
注意:不同机器对实型变量的有效数字长度的限制注意:不同机器对实型变量的有效数字长度的限制 如: pc机, 单精度一般为7位, 双精度15位 于是: float a; a=123456.789 则实际赋值a123456.7 单精度数值: 10–38~1038 双精度数值: 10–308~10308
2.5.3 用%f格式符以小数形式输出实数 (1) %f :不指定字段宽度,由系统自动指定, 使整数部分全部如数输出,并输出6位小数。 注意float型和double型数据的有效位数, 如:float x=123456.123; printf(“%f”,x); 输出结果:123456.125000 %lf:输出双精度类型 如:double y=12345678.98765432 printf(“%lf”,y); 输出结果:12345678.987654
main() { double x,y; x=1111111111111.111111111; y=1111111111111.111111111; printf(“%f”,x+y); } 2222222222222.222170
如:float f=123.456; printf(“%10.2f ,%-10.2f”,f); 输出结果: 123.46,123.46 (2) %m.nf :指定输出的数据共占m列,其中有n 位小数。若数据长度小于m,则左端补空格。 (3)%–m.nf : 与%m.nf 基本相同,只是使输出 的数值向左端靠,右端补空格。
2.5.3 用%e格式符以指数形式输出实数 (1) %e 如: printf(“%e”,123.456); 输出结果: 1.234560e+002 6位 3位 一般共占13列宽度 (2) % m.ne和 %–m.ne: m、n和“–”字符含义与 前相同。此处n指数据的数字部分(又称尾数) 的小数位数。
如:f=123.468; printf(“%f , %e , %g”, f , f, f); 输出如下: 123.468000 , 1.234680e+002 , 123.468 如:f=123.468; printf(“%f , %e , %g”, f , f, f); 输出如下: 123.468000 , 1.234680e+002 , 123.468 10列 10列 13列 %g格式符——用来输出实数,它根据数值的大小,自动选f格式或e格式(选择输出时占宽度较小的一种),且不输出无意义的零。
转义字符及其含义: 转义字符 含义 转义字符 含义 \t \n 换行 水平制表 垂直制表 \b 退格 \v \r 回车 \f 换页 \a 响铃 \\ 反斜线 \‘ 单引号 \“ 双引号 < 2位16进制数代表的字符 \ddd 3位8进制数代表的字符 \xhh §2.6 字符型数据 2.6.1 字符常量 字符常量:用单引号括起来的一个字符 ‘a’,’b’ 字符常量在内存中以该字符的ASCII码值存储. 转义字符:非图形字符,如退格、换行等,用反斜线后面跟一个字符或一个代码值表示。 例 转义字符举例 main() { printf("How are you \n"); printf("\\C Program\\\n"); printf("Turbo \'C\'"); } 如 ‘a’ ‘A’ ‘?’ ‘\n’ ‘\101’ 如 ‘A’——65, ‘a’——97, ‘0’——48 , ‘\n’——10 运行结果:(屏幕显示) How are you \C Program\ Turbo ‘C’ 如 ‘\101’ -----------‘A’ ‘\012’ -----------’\n’ ‘\376’ -----------’’ ‘\x61’ -----------’a’ ‘\60’ -----------’0’ ‘\483’ ----------() 例: ‘A’-------’\101’-------’\x41’--------65
2.6.2 字符变量 用来存放一个字符的变量. 其定义方式为: char c1, c2; c1=' a '; c2= ' b '; 字符变量只占一个字节单元。其对应单元存放的是其ASCII码,即ASCII码的二进制形式。 由此: 字符变量中的数据是一整型数据。输出时既可输出字符,亦可输出整数,且字符变量可作整数运算。
看如下几个例子: 例1: main ( ) { char c1, c2; c1=97; c2=98; printf ("%c %c", c1, c2) } 用转换说明符%c可以输出单个字符 运行结果 a b
例2: main ( ) { char c1, c2; c1= ' a '; c2=' b '; c1=c1– 32; c2=c2– 32; printf ("%c %c", c1, c2) } 运行结果 A B
例3: main ( ) { int i; char c; i= ' a '; c=97; printf ("%c, %d \n", c, c); printf ("%c, %d \n", i, i); } 说明:一个整数,只要它的值在0~255范围内,也可以用字符形式输出,在输出前,将该整数转换成相应的ASCII字符;反之,一个字符数据也可以用整数形式输出。 运行结果: a , 97 a , 97
2.6.3 用scanf输入字符 使用%c作转换说明符输入字符时,scanf不会跳过空格、tab或换行,而是直接把下一个字符输入给参数,不论它是什么。 例:scanf(“%d%c”,&i,&m); 若从键盘输入29 w,则m的结果不是字符w,而是空格。 空格 解决方法是:scanf(“%d %c”,&i,&m); 空格
例: #include”stdio.h” void main() { char c; c=getchar(); printf(”%c”,c); } 1. getchar函数 2.6.4 用getchar输入字符和用putchar输出字符 功能∶从终端输入一个字符。 格式: getchar( ) ——没有参数 必须有预编译命令∶#include <stdio.h>
2. putchar 函数 功能:在屏幕上输出一个字符) 格式: putchar( 参数) ——需将输出字符作为参数 • 例: • #include <stdio.h> • void main( ) • { • char a,b,c; • a=‘B’; b=‘O’; c=‘Y’; • putchar(a); • putchar(b); • putchar(c); • putchar(‘\’’); • } 输出结果: BOY’
说明: getchar()和putchar()函数的返回值均为整型,返回值为字符的ASCII码值。 例:输入一个字符,按字符原封不动输出。 • #include”stdio.h” • void main() • { int c,i; • c=getchar(); • i=putchar(c); • printf("%d",i); • }
2.6.5 字符串常量 用双引号括起来的字符串。 例: "Good Morning! " 注意'A' 与"A"是不同 字符串存放时,在最后加上"/ 0" –– 空字符。 于是: Good Morning ! /0