You are on page 1of 20

第 6 章 字符型数据

第 6 章 字符型数据

 字符型常量
 字符常量
 转义字符常量
 字符串常量
 可对字符量进行的运算
 字符变量
 字符的输入和输出
 调用 printf 和 scanf 函数输出和输入字符
 调用 putchar 和 getchar 函数输出和输入字符
 程序举例
字符型常量——字符常量

 一个字符常量代表 ASCII 字符集中的一个字符 , 字符常量是


用单引号括起来的一个字符。例如: 'A' 、 'C' 、 't' 、 '!' 、 '?'

说明
 单引号中的大写字母和小写字母代表不同的字符常量。例
如, 'B' 和 'b' 是不同的字符常量。
 单引号中的空格符也是一个字符常量,不能写成两个连续的
单引号。
 字符常量只能包含一个字符 , 因此 'abc' 是非法的。
 字符常量不能用双引号括起来。例如 , "a" 不是字符常量 , 而是
一个字符串。
字符型常量——字符常量

字符常量在内存中占一个字节 , 存放的是字符的
ASCII 代码值。

C 语言规定 , 所有字符常量都作为整型量来处理 ,
在计算机内部 , 其对应的整数值就是 ASCII 字符
集中该字符的序号 ( 即 ASCII 代码值 ) 。
• 字符常量 'A' 的值为 65( 八进制数 101)
• 字符常量 'a' 的值为 97( 八进制数 141)
• 数字字符 '0' 的值为 48( 八进制数 60)
• 空格字符的值为 32( 八进制数 40) 。
字符型常量——转义字符常量
 转义字符(又称反斜线字符)是以一个反斜线开头后跟一
个特定的字符 , 用来代表某一个特定的 ASCII 字符 , 这些
字符常量也必须括在一对单引号内。
字符型常量——转义字符常量

说明
 转义字符常量 , 如 '\n','\101','\141' 只代表一个字符。
 反斜线后的八进制数可以不用 0 开头。
 例如 : '\101' 代表的就是字符常量 'A', '\141' 代表字符常量 'a' 。
 反斜线后的十六进制数只可由小写字母 x 开头 , 不允许用
大写字母 X, 也不能用 0x 开头。
 例如 : '\x41' 代表字符常量 'A' , '\x6d' ( 或 '\x6D' ) 代表字符常
量 'm' 。
字符型常量——字符串常量
 字符串常量是由双引号括起来的一串字符。如" STRING
"就是字符串常量。
 在 C 语言中 , 系统在每个字符串的最后自动加入一个字
符 '\0' 作为字符串的结束标志。
注意
 字符常量 'Z' 在内存中占一个字节;字符串常量 "Z" 占两
个字节 , 其中一个字节用来存放 '\0' 。两个连续的双引号 :
""也是一个字符串常量 , 称为“空串” , 占一个字节的
存储空间来存放 '\0' 。
字符型常量
——可对字符量进行的运算

在 C 程序中 , 字符量可参与任何整数运算。例如 :

• 'B' -'A' ≡66-65≡1 'a' +1≡97+1≡98≡'b' (符号≡表示等价的


意思)
利用算术运算可以把大写字母转换成小写字母或
把小写字母转换成大写字母 , 例如 :

• 'A' +32≡65+32≡97≡'a' 'b' -32≡98-32≡66≡'B'


字符型常量
——可对字符量进行的运算

也可以通过算术运算把数字字符转换为整数值或把一
位整数转换成数字字符 , 例如 :

• '9' -'0' ≡57-48≡9 '3' -'0' ≡51-48≡3


• '9'+'0' ≡9+48≡57≡'9' '4'+'0' ≡4+48≡52≡' 4'
• 一定要分清诸如整数 9 和字符 '9' 的区别。

字符量也可以进行关系运算。

• 如果进行关系运算: 'a' >'b' ,由于 'a' 的值 97 小于 'b' 的值 98 ,所以 'a'


>'b' 的结果为“假” , 其值为 0 。
• 如果进行逻辑运算: 'a' && 'b' ,由于 'a' 和 'b' 的 ASCII 代码值都为非零 ,
“ 与”运算表达式的值为 1 。
字符变量

 字符变量用关键字 char 定义,定义的同时可以赋初值。


 字符变量在内存中占一个字节。
 当把字符放入字符变量中 , 字符变量中的值就是该字符
的 ASCII 代码值,所以字符变量可以作为整型变量来处
理 , 可以参与对整型变量所允许的任何运算。

例如
char c1='1', c2='A', c3;
int k=5;
c1++;
c3=( c2+32+k)%25;
字符的输入和输出

