版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2.1 根本数据类型根本数据类型2.2 根本输入、输出函数根本输入、输出函数2.3 运算符和表达式运算符和表达式第二章第二章 C C言语的语法根底言语的语法根底2.1 根本数据类型根本数据类型2.1.1 标识符与根本数据类型标识符与根本数据类型1.标识符标识符identifier) 标识符是一个名字,在标识符是一个名字,在C言语中指常量、变言语中指常量、变量、类型、语句、标号及函数的称号。量、类型、语句、标号及函数的称号。C言言语标识符有三类:关键字、预定义标识符和语标识符有三类:关键字、预定义标识符和用户定义标识符。用户定义标识符。(1)关键字关键字43个个: 已被已被C系统所运用的标识符系
2、统所运用的标识符。(2)预定义标识符:预定义标识符:C系统提供的库函数名和编系统提供的库函数名和编译预处置命令等译预处置命令等(3)用户标识符:用户根据需求在程序中用到的用户标识符:用户根据需求在程序中用到的变量、符号常数、用户函数、标号等进展命变量、符号常数、用户函数、标号等进展命名。命名规那么:名。命名规那么: 标识符只能由英文字母、下划线和数字组成标识符只能由英文字母、下划线和数字组成,且只能由英文字母或下划线开头。,且只能由英文字母或下划线开头。 标识符长度不能超越标识符长度不能超越32个字符,且不能与关个字符,且不能与关键字一样;应防止与预定义标识符一样;标键字一样;应防止与预定义标
3、识符一样;标识符区分大小写。识符区分大小写。2.根本数据类型根本数据类型basic data types)C的根本数据类型如下:的根本数据类型如下:在程序中对用到的一切数据类型都必需指定其数据类型。在程序中对用到的一切数据类型都必需指定其数据类型。整型(int)字符型(char)实型浮点型枚举类型(enum)数组类型()构造体类型(struct)共用体类型(union)单精度型(float)双精度型(double)指针类型(*)构造类型根本类型空类型(NULL)数据类型2.1.2 常量与变量常量与变量1. 常量常量(constants) 在程序运转过程中,其值不能被改动的量称为常量在程序运转过
4、程中,其值不能被改动的量称为常量。 C言语有整型常量、实型常量、字符型常量、字符言语有整型常量、实型常量、字符型常量、字符串常量和符号常量串常量和符号常量5种。种。 如如12、0、-3为整型常量,为整型常量,4.6、-1.23为实型常量,为实型常量,a、d为字符常量,为字符常量,“abcd、 “ 12hhd为字符串为字符串常量。常量。 用标识符代表的常量称为符号常量。用标识符代表的常量称为符号常量。 如如 #define PRICE 30 (1) 整型常量 C言语整型常数可用以下三种方式表示: 十进制整型。不由0开头,由09组成,前面可加正负号;如123,-456,0。 八进制整数。以0开头,
5、只能由07组成,前面可加正负号。如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指数方式。如123e3或
6、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等。 除了以上方式的字符常数外,C还允许用一种特殊方式的字符常数,
7、就是以一个“开头的字符系列,称为“本义字符 常用的以“开头的特殊字符见下表:字符形式含义ASCII 代码n换行,将当前位置移到下一行开头10t水平制表(跳到下一个的 tab 位置)9b退格,将当前位置移到前一列8r回车,将当前位置移到本行开头13f换页,将当前位置移到下页开头12反斜杠字符“”92单引号(撇号)字符39”双引号字符34bbb1 到 3 位 8 进制数所代表的字符最大为377xhh1 到 2 位 16 进制数所代表的字符例如: main() printf(“123456789012345n); printf(“ab ctdeb101fgn); printf(“ab crde12x
8、41n); 运转结果: 123456789012345 ab c dAfg de c A(4)字符串常数 字符常数是由一对单引号括起来的单个字符。字符串常数是一对双引号括起来的字符系列。如: “How do you do., “ CHINA, “a, “$123.45 都是字符串常数。 留意:字符常数a与字符串常数“a是不同的, 不能把“a等字符串常数赋给一个字符变量。 C规定:在每一个字符串的结尾加一个“字符串终了标志即字符0,因此,字符串常数“a在内存中是: 字符串“a实践上包含2个字符a和0,因此不能赋给只能包容一个字符的字符变量。 C言语没有专门的字符串变量,处理方法是运用字符数组。A
9、 0A 0(5)符号常数用标识符代表的常量称为符号常量。习惯用大写字母表示可以用两种方法定义符号常数: 利用宏定义#define定义符号常数,如: #define PI 3.14159 #define ESC 27 #define ID “102343-3852396-y3v4x5a 利用“const定义符号常数,格式为: const 数据类型关键字 符号常数1=常数1,符号常数2=常数2, 如: const int MAXINT=32767; const long int MAXLONG=2147483647;F2. 变量变量(variables)F 其值可以改动的量称为变量。一个变量应该有
10、一个名字即其值可以改动的量称为变量。一个变量应该有一个名字即变量名,变量名只能由字母、数字和下划线三种字符组成,变量名,变量名只能由字母、数字和下划线三种字符组成,且第一个字符必需为字母或下划线。一个变量在内存中占有且第一个字符必需为字母或下划线。一个变量在内存中占有一定的存储空间,这个存储空间内所存放的数据就是变量的一定的存储空间,这个存储空间内所存放的数据就是变量的值。变量的类型确定了该变量的性质、取值范围、占内存空值。变量的类型确定了该变量的性质、取值范围、占内存空间的大小以及所能参与运算的方式。间的大小以及所能参与运算的方式。C言语区分大小写字母言语区分大小写字母。变量名普通为长度。变
11、量名普通为长度8的小写字母。的小写字母。F 变量定义的格式如下:变量定义的格式如下:F 数据类型关键字数据类型关键字 F 如:如:int i,j,k; Turbo C2.0根本数据类型关键字、所占内存字节数及取值范围类类型型 字字节节数数 有有效效数数字字 数数值值范范围围 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
12、1 -128127 unsigned char 1 0255 float 4 67 10-371038 double 8 1516 10-30710308 long double 10 1819 10-4931104932 F3. 变量初始化变量初始化(variables initialization)F动态变量未经初始化,也未赋值,其值是不确定的。动态变量未经初始化,也未赋值,其值是不确定的。 FC言语允许:言语允许:F 1先定义变量,再赋初值,如:先定义变量,再赋初值,如:F float a,b,c;F a=1.1;b=12.2;c=1.9;或或a=1.1,b=12.2,c=1.9;)F
13、2在定义变量的同时赋初值,如:在定义变量的同时赋初值,如:F int a=3;F float f=3.56;F char c=a;F int a=3,b=3,c=3;F 3对被定义的变量一部分赋初值,如:对被定义的变量一部分赋初值,如:F int a,b,c=3;F int a=3,b,c;2.1.3 内存的概念内存的概念 计算机内存是由一片延续的存储单元组成,操作系统计算机内存是由一片延续的存储单元组成,操作系统给每个单元编号,这个编号称为内存单元的地址。给每个单元编号,这个编号称为内存单元的地址。地址通常由一组延续的整数组成,编号小的称为内地址通常由一组延续的整数组成,编号小的称为内存低地
14、址,编号大的称为内存高地址。每个单元占存低地址,编号大的称为内存高地址。每个单元占1个字节,即内存中每个字节有一个地址编号。个字节,即内存中每个字节有一个地址编号。 假设定义了一个整型变量假设定义了一个整型变量i: int i; i=10; i实践是占实践是占2个字节的一个内存地址名,这个地址中个字节的一个内存地址名,这个地址中存放的内容是存放的内容是10。数据在内存中实践存放情况如下。数据在内存中实践存放情况如下: 假设数值是负的,那么在内存中存放它的补码。如假设数值是负的,那么在内存中存放它的补码。如存放存放-10情况如下:情况如下:10 0 0 0 0 0 0 00 0 0 0 1 00
15、iF有符号数的最高位表示符号位,符号位为有符号数的最高位表示符号位,符号位为0表示整数,符号表示整数,符号位为位为1表示负数;无符号数表示的都是正数,其最高位不是表示负数;无符号数表示的都是正数,其最高位不是符号位。如:内存中有二进制数符号位。如:内存中有二进制数1111 1111 1110 0111,把它看,把它看成是有符号整数时,其值为成是有符号整数时,其值为25;假设把它视为无符号整数;假设把它视为无符号整数,那么值为,那么值为0 xffe7即十进制即十进制65511。F字符变量的值即字符数据在内存中是以二进制方式存放字符字符变量的值即字符数据在内存中是以二进制方式存放字符的的ASCII
16、码。如:内存中有二进制数码。如:内存中有二进制数0100 0001,把它看成是,把它看成是字符类型时,其值为字符类型时,其值为A,把它视为,把它视为int类型时,其值为类型时,其值为65。F字符型数据和整型数据是通用的,可以混用留意:字符数字符型数据和整型数据是通用的,可以混用留意:字符数据只占一个字节。据只占一个字节。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的补码* *2.2 根本输入输出函数根本输入输出函数2.2.1 格式输入
17、函数和格式输出函数格式输入函数和格式输出函数1.printf函数格式输出函数函数格式输出函数 作用:向终端设备输出假设干个恣意类型的数据作用:向终端设备输出假设干个恣意类型的数据。普通格式:。普通格式: printf(格式控制,输出列表格式控制,输出列表 如:如:printf(“%d,%cn,i,c) 其中:其中:“格式控制是用双引号括起来的字符串格式控制是用双引号括起来的字符串,包括普通字符需原样输出的字符和格式阐明包括普通字符需原样输出的字符和格式阐明由由“%和格式字符普通为小写组成,用和格式字符普通为小写组成,用于将输出的数据转换为指定的格式输出。于将输出的数据转换为指定的格式输出。留意
18、:格式阐明与输出项从左到右的数据类型必留意:格式阐明与输出项从左到右的数据类型必需一一匹配,否需一一匹配,否 那么将输出错误结果。如那么将输出错误结果。如printf(“%d,%dn,123,123.456); 格式阐明与输出项的个数必需一样。格式阐明与输出项的个数必需一样。 printf调用终了后前往一个函数值,其值等于调用终了后前往一个函数值,其值等于输出项个数输出项个数每一个格式阐明都必需用开头,以一个格式字符作为终了,在此之间根据需求可以插入“宽度阐明、左对齐符号“、长度修饰符“l和“L等。不同类型的数据用不同的格式字符。常用的有以下几种:1d(或i)格式符:用于输出十进制整数(不能输
19、出float或double) %d:按整型数据的实践长度输出。 %md:用m指定输出字段的宽度,假设数据的实践位数小于m,那么左端补空格(m为负时,右补空,下同),假设大于m,那么按实践位数输出。 如printf(“%4d,%4d,a,b) 假设a=123,b=12345,那么输出为: 123,12345 %ld 或%Ld :输出长整型数据,也可用于输出int型数据不能写成%dl)。可以指定输出宽度,如: long a=125790;printf(“%8ld,a)2 2o o格式符:以八进制方式输出整数格式符:以八进制方式输出整数( (“%o%o) ),对长整型可以用,对长整型可以用“%lo%
20、lo格式输出,同样可以指定输出宽度格式输出,同样可以指定输出宽度( (“%mo%mo或或“%mlo%mlo) )。实践上是将内存中的数据每实践上是将内存中的数据每3 3位一组按八进制方式输出,因此输位一组按八进制方式输出,因此输出的数值不带符号,即将符号位也一同作为八进制数的一部分输出的数值不带符号,即将符号位也一同作为八进制数的一部分输出。如:出。如: int a=-1; int a=-1; printf( printf(“%d,%o%d,%o,a,a); ,a,a); 输出为:输出为:-1-1,1777771777773 3x x或或X)X)格式符:以十六进制方式输出整数格式符:以十六进制
21、方式输出整数 ( (“%x%x) ) 。对长整。对长整型可以用型可以用“%lx%lx格式输出,同样可以指定输出宽度格式输出,同样可以指定输出宽度( (“%mx%mx或或“%mlx%mlx) )。实践上是将内存中的数据每。实践上是将内存中的数据每4 4位一组按十六进制方式位一组按十六进制方式输出,因此输出的数值也不带符号,即将符号位也一同作为十六输出,因此输出的数值也不带符号,即将符号位也一同作为十六进制数的一部分输出。如:进制数的一部分输出。如: int a=-1; printf(“%x,%o,%d,a,a,a); 输出为:ffff,177777,-14u格式符:用于输出unsigned型数据
22、(“%u),即无符号数,以十进制方式输出,也可以“%mu或“%mlu。一个有符号整数也可以用%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,655345 5c c格式符:用于输出一个字符格式符:用于输出一个字符( (“
23、%c%c) ),可以指定输出宽度,可以指定输出宽度( (“%mc%mc,m m为正,字符前补空格,为正,字符前补空格,m m为负,字符后补空格为负,字符后补空格),),也可也可以以( (“%mlc%mlc无意义无意义) )。假设给定的输出值。假设给定的输出值255255,“那么将低那么将低8 8位转位转换为字符输出。如:换为字符输出。如: main() main() char c= char c=a a; ; int i=97; int i=97; int j=97+256; int j=97+256; printf( printf(“%c,%dn%c,%dn,c,c);,c,c); prin
24、tf( printf(“%c,%dn%c,%dn,i,i);,i,i); printf( printf(“%c,%dn%c,%dn,j,j);,j,j); 运转结果为:运转结果为:a,97a,97 a,97 a,97 a,353 a,3536 6s s格式符:用于输出一个字符串格式符:用于输出一个字符串( (“%s%s) ),可以指定输出宽度,可以指定输出宽度( (“%ms%ms, 假设假设mm 串长,串左补串长,串左补空格,空格,m m为负,串右补空格为负,串右补空格),),也可以也可以( (“%m.ns%m.ns, ,输出占输出占m m列,但只列,但只取字符串中左端取字符串中左端n n个字
25、符,这个字符,这n n个字符输出在个字符输出在m m列的右侧,左补空列的右侧,左补空格格) ),还可以,还可以( (“%-m.ns%-m.ns, ,输出占输出占m m列,但只取字符串中左端列,但只取字符串中左端n n个字个字符,这符,这n n个字符输出在个字符输出在m m列的左侧,右补空格列的左侧,右补空格) )。假设。假设nmnm,那么,那么m m自动取自动取n n值,即保证值,即保证n n个字符正常输出;假设个字符正常输出;假设nn串长,那么按实践串长,那么按实践串输出。如:串输出。如: main() main() printf( printf(“%3s,%7.2s,%.4s,%-5.3s
26、n%3s,%7.2s,%.4s,%-5.3sn, , “CHINACHINA, , “CHINACHINA, , “CHINACHINA, , “CHINACHINA);); 运转结果:运转结果:CHINA, CHINA, CH,CHIN,CHICH,CHIN,CHI 7 7f f格式符:用于输出实数,以小数方式输出。格式符:用于输出实数,以小数方式输出。 %f %f:整数部分全部如数输出,并输出:整数部分全部如数输出,并输出6 6位小数位小数( (留意有效位数留意有效位数) ); 如:如:main()main() float x,y; float x,y; x=111111.111;y=22
27、2222.222; x=111111.111;y=222222.222; printf( printf(“%f,%f,%f%f,%f,%f,x,y,x+y);,x,y,x+y); 运转结果为:运转结果为:111111.109375,222222.218750,333333.328125111111.109375,222222.218750,333333.328125 如:如:main()main() double x,y; double x,y; x=1111111111111.111111111;y=2222222222222.22222222;x=1111111111111.1111111
28、11;y=2222222222222.22222222; printf( printf(“%f%f,x+y);,x+y); 运转结果为:运转结果为:3333333333333.3330103333333333333.333010 %mf: 指定输出的数据占m列,其中有6位小数。假设数值长度小于m,那么左端补空;假设数值长度(整数位+7)大于m,那么按实践输出(=8) 。 %m.nf: 指定输出的数据占m列,其中有n位小数。假设数值长度小于m,那么左端补空;假设数值长度(整数位+1+小数位n)大于m,那么能够突破m列,输出宽度为整数位+1+小数位n。 %-m.nf:与%m.nf根本一样,只是使输
29、出的数值向左端靠,右端补空格。如: 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 8e(e(或或E)E)格式符:以指数方式输出实数。格式符:以指数方式输出实数。 %e %e:以:以1313位宽度输出,其中指数部分占位宽度输出,其中指数部分占5 5位,位,1 1位整数位,位整数位,6 6位小位小数位和数位和1 1为小数点位。如:为小数点位。如: printf( printf(“%e%e,123.456
30、);,123.456); 输出:输出:1.234560e+0021.234560e+002 %me %me:假设:假设m=13m6)m6),那么左端补空。,那么左端补空。 %-m.ne : %-m.ne :与与%m.ne%m.ne根本一样,只是使输出的数值向左端靠,右端根本一样,只是使输出的数值向左端靠,右端补空格。如:补空格。如: float f=123.456; float f=123.456; printf( printf(“%e%e%10e%10e%10.2e%10.2e%.2e%.2e%-10.2en%-10.2en,f,f,f,f,f);,f,f,f,f,f); 输出结果如下输出结
31、果如下: : 1.234560e+0021.234560e+0021.234560e+0021.234560e+0021.23e+0021.23e+0021.23e+01.23e+002021.23e+0021.23e+0029 9g(g(或或G)G)格式符:用来输出实数,它根据数值的大小,自动选格式符:用来输出实数,它根据数值的大小,自动选f f格式或格式或e e格式选择输出时占宽度较小的一种,且不输出无意格式选择输出时占宽度较小的一种,且不输出无意义的零。如:义的零。如: float f=123.468; float f=123.468; printf( printf(“%f %f %e%
32、e%g%g,f,f,f);,f,f,f); 输出如下:输出如下:123.468000123.4680001.234680e+0021.234680e+002123.468123.468 1010在数据前面的多余空格处填以数字在数据前面的多余空格处填以数字0 0。如。如: : printf( printf(“%010d,%010.2fn%010d,%010.2fn,-123,12345.678);,-123,12345.678); 运转结果:运转结果:000000123000000123,0012345.680012345.681111在输出的八进制数加前导在输出的八进制数加前导0 0,对输出的
33、十六进制数加前导,对输出的十六进制数加前导0 x0 x。 如:如:printfprintf“%#o,%#xn%#o,%#xn,65,65);,65,65); 运转结果:运转结果:01010101,0 x410 x41 几点阐明:一个格式阐明以“%开头,以d,o,x,u,c,s,f,e,g等9个格式字符之一为终了,中间可以插入附加格式字符l,L,m,n,-,.等;假设想输出字符“%,可在“格式控制字符串中用延续两个%表示。不同类型的数据应采用相应的格式字符输出,m只在实践长度小于m时才起作用,n普通都能得到执行。即首先思索n的前提下,按实践长度输出,然后再思索m,看能否要补空。F2.scanf2
34、.scanf函数格式输入函数函数格式输入函数F 普通格式:普通格式:F scanf( scanf(格式控制,地址列表格式控制,地址列表F 如:如:main()main()F int a,b,c; int a,b,c;F scanf( scanf(“%d%d%d%d%d%d,&a,&b,&c);,&a,&b,&c);F printf( printf(“%d,%d,%dn%d,%d,%dn,a,b,c);,a,b,c);F F 运转时输入输出如下:运转时输入输出如下:F 3 3 4 4 5 5F 3,4,5 3,4,5F 其中其中“%d%d%d%d%
35、d%d表示按十进制整数方式输入数据。输入数表示按十进制整数方式输入数据。输入数据时,两数据之间以一个或多个空格间隔,也可以回车键、跳格据时,两数据之间以一个或多个空格间隔,也可以回车键、跳格键键tabtab。但不能用逗号分隔。但不能用逗号分隔。 scanf函数的格式阐明与printf函数类似,以%开场,以一个格式字符终了,中间可插入附加字符。如下表所示:格式字符说明d,i用来输入有符号的十进制整数(合法数字09及+-)u用来输入无符号的十进制整数(合法数字09及+-)o用来输入无符号的八进制整数(合法数字07及+-)x,X用来输入无符号的十六进制整数(大小写作用相同)(合法数字0F及+-)c用
36、来输入单个字符s用来输入字符串,将字符串送到一个字符数组中,在输入时以非空白字符开始,以第一个空白字符结束。系统自动在串最后追加结束标志0f用来输入实数,可以用小数形式或指数形式输入e,E,g,G与f 作用相同附加字符说明l,L用于输入长整型数据(可用%ld,%lo,%lx)以及double型数据(用%lf或%le)h用于输入短整型数据(可用%hd,%ho,%hx)域宽指定输入数据所占宽度,域宽应为正整数*表示本输入项在读入后不赋给相应的变量 阐明: 1对于整数而言,scanf函数先将用户的输入数字暂存在内存,然后按“格式字符的要求读取数据。假设用户输入的数字不合法,那么停顿读取。 2可以指定
37、输入数据所占列数,系统自动按它截取所需数据。如:scanf(%3d%3d,&a,&b) 输入:123456,那么a=123,b=456,等价于输入123 456 又如:scanf(“%3c%d,&ch,&a) 前3个字符包括空格或回车为ch的输入,取第一个字符赋给ch,第4个之后的非空输入为a的输入。3假设在%后有一个“*,表示跳过它指定的列数。如: scanf(“%2d %*3d %2d,&a,&b); 输入: 12 345 76 那么a=12,b=764输入数据时不能规定精度。如:scanf(%7.2f,&a)是不合法的5假设在“格式
38、控制字符串中除了格式阐明外还有其他字符,那么在输入数据时,应输入与这些字符一样的字符。如: scanf(“%d,%d,&a,&b) 应输入:3,4 scanf(“%d %d,&a,&b) 那么两数之间应输入1个或更多个空格 scanf(“%c%c%c,&a,&b,&c) 须延续输入3个字符,不须空格分隔6在输入数据时,遇到以下情况时该数据以为终了。 遇空格或回车或Tab键 按指定宽度终了,如“%3d 遇非法输入2.2.2 非格式输入、输出函数非格式输入、输出函数C言语本身不提供输入输出语句,输入输出操作是由函数言语本身不提供输入输出语句,
39、输入输出操作是由函数来实现。如来实现。如printf函数和函数和scanf函数是由函数是由C规范函数库提规范函数库提供,因此,在运用这些函数时,要用预编译命令供,因此,在运用这些函数时,要用预编译命令“#include将有关的将有关的“头文件包括到用户源文件中,头文件包括到用户源文件中,如:如: #include /直接找直接找C言语系统目录言语系统目录或或 #include “stdio.h /先找任务目录,再找先找任务目录,再找C言言语系统目录语系统目录 C言语不提供输入输出语句的目的是防止编译系统在编言语不提供输入输出语句的目的是防止编译系统在编译阶段处置与硬件有关的问题,可以使编译系统
40、简化,译阶段处置与硬件有关的问题,可以使编译系统简化,通用性强,可移植性好。通用性强,可移植性好。 C言语函数库中提供了一批言语函数库中提供了一批“规范输入输出函数,它规范输入输出函数,它们是以规范的输入输出设备为输入输出对象的。如有们是以规范的输入输出设备为输入输出对象的。如有: putchar(),getchar(),printf(),scanf(),puts(),gets()等。等。1.putchar函数字符输出函数函数字符输出函数作用:向终端输出一个字符;其普通方式为:作用:向终端输出一个字符;其普通方式为: putchar(int或或char) 假设所给的参数不是假设所给的参数不是i
41、nt或或char,那么先类型转换为,那么先类型转换为int,再按字符,再按字符输出,不给参数,那么出错。输出,不给参数,那么出错。如:如:#include main() char a,b,c; a=B;b=O;c=Y; putchar(a);putchar(b);putchar(c); 运转结果为:运转结果为:BOY/*/putchar也可以用来输出控制字符如也可以用来输出控制字符如putchar(n),也可输出其他本,也可输出其他本义字符如义字符如putchar(101),putchar(),putchar(015)等。等。2.getchar函数字符输入函数函数字符输入函数作用:从终端输入一
42、个字符;其普通方式为:作用:从终端输入一个字符;其普通方式为: getchar()函数不带参数加参数那么警告错,函数的值就是从输入设备得函数不带参数加参数那么警告错,函数的值就是从输入设备得到的字符。到的字符。如:如:#include main() char c; c=getchar(); putchar(c); 运转结果为:运转结果为:也可以:也可以:putchar(getchar(),或,或printf(“%c,getchar()。F3.getch()3.getch()和和getche()getche()函数函数F 作用:从规范输入设备上读入一个字符,其调用方式为:作用:从规范输入设备上读
43、入一个字符,其调用方式为:F getch(); /getch(); /* *读入的字符不回显在屏幕上读入的字符不回显在屏幕上* */ /F getche(); / getche(); /* *读入的字符回显到屏幕上读入的字符回显到屏幕上* */ /F 与与getchargetchar函数不同之处在于:函数不同之处在于:getchgetch和和getchegetche函数不用输入函数不用输入回车才终了,只需输入一个字符,该字符立刻被接纳,程序继续回车才终了,只需输入一个字符,该字符立刻被接纳,程序继续执行下一条语句。执行下一条语句。2.3 运算符和表达式运算符和表达式C的运算符有以下几类:的运算
44、符有以下几类: (1) 算术运算符算术运算符 (+ - * / %) (2) 关系运算符关系运算符 ( = = !=) (3) 逻辑运算符逻辑运算符 (! & |) (4) 位运算符位运算符 ( | &) (5) 赋值运算符赋值运算符 (=及其扩展赋值运及其扩展赋值运算符算符) (6) 条件运算符条件运算符 (? :) (7) 逗号运算符逗号运算符 (,) (8) 指针运算符指针运算符 (*和和&) (9) 求字节数运算符求字节数运算符 (sizeof) (10) 强迫类型转换运算符强迫类型转换运算符 (类型类型) (11) 分量运算符分量运算符 (. -) (12)
45、下标运算符下标运算符 () (13) 其他其他 (如函数调用运算如函数调用运算符符()2.3.1 算术运算算术运算1. 算术运算符和算术表达式算术运算符和算术表达式 根本的算术运算符有:根本的算术运算符有: + 加法运算符,或正值运算符。如加法运算符,或正值运算符。如3+5、+3 减法运算符,或负值运算符。如减法运算符,或负值运算符。如3-5、-3 * 乘法运算符。如乘法运算符。如3*5 / 除法运算符。如除法运算符。如5/3=1,整数相除结果为整数,整数相除结果为整数,舍弃小数部分,舍弃小数部分 % 模运算符或求余运算符,模运算符或求余运算符,%两侧应为整型数两侧应为整型数,如如7%4=3,
46、余数的正负,余数的正负 号与被除数一致号与被除数一致 用算术运算符和括号将运算对象也称操作数衔用算术运算符和括号将运算对象也称操作数衔接起来的、符合接起来的、符合C语法规那么的式子,称为语法规那么的式子,称为C算术表算术表达式。运算对象包括常数、变量、函数等。达式。运算对象包括常数、变量、函数等。 C言语规定了运算符的优先级和结合性,在表达式言语规定了运算符的优先级和结合性,在表达式求值时,先按运算符的优先级别高低次序执行,假求值时,先按运算符的优先级别高低次序执行,假设一个运算对象的两侧的运算符优先级别一样,那设一个运算对象的两侧的运算符优先级别一样,那么按规定的结合方向处置,遵照尽能够多地
47、自左而么按规定的结合方向处置,遵照尽能够多地自左而右将假设干个字符组成一个运算符原那么。右将假设干个字符组成一个运算符原那么。如:a-b*c 对操作数b而言,左为减号,右为乘号,而乘号优先于减号,因此,表达式相当于a-(b*c)。 a-b+c 对操作数b而言,左为减号,右为加号,优先级别一样,因此,要按结合方向处置。算术运算符的结合方向是“自左至右,因此,b先与减号结合,执行a-b的运算,再执行加c的运算。表达式相当于(a-b)+c。 -i+ 对操作数i而言,左为负号运算符,右为+运算符,优先级别一样,要按结合方向处置。两者的结合方向都是“自右至左,因此,i先与+结合,执行i+的运算,再执行负
48、号运算。表达式相当于-(i+)。 (优先级别一样而结合方向不同的情况不存在 i+j 这不是一个操作数面对2个运算符的问题,它的执行顺序,遵照尽能够多地自左而右将假设干个字符组成一个运算符原那么,表达式相当于(i+)+j。 (见附录E ) 2.各类数值型数据的混合运算各类数值型数据的混合运算 整型、实型、字符型数据间可以混合运算。如:整型、实型、字符型数据间可以混合运算。如: 10+a+1.5-8765.1234*b 是合法的。运算时,系统自动将不同类型的数据转换成同一类型,然后进是合法的。运算时,系统自动将不同类型的数据转换成同一类型,然后进展运算。转换规那么是级别低的向级别高的类型转换,如以
49、下图所示:展运算。转换规那么是级别低的向级别高的类型转换,如以下图所示:同为同为signed或或unsigned时按右图转换时按右图转换类型一样时类型一样时, signed转换成转换成unsigned 类型不同时类型不同时,char和和short无条件转换无条件转换 为为int,long,float,double; int,long无条无条 件转换为件转换为float,double; int,long仍遵照仍遵照 signed转换成转换成unsigned doubledoubleintintunsignedunsignedlonglongfloatfloatchar,shortchar,sho
50、rt高高低低2.3.2 强迫类型转换强迫类型转换普通方式为:普通方式为: 类型名表达式类型名表达式 如:如: (double)a (int)(x+y) (float)(5%3) 留意:在强迫类型转换时,得到一个所需类型的中留意:在强迫类型转换时,得到一个所需类型的中间变量,原来变量的类型未发生变化。如:间变量,原来变量的类型未发生变化。如: main() float x; int i; x=3.6; i=(int)x; /*i等于等于x的整数部分,而的整数部分,而x的值和类型不的值和类型不变,仍为变,仍为float型型*/ printf(“x=%f,i=%d,x,i); /*运转结果为:运转结
51、果为:x=3.600000,i=3*/2.3.3 增增1与减与减1运算运算作用是使变量的值增作用是使变量的值增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的值为的值为3,然后,然后i变为变为4 又如:又如:i=3; printf(“%d,+i); /*输出输出4*/ i=3; printf(“%d,i+); /*输出输出3*/ i=3; printf(“
52、%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相加,得到表达式的值为9,再实现自加3次,I的值变为6。 又如: I=3; printf(“%d,%d,I,I+); 对于这种情况,
53、假设从左至右求值,那么输出“3,3。多数系统采用自右向左的方法,即先求I+,输出3后I变成4,再求第一个表达式I,输出4。2.3.4 赋值运算赋值运算1赋值运算符:赋值运算符:“=就是赋值运算符,它的作用是就是赋值运算符,它的作用是将一个数据赋给一个变量。假设赋值运算符两侧的将一个数据赋给一个变量。假设赋值运算符两侧的类型不一致,但都是数值型或字符型,在赋值时要类型不一致,但都是数值型或字符型,在赋值时要进展类型转换。规那么如下:进展类型转换。规那么如下: 实型实型整型变量整型变量,舍弃实数的小数部分,超范围那舍弃实数的小数部分,超范围那么溢出。么溢出。 整型整型实型变量,数值不变,用小数补足
54、有效位。实型变量,数值不变,用小数补足有效位。 doublefloat变量变量,截取前面截取前面7位有效数字位有效数字,超范围那超范围那么溢出么溢出. floatdouble变量,数值不变,有效位扩展到变量,数值不变,有效位扩展到16位位。 unsigned charint变量,数值变量,数值ASCII)不变。不变。 signed charint变量,高变量,高8位符号扩展。位符号扩展。 int,short,long char变量,截取低变量,截取低8位。位。 signed intlong变量变量,高高8位符号扩展。位符号扩展。 unsigned intlong变量变量,高高8位补位补0,数值
55、不变。数值不变。 signedunsigned或或unsignedsigned且长度相等,且长度相等,照搬照搬 概括如下: 赋值符号两侧类型长度相等,原样照搬。 有(或无)符号短类型数据有(或无)符号长类型变量, 数值不变,正值高位补0,负值符号扩展。 有(或无)符号长类型数据有(或无)符号短类型变量, 截取低位。2复合的赋值运算符: 赋值运算符之前加上其他运算符,可以构成复合运算符,如: a+=3 等价于a=a+3 x*=y+8 等价于x=x*(y+8) x%=3 等价于x=x%3 留意:运算符的左边只能是一个变量,右边可以是表达式。 凡是二元二目运算符都可以与=组成复合赋值符,C言语规定可
56、以运用10种复合运算符。即: +=,-=,*=,/=,%=,=,&=,=,|=3赋值表达式: 由赋值运算符将一个变量和一个表达式衔接起来的式子称为赋值表达式。它的普通方式为: 如“a=5是一个赋值表达式,赋值表达式的值就是被赋值的变量的值5变量a的值也是5。又如: a=b=c=5 (表达式的值为5,a、b、c的值均为5 a=5+(c=6) 表达式的值为11,a为11,c为6 a=(b=4)+(c=6)表达式的值为10,a为10,b为4,c为6) a=(b=10)/(c=2)(表达式的值为5,a为5,b为10,c为2) a+=a-=a*a (假设a的初值为12,那么赋值表达式值为-264
57、)2.3.5 逗号运算逗号运算 逗号表达式的普通方式为:逗号表达式的普通方式为: 表达式表达式1,表达式,表达式2,表达式,表达式n 求解过程是:先求解表达式求解过程是:先求解表达式1,再求解表达式,再求解表达式2,最,最后求解表达式后求解表达式n的值,整个逗号表达式的值是表达式的值,整个逗号表达式的值是表达式n的值。如:的值。如: 3+5,6+8 逗号表达式的值为逗号表达式的值为14 a=3*5,a*4 由于由于“=优先级别高于优先级别高于“,故先计算故先计算“a=3*5 得得a的值为的值为15,然后求解,然后求解a*4得得60,表达,表达式的值为式的值为60 留意留意:并不是任何地方出现的
58、逗号都是作为逗号运并不是任何地方出现的逗号都是作为逗号运算符。如算符。如: printf(“%d,%d,%d,a,b,c);2.3.6 位运算位运算c言语具有高级言语的特点,又具有低级言语的功能,用言语具有高级言语的特点,又具有低级言语的功能,用途广泛。途广泛。 位运算:就是对存储单元中的二进制位进展左、右移位,位运算:就是对存储单元中的二进制位进展左、右移位,按位与、或、异或、取反等操作。按位与、或、异或、取反等操作。留意:参与位运算的运算量只能是整型或字符型数据。留意:参与位运算的运算量只能是整型或字符型数据。 1. “按位与运算符按位与运算符 (&) 特点:两对应位都为特点:两对
59、应位都为1时结果为时结果为1,否那么为,否那么为0 , 例例3&5: 3的补码:的补码: 00000011 (&) 5的补码:的补码: 00000101 00000001 按位与可以用于取一个数的某些指定位如按位与可以用于取一个数的某些指定位如a&0377。/*2. 按位或运算符按位或运算符( | ) 特点:两对应位中只需一个为特点:两对应位中只需一个为1,结果便为,结果便为1,否那么为,否那么为0 例:例: 3的补码:的补码: 00000011 ( | ) 5的补码:的补码: 00000101 00000111 按位或可以用于对一个数的某些指定位置按位或可以用于对一个
60、数的某些指定位置1如:如:a|0377。3. “异或运算符异或运算符 ( ) 特点:两对应位一样,结果便为特点:两对应位一样,结果便为0,否那么为,否那么为1 例:例: 3的补码:的补码: 00000011 ( ) 5的补码:的补码: 00000101 00000110 运用:运用: 1使特定位翻转使特定位翻转 如:使如:使01111010低低4位翻转位翻转 01111010 ( ) 00001111 011101012与0相异或,保管原值3交换两个值,不用暂时变量 如:a3,b4,那么可以经过以下赋值语句将a和b的值互换。 a=ab; b=ab; a=ab; a=011 ( ) b=100 a=111 ( ) b=100 b=011 ( ) a=111 a=1004. “取反运算符取反运算符 ( ) 特点:是单目运算符,当某位原为特点:是单目运算符,当某位原为0 时,经反运算后为时,经反运算后为1,某,某位原为位原为1时,反运算后为时,反运算后为0; 例例3: 3的补码:的补码: 0000001
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川省乐至县联考2025-2026学年初三第三次诊断语文试题含解析
- 2026届天津市新华圣功校初三尖子生班3月调研考试语文试题含解析
- 落实教育公平助学承诺书(5篇)
- 河北省秦皇岛青龙县联考2026届下学期初三年级期末考试(联考卷)英语试题含解析
- 快乐运动的演讲比赛稿15篇
- 企业沟通渠道评估模板优化交流
- 文档编写格式规范工具包
- 物资采购合规管控承诺书6篇
- 环保建材绿色生产承诺书范文5篇
- 多平台文档编辑格式规范
- 工程项目部质量责任制度
- 2025-2026学年八年级下册语文教学计划及进度表
- 2026年内蒙古公务员录用考试《行测》题(含答案)
- 2026及未来5年中国公安行业信息安全市场运行格局及发展趋向研判报告
- 2026年南京城市职业学院单招职业适应性考试题库及一套完整答案详解
- GB/T 23786-2026速冻饺子质量通则
- 2025年河南农业职业学院单招职业技能考试题库附答案解析
- 2025年小学语文教师职称考试试题以及答案
- 单位财务培训制度
- 2026年入职性格测试规则意识强弱考核题及解答
- 物流管理标准作业流程手册
评论
0/150
提交评论