制 作:方 斌
C语言程序设计教程郧阳师范高等专科学校计算机科学系方 斌 制作制 作:方 斌
6.1 字符型常量
6.1.1 字符常量
C语言中,一个字符常量代表一个 ASCII字符的字符。在程序中用一对单引号括起来的字符就是字符常量。如:
‘ a’,‘A’,‘C’,‘@’,‘2’,‘0’,‘,’ 都是合法的字符常量
一个字符占用一个字节。
制 作:方 斌说明:
用一对单引号括起来的大写字母和小写字母是不同的字符常量。如:’ a’ 和 ‘ A’,‘b’ 和 ‘ B’ 就是不同的字符常量。
用一对单引号括起来的空格字符也是一个字符常量,
即:’ ’,但不能写成 ‘’
字符常量只能是一个字符,因此,’ abc2’是非法的
字符常量只能用单引号括起来而不能用双引号。用双引号括起来的字符我们称为字符串(或字符数组)。
如:’ a’是字符常量,” a”是字符串制 作:方 斌
不论是字符常量还是字符变量,在内存中占一个字节,它在内存中存储的是该字符的 ASCII
码值,所以,C语言规定,所有的字符常量都作为整型数来处理,其值就是该字符的 ASCII
码值。因此,’ A? 的值为 65,’ a? 的值为
97,’ 0?的值为 48,‘ ’的值为 32。
制 作:方 斌
6.1.2 转义字符常量
C语言还允许使用一种特殊形式的字符常量,
就是以反斜杠,\,开头的转义字符。
注意,如果反斜杠或单引号本身作为字符常量,必须使用转义字符:‘ \\?代表一个反斜线” \”、‘ \代表一个单引号” ’,。
如:’ \t?,?\n?
制 作:方 斌说明:
转义字符常量,如’ \n?,?\t?,?\141?只代表一个字符常量。
反斜线后可以跟一个八进制数(该八进制数对应某个字符 ASCII码的八进制数)来表示一个字符常量。如:’ \101?即’ A?,?\141?即’ a?。
反斜线后可以跟一个以小写字母 x开头的十六进制数(该十六进制数对应某个字符 ASCII码的十六进制数)来表示一个字符常量。
如:’ \x41?即’ A?,?\x6d?即’ m?.
制 作:方 斌常用的转义字符形式 功能 形式 功能
\n 回车换行 \\ 反斜线字符
\t 横向跳格 (tab) \? 单引号
\v 竖向跳格 \” 双引号
\r 回车符 \ddd 三位八进制代表的
ASCII字符
\f 换页符 \xhh 两位十六进制数代表的 ASCII字符
\b 退格 (BackSpace) \0 空字符制 作:方 斌
6.1.3 字符串常量
字符串常量是用一对双引号括起来的若干字符序列。
如:” string”,“abc130\n\x141”.
字符串中字符的个数称为字符串长度。长度为 0的字符串(即一个字符都没有的字符串)称为空串,表示为,”
(一对紧连的双引号)。
在 C语言中,系统会在每个字符串的末尾自动加一个空字符’ \0?(其 ASCII码值为 0)作为字符串结束的标志。所以,’ A?是字符常量,占一个字节,而” A”是一个字符串,占两个字节,因为系统在其末尾自动加了一个’ \0?
字符作为结束标志。
制 作:方 斌
注意,在源程序中书写字符串常量时,不必加结束字符
‘ \0?,否则画蛇添足。如:有一个字符串为,CHINA”,
则它在内存中的实际存储如下所示:
最后一个字符 '\0'是系统自动加上的,它占用6字节而非
5字节内存空间。
C H I N A \0
制 作:方 斌
如果反斜线和双引号作为字符串中的有效字符,则必须使用转义字符。
例如:
(1) C:\msdos\v6.22 → "C,\\msdos\\v6.22"
(2) I say:"Goodbye!" → "I say,\"Goodbye!\""
制 作:方 斌
6.1.4 可对字符量进行的运算
一个字符数据在内存中存储的是该字符的 ASCII
码 ── 一个无符号整数,其形式与整数的存储形式一样,所以C语言允许字符型数据与整型数据之间通用。即整数可以进行的运算,字符量也可以。如:
‘ a? –?A? 即 97 –65(32)?0? + 1 即 48 + 1(49)
A? + 32 即 65 + 32(97)?b? – 32 即 98 – 32(66)
a? <?b? 即 97 < 98(1)?0? &&?b? 即 48 && 98(1)
0? ||?\0? 即 48 || 0(1)
制 作:方 斌
一个字符型数据,既可以以字符形式输出 (%c),
也可以整数形式输出 (%d)。如:
printf(“%d,%c”,?a?,?a?);
输出:
97,a
制 作:方 斌
6.2 字符变量
字符变量的类型关键字为 char,占用 1字节内存单元。如:
char ch1,ch2; /*定义两个字符变量 ch1和 ch2*/
ch1=?a?; ch2=?b?; /*给字符变量赋值 */
或:
char ch1 =?a?,ch2 =?b?;
制 作:方 斌
字符变量可以按整型变量来处理:如:
char c1,c2,c3;
int k = 5;
c1 =?1?;
c2 =?A?;
c3 = (c2 + 32 + k) % 25;
制 作:方 斌
6.3 字符的输入和输出
6.3.1 调用 printf和 scanf函数输出和输入字符
字符的输出和输入的格式控制符为 %c,如:
char a;
scanf(“%c”,&a);
printf(%c%3c”,a,a);
输入,A
输出,A□□ A (□ 代表空格 )
制 作:方 斌
6.3.2 调用 putchar和 getchar函数输出和输入字符
用 putchar和 getchar函数输出和输入字符时必须包含头文件 stdio.h
putchar函数的调用形式如下:
putchar(字符变量名或字符常量 );
功能:输出一个字符。如:
char ch =?a?;
putchar(ch);
putchar(?A?);
输出,aA
制 作:方 斌
getchar函数的调用形式如下:
字符变量名 = getchar();
功能:从键盘上读取一个字符并赋值给字符变量。如:
char ch;
ch = getchar();
printf(“%c”,ch);
输入,v
输出,v
制 作:方 斌
6.4 程序举例
例 6.1 以下程序输出 26个大写字母和它们的 SCII码值。每行输出两组。
#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');
}
制 作:方 斌
[案例 ] 字符变量的字符形式输出和整数形式输出。
/*程序功能:用字符形式和整数形式输出字符变 */
main()
{
char ch1,ch2;
ch1='a'; ch2='b';
printf(“ch1=%c,ch2=%c\n”,ch1,ch2);
printf(“ch1=%d,ch2=%d\n”,ch1,ch2);
}
程序运行结果:
ch1=a,ch2=b
ch1=97,ch2=98
制 作:方 斌
[案例 ] 字符数据的算术运算
/*程序功能:字符数据的算术运算 */
main()
{ char ch1,ch2;
ch1=?a?; ch2=?B?;
/*字母的大小写转换 */
printf(“ch1 = %c,ch2 = %c\n”,ch1-32,ch2+32);
/*用字符形式输出一个大于 256的数值 */
printf("ch1+200 = %d\n",ch1+200);
printf("ch1+200 = %c\n",ch1+200);
printf("ch1+256 = %d\n",ch1+256);
printf("ch1+256 = %c\n",ch1+256);
}
制 作:方 斌程序运行结果:
ch1=A,ch2=b
ch1+200=297
ch1+200=)
ch1+256=353
ch1+256=a
思考题,用字符形式输出一个大于 256的数值,
会得到什么结果?
制 作:方 斌
综上所述,字符常量 'A'与字符串常量 "A"是两回事:
( 1) 定界符不同:字符常量使用单引号,而字符串常量使用双引号;
( 2) 长度不同:字符常量的长度固定为 1,而字符串常量的长度,可以是 0,也可以是某个整数;
( 3) 存储要求不同:字符常量存储的是字符的 ASCII
码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志 ’ \0?。
制 作:方 斌作业:
6.20,6.21,6.23,6.24
上机要求:
1、进一步熟悉 Turbo C环境。
2、测试教材中的例题和布置的作业。
3、本次作业要参考教材中的例题。作业中的程序必须在 TC中调试正确通过后再上交。