ch是字符变量,在ch>='a'&&ch<='z 'a和z具体意义

郑轻oj1023
#include<stdio.h>

int main(){
char ch;
scanf("%c",&ch);
if(ch>='a'&&ch<='z')
ch-=32;
printf("%c",ch);
return 0;
}

问题是让输入一个字母,输出他的大写形式的字母。如输入a输出A
if条件语句里面的(ch>='a'&&ch<='z'),1. 意思是ch是a的Ascii值到z的Ascii值之间对应的字符

2.还是说单纯指的是ch为a到z之间的字符
3.还是有别的含义或理解方式

最基本的概念没有弄明白哦
你所谓的字符,a、b、c、d,那是你看到的,但是在电脑里,只有0和1,那怎么表示a、b、c?
只能用0 和 1 组成数字强行表示 a、b、c;
同理,怎么表示字符空格、回车、制表符,同样的,用0和1 组成数字。。
这就是 ASCII 码,你就理解为数字码,用来对应的
所以,你这句if,你就理解为数字之间的比较

用单引号引起的一个字符实际上代表一个整数,整数值对应于该字符在编译器采用的字符集中的序列值。
而双引号指的就是本身的字符。
这是两种不同的形态

(ch>='a'&&ch<='z') 是判断字符ch是否为小写字符的
你的1和2是一个意思,这一行两种理解都可以

img


其实char类型在判断大小的时候是直接被转换成数字比对,所以,if语句里其实是两组数字再比对
ch-=32,其实就是将ch的小写形态转换成大写形态,每个小写的字母转换成数字后-32正好是其大写形态转换成的数字值
所以,我用C#做了一个简单明了的实验,仅供参考

1.c语言中各种值类型之间可以隐式转换
2.当进行大小比较时,参与比较的值会统一转换成较大的类型进行比较,比如int和double进行比较,int会转换为double
3.当两个char进行比较时,比较的是其二进制,也就是ascii码
4.你也可以将int和char进行比较,那么char会转换为int
5.你可以理解为'B'的ascii码比'A'的ascii码大,也可以直接理解为B比A大,反正结果都一样

大小写字母的码差值为32.

ch在下方表现为一个变量,如同方程式x一样 X>A =X<Z
if(ch>='a'&&ch<='z') //判断值是否在小写字母区间
ch-=32; // 这一步就是将ch的码值-32获得大写的字符