一、基础知识
1.字符型常量
(1)字符常量
- 定义:‘ 一个字符 ’
注:(1)‘ 大小写字母 ’ 代表不同的字符常量
(2)’ ‘ 中只能包含一个字符 (’abc' X)
(3)只能用单引号,不能用双引号 (”a“是字符串,不是字符常量)
(4)字符常量在内存中占一个字节,存放字符的ASCII代码值
- 记忆:
字符常量 ASCII值 ' A ' 65 ' a ' 97 ' 空格 ' 32 ' 0 ' 48
(2)转义字符常量
- 定义:‘ \一个字符 ’
注:(1)转义字符常量只代表一个字符,如 ‘ \n ’ 、‘ \101 ’ 、‘ \141 ’
(2)’ \八进制数 ‘ 中的八进制数可以不以0开头 ('\101' 代表字符常量 ' A ' ;'\141' 代表字符常量 ' a ' ;)
反斜线后跟一个八进制数来表示一个ASCII字符
(3)' \十六进制 ' 只可由小写字母x开头,大写字母X和0x均不可以 (' \x41' 代表 ' A ')(' \x6d' 代表 ' m ')
反斜线后跟一个十六进制数来表示一个ASCII字符
字符形式 | 功能 |
---|---|
\n | 回车换行 |
\t | 代表Tab |
\v | 竖向跳格 |
\r | 回车符 |
\f | 换页符 |
\b | 退格符(代表"Backspace"键) |
\\ | 反斜杠字符”\“ |
\‘ | 单引号 |
\" | 双引号 |
\ddd | 三位八进制数代表的一个ASCII字符 |
\xhh | 二位十六进制数代表的一个ASCII字符 |
\0 | 空值,其ASCII码值为0 |
(3)字符串常量
(4)可对字符量进行的运算
2.字符变量
3.字符的输入和输出
(1)、
(2)、
二、程序举例
例6.1 以下程序输出26个大写字母和它们的ASCII代码,每行输出两组数据。
#include <stdio.h>
int main()
{
char ch;
int i;
for(i=0;i<26;i++)
{
ch=i+65;
printf(" %c ASCII=%d",ch,ch);
if(i%2!=0)
printf("\n");
}
}
/*参考答案:*/
#include <stdio.h>
int main()
{
char ch;
int i;
for(i=0;i<26;i++)
{
ch=i+65;
if(i%2==0)
printf("\n");
printf(" %c ASCII=%d",ch,ch);
}
putchar('\n');
}
运行结果:
A ASCII=65 B ASCII=66
C ASCII=67 D ASCII=68
E ASCII=69 F ASCII=70
G ASCII=71 H ASCII=72
I ASCII=73 J ASCII=74
K ASCII=75 L ASCII=76
M ASCII=77 N ASCII=78
O ASCII=79 P ASCII=80
Q ASCII=81 R ASCII=82
S ASCII=83 T ASCII=84
U ASCII=85 V ASCII=86
W ASCII=87 X ASCII=88
Y ASCII=89 Z ASCII=90
Press any key to continue
例6.2 以下程序段等待从终端输入一个字符,当按Enter键时,程序才往下继续进行。
例6.3 以下程序把从终端输入一行字符中所有的小写字母转换成大写字母,其他字符不变。
例6.4 编写程序统计输入的字符中空格符、换行符和横向跳格(制表)符的个数,用!号结束输入。
例6.5 把一串密文译成明文,密文以字符@表示结束。译码规则如下:
(1)如果是字母,转换成字母序列的下一个字母。如A译成B、B译成C。
(2)如果是字母Z,译成A。
(3)无论是大小字母都译成小写字母。
(4)其他字符一律按照原样译出。
三、习题
6.19 输入一行字符(用回车结束),输出每个字符以及与之对应的ASCII代码值,每行输出三对。
#include <stdio.h>
int main()
{
char ch;
int n=0;
while((ch=getchar())!='\n')
{
if(n%3==0)
putchar('\n');
n++;
printf("%c : %d ",ch,ch);
}
}
6.20 输入一行数字字符(用回车结束),每个数字字符的前后都有空格,把这一行中的数字转换成一个整数,例如输入 2 4 8 3 <CR> ,则输出整数:2483
/*6.20*/
#include <stdio.h>
int main()
{
char ch;
while((ch=getchar())!='\n')
{
if(ch!=' ')
putchar(ch);
}
putchar('\n');
}
运行结果:
2 4 6 8
2468
Press any key to continue
参考:
#include <stdio.h>
int main()
{
char ch;
while((ch=getchar())!='\n')
{
if(ch>='0'&&ch<='9')
{
ch=ch-'0';
printf("%d",ch);
}
}
putchar('\n');
}
6.21 请编写程序统计输入的行数,用!号结束,!号所在行不计入行数。
#include <stdio.h>
int main()
{
char ch;
int n=0;
while((ch=getchar())!='!')
{
if(ch=='\n')
n++;
}
printf("%d\n",n);
}
6.22 请编写程序统计输入的一行中小写字母的个数。
/*错误的*/
#include <stdio.h>
int main()
{
char ch;
int n=0;
ch=getchar();
if(ch>='a'&&ch<='z')
n++;
printf("%d\n",n);
}
/*改正的:*/
#include <stdio.h>
int main()
{
char ch;
int n=0;
while((ch=getchar())!='\n')
{
if(ch>='a'&&ch<='z')
n++;
}
printf("%d\n",n);
}
6.23 请编写输出以下图案的程序,图形行数由输入的整数值确定(每行中字符之间没有空格)。
/*6.23*/
#include <stdio.h>
int main()
{
int n,i,j,k;
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=1;j<=n-i;j++)
putchar(' ');
for(k=0;k<2*i+1;k++)
printf("%c",'A'+i);
putchar('\n');
}
}
运行结果:
5
A
BBB
CCCCC
DDDDDDD
EEEEEEEEE
Press any key to continue
参考答案:
#include <stdio.h>
int main()
{
int L,i,j,k,n;
char ch;
scanf("%d",&L);
for(i=1;i<=L;i++)
{
ch='A'+i-1;
n=2*i-1;
for(j=L;j>=i;j--)
putchar(' ');
for(k=1;k<=n;k++)
putchar(ch);
putchar('\n');
}
}