版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2.1 基本数据类型基本数据类型 2.2 基本输入、输出函数基本输入、输出函数 2.3 运算符和表达式运算符和表达式 第二章第二章 C C语言的语法基础语言的语法基础 2.1 基本数据类型基本数据类型 2.1.1 标识符与基本数据类型标识符与基本数据类型 1.标识符(标识符(identifier) 标识符是一个名字,在C语言中指常量、变量、类型、语句 、标号及函数的名称。C语言标识符有三类:关键字、预 定义标识符和用户定义标识符。 (1)关键字(43个): 已被C系统所使用的标识符。 (2)预定义标识符:C系统提供的库函数名和编译预处理命令等 (3)用户标识符:用户根据需要在程序中用到的变量、
2、符号常数 、用户函数、标号等进行命名。命名规则: 标识符只能由英文字母、下划线和数字组成,且只能由英文 字母或下划线开头。 标识符长度不能超过32个字符,且不能与关键字相同;应避 免与预定义标识符相同;标识符区分大小写。 2.基本数据类型(基本数据类型(basic data types) FC的基本数据类型如下: F在程序中对用到的所有数据类型都必须指定其数据类型。 整型(int) 字符型(char) 实型(浮点型) 枚举类型(enum) 数组类型() 结构体类型(struct) 共用体类型(union) 单精度型(float) 双精度型(double) 指针类型(*) 构造类型 基本类型 空
3、类型(NULL) 数据类型 2.1.2 常量与变量常量与变量 F1. 常量常量(constants) 在程序运行过程中,其值不能被改变的量称为常量。 C语言有整型常量、实型常量、字符型常量、字符串常量和 符号常量5种。 如12、0、-3为整型常量,4.6、-1.23为实型常量,a、d 为字符常量,“abcd”、 “ 12hhd”为字符串常量。 用标识符代表的常量称为符号常量。 如 #define PRICE 30 (1) 整型常量 C语言整型常数可用以下三种形式表示: 十进制整型。不由0开头,由09组成,前面可加正负号 ;如123,-456,0。 八进制整数。以0开头,只能由07组成,前面可加
4、正负 号。如0123表示八进制数123,即182+281+380,-011表示八 进制-11,即十进制-9 十六进制整数。以0 x(或X)开头,可以由09、字母a( 或A)f(或F)组成,前面可加正负号。如0 x123等于十进制数 的291。-0 x12等于十进制的-18。 整型常数的类型: 在一个整常数后加一字母u,则认为是无符号常数; 在一个整常数后面加一个字母l或L,则认为是long int型常 数。 (2)实型常量 实数又称浮点数,有两种表示形式: (1)十进制小数形式。它是由数字和小数点组成(注意必须 有小数点)。如.123、123.、0.0、123.0。 (2)指数形式。如123e
5、3或123E3。但字母e(或E)之前必须 有数字,且e后面的指数必须为整数(不能为空)。如e3、 2.1e3.5、.e3、e等都不是合法的指数形式。在字母e(或E) 之前的小数部分中。小数点左边应有1位(且只能有1位)非 零的数字,称为“规范化的指数形式”。 实型常数的类型 许多C编译系统将实型常数作为双精度(double,占8个字节 )来处理。可以在带小数点的数的后面加字母f或F来指定实 型常数为单精度(float,占4个字节),加字母l或L来指定实 型常数为长双精度(long double,占10个字节)。 (3)字符型常量 C的字符常数是用单引号括起来的字符。如 a,x,A等。 除了以上
6、形式的字符常数外,C还允许用一种特殊形式的字 符常数,就是以一个“”开头的字符系列,称为“转义字符 ” 常用的以“”开头的特殊字符见下表: 字符形式含义ASCII 代码 n换行,将当前位置移到下一行开头10 t水平制表(跳到下一个的 tab 位置)9 b退格,将当前位置移到前一列8 r 回车,将当前位置移到本行开头 13 f 换页,将当前位置移到下页开头 12 反斜杠字符“” 92 单引号(撇号)字符39 ”双引号字符34 bbb1 到 3 位 8 进制数所代表的字符最大为377 xhh 1 到 2 位 16 进制数所代表的字符 例如: main() printf(“1234567890123
7、45n”); printf(“ab ctdeb101fgn”); printf(“ab crde12x41n”); 运行结果: 123456789012345 ab c dAfg de c A (4)字符串常数 字符常数是由一对单引号括起来的单个字符。字符串常数是 一对双引号括起来的字符系列。如: “How do you do.”, “ CHINA”, “a”, “$123.45” 都是字符串常数。 注意:字符常数a与字符串常数“a”是不同的, 不能把 “a”等字符串常数赋给一个字符变量。 C规定:在每一个字符串的结尾加一个“字符串结束标志” 即字符0,因此,字符串常数“a”在内存中是: 字符
8、串“a”实际上包含2个字符a和0,因而不能赋 给只能容纳一个字符的字符变量。 C语言没有专门的字符串变量,解决办法是使用字符数组。 A 0A 0 (5)符号常数 用标识符代表的常量称为符号常量。习惯用大写字母表示 可以用两种方法定义符号常数: 利用宏定义#define定义符号常数,如: #define PI 3.14159 #define ESC 27 #define ID “10-y3v4x5a” 利用“const”定义符号常数,格式为: const 数据类型关键字 符号常数1=常数1,符号常数2=常数2, 如: const int MAXINT=32767; const long int
9、MAXLONG=2147483647; F2. 变量变量(variables) 其值可以改变的量称为变量。一个变量应该有一个名字即变 量名,变量名只能由字母、数字和下划线三种字符组成,且 第一个字符必须为字母或下划线。一个变量在内存中占有一 定的存储空间,这个存储空间内所存放的数据就是变量的值 。变量的类型确定了该变量的性质、取值范围、占内存空间 的大小以及所能参加运算的方式。C语言区分大小写字母。 变量名一般为长度8的小写字母。 变量定义的格式如下: 数据类型关键字 如:int i,j,k; Turbo C2.0基本数据类型关键字、所占内存字节数及取值范围 类类型型 字字节节数数 有有效效数
10、数字字 数数值值范范围围 int 2 -3276832767 short int 2 -3276832767 long int 4 -21474836482147483647 unsigned int 2 065535 unsigned short int 2 065535 unsigned long int 4 04294967295 char 1 -128127 unsigned char 1 0255 float 4 67 10-371038 double 8 1516 10-30710308 long double 10 1819 10-4931104932 F3. 变量初始化变量初始
11、化(variables initialization) 动态变量未经初始化,也未赋值,其值是不确定的。 C语言允许: (1)先定义变量,再赋初值,如: float a,b,c; a=1.1;b=12.2;c=1.9;(或a=1.1,b=12.2,c=1.9;) (2)在定义变量的同时赋初值,如: int a=3; float f=3.56; char c=a; int a=3,b=3,c=3; (3)对被定义的变量一部分赋初值,如: int a,b,c=3; int a=3,b,c; 2.1.3 内存的概念内存的概念 计算机内存是由一片连续的存储单元组成,操作系统给每个单 元编号,这个编号称为
12、内存单元的地址。地址通常由一组连 续的整数组成,编号小的称为内存低地址,编号大的称为内 存高地址。每个单元占1个字节,即内存中每个字节有一个地 址(编号)。 如果定义了一个整型变量i: int i; i=10; i实际是占2个字节的一个内存地址名,这个地址中存放的内 容是10。数据在内存中实际存放情况如下: 如果数值是负的,则在内存中存放它的补码。如存放-10情况 如下: 10 0 0 0 0 0 0 00 0 0 0 1 00i 有符号数的最高位表示符号位,符号位为0表示整数,符号位为 1表示负数;无符号数表示的都是正数,其最高位不是符号位 。如:内存中有二进制数1111 1111 1110
13、 0111,把它看成是有 符号整数时,其值为25;若把它视为无符号整数,则值为 0 xffe7(即十进制65511)。 字符变量的值即字符数据在内存中是以二进制形式存放字符的 ASCII码。如:内存中有二进制数0100 0001,把它看成是字 符类型时,其值为A,把它视为int类型时,其值为65。 字符型数据和整型数据是通用的,可以混用(注意:字符数据 只占一个字节)。 10 0 0 0 0 0 0 0 0 0 0 0 1 0010的原码 01 1 1 1 1 1 1 1 1 1 1 1 0 11取反 11 1 1 1 1 1 1 1 1 1 1 1 0 10 再加1得 -10的补码 * *
14、2.2 基本输入输出函数基本输入输出函数 2.2.1 格式输入函数和格式输出函数格式输入函数和格式输出函数 F1.printf1.printf函数(格式输出函数)函数(格式输出函数) 作用:向终端设备输出若干个任意类型的数据。一般格式: printf(格式控制,输出列表) 如:printf(“%d,%cn”,i,c) 其中:“格式控制”是用双引号括起来的字符串,包括普通字符( 需原样输出的字符)和格式说明(由“%”和格式字符(一般为小写) 组成,用于将输出的数据转换为指定的格式输出。 注意:格式说明与输出项从左到右的数据类型必须一一匹配,否 则将输出错误结果。如 printf(“%d,%dn”
15、,123,123.456); 格式说明与输出项的个数必须相同。 printf调用结束后返回一个函数值,其值等于输出项个数 每一个格式说明都必须用开头,以一个格式字符作为结束,在此 之间根据需要可以插入“宽度说明”、左对齐符号“”、长度 修饰符“l”和“L”等。 不同类型的数据用不同的格式字符。常用的有以下几种: (1 1)d(d(或或i)i)格式符格式符:用于输出十进制整数(不能输出float或double) %d:按整型数据的实际长度输出。 %md:用m指定输出字段的宽度,如果数据的实际位数小于m,则左 端补空格(m为负时,右补空,下同),若大于m,则按实际位数输出。 如printf(“%4
16、d,%4d”,a,b) 若a=123,b=12345,则输出为: 123,12345 %ld 或%Ld :输出长整型数据,也可用于输出int型数据(不能写 成%dl)。可以指定输出宽度,如: long a=125790;printf(“%8ld”,a) (2 2)o o格式符格式符:以八进制形式输出整数(“%o”),对长整型可以用 “%lo”格式输出,同样可以指定输出宽度(“%mo”或“%mlo”) 。实际上是将内存中的数据每3位一组按八进制形式输出,因此输 出的数值不带符号,即将符号位也一起作为八进制数的一部分输 出。如: int a=-1; printf(“%d,%o”,a,a); 输出为
17、:-1,177777 (3 3)x x(或(或X)X)格式符格式符:以十六进制形式输出整数 (“%x”) 。对长 整型可以用“%lx”格式输出,同样可以指定输出宽度(“%mx”或 “%mlx”)。实际上是将内存中的数据每4位一组按十六进制形式 输出,因此输出的数值也不带符号,即将符号位也一起作为十六 进制数的一部分输出。如: int a=-1; printf(“%x,%o,%d”,a,a,a); 输出为:ffff,177777,-1 (4 4)u u格式符格式符:用于输出unsigned型数据(“%u”),即无符号数, 以十进制形式输出,也可以“%mu”或“%mlu”。一个有符号整数 也可以用
18、%u格式输出;反之,一个 unsigned型数据也可以用%d格 式输出。unsigned型数据也可以用%o或%x格式输出。如: main() unsigned int a=65535; int b=-2; printf(“a=%d,%o,%x,%un”,a,a,a,a); printf(“b=%d,%o,%x,%un”,b,b,b,b); 运行结果为: a=-1,177777,ffff,65535 b=-2,177776,fffe,65534 (5 5)c c格式符格式符:用于输出一个字符(“%c”),可以指定输出宽度 (“%mc”,m为正,字符前补空格,m为负,字符后补空格),也可 以(“%
19、mlc”无意义)。如果给定的输出值255,“则将低8位转换 为字符输出。如: main() char c=a; int i=97; int j=97+256; printf(“%c,%dn”,c,c); printf(“%c,%dn”,i,i); printf(“%c,%dn”,j,j); 运行结果为:a,97 a,97 a,353 (6 6)s s格式符格式符:用于输出一个字符串(“%s”),可以指定输出宽度 (“%ms”, 若m串长,串左补空 格,m为负,串右补空格),也可以(“%m.ns”,输出占m列,但只取 字符串中左端n个字符,这n个字符输出在m列的右侧,左补空格) ,还可以(“%-
20、m.ns”,输出占m列,但只取字符串中左端n个字符 ,这n个字符输出在m列的左侧,右补空格)。如果nm,则m自动取 n值,即保证n个字符正常输出;如果n串长,则按实际串输出。 如: main() printf(“%3s,%7.2s,%.4s,%-5.3sn”, “CHINA”, “CHINA”, “CHINA”, “CHINA”); 运行结果:CHINA, CH,CHIN,CHI (7 7)f f格式符格式符:用于输出实数,以小数形式输出。 %f:整数部分全部如数输出,并输出6位小数(注意有效位数); 如:main() float x,y; x=111111.111;y=222222.222;
21、 printf(“%f,%f,%f”,x,y,x+y); 运行结果为:111111.109375,222222.218750,333333.328125 如:main() double x,y; x=1111111111111.111111111;y=2222222222222.22222222; printf(“%f”,x+y); 运行结果为:3333333333333.333010 %mf: 指定输出的数据占m列,其中有6位小数。如果数值长度小 于m,则左端补空;如果数值长度(整数位+7)大于m,则按实际输 出(=8) 。 %m.nf: 指定输出的数据占m列,其中有n位小数。如果数值长度
22、小于m,则左端补空;如果数值长度(整数位+1+小数位n)大于m, 则可能突破m列,输出宽度为整数位+1+小数位n。 %-m.nf:与%m.nf基本相同,只是使输出的数值向左端靠,右端 补空格。如: main() float f=123.456; printf(“%f%10f%10.2f%.2f%-10.2fn”,f,f,f,f,f); 输出结果如下: 123.456001 123.456001 123.46 123.46 123.46 (8 8)e(e(或或E)E)格式符格式符:以指数形式输出实数。 %e:以13位宽度输出,其中指数部分占5位,1位整数位,6位小 数位和1为小数点位。如: pr
23、intf(“%e”,123.456); 输出:1.234560e+002 %me:若m6),则左端补空。 %-m.ne :与%m.ne基本相同,只是使输出的数值向左端靠,右端 补空格。如: float f=123.456; printf(“%e%10e%10.2e%.2e%- 10.2en”,f,f,f,f,f); 输出结果如下: 1.234560e+0021.234560e+0021.23e+0021.23e+0021.23e+00 2 (9 9)g(g(或或G)G)格式符格式符:用来输出实数,它根据数值的大小,自动选f 格式或e格式(选择输出时占宽度较小的一种),且不输出无意义 的零。如:
24、 float f=123.468; printf(“%f %e%g”,f,f,f); 输出如下:123.4680001.234680e+002123.468 (10)在数据前面的多余空格处填以数字0。如: printf(“%010d,%010.2fn”,-123,12345.678); 运行结果:000000123,0012345.68 (11)在输出的八进制数加前导0,对输出的十六进制数加前导0 x。 如:printf(“%#o,%#xn”,65,65); 运行结果:0101,0 x41 几点说明: l一个格式说明以“%”开头,以d,o,x,u,c,s,f,e,g等9个格式字符之一 为结束,
25、中间可以插入附加格式字符l,L,m,n,-,.等; l如果想输出字符“%”,可在“格式控制”字符串中用连续两个 %表示。 l不同类型的数据应采用相应的格式字符输出,m只在实际长度小 于m时才起作用,n一般都能得到执行。即首先考虑n的前提下, 按实际长度输出,然后再考虑m,看是否要补空。 F2.scanf2.scanf函数(格式输入函数)函数(格式输入函数) 一般格式: scanf(格式控制,地址列表) 如:main() int a,b,c; scanf(“%d%d%d”, printf(“%d,%d,%dn”,a,b,c); 运行时输入输出如下: 3 4 5 3,4,5 其中“%d%d%d”表
26、示按十进制整数形式输入数据。输入数据时 ,两数据之间以一个或多个空格间隔,也可以回车键、跳格键tab 。但不能用逗号分隔。 scanf函数的格式说明与printf函数相似,以%开始,以一个格式字 符结束,中间可插入附加字符。如下表所示: 格式字符说明 d,i用来输入有符号的十进制整数(合法数字09及+-) u用来输入无符号的十进制整数(合法数字09及+-) o用来输入无符号的八进制整数(合法数字07及+-) x,X 用来输入无符号的十六进制整数(大小写作用相同)(合法数字0F及+-) c 用来输入单个字符 s 用来输入字符串,将字符串送到一个字符数组中,在输入时以非空白字符开始,以 第一个空白
27、字符结束。系统自动在串最后追加结束标志0 f用来输入实数,可以用小数形式或指数形式输入 e,E,g,G 与f 作用相同 附加字符说明 l,L 用于输入长整型数据(可用%ld,%lo,%lx)以及double型数据(用%lf或%le) h 用于输入短整型数据(可用%hd,%ho,%hx) 域宽指定输入数据所占宽度,域宽应为正整数 * 表示本输入项在读入后不赋给相应的变量 说明: (1)对于整数而言,scanf函数先将用户的输入数字暂存在内存 ,然后按“格式字符”的要求读取数据。若用户输入的数字不合 法,则停止读取。 (2)可以指定输入数据所占列数,系统自动按它截取所需数据。 如:scanf(%3
28、d%3d”, 输入: 12 345 76 则a=12,b=76 (4)输入数据时不能规定精度。如:scanf(%7.2f”, a=B;b=O;c=Y; putchar(a);putchar(b);putchar(c); 运行结果为:BOY/*/ putchar也可以用来输出控制字符如putchar(n),也可输出其他转 义字符如putchar(101),putchar(),putchar(015)等。 2.getchar函数(字符输入函数)函数(字符输入函数) 作用:从终端输入一个字符;其一般形式为: getchar() 函数不带参数(加参数则警告错),函数的值就是从输入设备得到 的字符。 如
29、:#include main() char c; c=getchar(); putchar(c); 运行结果为: 也可以:putchar(getchar(),或printf(“%c”,getchar()。 F3.getch()3.getch()和和getche()getche()函数函数 作用:从标准输入设备上读入一个字符,其调用形式为: getch(); /*读入的字符不回显在屏幕上*/ getche(); /*读入的字符回显到屏幕上*/ 与getchar函数不同之处在于:getch和getche函数不必输入回车 才结束,只要输入一个字符,该字符立即被接收,程序继续执行 下一条语句。 2.3
30、 运算符和表达式运算符和表达式 FC的运算符有以下几类: (1) 算术运算符 (+ - * / %) (2) 关系运算符 ( = = !=) (3) 逻辑运算符 (! int,long无条 件转换为float,double; int,long仍遵循 signed转换成unsigned doubledouble intint unsignedunsigned longlong floatfloat char,shortchar,short 高高 低低 2.3.2 强制类型转换强制类型转换 一般形式为: (类型名)(表达式) 如: (double)a (int)(x+y) (float)(5%3)
31、 注意:在强制类型转换时,得到一个所需类型的中间变量, 原来变量的类型未发生变化。如: main() float x; int i; x=3.6; i=(int)x; /*i等于x的整数部分,而x的值和类型不变,仍为float型*/ printf(“x=%f,i=%d”,x,i); /*运行结果为:x=3.600000,i=3*/ 2.3.3 增增1与减与减1运算运算 F作用是使变量的值增1或减1,如: +i,-i (在使用i之前,先使i的值加(减)1) i+,i- (在使用i之后,使i的值加(减)1) 如:j=+i (i的值先变成4,再赋给j,j的值为4) j=i+ (先将i的值3赋给j,j
32、的值为3,然后i变为4) 又如:i=3; printf(“%d”,+i); /*输出4*/ i=3; printf(“%d”,i+); /*输出3*/ i=3; printf(“%d”,-i+); /*输出-3*/ 注意:(1)自增运算符(+)和自减运算符(-),只能用于 变量,不能用于常量或表达式,如5+或(a+b)+都不对。 (2)对不同的系统,对表达式的求值顺序和函数参数的的求值 顺序的处理不尽相同,应该尽量避免使用。 如有如下表达式: I=3; j=(I+)+(I+)+(I+); /*j=12还是9*/ Turbo C和MS C把3作为表达式中所有I的值,因此3个I相加 ,得到表达式的
33、值为9,再实现自加3次,I的值变为6。 又如: I=3; printf(“%d,%d”,I,I+); 对于这种情况,如果从左至右求值,则输出“3,3”。多数 系统采用自右向左的方法,即先求I+,输出3后I变成4,再求 第一个表达式I,输出4。 2.3.4 赋值运算赋值运算 (1)赋值运算符赋值运算符:“=”就是赋值运算符,它的作用是将一个数 据赋给一个变量。如果赋值运算符两侧的类型不一致,但都 是数值型或字符型,在赋值时要进行类型转换。规则如下: 实型整型变量,舍弃实数的小数部分,超范围则溢出。 整型实型变量,数值不变,用小数补足有效位。 doublefloat变量,截取前面7位有效数字,超范
34、围则溢出. floatdouble变量,数值不变,有效位扩展到16位。 unsigned charint变量,数值(ASCII)不变。 signed charint变量,高8位符号扩展。 int,short,long char变量,截取低8位。 signed intlong变量,高8位符号扩展。 unsigned intlong变量,高8位补0,数值不变。 signedunsigned或unsignedsigned且长度相等,照搬 概括如下: 赋值符号两侧类型长度相等,原样照搬。 有(或无)符号短类型数据有(或无)符号长类型变量, 数值不变,正值高位补0,负值符号扩展。 有(或无)符号长类型数据有(或无)符号短类型变量, 截取低位。 (2 2)复合的赋值运算符)复合的赋值运算符: 赋值运算符之前加上其他运算符,可以构成复合运算符,如 : a+=3 等价于a=a+3 x*=y+8 等价于x=x*(y+8) x%=3 等价于x=x%3 注意:运算符的左边只能是一个变量,右边可以是表达式。 凡是二元(二目)运算符都可以与=组成复合赋值符,C语言 规定可以使用10种复合运算符。即: +=,-=,*=,/=,%=,=, 2.3.6 位运算位运算 c语言具有高级语言的特点,又具有低级语
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年新教材高中地理课时分层作业8自然保护区与生态安全含解析中图版选择性必修3
- F3X33系列说明书 示范文本
- 2023届新高考新教材化学人教版一轮训练-第一章第1讲 物质的组成及分类
- 2024年多用客房车项目合作计划书
- 玉溪师范学院《高等几何》2021-2022学年第一学期期末试卷
- 玉溪师范学院《地理信息系统实验》2023-2024学年第一学期期末试卷
- 2024年油气储层保护剂合作协议书
- 盐城师范学院《中学数学案例分析》2021-2022学年第一学期期末试卷
- 2024宅基地永久性转让合同书【农村宅基地转让合同】
- 2024个人财产合同范文
- 2024-2025学年九年级化学人教版上册检测试卷(1-4单元)
- 2024秋九年级化学上册 2.2《氧气》说课稿 (新版)新人教版
- 汽车检测技术 课程设计
- 七年级语文上册18-我的白鸽课件
- 素描入门基础画单选题100道及答案解析
- 期中模拟检测(1-3单元)2024-2025学年度第一学期苏教版一年级数学
- 四川省食品生产企业食品安全员理论考试题库(含答案)
- 机织服装生产中的质量控制体系建设考核试卷
- 新能源汽车运输合作协议
- 2024年玻璃钢通信管道项目可行性研究报告
- 2024年广西安全员C证考试题库及答案
评论
0/150
提交评论