调用 printf 和 scanf 函数输出和输入字符

• 在程序的开头用包含头文件 stdio.h 的命令行 :


#include <stdio.h>
在输入 / 输出时,使用格式说明 %c 。
• 1. 用 printf 函数输出字符
• 2. 用 scanf 函数输入字符

调用 putchar 和 getchar 函数输出和输入字符


字符的输入和输出

调用 printf 和 scanf 函数输出和输入字符

• 1. 用 printf 函数输出字符

有程序段: 有程序段:
char a ='S' ; char a ='A' ;
printf ( " a=%c\n " , printf ( " a =%3c\n " , a );
a ); 输出结果 :
输出结果 : a = A ( A 前有两个空
a=S 格)

用 printf 函数输出字符时 , 可
以在格式字符前加一个整数 ,
用来指定输出字符时所占的宽
度。
字符的输入和输出

调用 printf 和 scanf 函数输出和输入字符

• 2. 用 scanf 函数输入字符

有程序段 :
注意 : char a, b, c;
1 )输入字符时 , 字符之间不应有间隔符。 scanf ( " %c%c%c " , &a, &b, &c );
若从第一列开始输入 : 输入:
TH<CR> THE
E<CR> 变量 a,b,c 分别得到字符 T,H,E
则在变量 a 中将存放字符 T ,变量 b 中存放字
符 H ,变量 c 中存放回车符,字符 E 并没有读
入。
2 )只有在用户敲入 Enter 键时 , 读入才开始执
行。
字符的输入和输出

调用 putchar 和 getchar 函数输出和输入字符

• 2. 用 scanf 函数输入字符

getchar 函数用于输入字符 , 其调用形式如


putchar 函数用于输出
下:
字符 , 其调用形式如下 :
ch =getchar()
putchar( ch ) ;
getchar 后的一对圆括号不可少 , getchar( )
其中 ch 可以是字符变
函数从终端读入一个字符作为函数值。
量或是字符常量。
例如 : putchar('Y'); 将
在终端输出字符 Y 。 以上调用形式把读入的一个字符赋给变量
ch 。在输入时 , 空格、回车符都将作为字符
读入 , 而且只有在用户敲入 Enter 键时 ,
读入才开始执行。
程序举例

例 6 .1 以下程序输出 26 个大写字母和它们的 ASCII 代码 , 每行输出两组数据。

结果
#include <stdio.h>
main( )
{ char ch; int i;
for( i=0; i<26; i++)
{ ch =i +65;
if ( i%2 ==0 ) printf ("\n");
printf("c=%c ASCII =%d", ch, ch );
}
putchar('\n');
}
程序举例

例 6 .2 以下程序段等待从终端输入一个字符 , 当按 Enter 键时 , 程序才往下继


续进行。

#include <stdio.h>
main( )
{ 
printf ( " Press Enter to continue\n
" );
while( getchar ( ) ! ='\n') ;

}
程序举例

例 6 .3 以下程序把从终端输入的一行字符中所有的小写字母转换成大写字母 ,
其他字符不变。

#include <stdio.h>
main( )
{ char c;
while ( ( c =getchar () ) !='\n' ) 结果
{ if ( c >='a' && c <='z' ) c =c -'a' +'A' ;
putchar( c ); **The Programming**<CR>
} **THE PROGRAMMING **
putchar( '\n' );
}
程序举例

例 6 .4 编写程序统计输入的字符中空格符、换行符和横向跳格 ( 制表 ) 符的个
数 , 用 ! 号结束输入。

#include <stdio.h>
#include <ctype.h>
main ()
{ long n =0; char ch;
while ( ( ch =getchar () ) !='!' )
if ( isspace ( ch ) ) n++;
printf ("n =%ld\n", n );
}
程序举例

例 6 .5 把一串密码译成正文 , 密码以字符 @ 表示结束。译码规则如下 :

•如果是字母 , 转换成字母序列的下一个字母。如 A 译成 B 、#include


#include <stdio.h> B 译成 C<ctype.h>

•如果是字母 Z, 译成 A 。 main( )
•无论是大小写字母都译成小写字母。 { char c;
•其他字符一律照原样译出。 c =getchar();
while( c !='@')
说明 { if ( isalpha( c) )
{ c =tolower( c );
函数 isalpha( c) 判断 c 中的 c =( c-'a' +1 )%26 +'a' ;
字符是否为字母 , 若是 , 函 }
数值为 1; 函数 tolower( c ) putchar( c ); c =getchar ();
把 c 中的大写字母转换成小 }
写字母 , 其他字符不变。 printf ("\n");
}

You might also like