一.字符常量
用单引号括起来的一个字符,如’a’,’#’,’%’,‘D’
#include <stdio.h>
int main()
{
char c1, c2;
c1 = 'a';
c2 = 'b';
printf("%c %c", c1, c2);
}
二.字符当数字用
#include <stdio.h>
int main()
{
char c1, c2;
int i = 100;
c1 = 'a';
i = i - c1;
printf("c1:%c\n", c1);
printf("c1:%d,i:%d\n", c1, i);
c2 = c1 + 4;
printf("c2:%c\n", c2);
}
运行结果:
c1:a
c1:97,i:3
c2:e
三.ASCII码对照表
类型 | 字节 | 范围 |
---|---|---|
[signed] char | 1 | -128~127 |
unsigned char | 1 | 0~255 |
四.字符数据的输入输出
①scanf()/sanf_s() 和 printf()
#include <stdio.h>
int main()
{
int x, y, z;
char ch;
scanf_s("%d%c%d", &x,&ch,2, &y);
z = x + y;
printf("%d%c%d=%d\n", y, ch, x, z);
}
运行结果:
1+2
2+1=3
scanf_s函数输入字符型时,要写长度参数
②getchar()和putchar()
#include <stdio.h>
int main()
{
char c;
c = getchar(); //输入大写字母
putchar(c + 32); //显示小写字母
putchar('\n');
}
运行结果:
A
a
五.获得缓存区中的输入数据
#include <stdio.h>
int main()
{
char c1, c2;
c1 = getchar();
c2 = getchar();
printf("%c %c\n", c1, c2);
printf("%d %d\n", c1, c2);
return 0;
}
输入不同,显示不同结果:
输入abc<回车>
abc
a b
97 98
输入a<回车>
a
a
97 10
未显示字符c存入缓冲区
六.以\开头的字符序列----转义字符常量
例如: '\n’是一个字符,代表"换行"符
诸多“控制字符”在程序中无法用一般形式的字符表示,要采用转义字符
所有的转义字符和所对应的意义
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
\a | 响铃(BEL) | 7 |
\b | 退格(BS),将当前位置移到前一列 | 8 |
\f | 换页 (FF),j将当前位置移到下页开头 | 12 |
\n | 换行(LF),将当前位置移到下一行开头 | 10 |
\r | 回车(CR),将当前位置移到本行开头 | 13 |
\t | 水平制表(HT),跳到下一个TAB位置 | 9 |
\v | 垂直制表(VT) | 11 |
\ | 代表一个反斜线字符’’ | 92 |
’ | 代表一个单引号字符 | 39 |
" | 代表一个双引号字符 | 34 |
\0 | 空字符(NULL) | 0 |
\ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 |
\xhh | 1到2位十六进制数所代表的任意字符 | 二位16进制 |
七.转义字符用法示例
#include <stdio.h>
int main()
{
printf("%.4f%.4f%.4f\n", 1.01, 2.2334, 3.4);
printf("%.4f\t%.4f\t%.4f\n", 1.01, 2.2334, 3.4);
}
运行结果:
1.01002.23343.4000
1.0100 2.2334 3.4000
#include <stdio.h>
int main()
{
printf("This\nis\na\n\t\ttest\n\nShe said, \"How are you?\"\n");
}
运行结果:
This
is
a
test
She said, "How are you?"
#include <stdio.h>
int main()
{
printf("笑脸:\001\n");
printf("红黑桃:\003\t\006\n");
printf("听个响:\a\n"); \\ \007 \7效果相同
printf("换几行:a\012 b\n c\x0A d\n");
printf("看字母:AB\n");
printf("再看字母:\101\102\n");
printf("再看字母:\101\b\102\n");
printf("还看字母:\101\r\102\n");
}
运行结果:
笑脸: /缺少字体显示方框
红黑桃: /缺少字体显示方框
听个响: /been响铃一声
换几行:a
b
c
d
看字母:AB
再看字母:AB
再看字母:B
B看字母:A
八.ASCII编码与汉字编码的区别
ASCII编码:①标准只需要7位 ②实际占用1字节 ③最高位为0
"汉字"编码:①每个汉字2字 ②为和西文混合使用,每字节最高位均为1
九.字符串常量及存储
1.用双引号括起来的部分就是字符串常量
如:“abc”,“hello”,“a+b”,“He Lijian”
2.字符串常量"abc"在内存中占4个字节,而不是3字节
a | b | c | \0 |
---|
3.编译系统会自动加一个’\0’作为字符串结束标志
4.’\0’不是字符串的一部分,它只作为字符串的结束标志.如printf(“abc”);输出3个字符abc,不包’\0’;
5.“丁进"占5个字节
6.空字符串” "占1个字节
7.辨析:
① "a"和’a’的区别
char c;
c=‘a’; //正确
c=“a”; //错误
‘a’,“a”; //正确
‘aa’,“aa”; //有错误
②字符串常量"abc\n"包含4个字符,占5个字节
a | b | c | \n | \0 |
---|
③分析"abc\\n"与"abc\\\n"的存储方式
a | b | c | \ | n | \0 |
---|
a | b | c | \ | \n | \0 |
---|
实践项目
1.输入一个小写字母,输出对应的大写字母和ASCII码
#include <stdio.h>
int main()
{
char ch;
printf("输入一个小写字母: ");
scanf_s("%c", &ch,1);
ch = ch - 32;
printf("与对应的大写字母: %c\n",ch);
printf("大写字母 ASCII码: %d\n", ch);
}
运行结果:
输入一个小写字母: a
与对应的大写字母: A
大写字母 ASCII码: 65
2.利用\t对齐输出项
#include <stdio.h>
int main()
{
printf("Name\tAge\tSalary\taddr\n");
printf("Tom\t%d\t%6.1f\t%s\n", 20, 314.2, "NewYork");
printf("Jerry\t%d\t%6.1f\t%s\n", 22, 7876.4, "BingJing");
printf("Blotu\t%d\t%6.1f\t%s\n", 9, 5.5, "ShangHai");
return 0;
}
运行结果:
Name Age Salary addr
Tom 20 314.2 NewYork
Jerry 22 7876.4 BingJing
Blotu 9 5.5 ShangHai