参考资料:高教版《全国计算机等级考试二级教程——C语言程序设计》、《21天学通C语言》
字符型常量
字符常量
C语言中,一个字符常量代表ASCII字符集中的一个字符,在程序中用单引号把一个字符括起来作为字符常量。
字符常量在内存中占一个字节,存放的是字符的ASCII码值。
说明
- 单引号中的大写字母和小写字母代表不同的字符常量。
- 单引号中的空格' '也是一个字符常量,不能写成两个连续的单引号。
- 字符常量只能包含一个字符。
- 字符常量只能用单引号括起来。
转义字符常量
转义字符又称为反斜线字符,这些字符常量总是以一个反斜线开头后跟一个特定的字符,用来代表某一个特定的ASCII字符,这些字符常量也必须括在一对单引号内。
例如,‘\n’代表回车换行,'\'代表一个单引号。
C语言中的转义字符
C语言中的转义字符如下表:
字符形式 | 功能 |
---|---|
\n | 回车换行 |
\t | 横向跳若干格(代表Tab键) |
\v | 竖向跳格 |
\r | 回车符 |
\f | 换页符 |
\b | 退格符(Backspace键) |
\|反斜杠字符“\” | |
\' | 单引号(撇号)字符 |
\" | 双引号字符 |
\ddd | 三位八进制数代表的一个ASCII字符 |
\xhh | 二位十六进制数代表的一个ASCII字符 |
\0 | 空值(ASCII码为0) |
注意:
- 转义字符常量,如'\n','\101'等只代表一个字符。
- 反斜线后的八进制数可以不用0开头。
- 反斜线后的十六进制数只可由小写字母x开头。
字符串常量
字符串常量是由双引号括起来的一串字符。如"STRING"就是字符串常量,在printf和scanf中的"%d %d"也是字符串常量。在C语言中,系统在每个字符串的最后自动加入一个字符'\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
'9' + '0' ≡ 9 + 48 ≡ '9'
在C语言中,字符量也可以进行关系运算:
'a' > 'b'的运算结果为假(在ASCII码中,'a'的值为97,'b'的值为98)
'a' && 'b'的运算结果为真('a'和'b'的ASCII码都为非零)
字符变量
C语言使用char数据类型来储存字符。C语言规定,所有字符常量都作为整型量来处理。
- 如果char类型的变量在C程序中用作字符,该变量就被解释成字符。
- 如果char类型的变量在C程序中用作数字,该变量就被解释成数字。
使用字符变量
在使用char类型变量之前必须先声明,可以在声明变量的同时初始化它。
例如:
char a, b, c; //声明三个未初始化的char类型变量
char code = 'x'; //声明一个char类型的变量code,并为其存储x字符
code = '!'; //在变量code中储存!字符
要创建字面字符常量,用单引号将单个字符括起来即可。编译器会把字面字符常量自动翻译成相应的ASCII码,然后把相应的数值代码赋给变量。
要创建符号字符常量,可使用#define指令或const关键字。
#define EX 'x'
char code = EX; //将code设置为'x'
const char A = 'Z';
字符的输入和输出
调用printf和scanf函数输入输出字符
用printf函数输出字符时只需使用格式说明%c,例如:
char a;
a = 'S';
printf("a = %c\n", a);
输出:a = S
用scanf函数输入字符时也要使用格式说明%c,例如:
char a, b, c;
scanf("%c%c%c", &a, &b, &c);
注意:
当格式说明中的%c一个紧接一个时,在输入字符串时,字符之间不应该有间隔符。这时空格、回车、Tab键都将作为字符读入。
调用putchar和getchar函数输入和输出字符
putchar函数用于输出字符,其调用形式如下:
putchar (ch)
其中ch可以是字符变量或是字符常量,在以上函数调用的后面紧跟一个分号,就形成一条独立的输出语句。
getchar函数用于输入字符,其调用形式如下:
ch = getchar ()
getchar后的一对圆括号内没有参数,但这一对圆括号不可少,getchar()从终端读入一个字符作为函数值。
在输入时,空格、回车都将作为字符读入。
程序举例
例1
以下程序输出26个大写字母和它们的ASCII代码,每行输出两组数据。
#include <stdio.h>
int main (void)
{
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');
return 0;
}
以上程序的printf语句中,第一个ch用格式说明%c输出,因此将输出一个字符,第二个ch用格式说明%d输出,因此将字符的ASCII代码值。
例2
以下程序把从终端输入的一行字符中所有的小写字母转换成大写字母,其他字符不变:
#include <stdio.h>
int main (void)
{
char c;
while ((c = getchar()) != '\n')
{
if (c >= 'a' && c <= 'z')
c = c - 'a' + 'A';
putchar ( c );
}
putchar ('\n');
return 0;
}
输入:
The Programming
输出:
THE PROGRAMMING
例3
把一串密文译成明文,密文以字符@表示结束。规则如下:
- 如果是字母,转换成字母序列的下一个字母,如A译成B,B译成C。
- 如果是字母Z,译成A。
- 无论是大写字母还是小写字母都译成小写字母。
- 其他字符一律照原样输出。
说明:函数isalpha ( c )判断c中的字符是否为字母,若是,函数值为1;函数tolower ( c )把c中的大写字母转换成小写字母,其他字符不变。
#include <stdio.h>
#include <ctype.h>
int main (void)
{
char c;
c = getchar();
while (c != '@')
{
if (isalpha( c ))
{
c = tolower( c );
c = (c - 'a' + 1) % 26 + 'a';
}
putchar( c );
c = getchar();
}
printf("\n");
return 0;
}
在while循环中,表达式(c - 'a' + 1) % 26 + 'a'中:c - 'a'求出变量c中的字母在字母序列中的序号(字母a的序号为0、字母c的序号为25),c - 'a' + 1按转换规则得到字母在字母序列中下一个字母的序号。表达式(c - 'a' + 1)% 26使序号26转换成0。
网友评论