下面一道题目是【入门1】顺序结构里面的【深基2.例6】字母转换(没错,我刚刚知道能直接把这个带连接的名字CTRL+C搞过来),接下来上咱们的 P5704 【深基2.例6】字母转换,题目如下👇
题目描述
![](https://i-blog.csdnimg.cn/blog_migrate/7096e548e4293fbc681c72886450e43c.png)
char型变量的讲解
没错,这道题开始出现了除int外的其他变量名字——char,char型变量就是我们常说的字符型变量,他输入进去的时候是以字符的形式输入的,比如我们以前int输入"9",那么计算机内部存入的就是9;而对于char来说,第一种输入方式是scanf("%d",&a),那么他输入的时候就和int没有什么两样,唯一的不同就是char型变量在计算机内部只占用1个字节,但int需要占据整整4个字节,这是后话,在这里就不过多的赘述了;不过值得注意的是char型变量的数据范围要比int型小很多,它只有-128 - 127
#include <stdio.h>
int main()
{
char a;
int b;
scanf("%d",&a);
scanf("%d",&b);
printf("%d\n",a);
printf("%d",b);
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/00c4f43ef63ad6853e117ae25d7a2a75.png)
而第二种输入方式是scanf("%c",&a),这样当我们在键盘上输入"9"的时候,计算机存入的则是9所对应的ASCII码值,也就是57。如果我们想要让程序输出9这个字符,那么在输出的时候用的应该是printf("%c",a),但是如果我们想要了解我们输入的那个字符对应的ASCII码值,那就要使用printf("%d",a)了。
#include <stdio.h>
int main()
{
char a;
int b;
scanf("%c",&a);
scanf("%d",&b);
printf("%c\n",a);
printf("%d\n",a);
printf("%d",b);
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/780031f6a7dfe648c278c58f80df9970.png)
那么大家肯定很好奇这个ASCII码值是怎样来的呢,它的存在原因就在于计算机内部只能存入数字而不能存入字符,那么当我们想要给计算机输入一个字符的时候,计算机是无法识别和储存的,所以我们将键盘上的每个字符都设置了对应的ASCII码值,以便计算机的储存,就像我们刚刚给计算机内部输入了一个字符型的"9",那么计算机内部所存储的不是9而是它对应的ASCII码值——"57"。
在数字上大家可能体会不深,但是如果我们要给char型变量a赋一个'*'这个符号呢?
#include <stdio.h>
int main()
{
char a='*';
printf("%c\n",a);
printf("%d\n",a);
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/48450fcf05a161428aa55756a84c6fa7.png)
大家可以看到,我们给char型变量a赋值赋成'*',这时候计算机内部a所对应的数字是"*"所对应的ASCII码值42而非"*"本身,这就是ASCII码值存在的必要
细心的朋友发现了,我在给变量a做复制的时候不是直接写char a=*,而是在*外面加上了单引号"''",这就是为了让计算机明白这是一个字符,让它把"*"转化成对应的ASCII码值,而不是直接一个*,让计算机不知所云,那样的话编译器会报错的。
![](https://i-blog.csdnimg.cn/blog_migrate/47129180ffe92070ba0b9ee310e5d795.png)
just like this!!!
了解了这些以后这道题就轻而易举了,他要让我们编写一个程序,实现把小写字母转化成对应的大写字母,由于ASCII码值表的编写是有规律的,所以每个小写字母的ASCII码和对应的大写字母的ASCII码差值是一样的,故此我们可以试验一下确定小写字母的对应大写字母之间ASCII码值的差值。
#include <stdio.h>
int main()
{
char a='a';
char b='A';
printf("%d\n",a);
printf("%d\n",b);
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/21e6eb4ac03b3d871458e6f8449bff30.png)
这里注意:我们要的是ASCII码值的差值,所以在输出的时候一定要输出它对应的值而不是字符,要使用%d而非%c!!!
所以我们得到每个大写字母是对应的小写字母减去(97-65=)32得到的,所以我们只需要在输出的时候让小写字母减去32再以字符型输出就得到了我们想要的结果啦~
话不多说上代码:
C代码
#include <stdio.h>
int main()
{
char a,b;
scanf("%c",&a);
b=a-32;
printf("%c",b);
return 0;
}
那么这道水题就搞定了,希望我的讲解对大家能有帮助~